Tabla de contenido:

Módulo de seguimiento para ciclistas: 5 pasos
Módulo de seguimiento para ciclistas: 5 pasos

Video: Módulo de seguimiento para ciclistas: 5 pasos

Video: Módulo de seguimiento para ciclistas: 5 pasos
Video: Curso Nacional de Seguridad Vial Digital - MODULO 5 - La conducción, principios generales 2024, Mes de julio
Anonim
Módulo de seguimiento para ciclistas
Módulo de seguimiento para ciclistas

Este módulo de seguimiento para ciclistas es un módulo que detecta automáticamente los choques en una carrera y que detecta una avería mecánica al tocar un sensor táctil. Cuando ocurre uno de estos eventos, el módulo envía el evento a una base de datos en una Raspberry Pi a través de LoRa. Este evento se mostrará en una pantalla LCD y en un sitio web. También puede buscar en el sitio web una carrera ciclista específica con los eventos y agregar carreras ciclistas o ciclistas a la base de datos. Hice este proyecto porque estoy muy interesado en el ciclismo y la IOT, por lo que combinar estos dos temas fue muy emocionante para mí.

Antes de poder hacer un módulo de seguimiento para ciclistas, debe recopilar sus materiales. Puede encontrar las herramientas y suministros en las listas a continuación, o puede descargar la lista de materiales (Build Of Materials).

Suministros:

  • vidrio plexiglás (56 mm x 85 mm)
  • 10 X 2M pernos de 10 mm y tuercas
  • 10 X 3M pernos de 10 mm y tuercas
  • 2 tornillos 3M de 50 mm y tuercas
  • Filamento PLA para imprimir en 3D su carcasa LCD
  • termorretráctil
  • Cables macho a hembra
  • Un PCB básico
  • Encabezados masculinos
  • Una Raspberry Pi 3b +
  • Una tarjeta SD de 16GB
  • Una pantalla LCD Sparkfun 4X20
  • Un sensor táctil capacitivo
  • Un timbre
  • Un medidor de giroscopio + acelero de 3 ejes
  • Un módulo GPS
  • Una placa SODAQ Mbili
  • Un módulo WAN LoRa
  • Una batería de 3.7V 1000mAh
  • Una fuente de alimentación Raspberry Pi 3b +

Instrumentos:

  • Estaño de soldadura
  • Soldador
  • Tenazas
  • Destornilladores
  • Rompecabezas
  • Taladro
  • Ejercicios de 2,5 y 3,5
  • Mechero / pistola de aire caliente

Si necesitas comprar todos los suministros, necesitarás un presupuesto de 541,67 €. Este proyecto es muy caro porque usé un kit de desarrollo LoRa rappid que cuesta 299 € (tuve la oportunidad de usar este kit de mi escuela). Siempre puede usar un Arduino normal y ahorrar mucho dinero, pero los programas serán diferentes entonces.

Paso 1: Esquema de Fritzing

Esquema de Fritzing
Esquema de Fritzing
Esquema de Fritzing
Esquema de Fritzing

El primer paso es construir los circuitos. Para este proyecto contamos con 2 circuitos eléctricos, uno con una Raspberry Pi y otro con una placa SADAQ Mbili. Empezaremos por el circuito Raspberry Pi.

Esquema Raspberry Pi Fritzing:

El esquema de Raspberry Pi es bastante simple, lo único que conectamos con el Pi es una pantalla LCD Sparkfun 4X20. La pantalla funciona con comunicación en serie, SPI o I2C. El protocolo de comunicación que utilice depende de usted. Usé el protocolo SPI porque es muy simple. Si usa SPI como yo, necesita las siguientes conexiones:

  • VCC LCD VCC Raspberry Pi
  • GND LCD GND Raspberry Pi
  • SDI LCD MOSI (GPIO 10) Raspberry Pi
  • SDO LCD MISO (GPIO 9) Raspberry Pi
  • SCK LCD SCLK (GPIO 11) Raspberry Pi
  • CS LCD CS0 (GPIO 8) Raspberry Pi

En el esquema de Fritzing, verá que la pantalla LCD es una pantalla de 2X16. Esto se debe a que no encontré una pantalla LCD 4X20 en frizz. Sin embargo, todas las conexiones son algunas, por lo que realmente no importa.

Esquema SODAQ Mbili Fritzing:

Conectaremos 4 componentes electrónicos con la placa SODAQ Mbili, por lo que este esquema eléctrico también es muy sencillo. Empezaremos conectando el sensor táctil Capactive. Esta clavija de SALIDA de los sensores estará ALTA cuando se toque el sensor y, de lo contrario, será BAJA. Esto significa que el pin OUT es una salida digital que podemos conectar con una entrada digital de la placa Mbili. Las conexiones son las siguientes:

  • Sensor táctil OUT D5 Mbili
  • Sensor táctil VCC 3.3V Mbili
  • GND Sensor táctil GND Mbili

El segundo componente es el sensor giroscópico Triple acceso +. Usé la placa GY-521 que usa el protocolo I2C para comunicarse con la placa Mbili. Tenga en cuenta que el pin AD0 de la placa GY-521 debe conectarse con el VCC de la placa Mbili. Esto se debe a que la placa Mbili tiene un reloj con la misma dirección I2C que el GY-521. Al conectar el pin AD0 a VCC cambiamos la dirección I2C del GY-521. Las conexiones son las siguientes:

  • VCC GY-521 3.3V Mbili
  • GND GY-521 GND Mbili
  • SCL GY-521 SCL Mbili
  • SDA GY-521 SDA Mbili
  • AD0 GY-521 3,3 V Mbili

A partir de entonces conectaremos el Buzzer. Utilizo el zumbador estándar que emite un sonido cuando hay corriente. Esto significa que podemos conectar el zumbador a un pin digital de la placa Mbili. Las conexiones son las siguientes:

  • + Zumbador D4 Mbili
  • - Zumbador GND Mbili

Por último, pero no menos importante, conectaremos el módulo GPS. El módulo GPS se comunica a través de RX y TX. Las conexiones son las siguientes:

  • VCC GPS 3.3V Mbili
  • GND GPS GND Mbili
  • TX GPS RX Mbili
  • RX GPS TX Mbili

Paso 2: base de datos normalizada

Base de datos normalizada
Base de datos normalizada

El segundo paso es diseñar una base de datos normalizada. He diseñado mi ERD en Mysql. Verá que mi base de datos está escrita en holandés, explicaré las tablas aquí.

Tabla 'ploeg':

Esta tabla es una tabla para los clubes ciclistas. Contiene una identificación del club ciclista y un nombre del club ciclista.

Tabla 'renners':

Esta tabla es una tabla para los ciclistas. Cada ciclista tiene un LoRaID que también es la Clave Primaria de la tabla. También tienen apellido, nombre, país de origen y una identificación del club ciclista que está vinculada a la tabla del club ciclista.

Tabla 'plaatsen':

Esta tabla es una tabla que almacena los lugares de Bélgica donde se puede realizar una carrera ciclista. Contiene el nombre de la ciudad (que es la clave principal) y la provincia donde se encuentra la ciudad.

Tabla 'wedstrijden':

Esta tabla almacena todas las carreras de ciclismo. La clave principal de la tabla es una identificación. La tabla también contiene el nombre de la carrera ciclista, la ciudad de la carrera que está vinculada a la tabla de lugares, la distancia de la carrera, la categoría de los ciclistas y la fecha de la carrera.

Tabla 'gebeurtenissen':

Esta tabla almacena todos los eventos que suceden. Esto significa que, cuando un ciclista se ve involucrado en un choque o tiene una falla mecánica, el evento se almacenará en esta tabla. La clave principal de la tabla es una identificación. La tabla también contiene la fecha y hora del evento, la latitud de la posición, la longitud de la posición, el LoRaID del ciclista y el tipo de evento (choque o avería mecánica).

Tabla 'wedstrijdrenner':

Esta tabla es una tabla que se necesita para una relación de muchos a muchos.

Paso 3: Registre su módulo LoRa

Registre su módulo LoRa
Registre su módulo LoRa

Antes de que pueda comenzar con el código, debe registrar su módulo LoRa en una puerta de enlace LoRa. Usé una compañía de telecomunicaciones en Bélgica llamada 'Proximus' que organiza la comunicación para mi módulo LoRa. Los datos que envío con mi nodo LoRa se recopilan en el sitio web de AllThingsTalk. Si también desea utilizar la API AllThingsTalk para recopilar sus datos, puede registrarse aquí.

