- Vereiste componenten:
- GPS-module en zijn werking:
- GSM-module:
- Versnellingsmeter:
- Circuit uitleg:
- Werkende uitleg:
- Programmering Toelichting:
In onze vorige tutorials hebben we geleerd hoe je een GPS-module met een computer kunt verbinden, hoe je een Arduino GPS-klok kunt bouwen en hoe je een voertuig kunt volgen met behulp van GSM en GPS. Hier in dit project gaan we een op Arduino gebaseerd waarschuwingssysteem voor auto-ongelukken bouwen met behulp van GPS, GSM en accelerometer. Accelerometer detecteert de plotselinge verandering in de assen van het voertuig en de GSM-module stuurt een waarschuwingsbericht op uw mobiele telefoon met de locatie van het ongeval. De locatie van het ongeval wordt verzonden in de vorm van een Google Map-link, afgeleid van de lengte- en breedtegraad van de GPS-module. Het bericht bevat ook de snelheid van het voertuig in knopen. Zie de demovideoaan het einde. Dit waarschuwingsproject voor voertuigongevallen kan ook worden gebruikt als een volgsysteem en nog veel meer, door slechts enkele wijzigingen in hardware en software aan te brengen.
Vereiste componenten:
- Arduino Uno
- GSM-module (SIM900A)
- GPS-module (SIM28ML)
- Versnellingsmeter (ADXL335)
- 16x2 LCD
- Stroomvoorziening
- Verbindingsdraden
- 10 K-POT
- Breadboard of printplaat
- Voeding 12v 1amp
Voordat we naar Project gaan, zullen we het hebben over GPS, GSM en Accelerometer.
GPS-module en zijn werking:
GPS staat voor Global Positioning System en wordt gebruikt om de lengte- en breedtegraad van elke locatie op aarde te detecteren, met exacte UTC-tijd (Universal Time Coordinated). GPS-module wordt gebruikt om de locatie van het ongeval in ons project te volgen. Dit apparaat ontvangt voor elke seconde de coördinaten van de satelliet, met tijd en datum. We hebben eerder de $ GPGGA- string in het voertuigvolgsysteem geëxtraheerd om de lengte- en breedtegraadcoördinaten te vinden.
De GPS-module verzendt de gegevens met betrekking tot het volgen van de positie in realtime, en het verzendt zoveel gegevens in NMEA-formaat (zie de onderstaande schermafbeelding). Het NMEA-formaat bestaat uit meerdere zinnen, waarin we maar één zin nodig hebben. Deze zin begint vanaf $ GPGGA en bevat de coördinaten, tijd en andere nuttige informatie. Deze GPGGA wordt verwezen naar Global Positioning System Fix Data. Lees hier meer over NMEA-zinnen en het lezen van GPS-gegevens.
We kunnen coördinaten uit de tekenreeks $ GPGGA halen door de komma's in de tekenreeks te tellen. Stel dat u de tekenreeks $ GPGGA vindt en deze in een array opslaat, dan vindt u Latitude na twee komma's en vindt u Longitude na vier komma's. Nu kunnen deze lengte- en breedtegraad in andere arrays worden geplaatst.
Hieronder staat de $ GPGGA- string, samen met de beschrijving:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43,9, M`` * 47 $ GPGGA, HHMMSS.SSS, breedtegraad, N, lengtegraad, E, FQ, NOS, HDP, hoogte, M, hoogte, M,, checksum data
ID |
Omschrijving |
$ GPGGA |
Gegevens van het Global Positioning-systeem |
HHMMSS.SSS |
Tijd in uur minuten seconden en milliseconden formaat. |
Breedtegraad |
Breedtegraad (coördinaat) |
N |
Richting N = Noord, S = Zuid |
Lengtegraad |
Lengtegraad (coördinaat) |
E. |
Richting E = Oost, W = West |
FQ |
Kwaliteitsgegevens repareren |
NOS |
Aantal gebruikte satellieten |
HDP |
Horizontale verdunning van precisie |
Hoogte |
Hoogte (meter boven zeeniveau) |
M. |
Meter |
Hoogte |
Hoogte |
Checksum |
Checksum-gegevens |
GSM-module:
De SIM900 is een complete quad-band GSM / GPRS-module die eenvoudig kan worden ingebed door de klant of hobbyist. SIM900 GSM-module biedt een interface volgens industriestandaard. SIM900 levert GSM / GPRS 850/900/1800/1900 MHz-prestaties voor spraak, sms, data met een laag stroomverbruik. Het is gemakkelijk verkrijgbaar op de markt.
- SIM900 ontworpen met behulp van een processor met één chip die de AMR926EJ-S-kern integreert
- Kleine quad-band GSM / GPRS-module.
- GPRS ingeschakeld
AT Commando:
AT betekent AANDACHT. Dit commando wordt gebruikt om de GSM-module te bedienen. Er zijn enkele commando's voor bellen en berichten die we in veel van onze eerdere GSM-projecten met Arduino hebben gebruikt. Voor het testen van de GSM-module hebben we het AT-commando gebruikt. Reageer na ontvangst van AT Command GSM-module met OK. Het betekent dat de GSM-module goed werkt. Hieronder staan enkele AT-opdrachten die we hier in dit project hebben gebruikt:
ATE0 Voor echo uit AT + CNMI = 2,2,0,0,0
(Voor meer informatie over de GSM-module, bekijk hier onze verschillende GSM-projecten met verschillende microcontrollers)
Versnellingsmeter:
Pin Beschrijving van accelerometer:
- Vcc 5 volt voeding moet op deze pin worden aangesloten.
- X-OUT Deze pin geeft een analoge uitgang in x-richting
- Y-OUT Deze pin geeft een analoge uitgang in y-richting
- Z-OUT Deze pin geeft een analoge uitgang in z-richting
- GND Aarde
- ST Deze pin wordt gebruikt om de gevoeligheid van de sensor in te stellen
Bekijk ook onze andere projecten met Accelerometer: Ping Pong Game met Arduino en Accelerometer Based Hand Gesture Controlled Robot.
Circuit uitleg:
Circuitverbindingen van dit project voor waarschuwingssysteem voor voertuigongevallen zijn eenvoudig. Hier is de Tx-pin van de GPS-module rechtstreeks verbonden met digitale pin nummer 10 van Arduino. Door hier Software Serial Library te gebruiken, hebben we seriële communicatie op pin 10 en 11 toegestaan en ze respectievelijk Rx en Tx gemaakt en de Rx-pin van de GPS-module opengelaten. Standaard worden pin 0 en 1 van Arduino gebruikt voor seriële communicatie, maar door de SoftwareSerial-bibliotheek te gebruiken, kunnen we seriële communicatie op andere digitale pinnen van de Arduino toestaan. Er wordt 12 volt voeding gebruikt om de GPS-module van stroom te voorzien.
De Tx- en Rx-pinnen van de GSM-module zijn rechtstreeks verbonden met pin D2 en D3 van Arduino. Voor GSM-interfacing hebben we hier ook gebruik gemaakt van de seriële softwarebibliotheek. GSM-module wordt ook gevoed door 12v-voeding. De datapinnen D4, D5, D6 en D7 van een optionele LCD zijn verbonden met pin 6, 7, 8 en 9 van Arduino. Commandopin RS en EN van LCD zijn verbonden met pin nummer 4 en 5 van Arduino en RW pin is direct verbonden met aarde. Een Potentiometer wordt ook gebruikt voor het instellen van contrast of helderheid van LCD.
In dit systeem is een versnellingsmeter toegevoegd voor het detecteren van een ongeval en de x-, y- en z-as ADC-uitgangspennen zijn rechtstreeks verbonden met Arduino ADC-pen A1, A2 en A3.
Werkende uitleg:
In dit project wordt Arduino gebruikt om het hele proces te besturen met een GPS-ontvanger en GSM-module. GPS-ontvanger wordt gebruikt voor het detecteren van coördinaten van het voertuig, GSM-module wordt gebruikt voor het verzenden van de waarschuwings-sms met de coördinaten en de link naar Google Map. Accelerometer, namelijk ADXL335, wordt gebruikt voor het detecteren van een ongeluk of plotselinge verandering in een as. En een optioneel 16x2 LCD-scherm wordt ook gebruikt voor het weergeven van statusberichten of coördinaten. We hebben GPS-module SIM28ML en GSM-module SIM900A gebruikt.
Als we na het programmeren klaar zijn met onze hardware, kunnen we deze in ons voertuig installeren en opstarten. Telkens wanneer er een ongeval is, kantelt de auto en verandert de versnellingsmeter zijn aswaarden. Deze waarden worden gelezen door Arduino en controleert of er wijzigingen optreden in een as. Als er een verandering optreedt, leest Arduino de coördinaten door $ GPGGA String uit de GPS-modulegegevens te extraheren (GPS werkt hierboven uitgelegd) en een sms naar het vooraf gedefinieerde nummer naar de politie of ambulance of familielid te sturen met de locatiecoördinaten van de plaats van het ongeval. Het bericht bevat ook een Google Map-link naar de locatie van het ongeval, zodat die locatie gemakkelijk kan worden gevolgd. Wanneer we het bericht ontvangen, hoeven we alleen maar op de link te klikken en we zullen doorverwijzen naar de Google-kaart en dan kunnen we de exacte locatie van het voertuig zien. Snelheid van het voertuig, in knopen(1.852 KPH), wordt ook verzonden in de sms en weergegeven op het LCD-paneel. Bekijk de volledige demovideo onder het project.
Hier in dit project kunnen we de gevoeligheid van Accelerometer instellen door min en max waarde in de code te zetten.
Hier in de demo zijn gegeven waarden gebruikt:
#define minVal -50 #define MaxVal 50
Maar voor betere resultaten kunt u 200 gebruiken in plaats van 50, of kunt u instellen op basis van uw behoefte.
Programmering Toelichting:
Het volledige programma wordt hieronder gegeven in de sectie Code; hier lichten we de verschillende functies in het kort toe.
Eerst hebben we alle vereiste bibliotheken of headers-bestanden opgenomen en verschillende variabelen gedeclareerd voor berekeningen en tijdelijke opslag van gegevens.
Hierna hebben we een functie void initModule (String cmd, char * res, int t) gemaakt om de GSM-module te initialiseren en zijn reactie te controleren met behulp van AT-opdrachten.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); vertraging (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); vertraging (t); terugkeren; } else {Serial.println ("Fout"); }} vertraging (t); }}
Hierna hebben we in de void setup () -functie de seriële communicatie van hardware en software, LCD, GPS, GSM-module en versnellingsmeter geïnitialiseerd.
leegte setup () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("Ongevalwaarschuwing"); lcd.setCursor (0,1); lcd.print ("Systeem"); vertraging (2000); lcd.clear ();…………………
Het kalibratieproces van de versnellingsmeter wordt ook uitgevoerd in de setup- lus. Hierin hebben we enkele voorbeelden genomen en vervolgens de gemiddelde waarden voor de x-as, y-as en z-as gevonden. En bewaar ze in een variabele. Vervolgens hebben we deze voorbeeldwaarden gebruikt om veranderingen in de as van de versnellingsmeter af te lezen wanneer het voertuig kantelt (ongeval).
lcd.print ("Callibreren"); lcd.setCursor (0,1); lcd.print ("Acceleromiter"); voor (int i = 0; i
Hierna hebben we in de void loop () -functie de aswaarden van de versnellingsmeter gelezen en een berekening gemaakt om veranderingen te extraheren met behulp van monsters die zijn genomen in Calibration. Als er nu wijzigingen zijn meer of minder dan het gedefinieerde niveau, stuurt Arduino een bericht naar het vooraf gedefinieerde nummer.
void loop () {int waarde1 = analogRead (x); int waarde2 = analogRead (y); int waarde3 = analogRead (z); int xValue = xsample-waarde1; int yValue = ysample-waarde2; int zValue = zsample-value3; Serial.print ("x ="); Serial.println (xValue); Serial.print ("y ="); Serial.println (yValue); Serial.print ("z ="); Serial.println (zValue);…………………
Hier hebben we ook een andere functie gemaakt voor verschillende puposes zoals void gpsEvent () om GPS-coördinaten te krijgen, void coordinate2dec () om coördinaten uit de GPS-string te extraheren en om te zetten in decimale waarden, void show_coordinate () voor het weergeven van waarden via seriële monitor en LCD, en tot slot de leegte Send () voor het verzenden van waarschuwings-sms naar het vooraf gedefinieerde nummer.
De volledige code en demovideo worden hieronder gegeven, u kunt alle functies in de code bekijken.