- Erforderliche Komponenten:
- GPS-Modul und seine Funktionsweise:
- GSM-Modul:
- Beschleunigungsmesser:
- Schaltungserklärung:
- Arbeitserklärung:
- Programmiererklärung:
In unseren vorherigen Tutorials haben wir gelernt, wie man ein GPS-Modul mit einem Computer verbindet, wie man eine Arduino GPS-Uhr baut und wie man ein Fahrzeug mit GSM und GPS verfolgt. Hier in diesem Projekt werden wir ein Arduino-basiertes Fahrzeugunfallwarnsystem mit GPS, GSM und Beschleunigungsmesser bauen. Der Beschleunigungsmesser erkennt die plötzliche Änderung der Fahrzeugachsen und das GSM-Modul sendet die Warnmeldung mit dem Unfallort auf Ihrem Mobiltelefon. Der Unfallort wird in Form eines Google Map-Links gesendet, der aus dem Breiten- und Längengrad des GPS-Moduls abgeleitet wird. Die Nachricht enthält auch die Geschwindigkeit des Fahrzeugs in Knoten. Siehe das Demo-VideoAm Ende. Dieses Projekt zur Warnung vor Fahrzeugunfällen kann auch als Verfolgungssystem und vieles mehr verwendet werden, indem nur wenige Änderungen an Hardware und Software vorgenommen werden.
Erforderliche Komponenten:
- Arduino Uno
- GSM-Modul (SIM900A)
- GPS-Modul (SIM28ML)
- Beschleunigungsmesser (ADXL335)
- 16x2 LCD
- Energieversorgung
- Kabel anschließen
- 10 K-POT
- Steckbrett oder Leiterplatte
- Stromversorgung 12V 1amp
Bevor wir zum Projekt gehen, werden wir uns mit GPS, GSM und Beschleunigungsmesser befassen.
GPS-Modul und seine Funktionsweise:
GPS steht für Global Positioning System und wird verwendet, um den Breiten- und Längengrad eines beliebigen Ortes auf der Erde mit der genauen UTC-Zeit (Universal Time Coordinated) zu erfassen. Das GPS-Modul wird verwendet, um den Unfallort in unserem Projekt zu verfolgen. Dieses Gerät empfängt die Koordinaten vom Satelliten für jede Sekunde mit Uhrzeit und Datum. Wir haben zuvor eine $ GPGGA- Zeichenfolge im Fahrzeugverfolgungssystem extrahiert, um die Breiten- und Längengradkoordinaten zu ermitteln.
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
- Quadband GSM / GPRS-Modul in kleiner Größe.
- GPRS aktiviert
AT-Befehl:
AT bedeutet ACHTUNG. Dieser Befehl dient zur Steuerung des GSM-Moduls. 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
(Um mehr über das GSM-Modul zu erfahren, lesen Sie hier unsere verschiedenen GSM-Projekte mit verschiedenen Mikrocontrollern.)
Beschleunigungsmesser:
Pin Beschreibung des Beschleunigungsmessers:
- Die Vcc 5 Volt Versorgung sollte an diesem Pin angeschlossen werden.
- X-OUT Dieser Pin gibt einen Analogausgang in x-Richtung
- Y-OUT Dieser Pin gibt einen Analogausgang in y-Richtung
- Z-OUT Dieser Pin gibt einen Analogausgang in z-Richtung
- GND Ground
- ST Dieser Pin dient zum Einstellen der Empfindlichkeit des Sensors
Überprüfen Sie auch unsere anderen Projekte mit Accelerometer: Ping Pong Game mit Arduino und Accelerometer Based Hand Gesture Controlled Robot.
Schaltungserklärung:
Die Schaltkreisverbindungen dieses Fahrzeugunfall-Warnsystemprojekts sind einfach. Hier ist der Tx-Pin des GPS-Moduls direkt mit dem digitalen Pin Nummer 10 von Arduino verbunden. Durch die Verwendung der Software Serial Library haben wir die serielle Kommunikation an Pin 10 und 11 zugelassen, sie auf Rx bzw. Tx eingestellt und den Rx-Pin des GPS-Moduls offen gelassen. Standardmäßig werden Pin 0 und 1 von Arduino für die serielle Kommunikation verwendet. Mithilfe der SoftwareSerial-Bibliothek können wir jedoch die serielle Kommunikation über andere digitale Pins des Arduino zulassen. Die 12-Volt-Versorgung dient zur Stromversorgung des GPS-Moduls.
Die Tx- und Rx-Pins des GSM-Moduls sind direkt mit Pin D2 und D3 von Arduino verbunden. Für die GSM-Schnittstelle haben wir hier auch die serielle Softwarebibliothek verwendet. Das GSM-Modul wird auch mit 12 V versorgt. Die Datenpins D4, D5, D6 und D7 eines optionalen LCD sind mit Pin 6, 7, 8 und 9 von Arduino verbunden. Der Befehlspin RS und EN des LCD sind mit Pin 4 und 5 von Arduino verbunden, und der RW-Pin ist direkt mit Masse verbunden. Ein Potentiometer wird auch zum Einstellen des Kontrasts oder der Helligkeit des LCD verwendet.
In diesem System ist ein Beschleunigungsmesser zur Erkennung eines Unfalls hinzugefügt, und seine ADC-Ausgangspins auf der x-, y- und z-Achse sind direkt mit den Arduino-ADC-Pins A1, A2 und A3 verbunden.
Arbeitserklärung:
In diesem Projekt wird Arduino verwendet, um den gesamten Prozess mit einem GPS-Empfänger und einem GSM-Modul zu steuern. Der GPS-Empfänger dient zur Erkennung der Koordinaten des Fahrzeugs, das GSM-Modul zum Senden der Alarm-SMS mit den Koordinaten und dem Link zu Google Map. Der Beschleunigungsmesser ADXL335 dient zur Erkennung von Unfällen oder plötzlichen Änderungen in einer beliebigen Achse. Ein optionales 16x2-LCD wird auch zum Anzeigen von Statusmeldungen oder Koordinaten verwendet. Wir haben das GPS-Modul SIM28ML und das GSM-Modul SIM900A verwendet.
Wenn wir nach der Programmierung mit unserer Hardware fertig sind, können wir sie in unser Fahrzeug einbauen und einschalten. Jetzt, wenn es einen Unfall gibt, wird das Auto gekippt und der Beschleunigungsmesser ändert seine Achsenwerte. Diese Werte werden von Arduino gelesen und prüfen, ob Änderungen an einer Achse auftreten. Wenn sich etwas ändert, liest Arduino die Koordinaten, indem er den $ GPGGA-String aus den GPS-Moduldaten extrahiert (GPS-Funktion wird oben erläutert) und sendet eine SMS an die vordefinierte Nummer an die Polizei, den Krankenwagen oder das Familienmitglied mit den Standortkoordinaten des Unfallortes. Die Nachricht enthält auch einen Google Map-Link zum Unfallort, sodass der Ort leicht verfolgt werden kann. Wenn wir die Nachricht erhalten, müssen wir nur auf den Link klicken und werden zur Google-Karte weitergeleitet. Dann können wir den genauen Standort des Fahrzeugs sehen. Fahrzeuggeschwindigkeit in Knoten(1,852 km / h) wird ebenfalls in der SMS gesendet und auf dem LCD-Bildschirm angezeigt. Überprüfen Sie das vollständige Demo-Video unter dem Projekt.
Hier in diesem Projekt können wir die Empfindlichkeit des Beschleunigungsmessers einstellen, indem wir den Min- und Max-Wert in den Code einfügen.
Hier in der Demo wurden vorgegebene Werte verwendet:
#define minVal -50 #define MaxVal 50
Für bessere Ergebnisse können Sie jedoch 200 anstelle von 50 verwenden oder entsprechend Ihren Anforderungen einstellen.
Programmiererklärung:
Das vollständige Programm finden Sie weiter unten im Abschnitt Code. Hier erklären wir kurz die verschiedenen Funktionen.
Zuerst haben wir alle erforderlichen Bibliotheken oder Header-Dateien aufgenommen und verschiedene Variablen für Berechnungen und das temporäre Speichern von Daten deklariert.
Danach haben wir eine Funktion void initModule (String cmd, char * res, int t) erstellt , um das GSM-Modul zu initialisieren und seine Antwort mithilfe von AT-Befehlen zu überprüfen.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); Verzögerung (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); Verzögerung (t); Rückkehr; } else {Serial.println ("Fehler"); }} delay (t); }}
Danach haben wir in der Funktion void setup () die serielle Hardware- und Software-Kommunikation, LCD, GPS, GSM-Modul und Beschleunigungsmesser initialisiert.
void setup () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("Unfallwarnung"); lcd.setCursor (0,1); lcd.print ("System"); Verzögerung (2000); lcd.clear ();…………………
Der Kalibrierungsprozess des Beschleunigungsmessers erfolgt ebenfalls in der Setup- Schleife. In diesem haben wir einige Proben genommen und dann die Durchschnittswerte für die x-Achse, die y-Achse und die z-Achse gefunden. Und speichern Sie sie in einer Variablen. Dann haben wir diese Beispielwerte verwendet, um Änderungen in der Beschleunigungsmesserachse zu lesen, wenn das Fahrzeug kippt (Unfall).
lcd.print ("Callibrating"); lcd.setCursor (0,1); lcd.print ("Beschleuniger"); für (int i = 0; i
Danach haben wir in der Funktion void loop () die Werte der Beschleunigungsmesserachse gelesen und eine Berechnung durchgeführt, um Änderungen mithilfe von Proben zu extrahieren, die bei der Kalibrierung entnommen wurden. Wenn nun Änderungen mehr oder weniger als die definierte Ebene sind, sendet Arduino eine Nachricht an die vordefinierte Nummer.
void loop () {int value1 = analogRead (x); int value2 = 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);…………………
Hier haben wir auch eine andere Funktion für verschiedene Puposen erstellt, wie void gpsEvent () zum Abrufen von GPS-Koordinaten, void Koordinate2dec () zum Extrahieren von Koordinaten aus der GPS-Zeichenfolge und zum Konvertieren in Dezimalwerte, void show_coordinate () zum Anzeigen von Werten über den seriellen Monitor und LCD und schließlich die Leere Send () zum Senden von Alarm-SMS an die vordefinierte Nummer.
Der vollständige Code und das Demo-Video sind unten angegeben. Sie können alle Funktionen im Code überprüfen.