lundi 18 mai 2015

Utilisation de la carte gps

Objectifs

Affichage des données du GPS qu’on envoyera par GSM

Matériels nécessaires:


  • Arduino UNO
  • Pmod GPS
  • Shield GSM

Tous ces matériels sont disponibles sur notre magasin en ligne

Comment procède t-on?


Pour avoir les données du GPS transmises par satellites on doit choisir l’exemple qui est dans la librairie TinyGPS ( librairie déjà téléchargée) puis on choisit l’exemple nommé “test with gps device”, une fois ouvert on va sur le setup pour mettre sur le Serial.begin 115200 (c’est pour l’affichage des données sur le moniteur série) et 9600 pour le GPS( exemple nss.begin(9600) pour SoftwareSerial et altSerial.begin(9600) pour AltSoftSerial), une fois ce code téléversé on pourra lire directement les données sur le moniteur série.
Pour utiliser le GPS et le GSM en même temps c'est-à-dire on envoie les données du GPS par SMS via le GSM on ne peut pas utiliser la librairie SoftwareSerial car cette dernière est en conflit avec la librairie du GSM mais on peut utiliser AltSoftSerial qui est bien compatible avec le GPS et le GSM.


Exemple:


#include <AltSoftSerial.h>
#include <TinyGPS.h>
#include <GSM.h>

NB: Notons que AltSoftSerial utilisent les pins 9 et 8 respectivement pour TX et RX pour la carte Arduino UNO.
Si j’utilise ces pins respectivement sur le câblage je risque de ne pas avoir de données je ne sais pas exactement la cause mais j’intervertis seulement les pins pour avoir les données.

Pour se faire on peut envoyer le message sans pour autant utiliser le moniteur série pour entrer le numéro c'est-à-dire on entre le numéro de téléphone directement dans le code pour cela on crée une fonction qui comportera et le numéro de téléphone et le contenu du message(les données du GPS) et cette fonction déclarée sera appelée dans le loop.


Exemple:


void sendSMS(char* myNumber,long myMessage1,long myMessage2) et dans le loop j’ai
ça  sendSMS("myNumber",lat,lon);

lat et lon sont la latitude et la longitude que j’ai déclaré dés le début long lat,lon;


Maintenant voici le code qu'on a utilisé, on a seulement comme données la latitude et la longitude que nous allons envoyer comme message toutes les minutes.

  
#include <AltSoftSerial.h>

#include <TinyGPS.h>
#include <GSM.h>
AltSoftSerial altSerial;
TinyGPS gps; // créer gps object
// initialized gsm
#define PINNUMBER ""
GSM gsmAccess;
GSM_SMS sms;
int mySMSCount=1;

long lat,lon; // create object for latitude and longitude

void setup()
{
 Serial.begin(115200); // serial connexion 
 altSerial.begin(9600); // sensor gps connexion 
 
   // verification état
 boolean notConnected = true;

 // Start GSM shield
 // If your SIM has PIN, pass it as a parameter of begin() in quotes
 while(notConnected)
 {
   if(gsmAccess.begin(PINNUMBER)==GSM_READY)
     notConnected = false;
   else
   {
     Serial.println("Not connected");
    
   }
 
   }
     Serial.println("GSM initialized");
     delay(5000);
}
void loop()
{
 while(altSerial.available())
 { 
  if(gps.encode(altSerial.read()))
  { // encode gps data
   gps.get_position(&lat,&lon); // get latitude and longitude
   // display position 
   Serial.print("Position: ");
   Serial.print("lat: ");
   Serial.print(lat);
   Serial.print(" ");// print latitude
   Serial.print("lon: ");
   Serial.println(lon); //print longitude
  }
 }
 
     sendSMS("myNumber",lat,lon);
     Serial.println(" ");
     Serial.print("message sent: ");
     Serial.println(mySMSCount);
     mySMSCount++;
     
}

void sendSMS(char* myNumber,long myMessage1,long myMessage2)
{
     sms.beginSMS(myNumber);
     sms.print(myMessage1);
     sms.print("/");
     sms.print(myMessage2);
     sms.endSMS(); 
     delay(10000);
     
}

Explication des parties essentielles du code:


AltSoftSerial altSerial;
TinyGPS gps; // créer gps object
L'objet "altSerial" est utilisé pour extraire les données du récepteur GPS, l'objet "GPS" est utilisé pour séparer les données du récepteur en composants individuels.

Nous allons vérifier s’il y a des données qui sont disponibles
while(altSerial.available())

Puis on lit et on encode les données
 if(gps.encode(altSerial.read()))

Enfin, nous conservons les valeurs de latitude et de longitude dans les variables lat et lon.
gps.get_position(&lat,&lon);

Et pour envoyer ces données nous avons déclarées une fonction
void sendSMS(char* myNumber,long myMessage1,long myMessage2)

N'hésitez pas à poser des questions dans les commentaires.





Aucun commentaire:

Enregistrer un commentaire