Përmbajtje:

Moduli i Ndjekjes për Çiklistët: 5 Hapa
Moduli i Ndjekjes për Çiklistët: 5 Hapa

Video: Moduli i Ndjekjes për Çiklistët: 5 Hapa

Video: Moduli i Ndjekjes për Çiklistët: 5 Hapa
Video: Измерение 5A-30A переменного и постоянного тока с использованием ACS712 с библиотекой Robojax 2024, Korrik
Anonim
Moduli i Ndjekjes për Çiklistët
Moduli i Ndjekjes për Çiklistët

Ky modul përcjellës për çiklistët është një modul që zbulon automatikisht rrëzimet në një garë dhe që zbulon një prishje mekanike duke prekur një sensor me prekje. Kur ndodh një nga këto ngjarje, moduli dërgon ngjarjen në një bazë të dhënash në një pi mjedër nëpërmjet LoRa. Kjo ngjarje do të shfaqet në një ekran LCD dhe në një faqe në internet. Ju gjithashtu mund të kërkoni në uebfaqe për një garë të veçantë çiklizmi me ngjarjet dhe të shtoni gara çiklizmi ose çiklistë në bazën e të dhënave. Unë e bëra këtë projekt sepse jam shumë i interesuar në Çiklizëm dhe IOT, kështu që kombinimi i këtyre dy lëndëve ishte thjesht shumë emocionuese për mua.

Para se të krijoni një modul përcjellës për çiklistët, duhet të grumbulloni materialet tuaja. Ju mund të gjeni mjetet dhe furnizimet në listat më poshtë, ose mund të shkarkoni BOM (Ndërtimi i materialeve).

Furnizimet:

  • qelqi pleksi (56mm X 85mm)
  • 10 X 2M bulona 10mm dhe arra
  • 10 X 3M bulona 10mm dhe arra
  • 2 bulona 3 X 3M 50mm dhe arra
  • Filament PLA për të printuar 3D kasën tuaj LCD
  • tkurret nxehtësia
  • Kabllo meshkuj për femra
  • Një PCB bazë
  • Tituj meshkuj
  • Një Raspberry Pi 3b+
  • Një kartë SD 16 GB
  • Një LCD sparkfun 4X20
  • Një sensor prekës kapacitiv
  • Një zile
  • Një aparat nxitues + xhiro me 3 boshte
  • Një modul GPS
  • Një bord SODAQ Mbili
  • Një modul LoRa WAN
  • Një bateri 3.7V 1000mAh
  • Një furnizim me energji Raspberry Pi 3b+

Mjetet:

  • Kallaji i saldimit
  • Makine per ngjitjen e metalit
  • Tongat
  • Kaçavida
  • Jigsaw
  • Makinë shpuese
  • Stërvitje 2.5 dhe 3.5
  • Armë më e lehtë / ajër të nxehtë

Nëse keni nevojë të blini të gjitha furnizimet, do t'ju duhet një buxhet prej 541.67 €. Ky projekt është shumë i shtrenjtë sepse kam përdorur një çantë të zhvillimit LoRa që kushton 299 € (pata rastin ta përdor këtë çantë nga shkolla ime). Ju gjithmonë mund të përdorni një Arduino normale dhe kurseni shumë para, por programet do të jenë të ndryshme atëherë.

Hapi 1: Skema e ngrirjes

Skema e ngrirjes
Skema e ngrirjes
Skema e ngrirjes
Skema e ngrirjes

Hapi i parë është ndërtimi i qarqeve. Për këtë projekt ne kemi 2 qarqe elektrike, një me Raspberry Pi dhe një me tabelë SADAQ Mbili. Ne do të fillojmë me qarkun Raspberry Pi.

Skema e ngrirjes së Raspberry Pi:

Skema Raspberry Pi është mjaft e thjeshtë, e vetmja gjë që lidhim me Pi është një ekran LCD 4X20 Sparkfun. Ekrani funksionon me komunikim serik, SPI ose I2C. Cilin protokoll komunikimi që përdorni varet nga ju. Kam përdorur protokollin SPI sepse është shumë i thjeshtë. Nëse përdorni SPI si unë, keni nevojë për lidhjet e mëposhtme:

  • VCC LCD VCC Mjedër Pi
  • GND LCD GND Mjedër 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

