Enregistreur de positions GPS
Pour enregistrer un itinéraire
Loin de moi les idées de flicage de qui que ce soit à son insu, cet enregistreur GPS va permettre d'examiner sur une carte, grâce aux logiciels qui sont libres sur le net, de mémoriser, suivre, commenter ou rectifier un itinéraire après l'avoir pratiqué, avec l'enregistrement horodaté des coordonnées de latitude et de longitude, sur une carte micro SD (jusqu'à 32 Giga ). Un gros avantage par rapport aux traceurs du commerce, c'est que la saisie des données, date, heure, et position, ne se fait que si il y a déplacement du boîtier, afin de ne pas emplir la carte mémoire inutilement . Il est rechargeable par une prise USB-C et l'autonomie sera définie par les temps de déplacement, la fréquence des enregistrements et la capacité de la batterie qu'on va lui mettre: pour mon prototype, c'est une récupération d'un vieux Smartphone Samsung ... On peut y raccorder un petit panneau photovoltaïque pour entretenir la charge en extérieur évidement puisque l'antenne doit pouvoir capter les satellites sans avoir 4 couches de bêton armé au dessus d'elle .
Le Matériel Utilisé :
Commençons par le module GPS de type NEO-6M version 2 (très bon marché ) qui accepte une alimentation de 3 à 5,5 volts DC et son antenne active (grand gain 28dB ) en céramique. J'ai remplacé celle qui était livrée par une que j'avais dont le gain est supérieur. Ce circuit dispose d'une eeprom et ram avec sa batterie pour la sauvegarde des paramètres, ainsi qu'une led d'indication de présence de tension, qui clignote en réception satellite. La vitesse de communication par défaut est de 9600 bauds, modifiable par le setup.
Un chargeur avec fiche micro USB-C va permettre la recharge ou le fonctionnement sur une source extérieure. Deux leds respectivement rouge et bleue, renseignent si l'accu est en charge ou complètement chargé. Le temps de charge dépend de la capacité de la batterie et de son avancement dans la décharge ...
Caractéristiques du module:
Tension d'entrée: 5V
Tension de coupure de charge: 4.2V ± 1%
Courant de charge maximum: 1000mA
Tension de protection contre la décharge excessive de la batterie: 2.5V
Courant de protection contre les surintensités de batterie: 3A
L'ATMEGA328P-PU est un microcontrôleur de chez ATMEL (maintenant Microchip) de 28 broches, 32K de mémoire et qui peut être cadencé jusqu'à 20MHz. Il est souvent utilisé sur l'Arduino UNO et c'est pour cette raison que je l'ai choisi; en effet l'IDE Arduino permet un développement aisé et la sortie compilée des binaires au format hex . Il n'est pas cher et un programmateur, genre Dataman, permet de buriner ses mémoires avec le fichier. Les datasheet vous révéleront les possibilités énormes de ce micro et les modes de communication disponibles.
Le support de carte Micro SD (SDHC haute vitesse ) est alimenté en 3,3Volts pour ce modèle sans régulateur de tension. Les pins de communication du bus SPI, respectivement MISO, MOSI, SCK, CS sont ajustées au potentiel VCC / GND par une série de résistances. Des contacts dorés assurent une connectivité de qualité par simple insertion de la micro carte . Voilà pour le matériel utilisé, passons au schéma !
Le Schéma :
Tout commence par l'alimentation en haut à gauche ! un coup de chance, tous les composants fonctionnent sous 3,3 volts; donc directement sur la batterie Li-Ion (3,6 volts 4000mA), ce qui va nous affranchir d'un régulateur ou d'un onduleur pour élever la tension. Un module TF4056 va s'occuper de tout: de la charge en cours (led rouge allumée), de la fin de charge (led bleue ou verte allumée), de la décharge et de la protection de l'accu. Une plug USB-C permet de recharger et en pointillé on aperçoit une option de charge par panneau photovoltaïque, ce genre de petits panneaux qui sont commercialisés avec des lampes d'éclairage de terrasse ou porte d'entrée. Personnellement sur le prototype, je n'ai pas utilisé cette option car la batterie a une capacité suffisante pour mon utilisation. Sur le schéma, s'en suit un interrupteur de mise en marche, mais j'ai remplacé celui-ci par un cavalier enfichable sur un connecteur à deux picots de 2,54mm. La mise sous tension est visualisée par une led sur le module GPS_NEO_ 6M; led qui se met à clignoter lorsque le circuit a trouvé assez de satellites pour trianguler une position. Ce module communique avec le processeur par une liaison série TX-RX à 9600 bauds (paramétrable si on le souhaite) et qui doit être croisée: le RX du module chatouille la pin TX du microcontrôleur et inversement pour la TX ... Un électrochimique de 25µF/16v (C1) vient par sa capacité, immuniser le GPS contre les variations de tension et perturbations transitoires . Comme précisé plus haut, j'ai remplacé l'antenne par un modèle à 28dB pour une plus grande sensibilité et stabilité de réception derrière des parois minces.
Les informations sont traitées par un microcontrôleur ATMEGA328 PU pour être mises en forme, puis envoyées vers la carte SD. (Voire le logiciel plus bas ) ... Le processeur est cadencé par un quartz externe de 16MHz (Q1) dont les pattes sont tirées par deux condensateurs de 18pF (C2-C3) pour la stabilité des sous-harmoniques. Le reset est maintenu au potentiel haut grâce à la résistance R2 (10K) car le POR (Power On Reset) est ici le seul utilisé. Une led verte (led1), limitée en courant par R1 (220 Ohms), est raccordée sur la sortie PB0 du processeur pour visualiser les séquences d'inscription sur la carte SD, car en effet, on n'écrit pas tout et n'importe quoi sur cette carte, mais seulement l'horodatage et les positions quand il y a déplacement avéré (économie de place et de lisibilité des infos ).
Un support de Micro_SD est connecté en protocole SPI, sur le port PB5 pour la synchro CLK, PB4 pour la sortie de datas MISO, PB3 pour l'entrée via MOSI et PB2 pour la validation CS de la microcarte. Pas d'électronique active sur ce support, seulement une poignée de résistances pour ajuster les potentiels et garantir un niveau inférieur à la tension d'alimentation. Et voilà, on a fait le tour de la propriété !
Le Logiciel:
Le logiciel qui orchestre tout ça, est développé sur l'IDE Arduino puis exporté en binaires compilés au format hex, pour être buriné dans le micro avec un programmateur. Les très nombreux commentaires en face de chaque ligne, vous guident sur ce que j'ai voulu faire. Juste quelques remarques :
Lecture du GPS, Mise en forme des informations de dates et d'heure : (Attention le temps est réglé sur UTC + 1 pour ma zone ... A prendre en compte si vous êtes ailleurs ou "en heures d'été ")
void loop()
{
while (ss.available() > 0){ // Tant que bonne reception satellite
gps.encode(ss.read()); // lecture des infos
if (gps.location.isUpdated()){ // Si infos disponnibles...
Date=String(gps.date.day())+(" ")+(gps.date.month())+(" ")+(gps.date.year()); // recuperation date
Temps=String(gps.time.hour()+1)+(" ")+(gps.time.minute())+(" ")+(gps.time.second()); // recuperation heure
Le déplacement est détecté par la création de deux variables à 4 chiffres après la virgule (lat & lon ) qui seront comparées avec les dernières inscrites (old_lat & old_lon) et autoriseront une nouvelle écriture sur la carte si, et seulement si, elles sont différentes des valeurs précédemment enregistrées, puis viendront ensuite rafraîchir ces valeurs pour les prochaines comparaisons. Les quatre décimales permettent de limiter les écritures sur carte (qui elles en comportent 6 après la virgule), si il n'y a pas de déplacement, tout en garantissant que les fautes de précision soient immunisées . Sur chaque accès à la SDcard, la led verte s'allume puis s'éteint .
lat=String(gps.location.lat(), 4); // recuperation latitude (a 4 chiffres aprèe la virgule)
lon=String(gps.location.lng(), 4); // recuperation longitude (a 4 chiffres aprèe la virgule)
smartDelay(400); // delai entre deux receptions (a regler suivant besoin & économie de batterie)
// Ecriture des donnes dans le fichier texte
if ((lat!=old_lat) or (lon!=old_lon)) { // Si une difference de position est comparee entre la precedente et la nouvelle
File data=SD.open("datas.txt",FILE_WRITE); //Ouvre le fichier "datas.txt"
data.println(Date + " " + Temps + " " + String(gps.location.lat(), 6)+" "+String(gps.location.lng(), 6)+(" ")); //ecrit tout ça sur la carte
digitalWrite (recLed, HIGH); //Allume la Led
data.close(); // Ferme le fichier
delay(1000);
old_lat = lat; // MàJ de l'ancienne latitude
old_lon = lon; // MàJ de l'ancienne longitude
digitalWrite (recLed, LOW); //Allume la Led
}
Le programme complet est dans le zip ci-dessous. La fréquence des réceptions peut être espacée en modifiant la valeur du smartDelay ! Entre un déplacement pédestre ou en turbo jet un compromis devra être adapté ...
La Réalisation:
Un circuit imprimé simple face, réalisé avec les moyens classiques décris ici, supporte tous les composants et modules. Un seul stap pour la continuité des masses et des pistes en huit dixièmes de millimètres. Seul l'ATMEGA328 est monté sur support pour les besoins de navette entre le programmateur et les essais. Une réflexion personnelle: je préfère nettement les cosses tulipes sécables aux supports 28 broches dédiés: au bout de quelques insertions, les pattes étaient à l'équerre. Les composants CMS (SMD) sont soudés côté cuivre et les connexions des modules sont considérées comme composants traversants. La led CMS de visualisation peut être remplacée par un autre model 3mm afin qu'elle soit visible à travers le capot supérieur si nécessaire.
Le circuit est dimensionné par rapport à la batterie et encapsulé dans un boîtier réalisé à l'imprimante 3D en deux parties. Le bas dispose d'une poignée pour passer une sangle velcro ou un colring pour l'accrochage et également d'une ouverture pour la fiche USB-C pour la recharge de la batterie . Un couvercle ferme l'ensemble en se clipsant sur les bossages et tenons aménagés et ainsi protéger l'ensemble .
Les Fichiers de réalisation :
Dans le zip ci-joint se trouvent tous les fichiers nécessaires pour le circuit, le programme et le boîtier ...
Gps logger (808.4 Ko)
L'Exploitation Cartographique :
Dans l'image ci-dessous, sur la partie gauche on aperçoit le format des données enregistrées ... J'ai passé la valeur du smartDelay à 15 000 pour n'avoir qu'un enregistrement toutes les 15 secondes ... On aperçoit un arrêt de 45 secondes à 11heures 29, pour prendre le journal au bureau de tabac, puis le chemin du retour ...
Sur la partie droite, une importation des données sur Google : j'obtiens le point précis où je me trouve . Il existe des logiciels libres d'importation de série de datas qui permettent d'en tracer l'itinéraire ! En supprimant dans le sketch, l'enregistrement de l'horodatage, celui-ci est capable de visualiser le chemin parcouru. Mais là ça n'a plus d'intérêt car un smartphone le fait aussi . L'autre gros avantage, c'est de ne pas risquer de se faire voler, perdre, ou endommager le smartphone si on l'utilise pour tracer un objet, un véhicule ou un animal, la perte ne sera que de quelques euros ...
Ajouter un commentaire