Introducción

El ramo de Robótica e IOT de la Universidad de Viña del Mar, está enfocado en enseñar conceptos introductorios de robótica e IOT para alumnos de cuarto año de la carrera de Ingeniería civil informática.

El ramo está basado en el aprendizaje por proyectos con la herramienta ESP32.

Se recomienda que los proyectos sean realizados en grupos de máximo 3 integrantes.

Proyecto 1: Comunicación bi-direccional

El proyecto consiste en conectar una ESP32 a un computador via USB (serial) y realizar una comunicación bi-direccional.

Al precionar un botón en el ESP32 el computador debe ejecutar una tarea (como abrir un programa, subir volumen, etc). Luego el computador debe enviar una señal al ESP32 para encender el LED.

Materiales

  • ESP32.

  • LED.

  • Botón.

  • Protoboard.

  • Cables dupont.

  • Cable USB.

Aprendizajes

  • Instalación y uso de IDE y SDK de ESP32.

  • Uso de circuitos básicos (botón y LED).

  • Comunicación serial bi-direccional.

Restricciones y entregables

  • ESP32 programado en C.

  • Aplicación de computador (puente) programada en C, Python o Go.

  • Debe entregar un informe de los componentes usados, costos, código, fotografías o videos del resultado, tablas y esquemáticos de conexión y posibles usos en la industria.

Proyecto 2: Lectura de sensores

El proyecto consiste en una ESP32 con un sensor de proximidad y un parlante pequeño. Se debe crear un prototipo de alarma que gatille un sonido al detectar un elemento cercano.

Adicionalmente se debe conectar este sensor a un servomotor que es controlado desde Home Assistant.

Finalmente se debe configurar un servidor de Grafana que muestra un histórico de las lecturas obtenidas por el sensor.

Materiales

  • ESP32.

  • Sensor de proximidad.

  • Parlante.

  • Servomotor.

  • Protoboard.

  • Cables dupont.

  • Batería.

Aprendizajes

  • Configuración y uso de WIFI en ESP32.

  • Uso de sensores avanzados y servomotores.

  • Configuración y uso de Home Assistant.

  • Configuración y uso de Grafana.

Restricciones y entregables

  • Grafana y Home Assistant debe ejecutarse de forma local en un computador.

  • ESP32 debe enviar datos utilizando WIFI, no por USB.

  • ESP32 programado en C.

  • Debe entregar un informe de los componentes usados, costos, código, fotografías o videos del resultado, tablas y esquemáticos de conexión y posibles usos en la industria.

Proyecto 3: Robots de Batalla

Se debe crear dos robots de batalla. El objetivo es reventar un globo en la parte posterior del robot rival mediante elementos corto punzantes (agujas, clavos, mondadientes).

Los robots deben conectarse a un punto de acceso en común (internet compartido con Hotspot por un celular), el cual permitirá crear una red local y acceder al servidor web proporcionado por cada robot y ser controlados utilizando un dispositivo móvil (android o ios).

Los robots deben ser programados utilizando un lenguaje de programación diferente a C o C++, como Elixir (AtomVM).

Materiales

  • ESP32.

  • Controlador de motores DC.

  • Motores DC.

  • Ruedas.

  • Chasis.

  • Carcasa (a medida).

  • Baterías 7 a 12v.

  • Globos.

  • Cables dupont.

  • Protoboard.

  • Elementos cortopunzantes.

Aprendizajes

  • Servidor web con ESP32.

  • Uso de motores DC y controlador de motores.

  • Uso de lenguajes de programación alternativos a C o C++ para programación de robots.

Restricciones y entregables

  • ESP32 se debe programar con AtomVM (Elixir).

  • Robots deben tener una carcasa de batalla y poder reventar un globo.

  • Robots deben tener al menos 4 ruedas.

  • Ruedas deben funcionar con al menos 7v e idealmente 12v.

  • Debe entregar un informe de los componentes usados, costos, código, fotografías o videos del resultado, tablas y esquemáticos de conexión y posibles usos en la industria.

Proyecto 4: Autobús con GPS

El siguiente proyecto consiste añadir GPS a un autobús y por medio de una pantalla mostrar cuánto tiempo falta para que llegue a un paradero específico (con una posición GPS fija).

El desafío principal es seleccionar un sistema operativo en tiempo real como FreeRTOS y Zephyr para programar los dispositivos ESP32.

ESP32 + GPS + 4G

Para esto se tendrá un ESP32 con módulos de GPS y 4G, alimentado con una batería externa tradicional (conectada al USB del vehículo por ejemplo). Este tendrá la labor de obtener la posición GPS actual y enviarla a un servidor que almacena las posiciones cada 30 o 60 segundos.

Este ESP32 con 4G también debe responder a un SMS (enviado a su número de teléfono) con la información actual del sistema:

  • Última posición GPS reportada.

  • Resultado de llamar a endpoint de salud del servidor de geoposición (para validar conexión a internet y posibilidad de enviar datos al servidor desde el ESP32).

Ejemplo de respuesta por SMS
GPS: -33.2231,-71.2232
SERVER: 200 OK (gps.ninjas.cl/status)

ESP32 + OLED

Esta ESP32 tiene la labor de mostrar en una pantalla OLED un mensaje con la distancia y tiempo aproximado de llegada del autobús al paradero. Simula un cartel que muestra la información del próximo bus.

  • Las coordenadas de latitud y longitud serán hardcodeadas en el ESP32 obtenidas con Google maps.

  • Se puede añadir opcionalmente un panel solar como método de carga de la batería.

  • Solo debe enviar la posición al servidor y el servidor debe responder el mensaje a mostrar en la pantalla OLED.

Servidor API GPS

Este servidor puede ser programado con cualquier herramienta disponible o lenguaje de programación, ya que está fuera del alcance del ramo de robótica. Pero se recomienda las siguientes opciones:

Tabla de Ejemplo

Tabla de ejemplo de almacenamiento de puntos GPS
CREATE TABLE gps (
    id serial,
    lat double precision,
    lon double precision,
    bus number, -- identificador numérico único de cada bus
    ts  timestamp
);

Cálculo de distancia

Para calcular la distancia en metros entre dos puntos dados por latitud y longitud, normalmente se utiliza la fórmula de Haversine, que tiene en cuenta la curvatura de la Tierra.

Ejemplo de distancia entre dos puntos latitud,longitud con PostGIS
-- POSTGIS
SELECT ST_DistanceSphere(
    ST_MakePoint(lon_a, lat_a),
    ST_MakePoint(lon_b, lat_b)
) AS distancia_metros;

Cálculo de velocidad

Velocidad entre dos registros consecutivos con POSTGIS
WITH ordenado AS (
  SELECT
    *,
    LAG(lat) OVER (ORDER BY ts) AS lat_prev,
    LAG(lon) OVER (ORDER BY ts) AS lon_prev,
    LAG(ts)  OVER (ORDER BY ts) AS ts_prev
  FROM gps
),
calculo AS (
  SELECT
  ts,
  ts_prev,
  ST_DistanceSphere(
    ST_MakePoint(lon_prev, lat_prev),
    ST_MakePoint(lon, lat)
  ) AS distancia_metros,
  EXTRACT(EPOCH FROM (ts - ts_prev)) AS segundos
  FROM ordenado
  WHERE ts_prev IS NOT NULL
)

SELECT
  ts,
  distancia_metros,
  segundos,
  (distancia_metros / NULLIF(segundos, 0)) * 3.6 AS velocidad_kmh
FROM calculo;

Tiempo de llegada aproximado

Fórmula de tiempo de llegada usando distancia geodésica + velocidad.

Fórmula de tiempo de llegada
tiempo = velocidad / distancia
Cálculo de tiempo de llegada con POSTGIS
WITH calc AS (
    SELECT
        ST_DistanceSphere(
            ST_MakePoint(lon_a, lat_a),
            ST_MakePoint(lon_b, lat_b)
        ) AS distancia_metros,
        velocidad_kmh
    FROM datos
)
SELECT
    distancia_metros,
    velocidad_kmh,
    (distancia_metros / 1000.0) / velocidad_kmh AS tiempo_horas,
    (distancia_metros / 1000.0) / velocidad_kmh * 60 AS tiempo_minutos
FROM calc;

Endpoints de Ejemplo

  • GET /status: Devuelve 200 OK si todo esta en orden. ESP32 debe enviar sus datos de acceso para permitir que status pueda ser obtenido desde la ESP32. (Usada para verificar conexión a internet y funcionamiento del servidor)

  • POST /gps: Devuelve 201 Created si tiene éxito. (Usada por ESP32 + GPS)

  • GET /gps: Devuelve el último registro GPS de todos los buses (Usado por el mapa web).

  • GET /gps/<latitud>/<longitud>: Permite saber la distancia y tiempo de espera aproximado para el siguiente bus (el más cercano a la latitud y longitud enviadas). (Usada por ESP32 + Oled)

Página Web con Mapa

Al igual que el servidor de API se tiene total libertad sobre qué herramientas utilizar para mostrar un mapa con la última posición GPS reportada por el autobus.

Materiales

  • ESP32 con módulos de GPS y 4G.

  • ESP32 con módulo de pantalla OLED.

  • Chip 4G prepago con internet habilitado.

  • Panel solar (opcional).

Aprendizajes

  • Uso de módulos 4G y GPS en ESP32.

  • Recepción y envío de SMS con ESP32.

  • Uso de pantallas OLED en ESP32.

  • Uso de sistemas operativos en tiempo real (RTOS).

Restricciones y entregables

  • ESP32 programada en C o C++.

  • Uso de sistema operativo en tiempo real: FreeRTOS o Zephyr (Justificar elección en informe).

  • Debe entregar un informe de los componentes usados, costos, código, fotografías o videos del resultado, tablas y esquemáticos de conexión y posibles usos en la industria.