W poprzednich samouczkach dowiedzieliśmy się, jak połączyć moduł GPS z komputerem i jak śledzić pojazd za pomocą GSM i GPS. Zbudowaliśmy również system ostrzegania o wypadkach samochodowych wykorzystujący Arduino i akcelerometr. Tutaj ponownie budujemy ten sam projekt, ale tym razem wyrzutnia MSP430 i czujnik wibracji zostaną wykorzystane do wykrywania wypadku samochodowego. Tak więc ten projekt będzie również mówił o połączeniu czujnika drgań z starterem MSP430. Więcej projektów MSP430 można znaleźć tutaj.
Tutaj moduł czujnika drgań wykrywa drgania pojazdu i wysyła sygnał do MSP430 Launchpad. Następnie MSP430 pobiera dane z modułu GPS i wysyła je na telefon komórkowy użytkownika za pomocą wiadomości SMS za pomocą modułu GSM. Dioda LED będzie się również świecić jako sygnał ostrzeżenia o wypadku, tę diodę LED można zastąpić alarmem. Lokalizacja wypadku przesyłana jest w postaci linku do Google Map, wyprowadzonego z szerokości i długości geograficznej z modułu GPS. Zobacz wideo demonstracyjne na końcu.
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
Komendy 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 Wyłączenie echa
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = „Numer telefonu komórkowego”
>> Teraz możemy napisać naszą wiadomość
>> Po napisaniu wiadomości
Ctrl + Z wysyła polecenie wiadomości (26 dziesiętnie).
ENTER = 0x0d w formacie HEX
(Aby dowiedzieć się więcej o module GSM, sprawdź nasze różne projekty GSM z różnymi mikrokontrolerami tutaj)
Moduł czujnika wibracji
W tym projekcie systemu ostrzegania przed wypadkami MSP430 użyliśmy modułu czujnika wibracji, który wykrywa wibracje lub nagłe modulacje. Moduł czujnika drgań zapewnia wyjście cyfrowe WYSOKA / NISKA logika w zależności od modułu. W naszym przypadku zastosowaliśmy aktywny moduł czujnika drgań z logiką HIGH. Oznacza to, że ilekroć czujnik drgań wykryje wibracje, poda mikrokontrolerowi logikę HIGH.
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 P1_1 Launchpad MSP430 (szeregowy sprzętowy), a 5v służy do zasilania modułu GPS. Używając tutaj Software Serial Library, zezwoliliśmy na komunikację szeregową na pinach P_6 i P1_7 i stworzyliśmy je odpowiednio Rx i Tx i podłączyliśmy do modułu GSM. Do zasilania modułu GSM służy zasilanie 12 V. Drgania czujnika jest połączony w P1_3. Dioda LED służy również do wskazania wykrywania wypadku. Pozostałe połączenia pokazano na schemacie połączeń.
Objaśnienie programowania
Programowanie dla tego projektu jest łatwe, z wyjątkiem części GPS. Kompletny kod jest podany na końcu projektu. Do napisania lub skompilowania kodu w MSP430 użyliśmy Energia IDE, które jest kompatybilne z Arduino. Większość funkcji Arduino IDE może być używana bezpośrednio w tym IDE Energia.
Przede wszystkim dołączyliśmy więc wymagane biblioteki oraz zadeklarowany pin i zmienne.
#zawierać
Podana funkcja służy do odczytu sygnału czujnika drgań. Ta funkcja filtruje również małe lub fałszywe wibracje.
#define count_max 25 char SensorRead (int pin) // odczyt sw z debounce { char count_low = 0, count_high = 0; do { opóźnienie (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } else { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); if (count_low> = count_max) return LOW; else return HIGH; }
Poniższa funkcja wykrywa wibracje i wywołuje funkcję gpsEvent (), aby uzyskać współrzędne GPS, a na koniec wywołać funkcję Send (), aby wysłać SMS.
void loop () { if (SensorRead (vibrSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Wysłać(); digitalWrite (led, LOW); opóźnienie (2000); } }
Podana funkcja jest odpowiedzialna za pobieranie ciągów GPS z modułu GPS, wyodrębnianie z nich współrzędnych i konwersję ich w formacie stopni-dziesiętne.
void gpsEvent () { char gpsString; char test = "RMC"; i = 0; while (1) { while (Serial.available ()) // Szeregowe przychodzące dane z GPS { char inChar = (char) Serial.read (); gpsString = inChar; // przechowuje przychodzące dane z GPS do tymczasowego ciągu str i ++; if (i <4) { if (gpsString! = test) // sprawdź poprawność łańcucha i = 0; }
stopień int = 0; stopień = gpsString-48; stopień * = 10; stopień + = gpsString-48; int minut_int = 0; minut_int = gpsString-48; minut_int * = 10; minut_int + = gpsString-48; int minut_dec = 0; minut_dec + = (gpsString-48) * 10000; minut_dec + = (gpsString-48) * 1000; minut_dec + = (gpsString-48) * 100; minut_dec + = (gpsString-48) * 10; minut_dec + = (gpsString-48); float minut = ((float) minut_int + ((float) minut_dec / 100000,0)) / 60,0; latitude = ((float) stopień + minuta);
I wreszcie funkcja Send () służy do wysłania SMS-a na numer użytkownika, który jest wstawiony w tej części kodu.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // wprowadź swój numer telefonu komórkowego GSM.println ('"'); opóźnienie (500); // GSM.print ("Latitude:"); // GSM.println (latitude); GSM.println ("Zdarzył się wypadek"); opóźnienie (500); // GSM.print ("longitude:"); // GSM.println (logitude); GSM.println („Kliknij łącze, aby zobaczyć lokalizację”); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (szerokość geograficzna, 6); GSM.print („+”); GSM.print (logitude, 6); GSM.write (26); opóźnienie (4000); }
Pełny kod i film demonstracyjny znajduje się poniżej, możesz sprawdzić wszystkie funkcje w kodzie.