
I.PRÉSENTATION
La localisation gps est un grand pas dans le secteur de la securite des personnes et des biens dans notre societe. Ces dernieres annees on entend parler de tracking gps en cas de vol de vehicule, telephone,kidnapping,perte d enfants et de personnes agees.
Dans ce projet, nous allons realiser un systeme de securite permettant d obtenir la position gps de ce dernier via un orrdinateur.Pour cela , il nous faudra une carte arduino uno,un module gps ,des leds pour afficher les etats et une plaque a essai et les jumpers arduino pour le montage electronique.
II. MATERIEL UTILISE
Cliquez sur les images pour avoir les prix a moindre cout
|
Matériel |
Image |
1 |
carte arduino uno |
|
2 |
Module GSM GPS A7 (AI THINKER) |
|
3 |
Plaque à essai |
|
4 |
Leds |
|
5 |
cavaliers arduino (mâle mâle) |
|
6 | cavaliers arduino (mâle femelle) | ![]() |
7 | resistances de 330 ohms | ![]() |
III. LOGICIELS ET BIBLIOTHÈQUES UTILISÉES
1 . Logiciels
2. Bibliothèques
IV. FONCTIONNEMENT
1. Principe
Le principe est le suivant :
la carte arduino ( microcontrolleur ) est utilisée pour controler le systeme et envoyer des informations du module recepteur gps au pc via le port serie . Le récepteur GPS est utilisé pour recuperer les coordonnées de localisation via un satellite.
Le module gps utilise est le modele A7 du fabricant AI Thinker.
C est un module trois en un : il integre le GPS , le GPRS et le GSM dans une seule puce;ce qui rend sa configuration au demarrage differente de celle des modules gps standards . Au demarrage on doit choisir le mode dans lequel on souhaite fonctionner ( soit le mode gps ou le mode gprs/gsm).Pour valider le mode gps on doit valider la commande at AT+GPS=1
Nous avons des leds pour illustrer l etat du systeme:
-la led rouge indique que le module gps est en marche
-la led verte indique que la position recherchee est deja trouvee
-la led jaune indique que le systeme est en entrain de rechercher la position et que celle ci n est pas encore trouvee
2. schémas
Les connexions de circuit de ce projet sont simples et illustrées dans l'image ci-dessous.
3. Resume sur le format de donnees gps NEMA
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, ces informations peuvent être placées dans d'autres tableaux.
Vous trouverez ci-dessous la chaîne $ GPGGA, ainsi que 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 |
HPD | Dilution horizontale de précision |
Altitude | Altitude par rapport au niveau de la mer |
M | Mètre |
Hauteur | Hauteur |
Somme de contrôle | Données de contrôle |
V. PROGRAMME
#include #include #include SoftwareSerial mySerial(4, 5); #include #include #define DEBUG true const int POWER_ON=11; const int LED_GPS_ON=9; //led red const int POSITION_ON=10; //led green const int POSITION_OFF=8; // led yellow TinyGPSPlus gps; double latitude, longitude; int count1=0; Neotimer mytimer,mytimer2 = Neotimer(1000); void setup() { Serial.begin(9600); mySerial.begin(9600); delay(1000);//initialize communication pinMode(POWER_ON, OUTPUT); pinMode(LED_GPS_ON, OUTPUT); pinMode(POSITION_ON, OUTPUT); pinMode(POSITION_OFF, OUTPUT); digitalWrite(POWER_ON, 1); digitalWrite(LED_GPS_ON, 0); digitalWrite(POSITION_ON, 0); digitalWrite(POSITION_OFF, 0); Serial.println("Demarrage du module A7 AI Thinker en cours ..."); delay(3000); digitalWrite(POWER_ON, 0); digitalWrite(LED_GPS_ON, 1); //delay(1000); //baudrate(); Serial.println("Demarrage du module A7 AI Thinker OK"); //sendData("AT+RST=1 ",1000,DEBUG); //delay(100); sendData("AT+GPS=1 ",1000,DEBUG); delay(2000); Serial.println("Mode GPS OK"); } void loop() { //sendData("AT+GPSRD=1",1000,DEBUG); // delay(1000); // sendData("AT+GPSRD=0",1000,DEBUG); if(mytimer.repeat(2)){ sendData("AT+GPSRD=1",1000,DEBUG); delay(1000); sendData("AT+GPSRD=0",1000,DEBUG); Serial.println(" module ask position ..."); Serial.println(count1); ++count1;} if(count1>=1){ if(mytimer2.repeat(2)){ //Serial.println(t1); Serial.println("GPS mode start programm..."); //digitalWrite(12, 1); sendData("AT+GPS=1 ",1000,DEBUG);delay(200);//configuration du module en mode gps sendData("AT+GPSRD=1",1000,DEBUG);delay(200);// }} //sendData("AT+GPS=1 ",1000,DEBUG);delay(200);//activation du mode debug pour //sendData("AT+GPSRD=1",1000,DEBUG);delay(200);//le moniteur serie ,vous puvez //les decommenter mySerial.listen(); while(mySerial.available()) { gps.encode(mySerial.read()); } if(gps.location.isUpdated()) { //sendData("AT+GPS=1 ",1000,DEBUG);delay(200);//activation du mode debug pour //sendData("AT+GPSRD=1",1000,DEBUG);delay(200); latitude = gps.location.lat(); longitude = gps.location.lng(); String link = "http://www.google.com/maps/place/" + String(latitude,6) + "," + String(longitude,6) ; Serial.print("Link Google Maps : "); Serial.println(link); Serial.print("Satellite Count : "); Serial.println(gps.satellites.value()); Serial.print("Latitude : "); Serial.println(latitude, 6); Serial.print("Longitude : "); Serial.println(longitude, 6); Serial.print("Speed MPH : "); Serial.println(gps.speed.mph()); Serial.print("Altitude Feet : "); Serial.println(gps.altitude.feet()); Serial.println(""); } if(latitude>=0.1) { digitalWrite(POSITION_ON, 1); digitalWrite(POSITION_OFF, 0);} else{ digitalWrite(POSITION_OFF, 1); digitalWrite(POSITION_ON, 0); } } void baudrate() { int i=0; for(i=0;i<10;i++) { String msg = String(""); msg=sendData("AT",1000,DEBUG); if( msg.indexOf("ok") >= 0 ){ return; } } } String sendData(String command, const int timeout, boolean debug) { String response = ""; mySerial.println(command); long int time = millis(); while( (time+timeout) > millis()) { while(mySerial.available()) { char c = mySerial.read(); response+=c; } } if(debug) { Serial.print(response); } return response; }
VI. LA CONCRÉTISATION
1.images de realisation
2.Videos de realisation