- Wymagane składniki:
- Moduł GPS i jego działanie:
- Moduł GSM:
- Akcelerometr:
- Objaśnienie obwodu:
- Objaśnienie robocze:
- Objaśnienie programowania:
W naszych poprzednich samouczkach dowiedzieliśmy się, jak połączyć moduł GPS z komputerem, jak zbudować zegar Arduino GPS i jak śledzić pojazd za pomocą GSM i GPS. Tutaj, w ramach tego projektu, zamierzamy zbudować oparty na Arduino system ostrzegania o wypadkach pojazdów, wykorzystujący GPS, GSM i akcelerometr. Akcelerometr wykrywa nagłą zmianę w osiach pojazdu, a moduł GSM przesyła na Twój Telefon komórkowy komunikat ostrzegawczy z informacją o miejscu wypadku. Lokalizacja wypadku przesyłana jest w postaci linku do Google Map, wyprowadzonego z szerokości i długości geograficznej z modułu GPS. Wiadomość zawiera również prędkość pojazdu w węzłach. Zobacz wideo demonstracyjnena końcu. Ten projekt ostrzegania o wypadku samochodowym może być również używany jako system śledzenia i wiele więcej, po prostu wprowadzając kilka zmian w sprzęcie i oprogramowaniu.
Wymagane składniki:
- Arduino Uno
- Moduł GSM (SIM900A)
- Moduł GPS (SIM28ML)
- Akcelerometr (ADXL335)
- Wyświetlacz LCD 16x2
- Zasilacz
- Podłączanie przewodów
- 10 K-POT
- Płytka prototypowa lub PCB
- Zasilacz 12v 1amp
Zanim przejdziemy do projektu, omówimy GPS, GSM i akcelerometr.
Moduł GPS i jego działanie:
GPS oznacza Global Positioning System i służy do wykrywania szerokości i długości geograficznej dowolnego miejsca na Ziemi, z dokładnym czasem UTC (Universal Time Coordinated). Moduł GPS służy do śledzenia lokalizacji wypadku w naszym projekcie. To urządzenie odbiera współrzędne z satelity co każdą sekundę, wraz z godziną i datą. Wcześniej wyodrębniliśmy ciąg $ GPGGA w systemie śledzenia pojazdów, aby znaleźć współrzędne szerokości i długości geograficznej.
Moduł GPS wysyła dane związane ze śledzeniem pozycji w czasie rzeczywistym, a tak wiele danych w formacie NMEA (patrz zrzut ekranu poniżej). Format NMEA składa się z kilku zdań, w których potrzebujemy tylko jednego zdania. To zdanie zaczyna się od $ GPGGA i zawiera współrzędne, czas i inne przydatne informacje. Ten GPGGA jest nazywany danymi poprawek globalnego systemu pozycjonowania. Dowiedz się więcej o sentencjach NMEA i czytaniu danych GPS tutaj.
Możemy wyodrębnić współrzędne z ciągu $ GPGGA, licząc przecinki w ciągu. Załóżmy, że znajdujesz ciąg $ GPGGA i zapisujesz go w tablicy, wtedy szerokość geograficzną można znaleźć po dwóch przecinkach, a długość geograficzną po czterech przecinkach. Teraz tę szerokość i długość geograficzną można umieścić w innych tablicach.
Poniżej znajduje się ciąg $ GPGGA wraz z opisem:
$ GPGGA, 104534.000, 7791.0381, N, 06727.4434, E, 1,08,0.9,510,4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, szerokość, N, długość, E, FQ, NOS, HDP, wysokość, M, wysokość, M,, dane sumy kontrolnej
Identyfikator |
Opis |
$ GPGGA |
Dane poprawki systemu Global Positioning |
HHMMSS.SSS |
Czas w formacie godzina minuta sekundy i milisekundy. |
Szerokość |
Szerokość geograficzna (współrzędna) |
N |
Kierunek N = północ, S = południe |
Długość geograficzna |
Długość geograficzna (współrzędna) |
mi |
Kierunek E = wschód, W = zachód |
FQ |
Popraw dane dotyczące jakości |
NOS |
Liczba używanych satelitów |
HDP |
Poziome osłabienie precyzji |
Wysokość |
Wysokość (metry nad poziomem morza) |
M |
Metr |
Wysokość |
Wysokość |
Suma kontrolna |
Dane sumy kontrolnej |
Moduł GSM:
SIM900 to kompletny czterozakresowy moduł GSM / GPRS, który może być łatwo wbudowany i używany przez klienta lub hobbysty. Moduł GSM SIM900 zapewnia interfejs zgodny ze standardem branżowym. SIM900 zapewnia wydajność GSM / GPRS 850/900/1800 / 1900MHz dla połączeń głosowych, SMS, danych przy niskim zużyciu energii. Jest łatwo dostępny na rynku.
- SIM900 zaprojektowany przy użyciu jednoukładowego procesora integrującego rdzeń AMR926EJ-S
- Czterozakresowy moduł GSM / GPRS o niewielkich rozmiarach.
- Włączony GPRS
Komenda AT:
AT oznacza UWAGA. Polecenie to służy do sterowania modułem GSM. Istnieje kilka poleceń do nawiązywania połączeń i przesyłania wiadomości, których używaliśmy w wielu naszych poprzednich projektach GSM z Arduino. Do testowania modułu GSM wykorzystaliśmy polecenie AT. Po otrzymaniu komendy AT moduł GSM odpowiedz OK. Oznacza to, że moduł GSM działa poprawnie. Poniżej znajduje się kilka poleceń AT, których użyliśmy w tym projekcie:
ATE0 Dla wyłączenia echa AT + CNMI = 2,2,0,0,0
(Aby dowiedzieć się więcej o module GSM, sprawdź nasze różne projekty GSM z różnymi mikrokontrolerami tutaj)
Akcelerometr:
Pin Opis akcelerometru:
- Zasilanie Vcc 5 V powinno być podłączone do tego pinu.
- X-OUT Ten pin daje wyjście analogowe w kierunku x
- Y-OUT Ten styk daje wyjście analogowe w kierunku y
- Z-OUT Ten styk daje wyjście analogowe w kierunku z
- GND Ground
- ST Ten kołek służy do ustawiania czułości czujnika
Sprawdź także nasze inne projekty wykorzystujące Akcelerometr: Gra w ping ponga przy użyciu Arduino i robota sterowanego gestami ręki opartego na akcelerometrze.
Objaśnienie obwodu:
Połączenia obwodów tego projektu systemu ostrzegania o wypadkach pojazdów są proste. Tutaj pin Tx modułu GPS jest bezpośrednio połączony z cyfrowym pinem nr 10 Arduino. Używając tutaj Software Serial Library, zezwoliliśmy na komunikację szeregową na pinach 10 i 11 i zrobiliśmy je odpowiednio Rx i Tx i zostawiliśmy otwarty pin Rx modułu GPS. Domyślnie pin 0 i 1 Arduino są używane do komunikacji szeregowej, ale korzystając z biblioteki SoftwareSerial, możemy zezwolić na komunikację szeregową na innych pinach cyfrowych Arduino. Do zasilania modułu GPS używane jest zasilanie 12 V.
Piny Tx i Rx modułu GSM są bezpośrednio podłączone do pinów D2 i D3 Arduino. W przypadku interfejsu GSM wykorzystaliśmy również programową bibliotekę szeregową. Moduł GSM jest również zasilany napięciem 12 V. Styki danych opcjonalnego wyświetlacza LCD D4, D5, D6 i D7 są podłączone do styku nr 6, 7, 8 i 9 Arduino. Pin rozkazowy RS i EN LCD jest połączony z pinami nr 4 i 5 Arduino, a pin RW jest bezpośrednio połączony z masą. Potencjometr służy również do ustawiania kontrastu lub jasności wyświetlacza LCD.
W tym systemie dodano akcelerometr do wykrywania wypadku, a jego piny wyjściowe ADC na osi x, y i z są bezpośrednio podłączone do pinów A1, A2 i A3 Arduino ADC.
Objaśnienie robocze:
W tym projekcie Arduino służy do sterowania całym procesem za pomocą odbiornika GPS i modułu GSM. Odbiornik GPS służy do wykrywania współrzędnych pojazdu, moduł GSM służy do wysyłania alertowego SMS-a ze współrzędnymi i linkiem do Google Map. Akcelerometr czyli ADXL335 służy do wykrywania wypadku lub nagłej zmiany w dowolnej osi. Opcjonalny wyświetlacz LCD 16x2 służy również do wyświetlania komunikatów o stanie lub współrzędnych. Użyliśmy modułu GPS SIM28ML i modułu GSM SIM900A.
Gdy jesteśmy gotowi z naszym sprzętem po zaprogramowaniu, możemy go zainstalować w naszym pojeździe i zasilić. Teraz, gdy zdarzy się wypadek, samochód przechyla się, a akcelerometr zmienia wartości osi. Wartości te odczytywane są przez Arduino i sprawdzają, czy na którejś z osi nie ma żadnych zmian. Jeśli nastąpi jakakolwiek zmiana, Arduino odczytuje współrzędne, wyodrębniając ciąg $ GPGGA z danych modułu GPS (działanie GPS wyjaśniono powyżej) i wysyła SMS-a na zdefiniowany numer do policji, karetki lub członka rodziny ze współrzędnymi miejsca wypadku. Wiadomość zawiera również link do mapy Google do miejsca wypadku, dzięki czemu można łatwo śledzić lokalizację. Po otrzymaniu wiadomości wystarczy kliknąć link i przekierujemy do mapy Google i wtedy możemy zobaczyć dokładną lokalizację pojazdu. Prędkość pojazdu w węzłach(1,852 KPH), jest również wysyłany w wiadomości SMS i wyświetlany na panelu LCD. Sprawdź pełne wideo demonstracyjne poniżej projektu.
Tutaj w tym projekcie możemy ustawić czułość akcelerometru, umieszczając w kodzie wartości min i max.
Tutaj w demo zastosowano podane wartości:
# zdefiniować minVal -50 # zdefiniować MaxVal 50
Ale aby uzyskać lepsze wyniki, możesz użyć 200 zamiast 50 lub ustawić zgodnie z wymaganiami.
Objaśnienie programowania:
Kompletny program został podany poniżej w sekcji Kod; tutaj krótko wyjaśniamy jego różne funkcje.
Najpierw włączyliśmy wszystkie wymagane biblioteki lub pliki nagłówkowe i zadeklarowaliśmy różne zmienne do obliczeń i tymczasowego przechowywania danych.
Następnie stworzyliśmy funkcję void initModule (String cmd, char * res, int t) do inicjalizacji modułu GSM i sprawdzania jego odpowiedzi za pomocą poleceń AT.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); opóźnienie (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); opóźnienie (t); powrót; } else {Serial.println ("Błąd"); }} opóźnienie (t); }}
Następnie w funkcji void setup () zainicjowaliśmy sprzętową i programową komunikację szeregową, LCD, GPS, moduł GSM i akcelerometr.
void setup () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("Ostrzeżenie przed wypadkiem"); lcd.setCursor (0,1); lcd.print ("System"); opóźnienie (2000); lcd.clear ();…………………
Proces kalibracji akcelerometru odbywa się również w pętli konfiguracji . W tym celu pobraliśmy kilka próbek, a następnie znaleźliśmy średnie wartości dla osi x, osi y i osi z. I przechowuj je w zmiennej. Następnie użyliśmy tych przykładowych wartości do odczytania zmian w osi akcelerometru podczas przechyłu pojazdu (wypadek).
lcd.print ("Kalibracja"); lcd.setCursor (0,1); lcd.print ("Acceleromiter"); dla (int i = 0; i
Następnie w funkcji void loop () odczytaliśmy wartości osi akcelerometru i wykonaliśmy obliczenia w celu wyodrębnienia zmian za pomocą próbek, które są pobierane w kalibracji. Teraz, jeśli jakiekolwiek zmiany są mniej więcej niż zdefiniowany poziom, Arduino wysyła wiadomość na predefiniowany numer.
void loop () {int value1 = analogRead (x); int wartość2 = analogRead (y); int value3 = analogRead (z); int xValue = xsample-value1; int yValue = ysample-value2; int zValue = zsample-value3; Serial.print ("x ="); Serial.println (xValue); Serial.print ("y ="); Serial.println (yValue); Serial.print ("z ="); Serial.println (zValue);…………………
Tutaj stworzyliśmy również inną funkcję dla różnych poczwarek, takich jak void gpsEvent () do pobierania współrzędnych GPS, void koordynate2dec () do wyodrębniania współrzędnych z ciągu GPS i konwertowania ich na wartości dziesiętne, void show_coordinate () do wyświetlania wartości na monitorze szeregowym i LCD, a na końcu nieważne Send () do wysyłania alertów SMS na zdefiniowany numer.
Pełny kod i film demonstracyjny znajduje się poniżej, możesz sprawdzić wszystkie funkcje w kodzie.