Në skemën Fritzing do të shihni që ekrani LCD është një ekran 2X16. Kjo është për shkak se nuk gjeta një LCD 4X20 në frizting. Sidoqoftë, të gjitha lidhjet janë disa, kështu që nuk ka shumë rëndësi.

Skema SODAQ Mbili Fritzing:

Ne do të lidhim 4 përbërës elektronikë me tabelën SODAQ Mbili, kështu që kjo skemë elektrike është gjithashtu shumë e thjeshtë. Ne do të fillojmë me lidhjen e sensorit të prekjes Capactive. Ky sensor OUT-pin do të jetë LART HIGH kur prekni sensorin dhe përndryshe do të jetë I ULT. Kjo do të thotë që OUT-pin është një dalje dixhitale që mund ta lidhim me një hyrje dixhitale të bordit Mbili. Lidhjet janë si më poshtë:

  • OUT sensor i prekjes D5 Mbili
  • Sensori i prekjes VCC 3.3V Mbili
  • GND Sensori i prekjes GND Mbili

Komponenti i dytë është sensori Triple i aksesit + xhiro. Kam përdorur bordin GY-521 që përdor protokollin I2C për të komunikuar me bordin Mbili. Vini re se kunja AD0 e bordit GY-521 duhet të lidhet me VCC të bordit Mbili! Kjo ndodh sepse bordi Mbili ka një orë me të njëjtën adresë I2C si GY-521. Duke lidhur AD0-pin me VCC ne ndryshojmë adresën e I2C të GY-521. Lidhjet janë si më poshtë:

  • 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

Më pas do të lidhim Buzzer. Unë përdor zile standarde që bën një tingull kur ka një rrymë. Kjo do të thotë që ne thjesht mund ta lidhim zilen me një kunj dixhital të bordit Mbili. Lidhjet janë si më poshtë:

  • + Buzzer D4 Mbili
  • - Buzzer GND Mbili

E fundit por jo më pak e rëndësishme, ne do të lidhim modulin GPS. Moduli GPS komunikon përmes RX dhe TX. Lidhjet janë si më poshtë:

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

Hapi 2: Baza e të dhënave e normalizuar

Baza e të dhënave e normalizuar
Baza e të dhënave e normalizuar

Hapi i dytë është të krijoni një bazë të dhënash të normalizuar. Unë kam hartuar ERD -në time në Mysql. Do të shihni që baza ime e të dhënave është e shkruar në gjuhën holandeze, unë do të shpjegoj tabelat këtu.

Tabela 'ploeg':

Kjo tryezë është një tryezë për klubet e çiklizmit. Ai përmban një ID të klubit të çiklizmit dhe një emër klubi për çiklizëm.

Tabela "të rinjtë":

Kjo tryezë është një tryezë për çiklistët. Çdo çiklist ka një LoRaID, i cili është gjithashtu çelësi kryesor i tryezës. Ata gjithashtu kanë një mbiemër, emrin, Vendin e origjinës dhe një ID të klubit të çiklizmit që lidhet me tryezën e klubeve të çiklizmit.

Tabela 'plaatsen':

Kjo tryezë është një tryezë që ruan vendet në Belgjikë ku mund të zhvillohet një garë çiklizmi. Ai përmban emrin e qytetit (i cili është çelësi kryesor) dhe krahinës ku ndodhet qyteti.

Tabela 'wedstrijden':

Kjo tryezë ruan të gjitha garat e çiklizmit. Çelësi kryesor i tabelës është një ID. Tabela gjithashtu përmban emrin e garës së çiklizmit, qytetin e garës i cili lidhet me tabelën e vendeve, distancën e garës, kategorinë e çiklistëve dhe datën e garës.

Tabela 'gebeurtenissen':

