In früheren Tutorials haben wir gelernt, wie man ein GPS-Modul mit einem Computer verbindet und wie man ein Fahrzeug mit GSM und GPS verfolgt. Wir haben auch ein Fahrzeugunfall-Warnsystem mit Arduino und Beschleunigungsmesser gebaut. Hier bauen wir wieder das gleiche Projekt, aber dieses Mal werden ein MSP430-Launchpad und ein Vibrationssensor verwendet, um einen Fahrzeugunfall zu erkennen. In diesem Projekt wird daher auch über die Schnittstelle eines Vibrationssensors mit dem MSP430-Launchpad berichtet. Weitere MSP430-Projekte finden Sie hier.
Hier erkennt das Vibrationssensormodul die Vibration des Fahrzeugs und sendet ein Signal an das MSP430 Launchpad. Anschließend ruft der MSP430 Daten vom GPS-Modul ab und sendet sie per SMS über das GSM-Modul an das Mobiltelefon des Benutzers. Eine LED leuchtet auch als Unfallalarmsignal. Diese LED kann durch einen Alarm ersetzt werden. Der Ort des Unfalls wird in Form eines Google Map-Links gesendet, der aus dem Breiten- und Längengrad des GPS-Moduls abgeleitet wird. Siehe das Demo-Video am Ende.
Das GPS-Modul sendet die Daten zur Verfolgungsposition in Echtzeit und sendet so viele Daten im NMEA-Format (siehe Abbildung unten). Das NMEA-Format besteht aus mehreren Sätzen, in denen wir nur einen Satz benötigen. Dieser Satz beginnt bei $ GPGGA und enthält die Koordinaten, die Zeit und andere nützliche Informationen. Dieses GPGGA wird als Fixdaten für das globale Positionierungssystem bezeichnet. Erfahren Sie hier mehr über NMEA-Sätze und das Lesen von GPS-Daten.
Wir können die Koordinate aus der $ GPGGA-Zeichenfolge extrahieren, indem wir die Kommas in der Zeichenfolge zählen. Angenommen, Sie finden eine $ GPGGA-Zeichenfolge und speichern sie in einem Array. Dann wird Latitude nach zwei Kommas und Longitude nach vier Kommas gefunden. Dieser Breiten- und Längengrad kann nun in andere Arrays eingefügt werden.
Unten finden Sie den $ GPGGA- String mit seiner Beschreibung:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0,9,510,4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, Breitengrad, N, Längengrad, E, FQ, NOS, HDP, Höhe, M, Höhe, M,, Prüfsummen-Daten
Kennung |
Beschreibung |
$ GPGGA |
Fixdaten des Global Positioning Systems |
HHMMSS.SSS |
Zeit in Stunden, Minuten, Sekunden und Millisekunden. |
Breite |
Breitengrad (Koordinate) |
N. |
Richtung N = Nord, S = Süd |
Längengrad |
Längengrad (Koordinate) |
E. |
Richtung E = Ost, W = West |
FQ |
Qualitätsdaten korrigieren |
NOS |
Anzahl der verwendeten Satelliten |
HDP |
Horizontale Verdünnung der Präzision |
Höhe |
Höhe (Meter über dem Meeresspiegel) |
M. |
Meter |
Höhe |
Höhe |
Prüfsumme |
Prüfsummen-Daten |
GSM-Modul
Das SIM900 ist ein komplettes Quad-Band-GSM / GPRS-Modul, das von Kunden oder Hobbyisten problemlos verwendet werden kann. Das SIM900 GSM-Modul bietet eine Schnittstelle nach Industriestandard. SIM900 bietet GSM / GPRS 850/900/1800 / 1900MHz Leistung für Sprache, SMS, Daten mit geringem Stromverbrauch. Es ist leicht auf dem Markt erhältlich.
- SIM900 unter Verwendung eines Einzelchip-Prozessors mit integriertem AMR926EJ-S-Kern
- Quad-Band-GSM / GPRS-Modul in kleiner Größe.
- GPRS aktiviert
AT-Befehle
AT bedeutet ACHTUNG. Mit diesem Befehl wird das GSM-Modul gesteuert. Es gibt einige Befehle zum Aufrufen und Versenden von Nachrichten, die wir in vielen unserer vorherigen GSM-Projekte mit Arduino verwendet haben. Zum Testen des GSM-Moduls haben wir den AT-Befehl verwendet. Nach Erhalt des AT Command GSM-Moduls antworten Sie mit OK. Dies bedeutet, dass das GSM-Modul einwandfrei funktioniert. Nachfolgend einige AT-Befehle, die wir hier in diesem Projekt verwendet haben:
ATE0 Für Echo aus
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = "Handynummer"
>> Jetzt können wir unsere Nachricht schreiben
>> Nach dem Schreiben einer Nachricht
Strg + Z sendet einen Nachrichtenbefehl (26 in Dezimalzahl).
ENTER = 0x0d in HEX
(Um mehr über das GSM-Modul zu erfahren, lesen Sie hier unsere verschiedenen GSM-Projekte mit verschiedenen Mikrocontrollern.)
Vibrationssensormodul
In diesem MSP430 Accident Alert System- Projekt haben wir ein Vibrationssensormodul verwendet, das Vibrationen oder plötzliche Modulationen erkennt. Das Vibrationssensormodul liefert je nach Modul eine HIGH / LOW-Logik für den digitalen Ausgang. In unserem Fall haben wir ein aktives HIGH-Logikvibrationssensormodul verwendet. Dies bedeutet, dass der Mikrocontroller immer dann, wenn der Vibrationssensor Vibrationen erkennt, dem Mikrocontroller eine HIGH-Logik gibt.
Schaltungserklärung
Die Schaltkreisverbindungen dieses Fahrzeugunfall-Warnsystemprojekts sind einfach. Hier ist der Tx-Pin des GPS-Moduls direkt mit der digitalen Pin-Nummer P1_1 des MSP430 Launchpad (Hardware Serial) verbunden und 5 V werden zur Stromversorgung des GPS-Moduls verwendet. Durch die Verwendung der Software Serial Library haben wir die serielle Kommunikation an Pin P_6 und P1_7 zugelassen und sie auf Rx bzw. Tx eingestellt und mit dem GSM-Modul verbunden. Die 12-Volt-Versorgung dient zur Stromversorgung des GSM-Moduls. Der Vibrationssensor ist an P1_3 verbunden. Eine LED zeigt auch die Unfallerkennung an. Die restlichen Verbindungen sind im Schaltplan dargestellt.
Programmiererklärung
Die Programmierung für dieses Projekt ist mit Ausnahme des GPS-Teils einfach. Der vollständige Code wird am Ende des Projekts angegeben. Um den Code in MSP430 zu schreiben oder zu kompilieren, haben wir Energia IDE verwendet, die Arduino-kompatibel ist. Die meisten Arduino IDE-Funktionen können direkt in dieser Energia IDE verwendet werden.
Als erstes haben wir eine erforderliche Bibliothek und deklarierte PIN und Variablen aufgenommen.
#einschließen
Die angegebene Funktion wird zum Lesen des Vibrationssensorsignals verwendet. Diese Funktion filtert auch kleine oder falsche Vibrationen.
#define count_max 25 char SensorRead (int pin) // sw mit entprellen lesen { char count_low = 0, count_high = 0; do { delay (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) gibt LOW zurück; sonst gebe HIGH zurück; }}
Die folgende Funktion erkennt Vibrationen und ruft die Funktion gpsEvent () auf, um die GPS-Koordinate abzurufen, und ruft schließlich die Funktion Send () auf, um SMS zu senden.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Senden(); digitalWrite (LED, LOW); Verzögerung (2000); } }
Die angegebene Funktion ist dafür verantwortlich , GPS-Zeichenfolgen vom GPS-Modul abzurufen, die Koordinaten daraus zu extrahieren und sie in ein Grad-Dezimal-Format zu konvertieren.
void gpsEvent () { char gpsString; char test = "RMC"; i = 0; while (1) { while (Serial.available ()) // Serielle Eingangsdaten von GPS { char inChar = (char) Serial.read (); gpsString = inChar; // eingehende Daten vom GPS in der temporären Zeichenfolge speichern str i ++; if (i <4) { if (gpsString! = test) // auf richtigen String prüfen i = 0; }}
int grad = 0; Grad = gpsString-48; Grad * = 10; Grad + = 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; Breitengrad = ((Float-) Grad + Minute);
Schließlich wird die Funktion Send () verwendet, um die SMS an die Benutzernummer zu senden, die in diesen Teil des Codes eingefügt wird.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // Geben Sie Ihre Handynummer ein GSM.println ('"'); Verzögerung (500); // GSM.print ("Latitude:"); // GSM.println (Breitengrad); GSM.println ("Unfall passiert"); Verzögerung (500); // GSM.print ("longitude:"); // GSM.println (logitude); GSM.println ("Klicken Sie auf den Link, um den Standort anzuzeigen"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (Breitengrad 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); Verzögerung (4000); }}
Der vollständige Code und das Demo-Video sind unten angegeben. Sie können alle Funktionen im Code überprüfen.