BTS Mesure BTS Mesure
Robot 1Robot 2PortailGPS & AlarmeCapteursTracker solaire

GPS et alarme :

Voici quelques pistes pour commencer :

  • Mise en oeuvre d’un GPS dans une voiture ;

  • Mode ouverture automatique : si la voiture se rapproche du domicile (de 300m à 100m par exemple), envoi SMS ouverture du portail

  • Mode alarme : si le capteur volumétrique détecte une intrusion , ou s’il y a ouverture d’une porte envoi des SMS avec la position…

  • Mode questionnement : au SMS Où est ma voiture ? si le N° de tél est autorisé l’Arduino répond en envoyant les coordonnées GPS

  • Mode pense bête : faire sonner votre portable quand vous passez devant la boulangerie

  • Interface graphique sur le portable pour gérer les différents modes (App Inventor)

  • développement d’outils pour simuler un signal GPS :
    Un premier programme Arduino enregistre les trames d’un parcours réel sur carte SD : GPS.TXT
    Le logiciel open source GPSfeed+ lit le fichier texte GPS.TXT et le transmet sur le port COM
    La sortie Tx d'un convertisseur UART USB est reliée au Rx de l'Arduino
    Ainsi nous disposons d'un GPS virtuel qui transmet des trames NMEA à exploiter...

Le blog d'Alexis et Matthias

Lien vers le site crée par Alexis et Matthias.

 

Les conseils du Prof et ressources diverses :

Le shield GPS ADA1272

Pour utiliser ce shield  :

  • en mode SoftSerial :  relier la patte 8 (Tx du GPS) à la patte 0 (Rx Arduino)
    Pour plus de fiabilité, déclarer dans le setup :  pinMode(8,INPUT);
    Tester le GPS avec ce programme déjà utilisé dans le TP UART.
  • en mode Direct : les pattes  du GPS Tx et Rx sont reliées sans croiser les fils vers  l'Arduino.
    Utilité : sans aucun programme sur l'Arduino,  on relie directement le GPS à l'ordinateur par USB
    On exploite les trames avec un logiciel PC, par exemple : MiniGPS
    MiniGPS permet de visualiser sur un PC toutes les données transmises par le GPS

Ce shield va nous permettre d'enregistrer les trames GPS brutes dans un fichier TXT sur une carte SD.
Exemple incomplet d'une structure de programme pour mettre en mémoire une trame...

Ensuite il suffira de lire ce fichier avec le logiciel  GPSfeed+ .

Simulation GPS

Autre solution pour lire les trames GPS.

Nous allons utiliser arduino1 avec lecteur de carte SD pour simuler un GPS pour arduino2.

arduino1 lit la carte SD, détecte le début de trame par $GPGGA

attends 1s puis affiche la trame

arduino2 est relié par une liaison UART à arduino1

Le signal qu'il reçoit est celui du GPS simulé par arduino1

Voici un exemple de ce programme :

/*        Simulateur GPS
 Lecture trame GPS enregistrées sur carte SD
 
 Un arduino équipé d'une carte SD permet de simuler un GPS
 pour un second Arduino relié au premier par une liaison UART
 
 Algorithme :
    - ouvrir le fichier GPS.TXT qui contient des trames GPS brutes
    - lire une ligne du fichier, la placer dans la chaîne ligne
    - vérifier si ligne contient $GPGGA
      dans ce cas tempo de 1s
    - afficher ligne et remise à zéro de ligne
    - recommencer jusqu'à la fin du fichier
    - Fermer GPS.TXT
 Fin du programme
 
 Attention : String ne doit pas dépasser 256 caractères.

 Librairie Arduino gestion des cartes SD : http://www.redohm.fr/2015/03/librairie/
 	 
 */

#define FichierGPS "GPS.TXT"    // Remplacer GPS.TXT par le nom du fichier à lire
                                // Attention le nom ne doit pas dépasser 8 caratères 12345678.txt
#include <SD.h>
File GPSpos;

int tempo = 1000;       // tempo d'attente entre 2 trames en ms
int chipSelect=10;      // Selecteur carte SD

int ESD;                // Erreur carte SD
int n;                  // Numéro de trame
char a;
int debut;
unsigned long t0;       // top départ trame pour tempo 1s
String ligne;           // String est limité à 256 caractères

void setup()
{
  Serial.begin(9600);

  Serial.println("Initialisation carte SD");
  pinMode(chipSelect, OUTPUT);
  
  ESD=!SD.begin(chipSelect);
  if (ESD) Serial.println("Erreur carte SD"); else Serial.println("Carte presente");

  
  GPSpos = SD.open(FichierGPS);
  t0=millis();
  if (GPSpos) {
    Serial.println();
    Serial.println("Ouverture de " + String(FichierGPS));
     while (GPSpos.available()) {
        a=GPSpos.read();           // A chaque lecture le pointeur de position du fichier s'incrémente de 1
        ligne= ligne + a;
        if (a==10) {                             // détection nouvelle ligne 
          Serial.print(ligne);                  // String est limité à 256 caractères
          ligne="";                            // on vide la ligne
        }
        debut=ligne.indexOf("$GPGGA");         // détection nouvelle trame
        if (debut>=0) {
            while(millis()-t0<tempo);              // Attente 1 s avant de continuer
            n++;
            // Serial.println("Trame GPS n "+ String(n)); // Pour debug
            Serial.print(ligne);
            ligne="";                       // RAZ ligne
            t0=millis();}
    }
    // Fermeture du fichier et remise à zéro du pointeur :
    GPSpos.close();
    Serial.println("Fin des data de " + String(FichierGPS));
    Serial.println("Appuyer sur Reset pour recommencer");
  } 
  
    else {
    Serial.println("Erreur ouverture de " + String(FichierGPS));
  }
}

void loop()
{
// Apres la lecture du fichier il ne se passe plus rien
// Pour relancer la lecture appuyer sur le bouton Reset
}