In eerdere tutorials hebben we geleerd hoe u de GPS-module met de computer kunt verbinden en hoe u het voertuig kunt volgen met behulp van GSM en GPS. We hebben ook een waarschuwingssysteem voor voertuigongevallen gebouwd met Arduino en een versnellingsmeter. Hier bouwen we opnieuw hetzelfde project, maar deze keer zullen een MSP430-lanceerplatform en een trillingssensor worden gebruikt om een voertuigongeval te detecteren. Dit project zal dus ook vertellen over de koppeling van een trillingssensor met het MSP430-startpunt. U kunt hier meer MSP430-projecten vinden.
Hier detecteert de trillingssensormodule de trillingen van het voertuig en stuurt een signaal naar MSP430 Launchpad. Vervolgens haalt MSP430 gegevens op van de GPS-module en stuurt deze via sms naar de mobiele telefoon van de gebruiker met behulp van de GSM-module. Een LED zal ook oplichten als een ongevalwaarschuwingssignaal, deze LED kan worden vervangen door een alarm. 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. Zie de demovideo aan het einde.
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
- Quad-band GSM / GPRS-module in klein formaat.
- GPRS ingeschakeld
AT-opdrachten
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
BIJ D
AT + CMGF = 1
AT + CMGS = "Mobiel nummer"
>> Nu kunnen we ons bericht schrijven
>> Na het schrijven van een bericht
Ctrl + Z verzendt een berichtopdracht (26 in decimalen).
ENTER = 0x0d in HEX
(Voor meer informatie over de GSM-module, bekijk hier onze verschillende GSM-projecten met verschillende microcontrollers)
Trillingssensormodule
In dit MSP430 Accident Alert System- project hebben we een trillingssensormodule gebruikt die trillingen of plotselinge modulaties detecteert. Trillingssensormodule geeft een digitale output HOOG / LAAG logica afhankelijk van de module. In ons geval hebben we een actieve HIGH logic trillingssensormodule gebruikt. Het betekent dat wanneer de trillingssensor trillingen detecteert, deze HOGE logica aan de microcontroller zal geven.
Circuit uitleg
Circuitverbindingen van dit project voor waarschuwingssysteem voor voertuigongevallen zijn eenvoudig. Hier is de Tx-pin van de GPS-module rechtstreeks verbonden met de digitale pincode P1_1 van de MSP430 Launchpad (hardware Serial) en wordt 5v gebruikt om de GPS-module van stroom te voorzien. Door hier Software Serial Library te gebruiken, hebben we seriële communicatie op pin P_6 en P1_7 toegestaan, en ze respectievelijk Rx en Tx gemaakt en verbonden met de GSM-module. Er wordt 12 volt voeding gebruikt om de GSM-module van stroom te voorzien. De trilling sensor is aangesloten P1_3. Een LED wordt ook gebruikt om de ongevalsdetectie aan te geven. De overige verbindingen worden weergegeven in het schakelschema.
Uitleg over programmeren
Programmeren voor dit project is eenvoudig, behalve het GPS-gedeelte. De volledige code wordt aan het einde van het project gegeven. Om de code in MSP430 te schrijven of te compileren, hebben we Energia IDE gebruikt die Arduino-compatibel is. De meeste Arduino IDE-functies kunnen direct in deze Energia IDE worden gebruikt.
Dus allereerst hebben we een vereiste bibliotheken en gedeclareerde pin en variabelen opgenomen.
# omvatten
De gegeven functie wordt gebruikt voor het lezen van het trillingssensorsignaal. Deze functie filtert ook kleine of valse trillingen.
#define count_max 25 char SensorRead (int pin) // lees sw met debounce { char count_low = 0, count_high = 0; doe { vertraging (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } anders { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); if (count_low> = count_max) geeft LAAG terug; anders retourneer HOOG; }
De onderstaande functie detecteert trillingen en roept de gpsEvent () -functie op om de GPS-coördinaat te krijgen en tenslotte de functie Send () aan te roepen om een sms te verzenden.
void loop () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Sturen(); digitalWrite (led, LOW); vertraging (2000); } }
De gegeven functie is verantwoordelijk voor het ophalen van GPS-strings uit de GPS-module, extraheert de coördinaten ervan en converteert ze in decimaal gradenformaat.
leegte gpsEvent () { char gpsString; char test = "RMC"; i = 0; while (1) { while (Serial.available ()) // Seriële binnenkomende gegevens van GPS { char inChar = (char) Serial.read (); gpsString = inChar; // sla inkomende gegevens van GPS op in tijdelijke string str i ++; if (i <4) { if (gpsString! = test) // controleer op juiste string i = 0; }
int graad = 0; degree = gpsString-48; graad * = 10; graden + = 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; breedtegraad = ((zwevende) graad + minuut);
En tot slot wordt de functie Send () gebruikt om de sms naar het gebruikersnummer te sturen dat in dit deel van de code is ingevoegd.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // voer uw mobiele nummer GSM.println ('"') in; vertraging (500); // GSM.print ("Latitude:"); // GSM.println (breedtegraad); GSM.println ("Ongeval Happned"); vertraging (500); // GSM.print ("lengtegraad:"); // GSM.println (logitude); GSM.println ("Klik op de link om de locatie te zien"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (breedtegraad, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); vertraging (4000); }
De volledige code en demovideo worden hieronder gegeven, u kunt alle functies in de code bekijken.