- Composants requis:
- Schéma de circuit et explication: -
- Obtenir des données de localisation à partir du GPS:
- Étapes pour interfacer le GPS avec le microcontrôleur PIC: -
- Explication du code:
Le GPS est la forme abrégée du système de positionnement global. C'est un système qui fournit une altitude, une latitude, une longitude, une heure UTC précises et bien d'autres informations, qui sont prises à partir de 2, 3, 4 satellites ou plus. Pour lire les données du GPS, nous avons besoin d'un microcontrôleur et nous avons déjà interfacé le GPS avec Arduino et avec Raspberry Pi.
Nous avons sélectionné le module GPS G7020 qui est fabriqué par U-blox. Nous recevrons la longitude et la latitude d'une position particulière du satellite et afficherons la même chose sur un écran LCD de 16 x 2 caractères. Nous allons donc ici interfacer le GPS avec le microcontrôleur PIC16F877A par puce électronique.
Composants requis:
- Pic16F877A - Paquet PDIP40
- Planche à pain
- Pickit-3
- Adaptateur 5V
- LCD JHD162A
- Module GPS uBLOX-G7020
- Fils pour connecter les périphériques.
- Résistances 4,7k
- Pot de 10k
- Cristal de 20 MHz
- 2 condensateurs céramiques 33pF
Schéma de circuit et explication: -
L'écran LCD 16x2 caractères est connecté à travers le microcontrôleur PIC16F877A, dans lequel RB0, RB1, RB2 est respectivement connecté à la broche LCD qui est RS, R / W et E. RB4, RB5, RB6 et RB7 sont connectés aux 4 broches D4, D5 de l'écran LCD, D6, D7. L'écran LCD est connecté en mode 4 bits ou en mode grignotage. En savoir plus sur l'interfaçage de l'écran LCD avec le microcontrôleur PIC.
Un oscillateur à cristal de 20 MHz avec deux condensateurs en céramique de 33pF connectés entre les broches OSC1 et OSC2. Il fournira une fréquence d'horloge constante de 20 MHz au microcontrôleur.
Module GPS uBlox-G7020, recevez et transmettez des données en utilisant UART. PIC16F877A se compose d'un pilote USART à l'intérieur de la puce, nous recevrons les données du module GPS par USART, de sorte qu'une connexion croisée sera établie entre la broche Rx du microcontrôleur et la broche Tx du GPS et la broche de réception USART connectée à la broche de transmission du GPS.
L'uBlox-G7020 a un code couleur pour les broches. La broche positive ou 5V est de couleur rouge, la broche négative ou GND est de couleur noire et la broche de transmission est de couleur bleue.
J'ai connecté tout cela dans la maquette.
Obtenir des données de localisation à partir du GPS:
Voyons comment interfacer le GPS en utilisant USART et voyons le résultat dans un écran LCD 16x2 caractères.
Le module transmettra les données en plusieurs chaînes à un débit de 9600 bauds. Si nous utilisons un terminal UART avec un débit de 9600 bauds, nous verrons les données reçues par GPS.
Le module GPS envoie les données de position de suivi en temps réel au format NMEA (voir la capture d'écran ci-dessus). Le format NMEA se compose de plusieurs phrases, dans lesquelles quatre phrases importantes sont données ci-dessous. Plus de détails sur la phrase NMEA et son format de données peuvent être trouvés ici.
- $ GPGGA: Données de correction du système de positionnement global
- $ GPGSV: satellites GPS en vue
- $ GPGSA: GPS DOP et satellites actifs
- $ GPRMC: Données GPS / Transit spécifiques minimales recommandées
En savoir plus sur les données GPS et les chaînes NMEA ici.
Il s'agit des données reçues par le GPS lorsqu'il est connecté à un débit de 9600 bauds.
$ GPRMC, 141848.00, A, 2237.63306, N, 08820.86316, E, 0.553`` 100418``, A * 73 $ GPVTG`` T`` M, 0.553, N, 1.024, K, A * 27 $ GPGGA, 141848.00, 2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54.2, M,, * 74 $ GPGSA, A, 2,06,02,05,,,,,,,,,,, 2,75, 2.56,1.00 * 02 $ GPGSV, 1,1,04,02,59,316,30,05,43,188,25,06,44,022,23,25,03,324, * 76 $ GPGLL, 2237.63306, N, 08820.86316, E, 141848.00, A, A * 65
Lorsque nous utilisons le module GPS pour suivre n'importe quel emplacement, nous n'avons besoin que de coordonnées et nous pouvons le trouver dans la chaîne $ GPGGA. Seule la chaîne $ GPGGA (Global Positioning System Fix Data) est principalement utilisée dans les programmes et les autres chaînes sont ignorées.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54.2, M`` * 74
Quelle est la signification de cette ligne?
La signification de cette ligne est: -
1. La chaîne commence toujours par un signe «$»
2. GPGGA signifie Global Positioning System Fix Data.
3. «,» La virgule indique la séparation entre deux valeurs
4. 141848.00: Heure GMT 14 (h): 18 (min): 48 (sec): 00 (ms)
5. 2237.63306, N: Latitude 22 (degrés) 37 (minutes) 63306 (sec) Nord
6. 08820.86316, E: Longitude 088 (degré) 20 (minutes) 86316 (sec) Est
7. 1: Fix Quantity 0 = données non valides, 1 = données valides, 2 = correction DGPS
8. 03: Nombre de satellites actuellement visionnés.
9. 1.0: HDOP
10. 2.56, M: Altitude (hauteur au-dessus du niveau de la mer en mètre)
11. 1.9, M: hauteur des géoïdes
12. * 74: somme de contrôle
Nous avons donc besoin des numéros 5 et 6 pour collecter des informations sur l'emplacement du module ou sur son emplacement.
Étapes pour interfacer le GPS avec le microcontrôleur PIC: -
- Définissez les configurations du microcontrôleur qui incluent la configuration de l'oscillateur.
- Définissez le port souhaité pour l'écran LCD, y compris le registre TRIS.
- Connectez le module GPS au microcontrôleur en utilisant USART.
- Initialisez le système USART en mode de réception continue, avec un débit de 9600 bauds et un écran LCD en mode 4 bits.
- Prenez deux tableaux de caractères en fonction de la longueur de la latitude et de la longitude.
- Recevez un caractère bit à la fois et vérifiez s'il est démarré à partir de $ ou non.
- Si $ Receive est une chaîne, nous devons vérifier GPGGA, ces 5 lettres et la virgule.
- Si c'est GPGGA, alors nous sauterons l'heure et chercherons la latitude et la longitude, nous stockerons la latitude et la longitude dans un tableau de deux caractères jusqu'à ce que N (Nord) et E (Est) ne soient pas reçus.
- Nous imprimerons le tableau sur l'écran LCD.
- Effacez le tableau.
Explication du code:
Regardons le code ligne par ligne. Les premières lignes sont pour la configuration des bits de configuration qui ont été expliqués dans le tutoriel précédent, donc je les saute pour le moment. Le Code complet est donné à la fin de ce tutoriel.
Ces cinq lignes sont utilisées pour inclure les fichiers d'en-tête de bibliothèque, lcd.h et eusart.h sont respectivement pour LCD et USART. Et xc.h est pour le fichier d'en-tête du microcontrôleur.
#comprendre
Dans la fonction void main () , le system_init () ; La fonction est utilisée pour initialiser l'écran LCD et USART.
Void main (void) { TRISB = 0x00; // Définition comme sortie system_init ();
Le lcd_init (); et EUSART_Intialize (); est appelé à partir des deux bibliothèques lcd.h et eusart.h
void system_init (void) { lcd_init (); // Ceci initialisera l'écran LCD EUSART1_Initialize (); // Cela initialisera l'Eusart }
En tout boucle, nous brisons la chaîne de GPGGA pour obtenir coordonner la longitude et la latitude. Nous recevons un bit à la fois et le comparons aux caractères individuels présents dans la chaîne GPGGA.
Nous cassons les codes que nous obtiendrons: -
incomer_data = EUSART1_Read (); // Vérifiez la chaîne '$ GPGGA,' / * ------------------------------ Recherche étape par étape de la ligne GPGGA- --------------------------- * / if (incomer_data == '$') {// La première instruction des données GPS commence par un $ sign incomer_data = EUSART1_Read (); // Si le premier if devient vrai alors la phase suivante if (incomer_data == 'G') { incomer_data = EUSART1_Read (); if (données_d'entrée == 'P'); { données_d'entrée = EUSART1_Read (); if (données_d'entrée == 'G'); { données_d'arrivée = EUSART1_Read (); if (données_d'entrée == 'G') { données_d'entrée = EUSART1_Read (); if (données_incomposées == 'A') { données_incomères = EUSART1_Read (); if (incomer_data == ',') {// premier, reçu incomer_data = EUSART1_Read (); // A ce stade Archivage final terminé, GPGGA est trouvé.
En utilisant ce code, nous sautons l'heure UTC.
while (incomer_data! = ',') {// Sauter l' heure GMT incomer_data = EUSART1_Read (); }
Ce code sert à stocker les données de latitude et de longitude dans le tableau de caractères.
incomer_data = EUSART1_Read (); latitude = données_incomères; while (incomer_data! = ',') { for (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); latitude = données_incomères; // Stocke les données Latitude } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); longitude = données_incomères; // Stocker les données de longitude } }
Et enfin, nous avons imprimé la longitude et la latitude sur l'écran LCD.
array_count = 0; lcd_com (0x80); // Sélection de la ligne 1 de l'écran LCD while (array_count <12) {// Le tableau de données Latitude est à 11 chiffres lcd_data (latitude); // Imprimer les données Latitude array_count ++; } array_count = 0; lcd_com (0xC0); // Sélection de la deuxième ligne LCD while (array_count <13) {// Le tableau des données de longitude est à 12 chiffres lcd_data (longitude); // Affiche les données de longitude array_count ++; }
C'est ainsi que nous pouvons interfacer le module GPS avec le microcontrôleur PIC pour obtenir la latitude et la longitude de l'emplacement actuel.
Le code complet et les fichiers d'en-tête sont donnés ci-dessous.