Spisu treści:

Moduł śledzenia dla rowerzystów: 5 kroków
Moduł śledzenia dla rowerzystów: 5 kroków

Wideo: Moduł śledzenia dla rowerzystów: 5 kroków

Wideo: Moduł śledzenia dla rowerzystów: 5 kroków
Wideo: SCHOWEK na ROWERY w ogrodzie - RAJ NA "ROD" #3 2024, Lipiec
Anonim
Moduł śledzenia dla rowerzystów
Moduł śledzenia dla rowerzystów

Ten moduł śledzenia dla rowerzystów to moduł, który automatycznie wykrywa wypadki podczas wyścigu i wykrywa awarię mechaniczną poprzez dotknięcie czujnika dotykowego. Kiedy jedno z tych zdarzeń ma miejsce, moduł wysyła zdarzenie do bazy danych na Raspberry Pi za pośrednictwem LoRa. To wydarzenie będzie pokazywane na wyświetlaczu LCD oraz na stronie internetowej. Możesz również wyszukiwać na stronie internetowej konkretny wyścig kolarski z wydarzeniami i dodawać wyścigi kolarskie lub rowerzystów do bazy danych. Zrobiłem ten projekt, ponieważ bardzo interesuję się kolarstwem i IOT, więc połączenie tych dwóch tematów było dla mnie bardzo ekscytujące.

Zanim będziesz mógł wykonać moduł śledzenia dla rowerzystów, musisz zebrać swoje materiały. Narzędzia i materiały eksploatacyjne można znaleźć na poniższych listach lub można pobrać BOM (Budowanie materiałów).

Kieszonkowe dzieci:

  • szkło pleksi (56mm X 85mm)
  • Śruby 10X2 M 10mm i nakrętki
  • Śruby 10X3 M 10mm i nakrętki
  • Śruby 2X3 M 50mm i nakrętki
  • Filament PLA do drukowania 3D obudowy LCD
  • termokurczliwe
  • Kable męskie na żeńskie
  • Podstawowa płytka drukowana
  • Męskie nagłówki
  • Raspberry Pi 3b+
  • Karta SD o pojemności 16 GB
  • Świetny wyświetlacz LCD 4X20
  • Pojemnościowy czujnik dotykowy
  • Brzęczyk
  • 3-osiowy akcelerometr + żyroskop
  • Moduł GPS
  • Płyta SODAQ Mbili
  • Moduł LoRa WAN
  • Bateria 3,7 V 1000 mAh
  • Zasilacz Raspberry Pi 3b+

Narzędzia:

  • Cyna lutownicza
  • Lutownica
  • Szczypce
  • Wkrętaki
  • Puzzle
  • Wiertarka
  • wiertła 2,5 i 3,5
  • Zapalniczka / pistolet na gorące powietrze

Jeśli chcesz kupić wszystkie materiały, będziesz potrzebować budżetu w wysokości 541,67 euro. Ten projekt jest bardzo kosztowny, ponieważ użyłem zestawu do szybkiego rozwoju LoRa, który kosztuje 299 euro (miałem okazję użyć tego zestawu z mojej szkoły). Zawsze można użyć zwykłego Arduino i zaoszczędzić sporo pieniędzy, ale wtedy programy będą inne.

Krok 1: Schemat frytowania

Schemat frytowania
Schemat frytowania
Schemat frytowania
Schemat frytowania

Pierwszym krokiem jest zbudowanie obwodów. Do tego projektu mamy 2 obwody elektryczne, jeden z Raspberry Pi, a drugi z płytką SADAQ Mbili. Zaczniemy od obwodu Raspberry Pi.

Schemat Raspberry Pi Fritzing:

Schemat Raspberry Pi jest dość prosty, jedyne, co łączymy z Pi, to wyświetlacz LCD Sparkfun 4X20. Wyświetlacz współpracuje z komunikacją szeregową, SPI lub I2C. To, jakiego protokołu komunikacyjnego używasz, zależy od Ciebie. Użyłem protokołu SPI, ponieważ jest bardzo prosty. Jeśli korzystasz z SPI, tak jak ja, potrzebujesz następujących połączeń:

  • 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

Na schemacie Fritzing zobaczysz, że wyświetlacz LCD to wyświetlacz 2X16. To dlatego, że nie znalazłem LCD 4X20 na frizowaniu. Jednak wszystkie połączenia to tylko niektóre, więc nie ma to większego znaczenia.

Schemat SODAQ Mbili Fritzing:

Z płytką SODAQ Mbili połączymy 4 elementy elektroniczne, więc ten schemat elektryczny również jest bardzo prosty. Zaczniemy od podłączenia czujnika dotykowego Capactive. Ten pin OUT czujnika będzie WYSOKI po dotknięciu czujnika, aw przeciwnym razie będzie NISKI. Oznacza to, że pin OUT jest wyjściem cyfrowym, które możemy połączyć z wejściem cyfrowym płytki Mbili. Połączenia są następujące:

  • Czujnik dotykowy OUT D5 Mbili
  • Czujnik dotykowy VCC 3,3V Mbili
  • GND Czujnik dotykowy GND Mbili

Drugim elementem jest potrójny dostęp + czujnik żyroskopowy. Użyłem płyty GY-521, która wykorzystuje protokół I2C do komunikacji z płytą Mbili. Zauważ, że pin AD0 płyty GY-521 musi być połączony z VCC płyty Mbili! Dzieje się tak, ponieważ płyta Mbili ma zegar z tym samym adresem I2C, co GY-521. Podłączając pin AD0 do VCC zmieniamy adres I2C GY-521. Połączenia są następujące:

  • VCC GY-521 3,3V Napięcie
  • GND GY-521 GND Mbili
  • SCL GY-521 SCL Mbili
  • SDA GY-521 SDA Mbili
  • AD0 GY-521 3,3V Mbili

Następnie podłączymy brzęczyk. Używam standardowego brzęczyka, który wydaje dźwięk, gdy jest prąd. Oznacza to, że możemy po prostu podłączyć brzęczyk do cyfrowego pinu płyty Mbili. Połączenia są następujące:

  • + Brzęczyk D4 Mbili
  • - Brzęczyk GND Mbili

Na koniec podłączymy moduł GPS. Moduł GPS komunikuje się poprzez RX i TX. Połączenia są następujące:

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

Krok 2: Znormalizowana baza danych

Znormalizowana baza danych
Znormalizowana baza danych

Drugim krokiem jest zaprojektowanie znormalizowanej bazy danych. Zaprojektowałem mój ERD w Mysql. Zobaczysz, że moja baza danych jest napisana w języku holenderskim, wyjaśnię tabele tutaj.

Tabela „ploeg”:

Ten stół jest stolikiem dla klubów kolarskich. Zawiera identyfikator klubu kolarskiego oraz nazwę klubu kolarskiego.

„Rennery” stołowe:

Ten stół jest stolikiem dla rowerzystów. Każdy rowerzysta ma LoRaID, który jest również kluczem podstawowym tabeli. Posiadają również nazwisko, imię, kraj pochodzenia oraz identyfikator klubu kolarskiego, który jest powiązany z tabelą klubu kolarskiego.

Tabela „plaatsen”:

Ta tabela jest tabelą, która przechowuje miejsca w Belgii, w których może się odbyć wyścig kolarski. Zawiera nazwę miasta (która jest kluczem podstawowym) i prowincję, w której znajduje się miasto.

Tabela 'wedstrijden':

Ta tabela przechowuje wszystkie wyścigi kolarskie. Kluczem podstawowym tabeli jest identyfikator. Tabela zawiera również nazwę wyścigu kolarskiego, miasto wyścigu powiązane z tabelą miejsc, dystans wyścigu, kategorię kolarzy i datę wyścigu.

Tabela „gebeurtenissen”:

Ta tabela przechowuje wszystkie zdarzenia, które się wydarzyły. Oznacza to, że gdy rowerzysta ulegnie wypadkowi lub ulegnie awarii mechanicznej, zdarzenie zostanie zapisane w tej tabeli. Kluczem podstawowym tabeli jest identyfikator. Tabela zawiera również datę i czas zdarzenia, szerokość geograficzną pozycji, długość geograficzną pozycji, LoRaID rowerzysty oraz rodzaj zdarzenia (awaria lub awaria mechaniczna).

Tabela 'wedstrijdrenner':

Ta tabela jest tabelą potrzebną do relacji wiele do wielu.

Krok 3: Zarejestruj swój moduł LoRa

Zarejestruj swój moduł LoRa
Zarejestruj swój moduł LoRa

Zanim zaczniesz od kodu, musisz zarejestrować swój moduł LoRa w bramce LoRa. Korzystałem z firmy telekomunikacyjnej w Belgii o nazwie „Proximus”, która organizuje komunikację dla mojego modułu LoRa. Dane, które wysyłam z moim węzłem LoRa, zbierają na stronie z AllThingsTalk. Jeśli chcesz również używać API AllThingsTalk do zbierania danych, możesz zarejestrować się tutaj.

Po zarejestrowaniu się w AllThingsTalk musisz zarejestrować swój węzeł LoRa. Aby to zrobić, możesz wykonać następujące kroki lub spojrzeć na obrazek powyżej.

  1. Przejdź do „Urządzenia” w menu głównym
  2. Kliknij „Nowe urządzenie”
  3. Wybierz swój węzeł LoRa
  4. Wypełnij wszystkie klucze.