Después de registrarse en AllThingsTalk, debe registrar su nodo LoRa. Para hacer esto, puede seguir estos pasos o puede mirar la imagen de arriba.

  1. Vaya a 'Dispositivos' en el menú principal
  2. Haga clic en 'Nuevo dispositivo'
  3. Seleccione su nodo LoRa
  4. Complete todas las claves.

¡Ahora has terminado! Todos los datos que envíe con su nodo LoRa aparecerán en su creador AllThingsTalk. Si tiene algún problema con el registro, siempre puede consultar la documentación de AllThingsTalk.

Paso 4: el código

El código
El código
El código
El código
El código
El código
El código
El código

Para este proyecto necesitaremos 5 lenguajes de codificación: HTML, CSS, Java Script, Python (Flask) y el lenguaje Arduino. Primero explicaré el programa Arduino.

El programa Arduino:

Al principio del programa, declaro algunas variables globales. Verá que utilizo SoftwareSerial para la conexión con mi GPS. Esto se debe a que la placa Mbili solo tiene 2 puertos serie. Puede conectar el GPS a Serial0, pero no podrá usar el terminal Arduino para depurar. Esta es la razón por la que utilizo SoftwareSerial.

Después de las Variables Globales, declaro algunas funciones que facilitan la lectura del programa. Leen las coordenadas del GPS, hacen sonar el zumbador, envían valores a través de LoRa, …

El tercer bloque es el bloque de instalación. Este bloque es el comienzo del programa que configura los pines, la comunicación en serie y la comunicación I2C.

Después del bloque de instalación viene el programa principal. Al comienzo de este bucle principal, verifico si el sensor táctil está activo. Si es así, hago sonar el timbre, obtengo los datos del GPS y envío todos los valores a través de LoRa o Bluetooth a la Raspberry PI. Después del sensor táctil, leo los valores del acelerómetro. Con una fórmula calculo el ángulo exacto de los ejes X e Y. Si estos valores son demasiado grandes, podemos concluir que el ciclista se estrelló. Cuando ocurre un accidente, hago sonar el timbre nuevamente, obtengo los datos del GPS y envío todos los valores a través de LoRa o Bluetooth a la Raspberry PI.

Probablemente estés pensando: '¿Por qué usas bluetooth y LoRa?'. Esto se debe a que tuve algunos problemas con la licencia del módulo LoRa que usé. Entonces, para que el programa funcione para mis demostraciones, tuve que usar Bluetooth por un tiempo.

2. La parte trasera:

La parte trasera es un poco compleja. Utilizo Flask para mis rutas que son accesibles para el front-end, uso socketio para actualizar algunas de las páginas del front-end automáticamente, utilizo los pines GPIO para mostrar mensajes en una pantalla LCD y recibir mensajes a través de Bluetooth (no es necesario si usa LoRa) y yo utilizamos Threading y Timers para leer con regularidad la API AllThinksTalk e iniciar el servidor de matraces.

También utilizo la base de datos SQL para almacenar todos los choques entrantes, leer los datos personales de los ciclistas y los datos de las carreras. Esta base de datos está conectada al back-end y también se ejecuta en Raspberry Pi. Utilizo una clase 'Database.py' para interactuar con la base de datos.

Como sabe por el esquema Fritzing, la pantalla lcd está conectada a la Raspberry Pi a través del protocolo SPI. Para hacerlo un poco más fácil, escribí una clase 'LCD_4_20_SPI.py'. Con esta clase puedes cambiar el contraste, cambiar el color de la luz de fondo, escribir mensajes en la pantalla,…. Si desea utilizar Bluetooth, puede utilizar la clase 'SerialRaspberry.py'. Esta clase rige la comunicación en serie entre el módulo Bluetooth y la Raspberry Pi. Lo único que debe hacer es conectar un módulo Bluetooth a la Raspberry Pi conectando el RX al TX y viceversa.

Las rutas para el front-end se escriben con la regla @ app.route. Aquí puede crear su propia ruta personalizada para insertar u obtener datos en o desde la base de datos. Asegúrate de tener siempre una respuesta al final de la ruta. Siempre devuelvo un objeto JSON al front-end, incluso cuando ocurrió un error. Puede usar una variable en la URL colocándola alrededor de la variable.

Utilizo socketio para la página web con los accidentes de una carrera. Cuando la Raspberry Pi recibe un bloqueo, emito un mensaje al front-end a través de socketio. El front-end entonces sabe que tiene que leer la base de datos nuevamente porque hubo un nuevo bloqueo.

Verá que en mi código la comunicación LoRa está configurada al mando. Si desea utilizar LoRa, debe iniciar un temporizador que envía repetidamente una solicitud a la API AllThinksTalk. Desde esta API, recibirá los valores del sensor (GPS, Hora, Tipo de choque) que son enviados por un nodo LoRa específico. Puede utilizar estos valores para insertar un bloqueo en la base de datos.

3. El final de la fronda:

El extremo frontal consta de 3 idiomas. HTML para el texto del sitio web, CSS para el marcado del sitio web y JavaScript para la comunicación con el back-end. Tengo 4 páginas web para este proyecto:

  • El index.html donde se pueden encontrar todas las carreras ciclistas.
  • Una página con todos los choques y averías mecánicas para una carrera espectacular.
  • Una página donde puede agregar listas de usuarios a la base de datos y editar su equipo.
  • Una página donde puedes agregar una nueva carrera con todos sus asistentes a la base de datos.

La forma en que los diseñe depende completamente de usted. Puedes inspirarte un poco en mi sitio web si quieres. Desafortunadamente, mi sitio web está hecho en holandés, lo siento.

Tengo un archivo CSS y un archivo JavaScript por separado para cada página. Cada archivo JavaScript utiliza la función de búsqueda para obtener los datos de la base de datos a través del back-end. Cuando el script recibe los datos, el html cambia dinámicamente. En la página donde puedes encontrar los choques y averías mecánicas, encontrarás un mapa donde suceden todos los eventos. Usé un folleto para mostrar este mapa.

Puedes ver todo mi código aquí en mi Github.

Paso 5: construye las construcciones

Construye las construcciones
Construye las construcciones
Construye las construcciones
Construye las construcciones
Construye las construcciones
Construye las construcciones

Antes de que podamos comenzar con la construcción, asegúrese de tener todos los materiales de la lista de materiales o de la página 'Herramientas + Suministros'.

Raspberry Pi + LCD

Empezaremos por el caso de la Raspberry Pi. Siempre puedes imprimir un estuche en 3D, esta también fue mi primera idea. Pero debido a que mi fecha límite se acercaba mucho, decidí presentar un caso simple. Tomé la carcasa estándar de la Raspberry Pi y perforé un agujero en la carcasa para los cables de mi pantalla LCD. Para hacer esto, simplemente siga estos sencillos pasos:

  1. Haz un agujero en la tapa del estuche. Hice esto con un taladro de 7 mm en el costado de la cubierta. Puedes ver esto en la imagen de arriba.
  2. Tome los cables de la pantalla LCD y deslice un cabezal retráctil sobre los cables.
  3. Use un encendedor o una pistola de aire caliente para hacer que la cabeza se encoja.
  4. Tire de los cables con la cabeza encogida a través del orificio de la carcasa y vuelva a conectarlos en la pantalla LCD.

Ahora que está listo con el estuche para Raspberry Pi, puede comenzar con el estuche para la pantalla LCD. Imprimí en 3D el estuche para mi pantalla LCD porque encontré un estuche en línea en este enlace. Solo tuve que hacer un pequeño cambio en la altura de la caja. Cuando crea que su dibujo es bueno, puede exportar los archivos y comenzar a imprimir. Si no sabe cómo imprimir en 3D, puede seguir este instructivo sobre cómo imprimir en 3D con fusion 360.

Construcción SODAQ MBili

Realmente no defendí la placa SODAQ Mbili. Usé un vidrio de plexiglás para colocar mis componentes sin un estuche alrededor de la construcción. Si también desea hacer esto, puede seguir estos pasos:

  1. Firme el plexiglás con las dimensiones del tablero SODAQ Mbili. Las dimensiones son: 85 mm X 56 mm
  2. Corta el plexiglás con una sierra de vaivén.
  3. Coloque los componentes electrónicos en el plexiglás y firme los agujeros con un lápiz.
  4. Taladre los orificios que acaba de firmar y los orificios para los separadores con un taladro de 3,5 mm.
  5. Monte todos los componentes electrónicos en el plexiglás con los tornillos y tuercas 3M de 10 mm.
  6. El último paso es montar el plexiglás sobre la placa Mbili. Puede hacer esto con separadores, pero utilicé dos pernos 3M de 50 mm y 8 tuercas 3M para montar el plexiglás sobre el tablero.

Recomendado: