Arduino Mega GPS avec enregistrement LCD et SD: 9 étapes

Arduino Mega GPS avec enregistrement LCD et SD: 9 étapes

Table des matières:

Anonim

Utilisez votre Audino Mega comme enregistreur GPS avec un écran LCD transparent et 5 boutons de fonction. Une LED bicolore est utilisée pour fournir des informations sur l'état.

La carte SD peut être laissée à l'intérieur et lue à l'aide d'un croquis de lecteur de carte, avec sortie vers le moniteur série.

Cette instruction vous montrera comment une carte GPS Adafruit Ultimate, basée sur la puce MTK3339, peut être configurée pour se connecter à une carte SD.

L'écran LCD est configuré pour afficher:

  • Latitude et longitude
  • Référence du Royaume-Uni national britannique
  • Altitude
  • La vitesse
  • Palier
  • Distance parcourue depuis l'origine (l'origine peut être réinitialisée)
  • Gamme d'origine (à vol d'oiseau)
  • Temps
  • Nombre de satellites
  • Dilution horizontale de position (HDOP)
  • Etat de la journalisation

Les valeurs de l'écran LCD peuvent être affichées en unités métriques ou impériales.

Le concept de journalisation d'origine a été développé à partir de:

Bûcheron de Ladyada

avec la bibliothèque SdFat de Bill Greiman

Utilisation du chipset MTK3339

Provisions:

Étape 1: Exigences

1) Arduino Mega 2560

Le méga Sainsmart fonctionne également.

2) LCD Keypad Shield http: //www.hobbytronics.co.uk/arduino-lcd-keypad-s …

La protection du clavier Sainsmart fonctionne également.

3) Le bouclier de journalisation gps ultime adafruit http: //proto-pic.co.uk/adafruit-ultimate-gps-logge …

4) Kit d’en-tête empilable (blindage) Arduino - R3 http: //www.hobbytronics.co.uk/cables-connectors/p …

Retirez les broches des connecteurs d’en-tête à une rangée et utilisez le plastique pour créer des longueurs d’entretoises pour les connecteurs d’entête de blindage empilables.

5) cathode commune bicolore rouge / verte dirigée avec un diamètre de 3 / 5mm

6) Carte mémoire Micro SD http: //www.hobbytronics.co.uk/4gb-microsd? Keyword = …

7) Résistance pour le contrôle du courant de la LED (dépend de la LED)

Si la LED nécessite 10 mA @ 5 V, la résistance serait R = V / I = 5 / 0.010 = 500 ohms.

8) boîte en plastique

J'ai utilisé 15cm * 10cm * 5 cm et aurais été plus petit si j'avais pu le trouver.

9) Prise d’alimentation 5,5 mm CC pour Arduino http: //www.hobbytronics.co.uk/cables-connectors/dc …

9) Prise phono mono 3,5 mm

10) commutateur de panneau (on / off évalué convenablement pour 5v 500mA)

11) Porte-fusible avec fusible 500mA

12) Petits pieds adhésifs en caoutchouc (8 nécessaires)

13) Entretoises en nylon de 10 mm avec diamètre interne de 3,3 mm http: //www.hobbytronics.co.uk/hardware/spacers-was …

Ceux-ci s’adaptent parfaitement aux boutons LCD pour faire des extensions. Utilisez les maquettistes superglue pour les attacher. Appliquer avec une micro-buse avec soin!

14) Des boulons de 2-2,5 mm avec écrous et rondelles (3 nécessaires) servant de piliers de soutien pour l’Arduino. Une vis étroite de 2 cm de long.

15) Petite longueur de cheville de 5mm. Petite vis à fixer. 3-4 petites lessives en plastique.

16) Panneau dur pour s’adapter au bas de la boîte. Le bois pour faire deux base prend en charge la largeur de la boîte.

17) Une batterie - J'ai utilisé un LIPO 500 mAH à 2 cellules. Vous aurez besoin d'un Chargeur LIPO pour ça.

18) Le fil doit correspondre au type de borne de la batterie.

19) Un câble adaptateur optionnel UFA vers SMA si vous envisagez d’ajouter un adaptateur externe.

Le gps est très sensible - je n'ai pas encore acheté d'arial.

Étape 2: Mise en route

Lisez l'article d'Adafruit sur le gps ultime

Un autre article utile http: //learn.adafruit.com/adafruit-shield-compat …

Installez 4 petits pieds en caoutchouc à la base de Arduino Mega:

Cela fournira une surface de montage stable.

Évitez les trous de montage.

Placez les connecteurs empilables sur la carte GPS:

Assurez-vous d'utiliser les trous les plus à l'extérieur de la carte GPS. Vérifiez comment tout se passe ensemble!

J'ai partiellement inséré la carte dans l'arduino, puis j'ai soudé les 2 broches d'extrémité de chaque section avec la carte à l'envers.

Il faut veiller à ne pas surchauffer le tableau. Le reste des broches ont été soudées avec la carte retirée.

Utilisez une longueur de connecteurs droits simples en-tête de rangée et retirez les broches pour créer des bandes d’entretoises. Ajustez les entretoises à chacune des 4 sections de connecteurs empilables que vous avez maintenant sur la carte GPS.

En supposant que vous utilisez un Mega, couper les pistes aux broches 7, 8 et 10 comme indiqué dans le croquis. Utilisez un scalpel tranchant et coupez soigneusement. Vérifiez avant de couper!

Installer la batterie GPS et la carte SD:

Insérez la batterie en respectant la polarité.

Faites glisser avec précaution la carte SD préformatée dans la fente jusqu’à ce qu’elle soit maintenue en place. Observez le bon alignement.

Connectez 3 dérivations à CCS, TX et RX :

J'ai plié les fils sur un connecteur empilable à 6 voies de rechange à 90 degrés et l'ai soudé dans la rangée avec CSS / TX / RX

Cela me permet d’enlever facilement les fils, si nécessaire.

Vous pouvez également souder les fils directement.

Ajoutez la LED bicolore:

Vérifiez la fiche technique de votre LED bicolore et sélectionnez une résistance pour fournir le courant correct. Établissez l'orientation pour les pistes. La LED doit être du type à cathode commune.

Ajustez temporairement la carte LCD sur la carte GPS - faites correspondre les trous avec soin!

Pliez les fils en utilisant les pliars nasaux pointus comme support pour obtenir le profil indiqué dans l’esquisse.

La led doit dégager la fin de l'écran LCD de 10 à 12 mm et atteindre 4 à 5 mm au-dessus de celui-ci pour qu'il sorte juste du boîtier.

Retirez l’écran LCD lorsque vous avez défini le profil et la longueur de la sonde.

Souder la LED, la résistance et 3 fils à la face inférieure de la carte GPS.

Led rouge à la broche 2, vert à la broche 3 et cathode via résistance à 0V.

Branchez la carte GPS dans le Arduino Mega:

Si vous utilisez un Sainsmart, il y aura 2 conducteurs de chaque côté, pas dans les trous de la prise. Avant de les assembler, je les plie légèrement vers l'extérieur et place un tube thermo-rétractable sur les broches apparentes.

Connectez les 3 dérivations de l’ArduinoRX à TX1, de TX à RX1 et de SSC à la broche 32 (peut être différent si vous le souhaitez)

Réglez le commutateur GPS sur SOFT SERIAL.

Branchez la carte LCD sur la carte GPS:

Trouvez le trou de montage dans la carte LCD à côté des boutons. Découpez avec précaution un morceau de goujon en bois de 5 mm pour soutenir l'extrémité du bouton de l'écran LCD sous le trou de montage. Il devrait reposer sur le banc. Ceci arrêtera le basculement de l'affichage à cristaux liquides lorsque les boutons sont enfoncés.

Mettez suffisamment de rondelles en plastique dans la fente pour éviter sa fermeture. Vissez la tige en bois - utilisez un bon trou pilote. Si nécessaire, ajustez la hauteur avec du papier de verre / du papier de lavage. La tige doit juste dégager l'accès à la prise de courant Mega.

Étape 3: Fabriquer une boîte

1) Couper un morceau de panneau dur pour s'adapter à la base de la boîte - permettre un mouvement d'au moins 2 mm tout autour.

2) Placez le Mega sur la base. Positionnez-le avec précaution pour laisser 15 mm du bord gauche de l'écran LCD à la gauche de la boîte et 35 mm du bord avant de l'écran LCD à l'avant de la boîte. Marquez et percez un trou de montage. Fraiser le bas de la base. Installez un écrou de 2 mm et un boulon à partir du bas.

Repositionnez l'Arduino et installez un deuxième trou - assurez-vous que l'écran LCD est parallèle à la base.

Ajouter un troisième écrou et un boulon. Le montage final sera une vis du haut dans le trou de montage inférieur droit.

Couper et limer les boulons de montage à la longueur, le cas échéant.

3) Placez le méga sur ses supports. Mesurez soigneusement la hauteur entre le haut de la boîte et le haut de l'écran LCD. Vérifiez la position de la face inférieure du couvercle par rapport au haut de l'écran LCD.

Faire deux coureurs rectangulaires la profondeur correcte pour placer le haut de l'écran LCD 1-2 mm en dessous du couvercle.

Le coureur de droite doit être centré sur le trou de vis pour la position de montage inférieure droite.

Visser à travers le haut de la base pour sécuriser les coureurs. Évitez le trou de montage.

Vérifiez à nouveau la hauteur de l'écran LCD par rapport au couvercle. Ne posez pas le couvercle sur le voyant. La led se pliera!

4) Percez le trou de vis dans la glissière droite. Changez légèrement le trou autour du trou pour la vis. Couper une entretoise en nylon de 10 mm pour soutenir la section inférieure droite de la planche. Tenez l'entretoise en place avec la vis et collez l'entretoise en place.

5) Positionnez le Mega avec l'écran lcd parallèle à l'avant de la boîte. Montez la base avec une vis à tête fraisée dans chaque glissière de l’extérieur de la boîte. Un positionnement prudent doit être observé.

6) Mesurer l'emplacement de la LED. Percer un petit trou pilote dans le couvercle. Vérifiez que la DEL est alignée et ouvrez le trou à une taille suffisante pour la DEL. Le couvercle va maintenant continuer.

7) Mesurer et couper le trou pour l'écran LCD - 1-2 mm de moins que la taille externe du support d'écran LCD.

8) Retirez la base et coupez deux bandes de carton ondulé pour correspondre à la base des glissières. Collez-les aux coureurs. Ensuite, placez 2 trous dans la carte pour faire correspondre les trous de vis. Remettez la base en place. Ajustez la pression de la vis jusqu'à ce que le couvercle s'adapte bien sur le dessus de l'écran LCD (Ah l'espace 1-2mm!)

9) Percer les cinq boutonnières:

Peignez soigneusement le tippex blanc sur le dessus des boutons.

Mesurez la position du bouton inférieur gauche. Percer un trou pilote dans le couvercle. Vérifiez que le trou est bien aligné sur le couvercle, faites briller une torche par le haut - le bouton blanc en haut devrait apparaître.

Ajustez le trou pilote si nécessaire avec une lime à aiguille circulaire - vérifiez à nouveau la position et percez le trou jusqu'au diamètre de dégagement pour une entretoise en nylon de 10 mm.

Répétez l'opération pour 4 autres boutons. Nettoyez le tippex avec du white spirit.

10) Ajoutez le bouton Extensions à la carte LCD:

Protégez votre surface de travail. Préparez un chiffon en papier. Enlevez tous les enfants distrayants.

Vérifiez que les entretoises en nylon de 10 mm reposent bien sur les pressions du bouton. Si nécessaire, élargissez les trous jusqu'à obtention d'un ajustement serré. Vous aurez besoin de fabricants de modèles de commande à distance pour colle cyanoacrylate - viscosité moyenne à fine et de fines buses à colle, également fournis par un fournisseur de modèles de commande par radio. Montez la première entretoise verticalement. Puis, à l'aide de la buse la plus fine, appliquez un soupçon de colle à l'intérieur du fond du tube. Inversez la carte LCD pour éviter toute infiltration dans le commutateur. Attendez une minute puis faites les autres boutons en suivant la même procédure. Laissez l'écran LCD inversé pendant 30 minutes pour permettre à la colle de durcir. Entre-temps, retirez et jetez la buse fine. Nettoyez le flacon de colle avec un mouchoir en papier et replacez le haut de la colle.

Vérifiez que le couvercle de la boîte s'adapte!

11) Percez et montez la prise du chargeur, le fusible et le fil Arial (Si nécessaire)

12) Retirez la vis du boîtier en plastique du réducteur de tension de la fiche d'alimentation CC de 5,5 mm. Souder une paire de fils aux bornes - rouge pour la pointe. Utilisez une gaine thermorétractable pour isoler et disposer les fils dans une courbe avant de les chauffer. Le retrait du boîtier de décharge de traction laisse de la place pour le support en bois.

13 Connectez le câblage comme indiqué dans la vue interne de la boîte.

L’embout de la prise phono doit être connecté au pôle positif de la batterie.

La connexion commutée sur la prise phono fournit l’alimentation au reste du circuit.

14) Couper le trou pour la prise USB et réassemblez l'Arduino.

Incluez la connexion UFL au fil auriculaire si nécessaire - manipulez-la avec précaution.

Serrez doucement la dernière vis de fixation de la carte.

Vérifiez le câblage soigneusement. Je n'accepte pas la responsabilité de ceci ou de toute autre fonctionnalité contenue avec!

15) Connecter la batterie et fixer en place à l'aide de velcro

Collez 4 petits pieds en caoutchouc à la base de la boîte et celle-ci est terminée.

Étape 4: Bibliothèques et logiciels

Vous devrez installer deux bibliothèques:

1) Téléchargez et installez la bibliothèque gps adafruit

2) Installez la bibliothèque de cartes adafruit sd:

L'installation par défaut ne fonctionnera que si une bibliothèque sd existante est supprimée de votre dossier Arduino libraries. Bien sûr, faites ceci et installez la bibliothèque à partir de

Ou conservez votre bibliothèque sd existante et téléchargez-la SDADA.zip que j'ai modifié pour accepter les appels vers SDADA. Installez-le dans Arduino libraries SDADA De cette façon, vous pouvez toujours utiliser l'autre bibliothèque SD

Si vous utilisez la version SDADA, elle est incluse dans l’esquisse gps2.ino avec la ligne:

#include SDADA.h

Sinon, commentez cette ligne et utilisez: #include SD.h

Les deux bibliothèques ont des exemples avec lesquels vous pouvez tester le GPS.

Les bibliothèques suivantes devraient déjà être installées par défaut:

LiquidCrystal.h

SoftwareSerial.h

SPI.h

avr / sommeil.h

Télécharger gps2.zip

Enregistrez gps2.ino et gps_card.ino dans leurs propres dossiers dans votre répertoire d’esquisse Arduino.

Ouvrez gps2.ino

Modifier la ligne suivante:

#include SDADA.h

#include SD.h si vous n'utilisez pas ma bibliothèque SD modifiée

Cette modification s'applique également à gps_card.ino.

Vérifiez le réglage de la marque de l'écran LCD:

Dans la section config:

booléen sain = vrai; // Défini sur true si vous utilisez le bouclier sainsmart lcd, sur False pour un autre, par exemple le bouclier DFROBOT.

Définissez la variable sain en fonction de votre choix d'affichage à cristaux liquides.

Notez que les deux cartes LCD indiquées utilisent la broche 10 pour régler le rétroéclairage. Le bouton haut permet d'éteindre le rétroéclairage, économisant ainsi l'énergie de la batterie.

gps2.ino devrait maintenant fonctionner!

Les boutons:

une) Sélectionner change la fonction affichée sur la 1ère ligne de l'écran LCD:

Position et altitude (longitude et latitude décimales, en alternance avec l'altitude)

Position (longitude et latitude décimales)

Position dans les coordonnées d'ordonnances est et nord ordonnées avec le numéro de feuille OS

Altitude

Course totale de distance de l'origine

Gamme de l'origine

Temps

b) La gauche bascule métrique / impérial.

c) Droite bascule la journalisation:

Un L apparaît en bas à droite lors de la journalisation

Un ! la marque dans cette position indique l'absence de carte SD ou la carte n'est pas disponible

ré) Up bascule l'affichage précédent. (Économiseur d'énergie utile.)

e) Vers le bas réinitialise la distance à zéro:

Ceci définit la position actuelle comme origine pour la plage. (Le corbeau vole loin de l'origine.)

Pour activer une touche, maintenez-la enfoncée jusqu'à ce que le voyant cesse de clignoter. Puis relâchez.

Étape 5: Utiliser la carte SD dans Gps2.ino

Mise en place de la carte SD:

La broche de sélection de puce par défaut et la broche chipSelect réelle doivent être définies sur sortie.

La carte SD est accessible avec une déclaration de début qui inclut les broches utilisées par la carte sur la carte GPS.

La vitesse de la carte est définie sur SPI_Full_SPEED.

En cas d'erreur, le voyant clignote avec un signal d'erreur détaillé dans l'en-tête de l'esquisse.

Si debug est défini sur true dans config, les messages du moniteur série sont également envoyés.

Si la carte est initialisée correctement, la variable hascard est définie sur true.

// assurez-vous que la broche de sélection de puce par défaut est définie sur

// sortie, même si vous ne l'utilisez pas:

pinMode (SS, OUTPUT); // broche méga select par défaut

pinMode (chipSelect, OUTPUT);

digitalWrite (chipSelect, LOW);

// voir si la carte est présente et peut être initialisée:

if (! SD.begin (chipSelect, 11, 12, 13)) {

if (debug) Serial.println (F ("Échec de l'initialisation de la carte!"));

erreur (1);

} autre{

if (! card.init (SPI_FULL_SPEED, chipSelect, 11, 12, 13)) {

erreur (2);

si (débogage) {

Serial.println (F ("échec de l'initialisation. Points à vérifier:"));

Serial.println (F ("* une carte est insérée?"));

Serial.println (F ("* Votre câblage est-il correct?"));

Serial.println (F ("* avez-vous modifié la broche chipSelect pour qu'elle corresponde à votre bouclier ou à votre module?"));

}

}autre{

hascard = true;

if (debug) Serial.println (F ("Init. carte réussie"));

}

}

Sélection du fichier SD pour la journalisation:

Quand le le bouton de droite est enfoncé Le sous-programme openfile est appelé.

Ceci inspecte le dossier gps à la recherche d’un nom de fichier inutilisé dans la séquence GPSLOGnn.TXT, où nn = 0 à 99.

Si un fichier est trouvé, définissez foundit sur true.

if (! hascard) {return;} // ne continue pas si une carte n'existe pas ou n'est pas disponible

l'octet i;

char nomfichier 18;

strcpy (nomfichier, "/gps/GPSLOG00.TXT");

nom de fichier 17 = char (0);

booléen foundit = false;

pour (i = 0; i <100; i ++) {

nom de fichier 11 = '0' + i / 10;

nom de fichier 12 = '0' + i% 10;

if (! SD.exists (nom du fichier)) {

foundit = true; Pause;

}

}

Si tous les noms de fichiers sont en cours d'utilisation, foundit sera false et l'utilisateur sera invité à effacer les 50 premiers. Si ce n'est pas le cas, hascard est défini sur false afin qu'il ne puisse plus y avoir de tentative de journalisation.

si (! foundit) {

int thisbutton = -1;

lcd.clear ();

lcd.print ("Dir full-Erase?");

lcd.setCursor (0,1);

lcd.print ("Sel: Ok Droite: Non");

faire{

thisbutton = read_LCD_buttons ();

} while (thisbutton == btnNONE);

lcd.clear ();

if (thisbutton == btnSELECT) {

lcd.print ("Suppression");

pour (i = 0; i <50; i ++) {

nom de fichier 11 = '0' + i / 10;

nom de fichier 12 = '0' + i% 10;

if (SD.exists (nom du fichier)) SD.remove (nom du fichier);

}

i = 0;

nom de fichier 11 = '0' + i / 10;

nom de fichier 12 = '0' + i% 10;

}autre{

erreur (4);

hascard = false;

revenir;

}

}

Le fichier peut être ouvert:

En cas d'erreur, des informations série sont émises et le code d'erreur est signalé via le voyant d'état.

En cas de succès, la première ligne du fichier est sortie. Ce sont les en-têtes de colonne.

Notez l'utilisation de logfile.flush (). Cela garantit que toutes les sorties sont envoyées au fichier SD avant de continuer.

logfile = SD.open (nom du fichier, FILE_WRITE);

si (! logfile) {

si (débogage) {

Serial.print ("Impossible de créer");

Serial.println (nom du fichier);

}

erreur (3);

hascard = false;

}autre{

journalisation = true;

monfichier = nomfichier;

logfile.println (pad ("Time", 13) + lpad ("Date", 9) + lpad ("Longitude", 10)

+ lpad ("Latitude", 10) + lpad ("Altitude", 9) + "m" + lpad ("Géoïde", 9) + "m" + lpad ("Vitesse", 7) + "Roulement mph");

logfile.flush ();

if (debug) {Serial.print ("Écriture dans"); Serial.println (nom du fichier);}

}

lpad et tampon sont des fonctions de remplissage de texte:

String lpad (String temp, octet L) {

octet mylen = temp.length ();

si (mylen> (L - 1)) renvoie la chaîne de température (0, L - 1);

pour (octet i = 0; i <(L-mylène); i ++) temp = "" + temp;

retour temp;

}

Pad de chaîne (Temp de chaîne, octet L) {

octet mylen = temp.length ();

si (mylen> (L - 1)) renvoie

sous-chaîne de température (0, L-1);

pour (octet i = 0; i <(L-mylène); i ++) temp = temp + "";

retour temp;

}

Ecrire dans le fichier:

La boucle principale lit le GPS et affiche les valeurs dans un fichier si la journalisation est en cours. (Un "L" est affiché dans le coin inférieur droit de l'écran LCD.)

Les valeurs sont formatées pour produire des colonnes de largeur fixe.

La fonction dtostrf (float, w, dp, buf) est une fonction de la bibliothèque Arduino qui prend une variable float et la convertit en une chaîne de largeur w avec des points décimaux dp. buf est un char buffer qui doit être assez grand pour gérer la conversion.

J'ai défini buf avec "char buf 20;" dans l'en-tête de l'esquisse.

Le fichier est vidé avant de continuer.

ogfile.print (pad (mytime, 13)); // inclut des millisecondes

logfile.print (pad (myyear, 9));

logfile.print (dtostrf (longitude, 10,5, buf));

logfile.print (dtostrf (latitude, 10,5, buf));

logfile.print (dtostrf (altitudem, 9,1, buf)); logfile.print ("m");

logfile.print (dtostrf (géoïde, 9,1, buf)); logfile.print ("m");

logfile.print (dtostrf (speedmph, 7,2, buf)); logfile.print ("mph");

logfile.print (dtostrf (position 6,1, buf)); logfile.println ("deg");

logfile.flush ();

Fermeture du fichier:

Si la carte n'est pas disponible, retournez, sinon videz toute la sortie restante sur la carte avant de fermer le fichier.

void closefile () {

si (! hascard) retourne;

logfile.flush ();

logfile.close ();

journalisation = faux;

if (debug) Serial.println ("Fichier" + mon fichier + "fermé");

}

Étape 6: Lecture du GPS

Configurez les bibliothèques dans l'en-tête du script:

#include Adafruit_GPS.h

#include SoftwareSerial.h

HardwareSerial mySerial = Série1;

Adafruit_GPS GPS (& mySerial);

Sélectionnez le GPS au démarrage:

pinMode (chipSelect, OUTPUT);

digitalWrite (chipSelect, LOW);

GPS.begin (9600);

// Définition du taux de mise à jour // 1Hz fonctionne bien et laisse le temps d'effectuer la consignation GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); // alternativement taux de mise à jour de 0,1 Hz, 5 Hz et 10 Hz

// RMC (minimum recommandé): GGA (données fixes), y compris l'altitude GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA);

// Désactiver les mises à jour sur l'état de l'antenne, si le firmware le permet

GPS.sendCommand (PGCMD_NOANTENNA);

Lisez le GPS par interruption afin de renvoyer en écho le moniteur série.

Notez que les données sont en cours d'interprétation dans le code de la bibliothèque Adafruit_GPS.h et non dans cette routine d'interruption.

// 1 ms d’interruption sur timer0 pour faciliter l’échange de données GPS

si GPSECHO = true useInterrupt (true); // lit l'entrée par interruption si vrai

C'est tout! Boucle et lire:

GPS.newNMEAreceived () est défini sur true si de nouvelles informations gps sont arrivées.

GPS.parse (stringptr) est défini sur true si les valeurs ont été correctement séparées (analysées) des chaînes de texte GPS brutes.

GPS.fix est défini sur true si le GPS signale que sa position est déterminée.

Si le GPS a un correctif, extrayez les valeurs de position, altitude, vitesse, relèvement, heure, géoïde, satellites et hdop.

La position est renvoyée en longitude et latitude décimales, la vitesse en nœuds, la distance en mètres.

if (GPS.newNMEAreceived ()) {

char * stringptr = GPS.lastNMEA ();

if (! GPS.parse (stringptr)) return; // faire le tour si faux

si (GPS.fix) {

digitalWrite (ledGreen, HIGH);

fixed = true; // mémoriser l'état en cas de changement de processus en cours

mymillis = GPS.milliseconds;

myseconds = GPS.seconds;

mytime = String (GPS.hour) + ":" + String (GPS.minute) + ":";

logtime = mytime;

logtime + = String (int (myseconds + mymillis / 1000 + 0.1)); // arrondir si dans 0,1 S

mytime + = String (myseconds + mymillis / 1000); // temps de rappel complet

myyear = String (GPS.day) + "/" + String (GPS.month) + "/";

lcdyear = myyear; theyear = String (GPS.year);

myyear + = theyear;

mylen = theyear.length ();

lcdyear + = ils ont la corde (mylen-1, mylen); // dernier chiffre à insérer

latitude = GPS.latitudeDegrees;

longitude = GPS.longitudeDegrees;

altitudem = GPS.altitude;

altitudef = altitudem * fconvert;

speedknots = GPS.speed;

speedphph = speedknots * 1.15077945;

speedkph = speedknots * 1,85200;

rubrique = GPS.angle;

satellites = GPS.satellites;

géoïde = GPS.geoidheight;

hdop = 7-int (GPS.HDOP + 0,5);

Étape 7: Position du réseau national britannique et distance parcourue

1) Conversion de la position en longitude et latitude décimales en unités de mètre d’enquête britannique. est détaillé dans un pdf fourni par l’enquête sur les munitions:

http: //www.ordnancesurvey.co.uk/docs/support/guide …

La page 40 ne fait pas une lecture claire, mais fournit les calculs nécessaires.

Mon sous-programme vide de munitions (float phi, float lamda) implémente le calcul.

Les valeurs renvoyées sont précises à + - 0,1 pour la longitude et à + - 0,02 pour la nord. Ce manque de précision est dû à la précision limitée de l'arithmétique du float Arduino. L'Arduino ne supporte que "6-7" décimales significatives.

Le numéro de la feuille de contrôle des munitions peut être extrait du chiffre le plus significatif des valeurs de longitude et de latitude. La chaîne de fonctions NE2NGR (float & east, float & north) effectue l'extraction et est créditée à:

Alex http: //www.codeproject.com/Articles/13577/GPS-Der …

2) La distance parcourue peut être calculée à partir de la différence entre deux valeurs de latitude et de longitude.

Pour les petites différences, l'estimation doit être suspecte en raison du manque de précision inhérent à un correctif GPS. La restriction de la prise en charge de la décimale virgule flottante Arduino affecte également la précision globale. Malgré cela, la distance cumulée estimée est raisonnable. La distance à l'origine est assez précise car elle implique uniquement la différence entre 2 emplacements.

L'origine des calculs de distance peut être réinitialisée à l'aide du bouton inférieur.

À basse vitesse, j'échantillonne les positions sur une période de trois secondes pour augmenter la probabilité que la différence de position soit supérieure à la distance d'incertitude dans le repère GPS. À des vitesses plus élevées, je réduit le temps entre les positions échantillonnées. Ce temps est contrôlé par la variable dlimit.

Le sous-programme float distance_between (float lat1, float long1, float lat2, float long2) renvoie la distance.

Le travail original est crédité à Maarten Lamers.

Étape 8: Lecture de la carte SD en utilisant Gps_card.ino

Ce croquis suppose que vous avez connecté un moniteur série., de préférence avec la possibilité de copier du texte.

Malheureusement, le moniteur série Arduino par défaut ne propose pas cette fonctionnalité. (J'ai écrit le mien.)

CoolTerm de Roger Meier fait le travail

Si vous utilisez la configuration par défaut de la bibliothèque SD, effectuez la modification:

#include SD.h à la place de #inclute SDADA.h

Réglez le moniteur série sur un débit de 115200 bauds.

Lorsque le croquis est exécuté, il teste la carte SD et affiche la taille de la carte et les détails du répertoire gps.

Tapez le nom d'un fichier et il sera ouvert et affiché.

Des fichiers individuels peuvent être supprimés à l'aide de #delete filename

Les données sont présentées dans des colonnes de largeur fixe avec des délimiteurs d'espace.

En supposant que vous puissiez copier le texte, l'utilisation des valeurs dans Excel est très simple.

Étape 9: Spécifications

le Affichage LCD a une ligne supérieure sélectionnable et un ligne inférieure composé de:

Nombre de satellites

La vitesse

HDOP - Dilution horizontale de la position

Palier

État de la journalisation:

  • "L" - Exploitation forestière
  • "" - Pas de journalisation
  • "!" - Carte SD non présente ou non disponible

La ligne du haut:

Latitude et longitude en degrés, en alternance avec l'altitude

Latitude et Longitude en degrés

Référence du Royaume-Uni national britannique

Altitude

Distance parcourue depuis l'origine (l'origine peut être réinitialisée)

Gamme d'origine

Temps

Remarques:

Valeurs LCD en métrique ou impériale.

Pour l’affichage de l’écran LCD, une vitesse de <= coupure (0,65) mph est indiquée par 0

Le nombre de satellites est indiqué par une barre verticale dans le coin inférieur gauche. Le plus grand nombre pouvant être affiché est 8, après quoi la barre est pleine.

HDOP est indiqué dans la barre mobile inférieure centrale. HDOP indique la dispersion des satellites observés. Une propagation accrue augmente la précision et le nombre de HDOP diminue. Les valeurs HDOP de 1 sont très bonnes!

Une précision HDOP <0.5 est indiquée par une barre pleine.

Une HDOP de 0,5 à 1,5 (1) est indiquée avec 7 barres.

Un HDOP de 6 est affiché avec 1 barre.

Un HDOP de> 6 n'affiche pas de barres.

Boutons:

a) Sélectionnez les modifications lcd 1ère ligne entre

altitude / position (longitude et latitude)

position (Long & Lat)

position dans les coordonnées x et y

altitude

temps

b) Bascule à gauche métrique / impérial

c) Droite bascule la journalisation

d) Haut bascule vers l'arrière de l'écran (économiseur d'énergie utile)

e) Down remet la distance à zéro et définit la position actuelle comme origine de la distance (distance à vol d'oiseau à l'origine)

Pour activer une touche, maintenez-la enfoncée jusqu'à ce que le voyant cesse de clignoter. Puis relâchez.

Indicateur LED:

Intervalle de 1 seconde Rouge clignotant - Pas de solution

Intervalle de 1 seconde Vert clignotant - Correctif

Quatre courts clignotements verts - Un bouton a été enfoncé

1 clignotement rouge répété 5 fois - Erreur 1: échec de l'initialisation de la carte SD

2 clignotements rouges répétés 5 fois - Erreur 2: échec de l'initialisation à pleine vitesse de la carte SD

3 clignotements rouges répétés 5 fois - Erreur 3: impossible de créer le fichier journal

4 clignotements rouges répétés 5 fois - Erreur 4: 100 fichiers dans le dossier de journal et ne pas supprimer

L'estimation de la distance cumulée comportera des erreurs d'arrondi cumulées à partir de plusieurs positions d'intervalle d'une seconde.

La plage sera plus précise car elle est déterminée par deux emplacements seulement.

Notez que la précision de la valeur de l'enquête Ordnance est limitée. Les valeurs flottantes arduino contiennent 6 à 7 décimales significatives. La formule de conversion implique de nombreux calculs et les erreurs d'arrondi ont des effets cumulatifs. En fin de compte, la précision est limitée par les valeurs renvoyées de sin, cos et tan.

La valeur est semble être précis à + - 0,1

Le nord vers + - 0.02

Par comparaison, les valeurs de longitude / latitude apparaissent précises à + - 0,00001.

La connexion d’un fil ufl à SMA n’affecte pas les performances. Seule une antenne active (1575,42 MHz) serait reconnue par la puce GPS.