Dans les tutoriels précédents, nous avons appris comment interfacer le module GPS avec un ordinateur et comment suivre le véhicule à l'aide du GSM et du GPS. Nous avons également construit un système d'alerte d'accident de véhicule en utilisant Arduino et un accéléromètre. Ici, nous construisons à nouveau le même projet mais cette fois un tableau de bord MSP430 et un capteur de vibrations seront utilisés pour détecter un accident de véhicule. Donc, ce projet parlera également de l'interfaçage d'un capteur de vibrations avec le tableau de bord MSP430. Vous pouvez trouver plus de projets MSP430 ici.
Ici, le module de capteur de vibration détecte les vibrations du véhicule et envoie un signal au Launchpad MSP430. Ensuite, le MSP430 récupère les données du module GPS et les envoie au téléphone mobile de l'utilisateur via SMS à l'aide du module GSM. Une LED brillera également comme signal d'alerte d'accident, cette LED peut être remplacée par une alarme. La localisation de l'accident est envoyée sous forme de lien Google Map, dérivée de la latitude et de la longitude du module GPS. Voir la vidéo de démonstration à la fin.
Le module GPS envoie les données liées à la position de suivi en temps réel, et il envoie autant de données au format NMEA (voir la capture d'écran ci-dessous). Le format NMEA se compose de plusieurs phrases, dans lesquelles nous n'avons besoin que d'une seule phrase. Cette phrase commence à partir de $ GPGGA et contient les coordonnées, l'heure et d'autres informations utiles. Ce GPGGA est appelé Global Positioning System Fix Data. En savoir plus sur les phrases NMEA et lire les données GPS ici.
Nous pouvons extraire les coordonnées de la chaîne $ GPGGA en comptant les virgules dans la chaîne. Supposons que vous trouviez la chaîne $ GPGGA et que vous la stockiez dans un tableau, alors Latitude se trouve après deux virgules et Longitude après quatre virgules. Maintenant, cette latitude et cette longitude peuvent être placées dans d'autres tableaux.
Vous trouverez ci-dessous la chaîne $ GPGGA, accompagnée de sa description:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M`` * 47 $ GPGGA, HHMMSS.SSS, latitude, N, longitude, E, FQ, NOS, HDP, altitude, M, hauteur, M,, données de somme de contrôle
Identifiant |
La description |
$ GPGGA |
Données de correction du système de positionnement global |
HHMMSS.SSS |
Heure au format heure minute seconde et millisecondes. |
Latitude |
Latitude (coordonnée) |
N |
Direction N = Nord, S = Sud |
Longitude |
Longitude (coordonnée) |
E |
Direction E = Est, W = Ouest |
FQ |
Corriger les données de qualité |
NOS |
Nombre de satellites utilisés |
HDP |
Dilution horizontale de précision |
Altitude |
Altitude (mètres au-dessus du niveau de la mer) |
M |
Mètre |
la taille |
la taille |
Somme de contrôle |
Données de contrôle |
Module GSM
Le SIM900 est un module GSM / GPRS quadri-bande complet qui peut être intégré facilement utilisé par le client ou l'amateur. Le module GSM SIM900 fournit une interface standard de l'industrie. SIM900 offre des performances GSM / GPRS 850/900/1800 / 1900MHz pour la voix, les SMS et les données avec une faible consommation d'énergie. Il est facilement disponible sur le marché.
- SIM900 conçu en utilisant un processeur monopuce intégrant le cœur AMR926EJ-S
- Module GSM / GPRS quadri-bande de petite taille.
- GPRS activé
Commandes AT
AT signifie ATTENTION. Cette commande permet de contrôler le module GSM. Il existe des commandes d'appel et de messagerie que nous avons utilisées dans plusieurs de nos précédents projets GSM avec Arduino. Pour tester le module GSM, nous avons utilisé la commande AT. Après avoir reçu la commande AT, le module GSM répond par OK. Cela signifie que le module GSM fonctionne correctement. Voici quelques commandes AT que nous avons utilisées ici dans ce projet:
ATE0 Pour écho désactivé
AT + CNMI = 2,2,0,0,0
ATD
À + CMGF = 1
AT + CMGS = "Numéro de mobile"
>> Maintenant, nous pouvons écrire notre message
>> Après avoir rédigé un message
Ctrl + Z envoie une commande de message (26 en décimal).
ENTRÉE = 0x0d dans HEX
(Pour en savoir plus sur le module GSM, consultez nos différents projets GSM avec différents microcontrôleurs ici)
Module de capteur de vibrations
Dans ce projet de système d'alerte d'accident MSP430, nous avons utilisé un module de capteur de vibrations qui détecte les vibrations ou les modulations soudaines. Le module de capteur de vibrations fournit une sortie numérique logique HIGH / LOW en fonction du module. Dans notre cas, nous avons utilisé un module capteur de vibration logique HIGH actif. Cela signifie que chaque fois que le capteur de vibration détectera une vibration, il donnera une logique HIGH au microcontrôleur.
Explication du circuit
Les connexions de circuit de ce projet de système d'alerte d'accident de véhicule sont simples. Ici, la broche Tx du module GPS est directement connectée au numéro de broche numérique P1_1 du Launchpad MSP430 (série matérielle) et 5v est utilisé pour alimenter le module GPS. En utilisant la bibliothèque série logicielle ici, nous avons autorisé la communication série sur les broches P_6 et P1_7, et les avons rendues Rx et Tx respectivement et connectées au module GSM. Une alimentation de 12 volts est utilisée pour alimenter le module GSM. Le capteur de vibrations est connecté en P1_3. Une LED est également utilisée pour indiquer la détection d'accident. Le reste des connexions est indiqué dans le schéma de circuit.
Explication de la programmation
La programmation de ce projet est facile sauf la partie GPS. Le code complet est donné à la fin du projet. Pour écrire ou compiler le code dans MSP430, nous avons utilisé Energia IDE qui est compatible Arduino. La plupart des fonctions IDE Arduino peuvent être utilisées directement dans cet IDE Energia.
Donc, tout d'abord, nous avons inclus une bibliothèque requise et une broche et des variables déclarées.
#comprendre
La fonction donnée est utilisée pour lire le signal du capteur de vibration. Cette fonction filtrera également les petites ou fausses vibrations.
#define count_max 25 char SensorRead (int pin) // lire sw avec anti- rebond { char count_low = 0, count_high = 0; faire { retard (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; sinon retournez HIGH; }
La fonction ci-dessous détecte les vibrations et appelle la fonction gpsEvent () pour obtenir les coordonnées GPS et enfin appeler la fonction Send () pour envoyer des SMS.
boucle vide () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Envoyer(); digitalWrite (led, LOW); retard (2000); } }
La fonction donnée est chargée d' obtenir les chaînes GPS du module GPS, d'en extraire les coordonnées et de les convertir au format degré-décimal.
void gpsEvent () { char gpsString; test de char = "RMC"; i = 0; while (1) { while (Serial.available ()) // Données entrantes série du GPS { char inChar = (char) Serial.read (); gpsString = inChar; // stocke les données entrantes du GPS dans la chaîne temporaire str i ++; if (i <4) { if (gpsString! = test) // vérifier la chaîne de droite i = 0; }
degré int = 0; degré = gpsString-48; degré * = 10; degré + = 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) degré + minute);
Et enfin, la fonction Send () est utilisée pour envoyer le SMS au numéro d'utilisateur qui est inséré dans cette partie du code.
void Send () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // entrez votre numéro de mobile GSM.println ('"'); retard (500); // GSM.print ("Latitude:"); // GSM.println (latitude); GSM.println ("Accident Happned"); retard (500); // GSM.print ("longitude:"); // GSM.println (logitude); GSM.println ("Cliquez sur le lien pour voir l'emplacement"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (latitude, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); retard (4000); }
Le code complet et la vidéo de démonstration sont donnés ci-dessous, vous pouvez vérifier toutes les fonctions du code.