Teraz gotowe! Wszystkie dane, które wysyłasz za pomocą węzła LoRa, pojawią się w Twoim kreatorze AllThingsTalk. Jeśli masz jakiekolwiek problemy z rejestracją, zawsze możesz zapoznać się z dokumentacją AllThingsTalk.

Krok 4: Kodeks

Kod
Kod
Kod
Kod
Kod
Kod
Kod
Kod

Do tego projektu będziemy potrzebować 5 języków kodowania: HTML, CSS, Java Script, Python (Flask) oraz język Arduino. Najpierw wyjaśnię program Arduino.

Program Arduino:

Na początku programu deklaruję kilka zmiennych globalnych. Zobaczysz, że do połączenia z GPS używam SoftwareSerial. Dzieje się tak, ponieważ płyta Mbili ma tylko 2 porty szeregowe. Możesz podłączyć GPS do Serial0, ale wtedy nie będziesz mógł używać terminala Arduino do debugowania. To jest powód, dla którego używam SoftwareSerial.

Po zmiennych globalnych deklaruję kilka funkcji ułatwiających czytanie programu. Odczytują współrzędne GPS, wydają dźwięk brzęczyka, wysyłają wartości przez LoRa, …

Trzeci blok to blok instalacyjny. Ten blok jest początkiem programu, który ustawia piny, komunikację szeregową i komunikację I2C.

Po bloku instalacyjnym pojawia się główny program. Na początku tej głównej pętli sprawdzam, czy czujnik dotykowy jest aktywny. Jeśli tak, uruchamiam brzęczyk, pobieram dane GPS i wysyłam wszystkie wartości przez LoRa lub Bluetooth do Raspberry PI. Po czujniku dotyku odczytuję wartości z akcelerometru. Ze wzoru obliczam dokładny kąt osi X i Y. Jeśli te wartości są za duże, możemy stwierdzić, że kolarz się rozbił. Kiedy nastąpi awaria, ponownie uruchamiam brzęczyk, pobieram dane GPS i wysyłam wszystkie wartości przez LoRa lub Bluetooth do Raspberry PI.

Prawdopodobnie myślisz: „Dlaczego używasz bluetooth i LoRa?”. To dlatego, że miałem problemy z licencją używanego przeze mnie modułu LoRa. Aby program działał na moich demonstracjach, musiałem przez jakiś czas korzystać z Bluetootha.

2. Z tyłu:

Tył jest trochę skomplikowany. Używam Flask do moich tras, które są dostępne dla frontonu, używam socketio do automatycznej aktualizacji niektórych stron frontonu, używam pinów GPIO do wyświetlania komunikatów na wyświetlaczu LCD i odbierania wiadomości przez Bluetooth (nie jest to potrzebne, jeśli używasz LoRa) i używam Threading and Timers, aby regularnie czytać API AllThinksTalk i uruchamiać serwer kolby.

Korzystam również z bazy danych SQL do przechowywania wszystkich nadchodzących wypadków, odczytywania danych osobowych rowerzystów i danych wyścigowych. Ta baza danych jest podłączona do zaplecza i działa również na Raspberry Pi. Do interakcji z bazą danych używam klasy 'Database.py'.

Jak wiecie ze schematu Fritzing, lcd jest podłączony do Raspberry Pi za pomocą protokołu SPI. Aby było trochę łatwiej, napisałem klasę 'LCD_4_20_SPI.py'. Dzięki tej klasie możesz zmienić kontrast, zmienić kolor podświetlenia, pisać wiadomości na ekranie, …. Jeśli chcesz korzystać z Bluetooth, możesz użyć klasy „SerialRaspberry.py”. Ta klasa rządzi komunikacją szeregową między modułem Bluetooth a Raspberry Pi. Jedyne, co musisz zrobić, to podłączyć moduł Bluetooth do Raspberry Pi, podłączając RX do TX i odwrotnie.

Trasy dla interfejsu użytkownika są zapisywane przy użyciu reguły @app.route. Tutaj możesz stworzyć własną niestandardową trasę do wstawiania lub pobierania danych do lub z bazy danych. Upewnij się, że zawsze masz odpowiedź na końcu trasy. Zawsze zwracam obiekt JSON do interfejsu, nawet jeśli wystąpił błąd. Możesz użyć zmiennej w adresie URL, umieszczając ją wokół zmiennej.

Używam socketio do strony internetowej z awariami wyścigu. Kiedy Raspberry Pi otrzymuje awarię, wysyłam wiadomość do frontendu przez socketio. Interfejs użytkownika wie, że musi ponownie odczytać bazę danych, ponieważ nastąpiła nowa awaria.

Zobaczysz, że w moim kodzie komunikacja LoRa jest ustawiona w komendzie. Jeśli chcesz korzystać z LoRa, musisz uruchomić timer, który powtarza się wysyła żądanie do API AllThinksTalk. Z tego interfejsu API otrzymasz wartości czujników (GPS, czas, rodzaj awarii), które są wysyłane przez określony węzeł LoRa. Możesz użyć tych wartości, aby wstawić awarię do bazy danych.

3. Koniec liścia:

Fronton składa się z 3 języków. HTML dla tekstu strony, CSS dla znaczników strony i JavaScript dla komunikacji z zapleczem. Mam 4 strony internetowe dla tego projektu:

  • index.html, gdzie można znaleźć wszystkie wyścigi kolarskie.
  • Strona ze wszystkimi awariami i awariami mechanicznymi dla pikantnego wyścigu.
  • Strona, na której możesz dodawać kolarzy do bazy danych i edytować ich zespół.
  • Strona, na której możesz dodać nowy wyścig ze wszystkimi jego uczestnikami do bazy danych.

To, jak je zaprojektujesz, zależy wyłącznie od Ciebie. Jeśli chcesz, możesz zaczerpnąć inspiracji z mojej strony internetowej. Niestety moja strona jest w języku holenderskim, przepraszam za to.

Dla każdej strony mam osobny plik CSS i plik JavaScript. Każdy plik JavaScript korzysta z funkcji pobierania, aby pobrać dane z bazy danych za pośrednictwem zaplecza. Kiedy skrypt otrzymuje dane, html zmienia się dynamicznie. Na stronie, na której można znaleźć awarie i awarie mechaniczne, znajdziesz mapę, na której miały miejsce wszystkie zdarzenia. Do pokazania tej mapy użyłem ulotki.

Możesz obejrzeć cały mój kod na moim Github.

Krok 5: Zbuduj konstrukcje

Zbuduj Konstrukcje
Zbuduj Konstrukcje
Zbuduj Konstrukcje
Zbuduj Konstrukcje
Zbuduj Konstrukcje
Zbuduj Konstrukcje

Zanim przystąpimy do budowy, upewnij się, że masz wszystkie materiały z BOM-u lub ze strony „Narzędzia + Zaopatrzenie”.

Raspberry Pi + LCD

Zaczniemy od obudowy do Raspberry Pi. Zawsze można było wydrukować obudowę w 3D, to był też mój pierwszy pomysł. Ale ponieważ mój termin zbliżał się bardzo blisko, postanowiłem zrobić prostą sprawę. Wziąłem standardową obudowę z Raspberry Pi i wywierciłem w niej otwór na przewody z mojego wyświetlacza LCD. Aby to zrobić, wykonaj następujące proste kroki:

  1. Wywierć otwór w pokrywie obudowy. Zrobiłem to wiertłem 7mm z boku okładki. Możesz to zobaczyć na powyższym obrazku.
  2. Wyjmij przewody z wyświetlacza LCD i przesuń głowicę kurczącą się po przewodach.
  3. Użyj zapalniczki lub pistoletu na gorące powietrze, aby skurczyć główkę.
  4. Przeciągnij przewody z głowicą skurczoną przez otwór w obudowie i podłącz je z powrotem do wyświetlacza LCD.

Teraz, gdy jesteś gotowy z obudową na Raspberry Pi, możesz zacząć od obudowy na wyświetlacz LCD. Wydrukowałem w 3D obudowę mojego wyświetlacza LCD, ponieważ znalazłem obudowę online pod tym linkiem. Musiałem tylko trochę zmienić wysokość obudowy. Jeśli uważasz, że rysunek jest dobry, możesz wyeksportować pliki i rozpocząć drukowanie. Jeśli nie wiesz, jak drukować w 3D, możesz skorzystać z tej instrukcji, jak drukować w 3D za pomocą fusion 360.

Konstrukcja SODAQ MBili

Tak naprawdę nie zrobiłem obudowy do płyty SODAQ Mbili. Użyłem pleksi do umieszczenia moich komponentów bez obudowy wokół konstrukcji. Jeśli chcesz to zrobić również, możesz wykonać następujące kroki:

  1. Podpisz pleksi z wymiarami tablicy SODAQ Mbili. Wymiary to: 85mm X 56mm
  2. Wytnij pleksi za pomocą wyrzynarki.
  3. Umieść elementy elektroniczne na plexi i zaznacz otwory ołówkiem.
  4. Wywierć otwory, które właśnie podpisałeś, oraz otwory na wsporniki wiertłem 3,5 mm.
  5. Zamontuj wszystkie elementy elektroniczne na pleksi za pomocą śrub i nakrętek 3M 10mm.
  6. Ostatnim krokiem jest zamontowanie plexi nad płytą Mbili. Możesz to zrobić za pomocą dystansów, ale użyłem dwóch śrub 3M 50mm i 8 nakrętek 3M do zamontowania pleksi nad płytą.

Zalecana: