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 :
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 }