Taula de continguts:

Mòdul de seguiment per a ciclistes: 5 passos
Mòdul de seguiment per a ciclistes: 5 passos

Vídeo: Mòdul de seguiment per a ciclistes: 5 passos

Vídeo: Mòdul de seguiment per a ciclistes: 5 passos
Vídeo: Йога для начинающих дома с Алиной Anandee #2. Здоровое гибкое тело за 40 минут. Универсальная йога. 2024, Juliol
Anonim
Mòdul de seguiment per a ciclistes
Mòdul de seguiment per a ciclistes

Aquest mòdul de seguiment per a ciclistes és un mòdul que detecta automàticament els accidents en una cursa i que detecta una avaria mecànica tocant un sensor tàctil. Quan es produeix un d'aquests esdeveniments, el mòdul envia l'esdeveniment a una base de dades en un raspberry pi mitjançant LoRa. Aquest esdeveniment es mostrarà en una pantalla LCD i en un lloc web. També podeu cercar al lloc web una cursa ciclista específica amb els esdeveniments i afegir curses ciclistes o ciclistes a la base de dades. Vaig fer aquest projecte perquè m’interessa molt el ciclisme i l’IOT, de manera que combinar aquestes dues assignatures va ser molt emocionant per a mi.

Abans de poder fer un mòdul de seguiment per a ciclistes, heu de recollir els vostres materials. Podeu trobar les eines i els subministraments a les llistes següents, o bé podeu descarregar la llista de materials (Build of Materials).

Subministraments:

  • vidre plexi (56 mm X 85 mm)
  • 10 X 2M cargols de 10 mm i femelles
  • 10 cargols X 3M de 10 mm i femelles
  • 2 cargols X 3M de 50 mm i femelles
  • PLA Filament per imprimir en 3D la vostra funda LCD
  • reduir la calor
  • Cables mascle a femella
  • Un PCB bàsic
  • Capçaleres masculines
  • Un Raspberry Pi 3b +
  • Una targeta SD de 16 GB
  • Una pantalla LCD 4X20 sparkfun
  • Un sensor tàctil capacitiu
  • Un brunzidor
  • Un accelero de 3 eixos + giròmetre
  • Un mòdul GPS
  • Una placa SODAQ Mbili
  • Un mòdul WAN LoRa
  • Una bateria de 3,7 V 1000 mAh
  • Una font d’alimentació Raspberry Pi 3b +

Eines:

  • Llauna de soldar
  • Soldador
  • Pinça
  • Tornavisos
  • Trencaclosques
  • Màquina de perforació
  • Trepants de 2,5 i 3,5
  • Pistola d’aire més lleuger / calent

Si necessiteu comprar tots els subministraments, necessitareu un pressupost de 541,67 €. Aquest projecte és molt car perquè he utilitzat un kit de desenvolupament LoRa rappid que costa 299 € (vaig tenir la possibilitat d’utilitzar aquest kit de la meva escola). Sempre podeu utilitzar un Arduino normal i estalvieu molts diners, però els programes seran diferents.

Pas 1: esquema Fritzing

Esquema Fritzing
Esquema Fritzing
Esquema Fritzing
Esquema Fritzing

El primer pas és construir els circuits. Per a aquest projecte disposem de 2 circuits elèctrics, un amb un Raspberry Pi i un altre amb una placa SADAQ Mbili. Començarem pel circuit Raspberry Pi.

Esquema Raspberry Pi Fritzing:

L’esquema de Raspberry Pi és bastant senzill, l’únic que connectem amb el Pi és una pantalla LCD Sparkfun 4X20. La pantalla funciona amb comunicació sèrie, SPI o I2C. Quin protocol de comunicació que utilitzeu depèn de vosaltres. He utilitzat el protocol SPI perquè és molt senzill. Si utilitzeu SPI com jo, necessiteu les connexions següents:

  • 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

A l’esquema Fritzing veureu que la pantalla LCD és una pantalla 2X16. Això es deu al fet que no he trobat cap pantalla LCD de 4X20 en encongir-se. Tot i això, totes les connexions són algunes, de manera que realment no importa.

Esquema SODAQ Mbili Fritzing:

Connectarem 4 components electrònics amb la placa SODAQ Mbili, de manera que aquest esquema elèctric també és molt senzill. Començarem per connectar el sensor tàctil Capactive. Aquest pin OUTS dels sensors serà ALT quan es toqui el sensor i, en cas contrari, serà BAIX. Això significa que el pin OUT és una sortida digital que podem connectar amb una entrada digital de la placa Mbili. Les connexions són les següents:

  • Sensor tàctil OUT D5 Mbili
  • Sensor tàctil VCC 3,3V Mbili
  • Sensor tàctil GND GND Mbili

El segon component és el triple accés + sensor giroscòpic. He utilitzat la placa GY-521 que utilitza el protocol I2C per comunicar-se amb la placa Mbili. Tingueu en compte que el pin AD0 de la placa GY-521 ha d’estar connectat amb el VCC de la placa Mbili. Això es deu al fet que la placa Mbili té un rellotge amb la mateixa adreça I2C que el GY-521. En connectar el pin AD0 a VCC, canviem l'adreça I2C del GY-521. Les connexions són les següents:

  • 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,3V Mbili

Després connectarem el buzzer. Faig servir el timbre estàndard que emet un so quan hi ha un corrent. Això significa que només podem connectar el brunzidor a un pin digital de la placa Mbili. Les connexions són les següents:

  • + Buzzer D4 Mbili
  • - Buzzer GND Mbili

Per últim, però no menys important, connectarem el mòdul GPS. El mòdul GPS es comunica mitjançant RX i TX. Les connexions són les següents:

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

Pas 2: base de dades normalitzada

Base de dades normalitzada
Base de dades normalitzada

El segon pas és dissenyar una base de dades normalitzada. He dissenyat la meva ERD a Mysql. Veureu que la meva base de dades està escrita en llengua holandesa; explicaré les taules aquí.

Taula "ploeg":

Aquesta taula és una taula per als clubs ciclistes. Conté un identificador de club ciclista i un nom de club ciclista.

Taula "pals":

Aquesta taula és una taula per als ciclistes. Tots els ciclistes tenen un LoRaID que també és la clau principal de la taula. També tenen cognom, nom, país d’origen i identificació del club ciclista que està vinculat a la taula del club ciclista.

Taula "plaatsen":

Aquesta taula és una taula que emmagatzema els llocs de Bèlgica on es pot realitzar una cursa ciclista. Conté el nom de la ciutat (que és la clau principal) i la província on es troba la ciutat.

Taula "wedstrijden":

Aquesta taula emmagatzema totes les curses ciclistes. La clau principal de la taula és un identificador. La taula també conté el nom de la cursa ciclista, la ciutat de la cursa que està vinculada a la taula de llocs, la distància de la cursa, la categoria dels ciclistes i la data de la cursa.

Taula "gebeurtenissen":

Aquesta taula emmagatzema tots els esdeveniments que succeeixen. Això significa que quan un ciclista està involucrat en un accident o té una avaria mecànica, l'esdeveniment s'emmagatzemarà en aquesta taula. La clau principal de la taula és un identificador. La taula també conté la data i hora de l'esdeveniment, la latitud de la posició, la longitud de la posició, el LoRaID del ciclista i el tipus d'esdeveniment (bloqueig o avaria mecànica).

Taula "wedstrijdrenner":

Aquesta taula és una taula necessària per a una relació de molts a molts.

Pas 3: registreu el mòdul LoRa

Registreu el vostre mòdul LoRa
Registreu el vostre mòdul LoRa

Abans de començar amb el codi, heu de registrar el mòdul LoRa en una passarel·la LoRa. Vaig utilitzar una empresa de telecomunicacions a Bèlgica anomenada "Proximus" que organitza la comunicació per al meu mòdul LoRa. Les dades que envio amb el meu node LoRa es recullen al lloc web des d’AllThingsTalk. Si també voleu utilitzar l'API AllThingsTalk per recopilar les vostres dades, podeu registrar-vos aquí.

Després de registrar-vos a AllThingsTalk, heu de registrar el node LoRa. Per fer-ho, podeu seguir aquests passos o mirar la imatge superior.

  1. Aneu a "Dispositius" al menú principal
  2. Feu clic a "Dispositiu nou"
  3. Seleccioneu el node LoRa
  4. Empleneu totes les claus.

Ara ja està! Totes les dades que envieu amb el node LoRa apareixeran al vostre fabricant AllThingsTalk. Si teniu algun problema amb el registre, sempre podeu consultar els documents de AllThingsTalk.

Pas 4: el codi

El codi
El codi
El codi
El codi
El codi
El codi
El codi
El codi

Per a aquest projecte necessitarem 5 llenguatges de codificació: HTML, CSS, Java Script, Python (Flask) i el llenguatge Arduino. Primer explicaré el programa Arduino.

El programa Arduino:

Al principi del programa, declaro algunes variables globals. Veureu que faig servir SoftwareSerial per a la connexió amb el meu GPS. Això es deu al fet que la placa Mbili només té 2 ports sèrie. Podeu connectar el GPS a Serial0, però no podreu utilitzar el terminal Arduino per depurar-lo. Aquesta és la raó per la qual faig servir un SoftwareSerial.

Després de les variables globals, declaro algunes funcions que faciliten la lectura del programa. Llegeixen les coordenades del GPS, fan sonar el brunzidor, envien valors a través de LoRa, …

El tercer bloc és el bloc de configuració. Aquest bloc és el començament del programa que configura els pins, la comunicació serial i la comunicació I2C.

Després del bloc de configuració ve el programa principal. Al principi d’aquest bucle principal, comprovo si el sensor tàctil està actiu. Si és així, faig sonar el brunzidor, obté les dades del GPS i envio tots els valors mitjançant LoRa o Bluetooth al Raspberry PI. Després del sensor tàctil, he llegit els valors de l’acceleròmetre. Amb una fórmula calculo l’angle exacte de l’eix X i Y. Si aquests valors són massa grans, podem concloure que el ciclista s’ha estavellat. Quan es produeix un bloqueig, faig sonar de nou el brunzidor, obtinc les dades del GPS i envio tots els valors mitjançant LoRa o Bluetooth al Raspberry PI.

Probablement esteu pensant: "Per què utilitzeu bluetooth i LoRa?". Això és degut a que he tingut alguns problemes amb la llicència del mòdul LoRa que he utilitzat. Per tant, perquè el programa funcionés per a la meva demostració, vaig haver d’utilitzar el Bluetooth durant un temps.

2. La part posterior:

La part posterior és una mica complexa. Utilitzo Flask per a la meva ruta accessible per a la part frontal, faig servir socketio per actualitzar algunes de les pàgines frontals automàticament, faig servir els pins GPIO per mostrar missatges en una pantalla LCD i rebre missatges per Bluetooth (no és necessari si utilitzeu LoRa) i jo utilitzo Threading i temporitzadors per llegir regularment l’API AllThinksTalk i iniciar el servidor de flask.

També faig servir la base de dades SQL per emmagatzemar tots els accidents que arriben, llegir les dades personals dels ciclistes i les dades de les curses. Aquesta base de dades està connectada al back-end i també s’executa al Raspberry Pi. Faig servir una classe 'Database.py' per interactuar amb la base de dades.

Com ja sabeu per l’esquema de Fritzing, el lcd està connectat al Raspberry Pi mitjançant el protocol SPI. Per fer-ho més fàcil, vaig escriure una classe "LCD_4_20_SPI.py". Amb aquesta classe podeu canviar el contrast, canviar el color de la llum de fons, escriure missatges a la pantalla, …. Si voleu utilitzar Bluetooth, podeu utilitzar la classe "SerialRaspberry.py". Aquesta classe regula la comunicació en sèrie entre el mòdul Bluetooth i el Raspberry Pi. L’únic que heu de fer és connectar un mòdul Bluetooth al Raspberry Pi connectant el RX al TX i virsa versa.

Les rutes per a la portada s’escriuen amb la regla @ app.route. Aquí podeu fer la vostra pròpia ruta personalitzada per inserir o obtenir dades a la base de dades o des de la mateixa. Assegureu-vos de tenir sempre una resposta al final de la ruta. Sempre torno un objecte JSON a la part frontal, fins i tot quan es produeix un error. Podeu utilitzar una variable a l'URL col·locant-la al voltant.

Utilitzo socketio per a la pàgina web amb els bloquejos d’una carrera. Quan el Raspberry Pi rep un bloqueig, emet un missatge a la portada mitjançant socketio. El frontal sap que han de tornar a llegir la base de dades perquè hi ha hagut un nou bloqueig.

Veureu que al meu codi la comunicació LoRa està configurada al comandament. Si voleu utilitzar LoRa, heu d'iniciar un temporitzador que enviï una sol·licitud repetitiva a l'API AllThinksTalk. Des d'aquesta API, rebreu els valors del sensor (GPS, Time, Crash) enviats per un node LoRa específic. Podeu utilitzar aquests valors per inserir un bloqueig a la base de dades.

3. El final de la fronda:

L’extrem fronda consta de 3 idiomes. HTML per al text del lloc web, CSS per al marcatge del lloc web i JavaScript per a la comunicació amb el back-end. Tinc 4 pàgines web per a aquest projecte:

  • L’index.html on es poden trobar totes les curses ciclistes.
  • Una pàgina amb tots els accidents i avaries mecàniques per a una carrera específica.
  • Una pàgina on podeu afegir cylists a la base de dades i editar el seu equip.
  • Una pàgina on podeu afegir una nova cursa amb tots els seus assistents a la base de dades.

Com els dissenyeu depèn totalment de vosaltres. Podeu inspirar-vos del meu lloc web si voleu. Malauradament, el meu lloc web està fet en neerlandès, ho sento.

Tinc un fitxer CSS i JavaScript separats per a cada pàgina. Tots els fitxers JavaScript utilitzen fetch per obtenir les dades de la base de dades a través del back-end. Quan l’script rep les dades, l’html canvia dinàmicament. A la pàgina on trobareu els accidents i avaries mecàniques, trobareu un mapa on succeeixen tots els esdeveniments. He utilitzat el díptic per mostrar aquest mapa.

Podeu veure tots els meus codis aquí al meu Github.

Pas 5: construeix les construccions

Construeix les construccions
Construeix les construccions
Construeix les construccions
Construeix les construccions
Construeix les construccions
Construeix les construccions

Abans de començar amb la construcció, assegureu-vos que teniu tots els materials de la llista de materials o de la pàgina "Eines + Subministraments".

Raspberry Pi + LCD

Començarem per la funda del Raspberry Pi. Podeu imprimir en 3D una funda, aquesta també va ser la meva primera idea. Però com que el meu termini s’acostava molt, vaig decidir presentar un cas senzill. Vaig agafar la funda estàndard del Raspberry Pi i vaig perforar un forat a la funda dels cables de la meva pantalla LCD. Per fer-ho, seguiu aquests senzills passos:

  1. Practicar un forat a la coberta de la caixa. Ho vaig fer amb un trepant de 7 mm al lateral de la coberta. Ho podeu veure a la imatge superior.
  2. Agafeu els cables de la pantalla LCD i feu lliscar un cap contra els cables.
  3. Utilitzeu un encenedor o una pistola d’aire calent per fer que el cap es redueixi.
  4. Tireu els cables amb el cap contraient pel forat de la caixa i torneu-los a connectar a la pantalla LCD.

Ara que ja esteu a punt amb la funda per al Raspberry Pi, podeu començar amb la funda per a la pantalla LCD. He imprès la caixa de la meva pantalla LCD en 3D perquè he trobat una caixa en línia en aquest enllaç. Només vaig haver de fer un petit canvi d’alçada de la caixa. Quan creieu que el dibuix és bo, podeu exportar els fitxers i començar a imprimir. Si no sabeu com imprimir en 3D, podeu seguir aquesta instrucció sobre com imprimir en 3D amb fusion 360.

Construcció SODAQ MBili

Realment no vaig presentar cap cas al tauler SODAQ Mbili. Vaig utilitzar un vidre de plexi per col·locar els meus components sense cap estoig al voltant de la construcció. Si voleu fer-ho també, podeu seguir aquests passos:

  1. Tanqueu el plexiglàs amb les dimensions del tauler SODAQ Mbili. Les dimensions són: 85mm X 56mm
  2. Talleu el plexiglass amb una serra.
  3. Col·loqueu els components electrònics al plexiglàs i signeu els forats amb un llapis.
  4. Traieu els forats que acabeu de tancar i els forats dels separadors amb un trepant de 3,5 mm.
  5. Muntar tots els components electrònics al plexiglàs amb els cargols i femelles de 3M de 10 mm.
  6. L’últim pas és muntar el plexiglàs sobre la placa Mbili. Podeu fer-ho amb separadors, però he utilitzat dos perns de 3M de 50 mm i 8 femelles de 3M per muntar el plexiglàs a sobre del tauler.

Recomanat: