Guía Arduino Science Journal

Experimento con aceleraciones \(m/s^2\)

Autor

Edimer David Jaramillo

Bibliotecas R

Código
library(tidyverse)

Recorrido y distancia

  • Distancia recorrida (aproximada): 400 metros

(1) Medellín

(2) UNAL Medellín

(3) Punto Inicial y Final

(4) Distancia (m)

Guía

Datos

Código
datos_relativo <- read_csv("Aceleraciones Edimer trelativo.csv")
datos_relativo %>% head()
Código
datos_normal <- read_csv("Aceleraciones Edimer tnormal.csv")
datos_normal %>% head()

Transformación del tiempo

Código
datos_acel <- datos_normal %>% 
  mutate(hora = as.POSIXct(timestamp / 1000, origin = "1970-01-01"))

datos_acel %>% head()

Tiempos

  • ¿Cuánto tiempo tardé en hacer el recorrido?
Código
datos_acel %>% 
  summarise(min_hora = min(hora),
            max_hora = max(hora),
            tiempo = max_hora - min_hora)
  • Si la distancia del recorrido fue de 400 metros, ¿a qué velocidad promedio caminé?
Código
# Metros/minuto
400 / 5.710583
[1] 70.04539
Código
# Metros/segundo
400 / (5.710583 * 60)
[1] 1.167423

Aceleraciones iniciales

” La aceleración de un objeto es directamente proporcional a la suma de todas las fuerzas que actúan sobre él e inversamente propocional a la masa del objeto”

Idea intuitiva

X

Código
datos_acel %>% 
  ggplot(aes(x = hora, y = AccX)) +
  geom_line()

Y

Código
datos_acel %>% 
  ggplot(aes(x = hora, y = AccY)) +
  geom_line()

Z

Código
datos_acel %>% 
  ggplot(aes(x = hora, y = AccZ)) +
  geom_line()

Aceleración total

\[A_{total} = \sqrt{X^2 + Y^2 + Z^2}\]

Código
datos_acel_total <-
  datos_acel %>%
  mutate(acel_total = sqrt(AccX ^ 2 + AccY ^ 2 + AccZ ^ 2)) 

datos_acel_total %>% head()
  • Graficamos la aceleración total:
Código
datos_acel_total %>% 
  ggplot(aes(x = hora, y = acel_total)) +
  geom_line()

Aceleraciones promedio

  • Calculamos el promedio de las aceleraciones por tiempo (décimas de segundo) y nuevamente calculamos la aceleración totales:
Código
aceleracion_promedio <-
  datos_acel_total %>%
  mutate(tiempo = timestamp %/% 100) %>%
  group_by(tiempo) %>%
  summarise(
    acelx_mean = mean(AccX, na.rm = TRUE),
    acely_mean = mean(AccY, na.rm = TRUE),
    acelz_mean = mean(AccZ, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  mutate(acel_total_mean = sqrt(acelx_mean ^ 2 + acely_mean ^ 2 + acelz_mean ^
                                  2))

aceleracion_promedio %>% head()
  • Podemos graficar las tres aceleeraciones juntas:
Código
aceleracion_promedio %>% 
  pivot_longer(cols = c(acelx_mean, acely_mean, acelz_mean)) %>% 
  ggplot(aes(x = tiempo, y = value, color = name)) +
  geom_line(alpha = 0.5) +
  geom_smooth(size = 1)

  • Graficamos la aceleración total promedio:
Código
aceleracion_promedio %>% 
  ggplot(aes(x = tiempo, y = acel_total_mean)) +
  geom_line(alpha = 0.5)

Periodograma

Código
periodograma <-
  aceleracion_promedio %>%
  filter(!is.na(acel_total_mean)) %>%
  pull(acel_total_mean) %>%
  spec.pgram()

Frecuencia con el valor máximo del espectro

Código
maxFrec <- periodograma$freq[which(periodograma$spec == max(periodograma$spec))]
maxFrec
[1] 0.1811343

Cálculo del número de periodos

Código
tiempo_total <- diff(range(aceleracion_promedio$tiempo)) / 10
numPeriodos <- tiempo_total * maxFrec 
numPeriodos
[1] 62.0566
  • Tiempo total (segundos):
Código
tiempo_total
[1] 342.6