Étape 5: Le programme ARDUINO qui tire tous ensemble
Le programme Arduino, que j’ai développé pour ce prototype utilise la bibliothèque de SD. Je n’utilise pas de TinyGPS pour interagir avec le récepteur GPS ou SoftwareSerial. Je n’ai pas TinyGPS pour ce projet, étant donné que j’enregistre des messages NMEA bruts sur la carte SD. Quant à la bibliothèque de SoftwareSerial, après j’ai rencontré quelques problèmes qui ont été longs à résoudre, j’ai décidé de s’en tenir à la bibliothèque de serial Arduino par défaut.
L’inconvénient de ne pas utiliser SoftwareSerial dans ce projet, c’est que le récepteur GPS utiliseront broches RX/TX de l’Arduino pour lire des commandes de configuration et d’envoyer des données GPS à l’Arduino. Cela signifie que nous n’avons pas l’Arduino Serial Monitor disponible pour le débogage. Plus important encore, nous allons devoir débrancher PIN0 (RX du Arduino Uno) de broche TX du récepteur GPS avant de télécharger un programme Arduino. Si nous ne PIN0 (RX de l’Arduino) Débrancher le récepteur GPS, il échouera probablement Télécharger le programme Arduino du PC à l’Arduino en raison de conflits de série. J’ai trouvé ceci pour être un petit prix pour le gain de codage compacité et raccourcir le cycle de développement.
Les données enregistrées par ce programme à la carte SD ressemblera à la liste ci-dessous. Théoriquement, cinq lignes de données GPS et capteur seront générés par seconde. Ce journal peut être importé dans un fichier délimité par des virgules dans une foule d’applications telles que des feuilles de calcul ou de bases de données pour le nettoyage, analyse et cartographie :
- 446,425,542, GPBOD, 093116.200, A, N-3158.0155, 03551.5032, E, 18,78, 291,56, 111112,,, A * 54
- 443,442,542, GPBOD, 093116.400, A, N-3158.0159, 03551.5020, E, 18,78, 291.79, 111112,,, A * 50
- 444,435,523, GPBOD, 093116.600, A, N-3158.0163, 03551.5009, E, 18,77, 292,32, 111112,,, A * 53
- 444,432,525, PRMC, 093116.800, A, N-3158.0167, 03551.4998, E, 18,75, 292.88, 111112,,, A * 5 A
// ====================== START PROGRAM ==========================
/*
PROJET : Bump-O-Meter (enregistreur de données de Geo pour capteurs)
Développeur : Hazim Bitar (techbitar arobase gmail point com)
DESCRIPTION : Ce programme lit les données du capteur accéléromètre ADXL335 (X, Y, Z) ou tout
données du capteur, puis enregistre ces données sur une carte SD avec géo-localisation et un timbre de date/heure
générée par le récepteur GPS LS20031
LICENCE : je suis placer ce code dans le domaine public
DATE : 16 NOVEMBRE 2012
*/
#include
#define LED 8 / / statut LED pour les opérations de SD
#define BUFF_MAX 100 / / taille de tampons GPS & SD
Fichier GPSlog ;
void setup()
{
Serial.Begin(4800) ; Le récepteur GPS de LS20031 doit être défini sur 4800 pour programme fonctionne
Vous pouvez utiliser les instructions ci-dessous pour envoyer des commandes de configuration du GPS de LS20031.
Mais pour ce faire, le débit en bauds doit être défini sur le récepteur GPS de LS20031 à 4800.
Vous pouvez utiliser l’utilitaire de Psiloc 1.4 pour configurer ou interrogez le récepteur GPS LS20031.
//
LS20031 COMMANDES :
Serial.Print("$PMTK251,4800*27\r\n") ; Définir le taux en bauds GPS
Serial.Print("$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*2C\r\n") ; Valeur du CMR 5 correctifs/seconde.
Serial.Print("$PMTK220,200*2C\r\n") ; Taux de mise à jour GPS à 5Hz
pinMode (sortie 10,) ; Par notes de SD de bibliothèque, broche 10 doit être définie à la sortie
pinMode (LED, sortie) ;
if (!. SD.begin(4)) {/ / SD carte détectée ?
digitalWrite(LED,LOW) ; désactiver le voyant d’État si SD détection échoue
retour ;
}
d’autre digitalWrite (LED, haute) ; LED s’allume si la détection de la SD est OK
GPSlog = SD.open (« GPS.log », O_CREAT | O_WRITE) ; ouvrir/ajouter à un fichier GPS.log
if (!. GPSlog) {/ / test si le fichier peut être ouvert
digitalWrite(LED,LOW) ; éteindre la LED de statut si échec du fichier ouvert
retour ;
}
d’autre digitalWrite (LED, haute) ; VOYANT d’État s’allume si le fichier ouvert est OK
}
void loop()
{
inBuffer Char [BUFF_MAX] ; tampon utilisé pour lire des lignes NMEA du GPS
outBuffer octet [BUFF_MAX] ; tampon utilisé pour écrire les lignes NMEA sur carte SD
int sizeBuffer = 0 ; compteur du nombre de caractères par ligne
ICI, NOUS DÉCLARONS UN CAPTEUR ANALOGIQUE PLUS OU MOINS VARIABLES
char an0 [4], an1 [4], an2 [4] ; variables char pour stocker des valeurs analogiques broches. Totales 6 broches de 0-5
tandis que (Serial.available() > 0) / / si les données séries de GPS
{
sizeBuffer = Serial.readBytesUntil ('\n', inBuffer, BUFF_MAX) ; lire une seule ligne NMEA GPS jusqu’en fin de ligne
C’EST OÙ NOUS LISONS DES VALEURS DE CAPTEUR
EGTI (analogRead(A0), an0, 10) ; X lire et convertir char broche analogique numérique
EGTI (analogRead(A1), an1, 10) ; // Y ..
EGTI (analogRead(A2), an2, 10) ; // Z ..
pour (int i = 0; i < BUFF_MAX; i ++) outBuffer [i] = inBuffer [i] ; créer le fichier CSV sur le DD
int j = 0 ;
C’EST OÙ NOUS ÉCRIRE DES DONNÉES DE CAPTEUR DANS LE DOSSIER DU DÉVELOPPEMENT DURABLE
Si {(GPSlog)
GPSlog.print(an0) ; écrire ANALOG0 (X) sur carte SD
GPSlog.print (",") ;
GPSlog.print(an1) ; écrire ANALOG1 (Y) SD
GPSlog.print (",") ;
GPSlog.print(an2) ; écrire ANALOG2 (Z) sur carte SD
GPSlog.print (",") ;
Si vous voulez seulement sortie NMEA connecté, toutes ces déclarations GPSlog.print commentaire
GPSlog.write (outBuffer, sizeBuffer) ; écrire la sortie NMEA GPS sur carte SD
GPSlog.print("\r\n") ;
GPSlog.flush() ;
digitalWrite (LED, haute) ; Garder allumée tant que l’enregistrement SD fonctionne.
}
else {}
Si le fichier n’a pas ouvert, éteignez LED
digitalWrite (LED, faible) ; Éteignez LED en cas d’échec de l’écriture dans le fichier
}
}
}
// ================ END PROGRAM =====================
COMMENT AJOUTER/SUPPRIMER DES CAPTEURS POUR L’ENREGISTREUR DE DONNÉES DE GEO
Ce programme va lire jusqu'à 6 capteurs analogiques et conserver leurs valeurs sur la carte SD. Il y a deux places dans le programme où vous avez besoin d’apporter des modifications à vos besoins :
1. DÉCLARATION DE VARIABLES DE CAPTEUR
Dans la section Déclaration, nous créons des variables de texte qui contiennent les valeurs numériques convertis des capteurs avant de nous écrire sur la carte SD. Ici, nous sommes déclarant pour un maximum de 6 capteurs analogiques. Réduire au besoin.
char an0 [4], an1 [4], an2 [4] ; an3 [4] ; AN4 [4] ; an5 [4] ;
2. LECTURE CAPTEURS
Dans cette partie du programme, nous convertissons les lectures du capteur numérique de texte avant de nous écrire sur la carte SD. Changer le segment de code suivant dans le programme pour ajouter/supprimer des capteurs selon les besoins. Vous pouvez avoir jusqu'à 6 capteurs analogiques lire dans ce programme :
EGTI (analogRead(A0), an0, 10) ;
EGTI (analogRead(A1), an1, 10) ;
EGTI (analogRead(A2), an2, 10) ;
EGTI (analogRead(A3), an0, 10) ;
EGTI (analogRead(A4), an1, 10) ;
EGTI (analogRead(A5), an2, 10) ;
3. ÉCRIRE DES VALEURS DE CAPTEURS SUR LA CARTE SD
Après que nous avons lu l’ou les capteurs qui précède, nous écrivons leurs valeurs de texte sur la carte SD. Dans le segment de code ci-dessous, nous ajoutons une virgule entre chaque valeur de la sonde écrit sur la carte SD, donc nous pouvons les séparer. Cela rend plus facile de les importer dans un tableur comme texte délimité par des virgules :
GPSlog.print(an0) ; écrire ANALOG0 sur carte SD
GPSlog.print (",") ;
GPSlog.print(an1) ; écrire ANALOG1 sur carte SD
GPSlog.print (",") ;
GPSlog.print(an2) ; écrire ANALOG2 sur carte SD
GPSlog.print (",") ;
GPSlog.print(an0) ; écrire ANALOG3 sur carte SD
GPSlog.print (",") ;
GPSlog.print(an1) ; écrire ANALOG4 sur carte SD
GPSlog.print (",") ;
GPSlog.print(an2) ; écrire ANALOG5 sur carte SD
GPSlog.print (",") ;