Kjo tabelë ruan të gjitha ngjarjet që ndodhin. Kjo do të thotë, kur një çiklist përfshihet në një përplasje ose ka një prishje mekanike, ngjarja do të ruhet në këtë tabelë. Çelësi kryesor i tabelës është një ID. Tabela gjithashtu përmban kohën e datës së ngjarjes, gjerësinë gjeografike të pozicionit, gjatësinë gjeografike të pozicionit, LoRaID të çiklistit dhe llojin e ngjarjes (përplasje ose prishje mekanike).

Tabela 'wedstrijdrenner':

Kjo tryezë është një tryezë që nevojitet për një marrëdhënie shumë e shumë.

Hapi 3: Regjistroni Modulin tuaj LoRa

Regjistroni modulin tuaj LoRa
Regjistroni modulin tuaj LoRa

Para se të filloni me kodin, duhet të regjistroni modulin tuaj LoRa në një portë LoRa. Kam përdorur një kompani telekomit në Belgjikë të quajtur 'Proximus' që rregullon komunikimin për modulin tim LoRa. Të dhënat që dërgoj me nyjen time LoRa mblidhen në faqen e internetit nga AllThingsTalk. Nëse dëshironi gjithashtu të përdorni API AllThingsTalk për të mbledhur të dhënat tuaja, mund të regjistroheni këtu.

Pasi të regjistroheni në AllThingsTalk, duhet të regjistroni nyjen tuaj LoRa. Për ta bërë këtë, mund të ndiqni këto hapa ose mund të shikoni foton më lart.

  1. Shkoni te "Pajisjet" në menunë kryesore
  2. Klikoni në "Pajisje e re"
  3. Zgjidhni nyjen tuaj LoRa
  4. Plotësoni të gjithë çelësat.

Tani mbarove! Të gjitha të dhënat që dërgoni me nyjen tuaj LoRa do të shfaqen në krijuesin tuaj AllThingsTalk. Nëse keni ndonjë problem me regjistrimin, gjithmonë mund të konsultoheni me dokumentet AllThingsTalk.

Hapi 4: Kodi

Kodi
Kodi
Kodi
Kodi
Kodi
Kodi
Kodi
Kodi

Për këtë projekt do të na duhen 5 gjuhë kodimi: HTML, CSS, Java Script, Python (Flask) dhe gjuha Arduino. Së pari do të shpjegoj programin Arduino.

Programi Arduino:

Në fillim të programit, unë deklaroj disa Ndryshore Globale. Do të shihni që unë përdor SoftwareSerial për lidhje me GPS tim. Kjo ndodh sepse bordi Mbili ka vetëm 2 porte serike. Mund ta lidhni GPS me Serial0, por nuk do të jeni në gjendje të përdorni terminalin Arduino për korrigjim atëherë. Kjo është arsyeja pse unë përdor një SoftwareSerial.

Pas Variablave Global, deklaroj disa funksione që e bëjnë të lehtë leximin e programit. Ata lexojnë koordinatat GPS, bëjnë zhurmën e ziles, dërgon vlera përmes LoRa,…

Blloku i tretë është blloku i konfigurimit. Ky bllok është fillimi i programit i cili krijon kunjat, komunikimin serik dhe komunikimin I2C.

Pas bllokut të konfigurimit vjen programi kryesor. Në fillim të këtij laku kryesor, unë kontrolloj nëse sensori i prekjes është aktiv. Nëse është kështu, unë e bëj zilen, merr të dhënat GPS dhe i dërgon të gjitha vlerat nëpërmjet LoRa ose Bluetooth në Raspberry PI. Pas sensorit të prekjes, lexova vlerat e Përshpejtuesit. Me një formulë unë llogaris këndin e saktë të boshtit X dhe Y. Nëse këto vlera janë shumë të mëdha, mund të konkludojmë se çiklisti u rrëzua. Kur ndodh një përplasje, e bëj zilen përsëri, marr të dhënat GPS dhe i dërgoj të gjitha vlerat nëpërmjet LoRa ose Bluetooth në Raspberry PI.

Me siguri po mendoni: 'Pse përdorni bluetooth dhe LoRa?'. Kjo ndodh sepse kisha disa probleme me licencën e modulit LoRa që kam përdorur. Kështu që për ta bërë programin të funksionojë për demon time, më duhej të përdorja Bluetooth për një kohë.

2. Fundi i pasmë:

Fundi i pasmë është një kompleks i vogël. Unë përdor Flask për rrugën time që janë të arritshme për pjesën e përparme, unë përdor socketio për të azhurnuar disa nga faqet e përparme automatikisht, unë përdor kunjat GPIO për të treguar mesazhe në një ekran LCD dhe për të marrë mesazhe përmes Bluetooth (nuk nevojitet nëse përdorni LoRa) dhe unë përdor Threading dhe Timers për të lexuar rregullisht API AllThinksTalk dhe për të filluar serverin e shisheve.

Unë gjithashtu përdor bazën e të dhënave SQL për të ruajtur të gjitha aksidentet që vijnë, lexoj të dhënat personale të çiklistëve dhe të dhënat e garave. Kjo bazë të dhënash është e lidhur me pjesën e pasme dhe gjithashtu funksionon në Raspberry Pi. Unë përdor një klasë 'Database.py' për të bashkëvepruar me bazën e të dhënave.

Siç e dini nga skema Fritzing, LCD është i lidhur me Raspberry Pi përmes protokollit SPI. Për ta bërë atë më të lehtë, kam shkruar një klasë 'LCD_4_20_SPI.py'. Me këtë klasë mund të ndryshoni kontrastin, të ndryshoni ngjyrën e dritës së prapme, të shkruani mesazhe në ekran,…. Nëse dëshironi të përdorni Bluetooth, mund të përdorni klasën 'SerialRaspberry.py'. Kjo klasë rregullon komunikimin serik midis modulit Bluetooth dhe Raspberry Pi. E vetmja gjë që duhet të bëni është të lidhni një modul Bluetooth me Raspberry Pi duke lidhur RX me TX dhe virsa anasjelltas.

Rrugët për pjesën e përparme janë të shkruara me rregullin @app.route. Këtu mund të bëni rrugën tuaj të personalizuar për të futur ose marrë të dhëna në ose nga baza e të dhënave. Sigurohuni që të keni gjithmonë një përgjigje në fund të itinerarit. Unë gjithmonë e kthej një objekt JSON në pjesën e përparme, edhe kur ndodh një gabim. Ju mund të përdorni një ndryshore në url duke vendosur rreth ndryshores.

Unë përdor socketio për faqen në internet me rrëzimet e një gare. Kur Raspberry Pi merr një aksident, unë lëshoj një mesazh në pjesën e përparme përmes socketio. Pjesa e përparme atëherë e di se ata duhet të lexojnë përsëri bazën e të dhënave sepse pati një përplasje të re.

Do të shihni që në kodin tim komunikimi LoRa është vendosur në komandë. Nëse dëshironi të përdorni LoRa, duhet të filloni një kohëmatës që përsëritës i dërgon një kërkesë API -së AllThinksTalk. Nga ky API, ju do të merrni vlerat e sensorit (GPS, Koha, lloji i Rrëzimit) që dërgohen nga një nyje specifike LoRa. Ju mund t'i përdorni këto vlera për të futur një aksident në bazën e të dhënave.

3. Fundi i fundit:

Fundi i parë përbëhet nga 3 gjuhë. HTML për tekstin e faqes në internet, CSS për shënimin e faqes në internet dhe JavaScript për komunikimin me pjesën e pasme. Unë kam 4 faqe në internet për këtë projekt:

  • Index.html ku mund të gjeni të gjitha garat e çiklizmit.
  • Një faqe me të gjitha rrëzimet dhe prishjet mekanike për një garë pikante.
  • Një faqe ku mund të shtoni cilistë në bazën e të dhënave dhe të redaktoni ekipin e tyre.
  • Një faqe ku mund të shtoni një garë të re me të gjithë pjesëmarrësit e saj në bazën e të dhënave.

Si i dizajnoni ato varet plotësisht nga ju. Nëse dëshironi, mund të merrni frymëzim nga faqja ime në internet. Fatkeqësisht faqja ime e internetit është bërë në gjuhën holandeze, më vjen keq për atë.

Unë kam një skedar veçmas CSS dhe skedar JavaScript për çdo faqe. Çdo skedar JavaScript përdor marrjen për të marrë të dhënat nga baza e të dhënave përmes skajit të pasmë. Kur skripti merr të dhënat, html ndryshon në mënyrë dinamike. Në faqen ku mund të gjeni rrëzimet dhe prishjet mekanike, do të gjeni një hartë ku të gjitha ngjarjet kanë ndodhur. Kam përdorur fletëpalosje për të treguar këtë hartë.

Ju mund të shikoni të gjithë kodin tim këtu në Github tim.

Hapi 5: Ndërtoni Ndërtimet

Ndërtoni Ndërtimet
Ndërtoni Ndërtimet
Ndërtoni Ndërtimet
Ndërtoni Ndërtimet
Ndërtoni Ndërtimet
Ndërtoni Ndërtimet

Para se të fillojmë me ndërtimin, sigurohuni që i keni të gjitha materialet nga BOM ose nga faqja 'Tools + Supplies'.

Raspberry Pi + LCD

Ne do të fillojmë me rastin për Raspberry Pi. Ju mund të printoni 3D një rast, kjo ishte gjithashtu ideja ime e parë. Por për shkak se afati im po afrohej shumë, vendosa të bëj një rast të thjeshtë. Mora rastin standard nga Raspberry Pi dhe shpova një vrimë në kuti për telat nga ekrani im LCD. Për ta bërë këtë, thjesht ndiqni këto hapa të thjeshtë:

  1. Stërvitni një vrimë në kapakun e rastit. E bëra këtë me një stërvitje 7 mm në anën e kapakut. Këtë mund ta shihni në foton e mësipërme.
  2. Merrni telat nga ekrani LCD dhe rrëshqisni një kokë zvogëlohet mbi telat.
  3. Përdorni një çakmak ose një armë ajri të nxehtë për të bërë që koka të zvogëlohet.
  4. Tërhiqni telat me kokën të tkurret përmes vrimës në kuti dhe lidheni përsëri në LCD.

Tani që jeni gati me kutinë për Raspberry Pi, mund të filloni me kutinë për ekranin LCD. Kam printuar 3D kasën për ekranin tim LCD sepse gjeta një rast në internet në këtë lidhje. Më duhej të bëja vetëm një ndryshim të vogël në lartësinë e kutisë. Kur mendoni se vizatimi juaj është i mirë, mund t'i eksportoni skedarët dhe të filloni printimin. Nëse nuk dini si të printoni 3D, mund të ndiqni këtë udhëzues se si të printoni 3D me fusion 360.

SODAQ MBili konstruksion

Unë me të vërtetë nuk bëra një rast për bordin SODAQ Mbili. Kam përdorur një gotë plexi për të vendosur përbërësit e mi pa një rast rreth ndërtimit. Nëse dëshironi ta bëni edhe këtë, mund të ndiqni këto hapa:

  1. Nënshkruani pleksiglasin me dimensionet e tabelës SODAQ Mbili. Përmasat janë: 85mm X 56mm
  2. Pritini pleksiglasin me një bashkim pjesësh figure.
  3. Vendosni përbërësit elektronikë në pleksiglas dhe nënshkruani vrimat me një laps.
  4. Stërvitni vrimat që sapo keni nënshkruar dhe vrimat për bllokimet me një stërvitje 3.5 mm.
  5. Montoni të gjithë përbërësit elektronikë në pleksiglas me bulona dhe arra 3M 10mm.
  6. Hapi i fundit është montimi i pleksiglasit mbi tabelën Mbili. Ju mund ta bëni këtë me ndalesa, por unë kam përdorur dy bulona 3M 50mm dhe 8 arra 3M për të montuar pleksiglasin mbi tabelë.

Recommended: