position gps avec arduino et module gps

position gps avec arduino et module gps A7 AI Thinker sur google maps

Publish by : arielk The : 15/02/2021 at 01h 34min 59s
0

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

  • IDE Arduino

2. Bibliothèques

  • tiny gps ++ .h
  • timerOne .h
  • neotimer .h

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.

Données du module GPS dans le moniteur série Arduino

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