- Vereiste componenten:
- Schakelschema en uitleg: -
- Locatiegegevens ophalen van GPS:
- Stappen om GPS te koppelen aan PIC Microcontroller: -
- Code Verklaring:
GPS is de afkorting van Global Positioning System. Het is een systeem dat nauwkeurige hoogte, breedtegraad, lengtegraad, UTC-tijd en nog veel meer informatie geeft, die wordt verkregen van 2, 3, 4 of meer satellieten. Om gegevens van GPS te kunnen lezen, hebben we een Microcontroller nodig en we hebben GPS al gekoppeld aan Arduino en Raspberry Pi.
We hebben de G7020 GPS-module geselecteerd die is gemaakt door U-blox. We ontvangen de lengte- en breedtegraad van een bepaalde positie van een satelliet en zullen hetzelfde weergeven op een LCD-scherm van 16x2 tekens. Dus hier zullen we GPS koppelen aan de PIC16F877A microcontroller door middel van een microchip.
Vereiste componenten:
- Pic16F877A - PDIP40-pakket
- Broodplank
- Pickit-3
- 5V adapter
- LCD JHD162A
- uBLOX-G7020 GPS-module
- Draden om randapparatuur aan te sluiten.
- 4.7k weerstanden
- 10k pot
- 20 MHz Kristal
- 2 stuks 33pF keramische condensatoren
Schakelschema en uitleg: -
LCD-scherm van 16x2 tekens is verbonden via PIC16F877A-microcontroller, waarin RB0, RB1, RB2 respectievelijk is verbonden met de LCD-pin die RS, R / W en E. is.RB4, RB5, RB6 en RB7 zijn verbonden met de 4-pins D4, D5 van het LCD-scherm, D6, D7. Het LCD-scherm is aangesloten in 4bit-modus of nibble-modus. Lees meer over het koppelen van LCD met PIC Microcontroller.
Een kristaloscillator van 20 MHz met twee keramische condensatoren van 33 pF verbonden over OSC1 en OSC2 pin. Het levert een constante klokfrequentie van 20 MHz aan de microcontroller.
uBlox-G7020 GPS-module, gegevens ontvangen en verzenden met UART. PIC16F877A bestaat uit één USART-stuurprogramma in de chip, we ontvangen gegevens van de GPS-module door USART, dus er wordt een kruisverbinding gemaakt van de microcontroller Rx-pin naar de Tx-pin van GPS en de USART-ontvangstpin die is verbonden via de transmissiepin van GPS.
De uBlox-G7020 heeft een kleurcode voor de pinnen. De positieve of 5V-pin is rood, de negatieve of GND-pin is zwart en de transmissiepin is blauw.
Ik heb dit allemaal in het breadboard aangesloten.
Locatiegegevens ophalen van GPS:
Laten we eens kijken hoe we GPS kunnen koppelen met USART en het resultaat zien in een LCD-scherm van 16x2 tekens.
De module verzendt gegevens in meerdere strings met een baudsnelheid van 9600. Als we een UART-terminal gebruiken met 9600 baudrate, zullen we de gegevens zien die door GPS worden ontvangen.
GPS-module verzendt de real-time tracking positiegegevens in NMEA-formaat (zie de bovenstaande schermafbeelding). Het NMEA-formaat bestaat uit meerdere zinnen, waarin hieronder vier belangrijke zinnen worden gegeven. Meer informatie over de NMEA-zin en het gegevensformaat vindt u hier.
- $ GPGGA: herstelgegevens voor Global Positioning System
- $ GPGSV: GPS-satellieten in zicht
- $ GPGSA: GPS DOP en actieve satellieten
- $ GPRMC: aanbevolen minimale specifieke GPS / Transit-gegevens
Lees hier meer over GPS-gegevens en NMEA-strings.
Dit zijn de gegevens die worden ontvangen door GPS bij aansluiting op 9600 baudrate.
$ 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
Wanneer we een GPS-module gebruiken om een locatie te volgen, hebben we alleen coördinaten nodig en kunnen we deze vinden in de $ GPGGA-string. Alleen $ GPGGA (Global Positioning System Fix Data) String wordt meestal in programma's gebruikt en andere strings worden genegeerd.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54.2, M`` * 74
Wat is de betekenis van die regel?
Betekenis van die regel is: -
1. String begint altijd met een "$" -teken
2. GPGGA staat voor Global Positioning System Fix Data
3. "," Komma geeft de scheiding tussen twee waarden aan
4. 141848.00: GMT-tijd als 14 (uur): 18 (min): 48 (sec): 00 (ms)
5. 2237.63306, N: Breedtegraad 22 (graden) 37 (minuten) 63306 (sec) Noord
6. 08820.86316, E: Lengtegraad 088 (graden) 20 (minuten) 86316 (sec) Oost
7. 1: Aantal reparaties 0 = ongeldige gegevens, 1 = geldige gegevens, 2 = DGPS-fix
8. 03: Aantal satellieten dat momenteel wordt bekeken.
9. 1.0: HDOP
10. 2,56, M: Hoogte (hoogte boven zeeniveau in meter)
11. 1.9, M: hoogte Geoids
12. * 74: checksum
We hebben dus nr. 5 en nr. 6 nodig om informatie te verzamelen over de locatie van de module of, waar deze zich bevindt.
Stappen om GPS te koppelen aan PIC Microcontroller: -
- Stel de configuraties van de microcontroller in, waaronder de oscillatorconfiguratie.
- Stel de gewenste poort in voor LCD inclusief TRIS-register.
- Verbind de GPS-module met de microcontroller met behulp van USART.
- Initialiseer het systeem USART in continue ontvangstmodus, met 9600 baudrate en LCD met 4bit-modus.
- Neem twee tekenarrays, afhankelijk van de lengte van de lengte- en breedtegraad.
- Ontvang één tekenbit per keer en controleer of het vanaf $ wordt gestart of niet.
- Als $ Receive dan is het een string, we moeten GPGGA controleren, deze 5 letters en de komma.
- Als het GPGGA is, slaan we de tijd over en zoeken we naar de breedtegraad en lengtegraad. We slaan de breedtegraad en lengtegraad op in een array van twee tekens totdat N (Noord) en E (Oost) niet zijn ontvangen.
- We zullen de array in LCD afdrukken.
- Wis de array.
Code Verklaring:
Laten we de code regel voor regel bekijken. De eerste paar regels zijn voor het instellen van configuratiebits die in de vorige tutorial zijn uitgelegd, dus ik sla ze voorlopig over. De volledige code wordt aan het einde van deze tutorial gegeven.
Deze vijf regels worden gebruikt voor het opnemen van bibliotheekkopbestanden, lcd.h en eusart.h zijn respectievelijk voor LCD en USART. En xc.h is voor het header-bestand van de microcontroller.
# omvatten
In void main () functie, de system_init () ; functie wordt gebruikt om LCD en USART te initialiseren.
Void main (void) { TRISB = 0x00; // Instellen als output system_init ();
De lcd_init (); en EUSART_Intialize (); wordt aangeroepen vanuit de twee bibliotheken lcd.h en eusart.h
void system_init (void) { lcd_init (); // Dit zal de lcd EUSART1_Initialize () initialiseren ; // Hiermee wordt de Eusart } geïnitialiseerd
In de while- lus breken we de GPGGA-string om de coördinaten voor lengtegraad en breedtegraad te krijgen. We ontvangen bit voor bit en vergelijken het met individuele karakters in de GPGGA-string.
We breken de codes die we zullen krijgen: -
incomer_data = EUSART1_Read (); // Controleer de string '$ GPGGA,' / * ------------------------------ Stap voor stap de GPGGA-regel zoeken- --------------------------- * / if (incomer_data == '$') {// Eerste instructie van de GPS-gegevens begint met een $ sign incomer_data = EUSART1_Read (); // Als de eerste if waar wordt, dan is de volgende fase if (incomer_data == 'G') { incomer_data = EUSART1_Read (); if (incomer_data == 'P'); { incomer_data = EUSART1_Read (); if (incomer_data == 'G'); { incomer_data = EUSART1_Read (); if (incomer_data == 'G') { incomer_data = EUSART1_Read (); if (incomer_data == 'A') { incomer_data = EUSART1_Read (); if (incomer_data == ',') {// eerste, ontvangen incomer_data = EUSART1_Read (); // In dit stadium is de laatste check-in voltooid, GPGGA is gevonden.
Door deze code te gebruiken, slaan we de UTC-tijd over.
while (incomer_data! = ',') {// GMT-tijd overslaan incomer_data = EUSART1_Read (); }
Deze code is voor het opslaan van de lengte- en breedtegraadgegevens in de tekenreeks.
incomer_data = EUSART1_Read (); latitude = incomer_data; while (incomer_data! = ',') { for (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); latitude = incomer_data; // Sla de Latitude-gegevens op } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); lengtegraad = incomer_data; // Bewaar de lengtegraadgegevens } }
En tot slot hebben we de lengte- en breedtegraad op LCD afgedrukt.
array_count = 0; lcd_com (0x80); // Selectie van LCD-regel één while (array_count <12) {// Array van Latitude-gegevens is 11 digit lcd_data (latitude); // Druk de Latitude data array_count ++ af; } array_count = 0; lcd_com (0xC0); // Selectie van lcd-regel twee while (array_count <13) {// Array van lengtegraadgegevens is 12-cijferige lcd_data (lengtegraad); // Druk de lengtegraadgegevens array_count ++ af; }
Dit is hoe we de GPS-module kunnen koppelen met PIC Microcontroller om de lengte- en breedtegraad van de huidige locatie te krijgen.
Volledige code en header-bestanden worden hieronder gegeven.