- Erforderliche Komponenten
- Standortdaten vom GPS abrufen
- Schaltplan
- Schritte zur Schnittstelle von GPS mit dem AVR-Mikrocontroller
- Code Erklärung
GPS- Module werden häufig in elektronischen Anwendungen verwendet, um den Standort anhand von Längen- und Breitengradkoordinaten zu verfolgen. Fahrzeugverfolgungssystem, GPS-Uhr, Unfallerkennungssystem, Verkehrsnavigation, Überwachungssystem usw. sind nur einige Beispiele, bei denen die GPS-Funktionalität von wesentlicher Bedeutung ist. GPS bietet Höhe, Breite, Länge, UTC-Zeit und viele andere Informationen über den jeweiligen Standort, die von mehr als einem Satelliten stammen. Zum Lesen von GPS-Daten wird ein Mikrocontroller benötigt. Hier verbinden wir das GPS-Modul mit dem AVR-Mikrocontroller Atmega16 und drucken den Längen- und Breitengrad auf einem 16x2-LCD-Display.
Erforderliche Komponenten
- Atmega16 / 32
- GPS-Modul (uBlox Neo 6M GPS)
- Lange Drahtantenne
- 16x2 LCD
- 2.2k Widerstand
- 1000uf Kondensator
- 10uF Kondensator
- Verbindungskabel
- LM7805
- DC Jack
- 12V DC Adapter
- Burgstips
- PCB oder Allzweckplatine
Ublox Neo 6M ist ein serielles GPS-Modul, das über serielle Kommunikation Standortdetails bereitstellt. Es hat vier Stifte.
Stift |
Beschreibung |
Vcc |
2,7 - 5V Stromversorgung |
Gnd |
Boden |
TXD |
Daten übertragen |
RXD |
Empfange Daten |
Das Ublox neo 6M GPS-Modul ist TTL-kompatibel und die technischen Daten sind unten angegeben.
Zeit erfassen |
Kaltstart: 27s, Heißstart: 1s |
Kommunikationsprotokoll |
NMEA |
Serielle Kommunikation |
9600 bps, 8 Datenbits, 1 Stoppbit, keine Parität und keine Flusskontrolle |
Betriebsstrom |
45mA |
Standortdaten vom GPS abrufen
Das GPS-Modul überträgt Daten in mehreren Zeichenfolgen mit einer Baudrate von 9600. Wenn wir ein UART-Terminal mit einer Baudrate von 9600 verwenden, können wir die vom GPS empfangenen Daten sehen.
Das GPS-Modul sendet die Positionsdaten zur Echtzeitverfolgung im NMEA-Format (siehe Abbildung oben). Das NMEA-Format besteht aus mehreren Sätzen, in denen im Folgenden vier wichtige Sätze aufgeführt sind. Weitere Details zum NMEA-Satz und seinem Datenformat finden Sie hier.
- $ GPGGA: Fixierungsdaten für das globale Positionierungssystem
- $ GPGSV: GPS-Satelliten im Blick
- $ GPGSA: GPS DOP und aktive Satelliten
- $ GPRMC: Empfohlene minimale spezifische GPS / Transit-Daten
Erfahren Sie hier mehr über GPS-Daten und NMEA-Strings.
Dies sind die Daten, die vom GPS empfangen werden, wenn eine Verbindung mit einer Baudrate von 9600 hergestellt wird.
$ 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
Wenn wir ein GPS-Modul zum Verfolgen eines beliebigen Standorts verwenden, benötigen wir nur Koordinaten, die wir in einer $ GPGGA-Zeichenfolge finden. In Programmen wird meistens nur die Zeichenfolge $ GPGGA (Global Positioning System Fix Data) verwendet, und andere Zeichenfolgen werden ignoriert.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Was bedeutet diese Zeile?
Die Bedeutung dieser Zeile ist: -
1. String beginnt immer mit einem "$" - Zeichen
2. GPGGA steht für Global Positioning System Fix Data
3. "," Komma gibt die Trennung zwischen zwei Werten an
4. 141848.00: GMT-Zeit als 14 (h): 18 (min): 48 (s): 00 (ms)
5. 2237.63306, N: Breitengrad 22 (Grad) 37 (Minuten) 63306 (Sek.) Nord
6. 08820.86316, E: Längengrad 088 (Grad) 20 (Minuten) 86316 (Sek.) Ost
7. 1: Fix Menge 0 = ungültige Daten, 1 = gültige Daten, 2 = DGPS Fix
8. 03: Anzahl der aktuell angezeigten Satelliten.
9. 1.0: HDOP
10. 2.56, M: Höhe (Höhe über dem Meeresspiegel in Metern)
11. 1.9, M: Geoidenhöhe
12. * 74: Prüfsumme
Wir brauchen also Nr. 5 und Nr. 6, um Informationen über den Modulstandort oder den Standort zu erhalten. In diesem Projekt haben wir eine GPS-Bibliothek verwendet, die einige Funktionen zum Extrahieren des Längen- und Breitengrads bietet, sodass wir uns darüber keine Gedanken machen müssen.
Wir haben zuvor GPS mit anderen Mikrocontrollern verbunden:
- Verwendung von GPS mit Arduino
- Raspberry Pi GPS-Modul Schnittstellen-Tutorial
- Verbindung des GPS-Moduls mit dem PIC-Mikrocontroller
- Verfolgen Sie ein Fahrzeug auf Google Maps mit Arduino, ESP8266 und GPS
Überprüfen Sie hier alle GPS-Projekte.
Schaltplan
Der Schaltplan für die GPS-Schnittstelle mit dem AVR Atemga16-Mikrocontroller ist unten angegeben:
Das gesamte System wird von einem 12-V-Gleichstromadapter gespeist, die Schaltkreise arbeiten jedoch mit 5 V, sodass die Stromversorgung durch den Spannungsregler LM7805 auf 5 V geregelt wird. Ein 16x2-LCD ist im 4-Bit-Modus konfiguriert und seine Pin-Verbindungen sind im Schaltplan dargestellt. GPS wird auch mit 5 V betrieben und sein TX-Pin ist direkt mit dem Rx des Atmega16-Mikrocontrollers verbunden. Ein 8-MHz-Quarzoszillator wird zum Takten des Mikrocontrollers verwendet.
Schritte zur Schnittstelle von GPS mit dem AVR-Mikrocontroller
- Stellen Sie die Konfigurationen des Mikrocontrollers ein, die die Oszillatorkonfiguration enthalten.
- Stellen Sie den gewünschten Anschluss für LCD einschließlich DDR-Register ein.
- Schließen Sie das GPS-Modul mit USART an den Mikrocontroller an.
- Initialisieren Sie den System-UART im ISR-Modus mit 9600 Baudrate und LCD im 4-Bit-Modus.
- Nehmen Sie je nach Längen- und Breitengrad zwei Zeichenfelder.
- Empfangen Sie jeweils ein Zeichenbit und prüfen Sie, ob es von $ aus gestartet wurde oder nicht.
- Wenn $ empfangen wird, handelt es sich um eine Zeichenfolge. Wir müssen $ GPGGA überprüfen, diese 6 Buchstaben einschließlich $.
- Wenn es sich um GPGGA handelt, erhalten Sie die vollständige Zeichenfolge und setzen Sie Flags.
- Extrahieren Sie dann den Breiten- und Längengrad mit Richtungen in zwei Arrays.
- Drucken Sie abschließend die Breiten- und Längengrad-Arrays auf dem LCD.
Code Erklärung
Der vollständige Code mit einem Demonstrationsvideo wird am Ende angegeben. Hier werden einige wichtige Teile des Codes erläutert.
Fügen Sie zunächst einen erforderlichen Header in den Code ein und schreiben Sie dann MACROS der Bitmaske für die LCD- und UART-Konfiguration.
#define F_CPU 8000000ul #include #include
Deklarieren und initialisieren Sie nun einige Variablen und Arrays zum Speichern von GPS-Zeichenfolgen, Längen- und Breitengraden und Flags.
char buf; flüchtiges Zeichen ind, flag, stringReceived; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; Char Breitengrad; char logitude;
Danach haben wir einige LCD-Treiberfunktion, um LCD zu steuern.
void lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; if (r == 1) RSHigh; sonst RSLow; ENHigh; Verzögerung (1); ENLow; Verzögerung (1); LCDPORT = ch << 4 & 0xF0; RWLow; if (r == 1) RSHigh; sonst RSLow; ENHigh; Verzögerung (1); ENLow; Verzögerung (1); } void lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ delay_ms (20); } } void lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; für (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }}
Danach haben wir die serielle Kommunikation mit GPS initialisiert und den empfangenen String mit "GPGGA" verglichen:
void serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Wenn nun die empfangene Zeichenfolge erfolgreich mit GPGGA übereinstimmt, extrahieren und zeigen Sie in der Hauptfunktion die Längen- und Breitengradkoordinaten des Standorts an:
lcdwrite (0x80,0); lcdprint ("Lat:"); Seriendruck ("Latitude:"); für (int i = 15; i <27; i ++) { Latitude = buf; lcdwrite (Breitengrad 1); Serienschreiben (Breitengrad); if (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Log:"); Seriendruck ("Logitude:"); für (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitude, 1); Serienschreiben (Logitude); if (i == 38) { lcdwrite ('', 1); i ++; } }
Auf diese Weise kann das GPS-Modul mit ATmega16 verbunden werden, um die Standortkoordinaten zu ermitteln.
Den vollständigen Code und das Arbeitsvideo finden Sie unten.