GPS verbinden met Arduino. Een karaktersynthetiserende LCD-indicator aansluiten. Gemonteerd GPS-schild aangesloten op Arduino

Na verschillende experimenten met Arduino besloot ik een eenvoudige en niet al te dure GPS-tracker te maken waarvan de coördinaten via GPRS naar de server worden verzonden.
Gebruikte Arduino Mega 2560 ( Arduino Uno), SIM900 - GSM/GPRS-module (voor het verzenden van informatie naar de server), GPS-ontvanger SKM53 GPS.

Alles werd gekocht op ebay.com, voor een bedrag van ongeveer 1500 roebel (ongeveer 500 roebel voor de Arduino, iets minder - GSM-module, een beetje meer - GPS).

GPS-ontvanger

Eerst moet u begrijpen hoe u met GPS moet werken. De geselecteerde module is een van de goedkoopste en eenvoudigste. De fabrikant belooft echter een batterij om satellietgegevens op te slaan. Volgens het gegevensblad is koud begin zou 36 seconden moeten duren, maar onder mijn omstandigheden (10e verdieping vanaf de vensterbank, geen gebouwen in de buurt) duurde het maar liefst 20 minuten. De volgende start is echter al 2 minuten.

Een belangrijke parameter van apparaten die op de Arduino zijn aangesloten, is het stroomverbruik. Als u de Arduino-converter overbelast, kan deze doorbranden. Voor de gebruikte ontvanger bedraagt ​​het maximale stroomverbruik 45mA @ 3,3V. Waarom de specificatie de stroomsterkte zou moeten aangeven bij een andere spanning dan de vereiste (5V) is mij een raadsel. De Arduino-converter is echter bestand tegen 45 mA.

Verbinding
GPS wordt niet aangestuurd, hoewel het een RX-pin heeft. Met welk doel is onbekend. Het belangrijkste wat je met deze ontvanger kunt doen, is via het NMEA-protocol gegevens uitlezen van de TX-pin. Niveaus - 5V, alleen voor Arduino, snelheid - 9600 baud. Ik verbind VIN met VCC van de Arduino, GND met GND, TX met RX van het overeenkomstige serienummer. Ik lees de gegevens eerst handmatig uit en vervolgens met behulp van de TinyGPS-bibliotheek. Verrassend genoeg is alles leesbaar. Nadat ik naar Uno was overgestapt, moest ik SoftwareSerial gebruiken, en toen begonnen de problemen: sommige berichttekens gingen verloren. Dit is niet erg kritisch, aangezien TinyGPS ongeldige berichten afsnijdt, maar het is behoorlijk onaangenaam: je kunt de 1Hz-frequentie vergeten.

Een korte opmerking over SoftwareSerial: er zijn geen hardwarepoorten op de Uno (behalve degene die is aangesloten op USB Serial), dus je moet software gebruiken. Het kan dus alleen gegevens ontvangen op een pin waarop het bord interrupts ondersteunt. In het geval van Uno zijn dit 2 en 3. Bovendien kan slechts één zo'n poort tegelijk gegevens ontvangen.

Zo ziet de “proefstand” eruit.

GSM-ontvanger/zender


Nu komt het interessantere deel. GSM-module - SIM900. Het ondersteunt GSM en GPRS. Noch EDGE, noch vooral 3G, worden ondersteund. Voor het verzenden van coördinaatgegevens is dit waarschijnlijk goed: er zullen geen vertragingen of problemen optreden bij het schakelen tussen modi, en GPRS is nu bijna overal beschikbaar. Echter, voor nog wat meer complexe toepassingen dit is misschien niet langer voldoende.

Verbinding
De module wordt ook bestuurd door seriële poort, met hetzelfde niveau - 5V. En hier hebben we zowel RX als TX nodig. De module is schild, dat wil zeggen dat hij op de Arduino is geïnstalleerd. Bovendien is het compatibel met zowel mega als uno. De standaardsnelheid is 115200.

We monteren het op Mega, en hier wacht ons de eerste onaangename verrassing: de TX-pin van de module valt op de 7e pin van Mega. Op de 7e pin van de mega zijn er geen interrupts beschikbaar, waardoor je bijvoorbeeld de 7e pin moet aansluiten op de 6e pin, waarop wel onderbrekingen mogelijk zijn. We zullen dus één Arduino-pin verspillen. Nou, voor een mega is het niet erg eng - er zijn tenslotte genoeg pinnen. Maar voor Uno is dit al ingewikkelder (ik herinner je eraan dat er maar 2 pinnen zijn die interrupts ondersteunen - 2 en 3). Als oplossing voor dit probleem kunnen we voorstellen om de module niet op de Arduino te installeren, maar met draden aan te sluiten. Dan kunt u Serie1 gebruiken.

Na het verbinden proberen we met de module te “praten” (vergeet niet deze aan te zetten). We selecteren de poortsnelheid - 115200, en het is goed als alle ingebouwde seriële poorten (4 op mega, 1 op uno) en alle softwarepoorten op dezelfde snelheid werken. Op deze manier kunt u een stabielere gegevensoverdracht realiseren. Ik weet niet waarom, hoewel ik het wel kan raden.

We schrijven dus primitieve code voor het doorsturen van gegevens tussen seriële poorten, stuur Atz, stilte als antwoord. Wat is er gebeurd? Ah, hoofdlettergevoelig. ATZ, het komt goed. Hoera, de module kan ons horen. Wilt u ons uit nieuwsgierigheid even bellen? ATD +7499... De vaste telefoon gaat, er komt rook uit de Arduino, de laptop gaat uit. De Arduino-converter is doorgebrand. Het was een slecht idee om hem 19 volt te geven, hoewel er geschreven staat dat hij van 6 tot 20 V kan werken, 7-12 V wordt aanbevolen. De datasheet van de GSM-module vermeldt nergens iets over het stroomverbruik onder belasting. Nou, Mega gaat naar het magazijn met reserveonderdelen. Met ingehouden adem zet ik de laptop aan, die +19V ontving via de +5V-lijn van USB. Het werkt, en zelfs de USB is niet doorgebrand. Bedankt Lenovo voor het beschermen van ons.

Nadat de converter was doorgebrand, zocht ik naar het huidige verbruik. Dus piek - 2A, typisch - 0,5A. Dit valt duidelijk buiten de mogelijkheden van de Arduino-converter. Heeft aparte voeding nodig.

Programmering
De module biedt volop mogelijkheden gegevensoverdracht. Vanaf spraakoproepen en SMS en eindigend met GPRS. Bovendien is het voor dit laatste mogelijk om uit te voeren HTTP-verzoek met behulp van AT-commando's. Je zult er meerdere moeten sturen, maar het is de moeite waard: je wilt niet echt handmatig een verzoek indienen. Er zijn een paar nuances bij het openen van een datatransmissiekanaal via GPRS - onthoud de klassieke AT+CGDCONT=1, “IP”, “apn”? Hier is dus hetzelfde nodig, maar dan iets sluwer.

Om een ​​pagina op een specifieke URL te krijgen, moet u de volgende opdrachten verzenden:
AT+SAPBR=1,1 //Open carrier (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //verbindingstype - GPRS AT+SAPBR=3,1,"APN","internet" //APN, voor Megafon - internet AT+HTTPINIT //Initialiseer HTTP AT+HTTPPARA="CID",1 //Carrier ID om te gebruiken. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //De daadwerkelijke URL, na sprintf met coördinaten AT+HTTPACTION=0 // Vraag gegevens op met behulp van de GET-methode //wacht op antwoord AT+HTTPTERM //stop HTTP

Als er dus verbinding is, krijgen wij een reactie van de server. Dat wil zeggen dat we in feite al weten hoe we coördinaatgegevens moeten verzenden als de server deze via GET ontvangt.

Voeding
Omdat het voeden van de GSM-module via een Arduino-converter, zoals ik ontdekte, een slecht idee is, werd besloten om op dezelfde eBay een 12v->5v, 3A-converter te kopen. De module houdt echter niet van 5V-voeding. Laten we voor een hack gaan: sluit 5V aan op de pin waar 5V uit de Arduino komt. Vervolgens maakt de ingebouwde converter van de module (veel krachtiger dan de Arduino converter, MIC 29302WU) vanaf 5V wat de module nodig heeft.

Server

De server schreef een primitieve versie: coördinaten opslaan en tekenen op Yandex.maps. In de toekomst is het mogelijk om diverse features toe te voegen, waaronder ondersteuning voor veel gebruikers, “gewapend/ongewapend”-status, de staat van de autosystemen (ontsteking, koplampen etc.) en mogelijk zelfs bediening van de autosystemen. Uiteraard met passende ondersteuning voor de tracker, die soepel verandert in een volwaardig alarmsysteem.

Veldtesten

Zo ziet het gemonteerde apparaat eruit, zonder behuizing:

Nadat u de stroomomvormer hebt geïnstalleerd en in de behuizing van een dood DSL-modem hebt geplaatst, ziet het systeem er als volgt uit:

Ik heb de draden gesoldeerd en verschillende contacten uit de Arduino-blokken verwijderd. Ze zien er zo uit:

Ik sloot 12V aan in de auto, reed door Moskou en kreeg de track:


De trackpunten liggen behoorlijk ver uit elkaar. De reden hiervoor is dat het verzenden van gegevens via GPRS relatief lang duurt, en gedurende deze tijd worden de coördinaten niet gelezen. Dit is duidelijk een programmeerfout. Het wordt ten eerste behandeld door onmiddellijk een pakket coördinaten in de loop van de tijd te verzenden, en ten tweede door asynchroon te werken met de GPRS-module.

De zoektijd voor satellieten op de passagiersstoel van een auto bedraagt ​​enkele minuten.

Conclusies

Creatie GPS-tracker Arduino met je eigen handen gebruiken is mogelijk, maar dat is niet het geval triviale taak. De belangrijkste vraag nu - hoe u het apparaat in de auto kunt verbergen zodat het niet wordt blootgesteld aan invloeden schadelijke factoren(water, temperatuur), was niet bedekt met metaal (GPS en GPRS worden afgeschermd) en viel niet bijzonder op. Voorlopig ligt hij gewoon in de cabine en wordt hij aangesloten op de sigarettenaansteker.

Welnu, we moeten ook de code corrigeren voor een vloeiender spoor, hoewel de tracker de hoofdtaak al vervult.

Gebruikte apparaten

  • Arduino Mega2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • Op SIM900 gebaseerd GSM/GPRS-schild
  • DC-DC 12v -> 5v 3A omvormer

Heeft u een nauwkeurige tijdbron van GPS nodig? Dit artikel laat zien hoe je een GPS-module gebruikt om tijd, datum en coördinaten op te halen, en hoe je deze op een LCD kunt weergeven met Arduino.

Wat is er nodig?

  • computer waarop Arduino IDE is geïnstalleerd;
  • Arduino (wij gebruiken Arduino Mega);
  • GPS-module (we gebruiken EM-411, andere zijn mogelijk die het NMEA-protocol ondersteunen, bijvoorbeeld VK2828U7G5LF of GY-NEO6MV2);
  • breadboard, jumpers en 5 kOhm potentiometer;
  • TinyGPS-bibliotheek (link hieronder).

Invoering

Systeem creatie mondiale positionering, of GPS, begon begin jaren zeventig. Elk land (Rusland, de VS, China, enz.) heeft zijn eigen land eigen systeem, maar de meeste fondsen satellietnavigatie Het Amerikaanse systeem wordt over de hele wereld gebruikt.

Elke satelliet in het systeem heeft een atoomklok die continu wordt bewaakt en aangepast door NORAD (het Aerospace Defense Command). Noord-Amerika) elke dag.

In wezen gebruikt de ontvanger zijn klok om de TOA (tijd van aankomst) van vier te meten satellietsignalen. Op basis van TOA en TOT (tijd van verzending) berekent de ontvanger vier waarden van de vluchttijd (TOF), die van elkaar verschillen afhankelijk van de afstand van de satelliet tot de ontvanger. Vervolgens berekent de ontvanger uit de vier TOF-waarden zijn positie in de 3D-ruimte en de afwijking van zijn klok.

De meest goedkope GPS-ontvangers hebben voor de meeste plaatsen op aarde een nauwkeurigheid van ongeveer 20 meter. Laten we nu eens kijken hoe u uw eigen GPS-klok kunt maken met Arduino.

Hardware

Mijn GPS-module heeft 6 pinnen: GND, Vin, Tx, Rx en nogmaals GND. De zesde pin is nergens aangesloten. GND-pin verbonden met de behuizing op de Arduino, Vin is verbonden met de +5V-bus op de Arduino, Tx is verbonden met pin 10 op de Arduino en de Rx-pin is nergens verbonden, omdat we geen berichten naar de GPS-module zullen sturen . Mijn module verzendt satellietgegevens via de RS-232-interface met 4800 bps, die door de Arduino op pin 10 worden ontvangen.

Hieronder staat een foto GPS-module:

GPS-module EM-411

De module verzendt zogenaamde NMEA-berichten. Hier ziet u een voorbeeld van één NMEA-bericht en de uitleg ervan (uittreksel uit technische beschrijving):

$GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1,0,9,0,M,0000*18

GGA-gegevensformaat
NaamVoorbeeldEenhedenBeschrijving
Bericht-ID$GPGGA GGA-protocolheader
UTC-tijd161229.487 hhmmss.sss (tweecijferige uren, tweecijferige minuten, daarna seconden tot duizendsten)
Breedte3723.2475
N/S-vlagN N - noord, S - zuid
Lengte12158.3416 ddmm.mmmm (de eerste twee cijfers zijn graden, daarna minuten tot op de dichtstbijzijnde tienduizendste)
E/W-vlagW E - oost, W - west
Locatie-indicator1
  • 0 - locatie is niet beschikbaar of onjuist;
  • 1 - GPS-modus SPS, locatie klopt;
  • 2 - differentiële GPS, SPS-modus, locatie correct;
  • 3 - GPS PPS-modus, locatie is correct.
Aantal gebruikte satellieten07 Bereikt van 0 tot 12
HDOP1.0 Verslechtering van de horizontale nauwkeurigheid
Hoogte ten opzichte van zeeniveau9.0 meter
MaateenhedenMmeter
Geoïdaal verschil Verschil tussen WGS-84 aarde-ellipsoïde en zeeniveau (genoïde)
MaateenhedenMmeter
Tijdperk van differentiële GPS-gegevens secondenNulvelden wanneer DGPS niet wordt gebruikt
ID van het station dat differentiële correcties uitzendt0000
Controlesom*18
Einde bericht

Al deze gegevens worden via pin 10 door de Arduino ontvangen. De TinyGPS-bibliotheek leest GPGGA- en GPRMC-berichten (voor gedetailleerde informatie over GPRMC zie technische beschrijving).

Arduino wordt niet weergegeven in het diagram. Verbinden randapparatuur volgens ondertekende verbindingen.


Schema GPS-horloge op Arduino

Software

Wanneer de stroom wordt ingeschakeld, heeft de GPS-module enige tijd nodig om de juiste locatie van de satellieten te verkrijgen. Wanneer een locatie wordt ontvangen, stuurt de module NMEA-berichten naar de Arduino. De TinyGPS-bibliotheek bevat een functie om de tijd en datum uit een GPRMC-bericht te halen. Het heet crack_datetime() en heeft zeven verwijzingen naar variabelen als parameters: jaar jaar , maand maand , dag van de maand dag , uur uur , minuten minuut , seconden seconde en honderdsten van een seconde honderdsten . De functieaanroep ziet er als volgt uit:

GPS.crack_datetime(&jaar, &maand, &dag, &uur, &minuut, &seconde, &honderdste);

Door deze functie aan te roepen, krijg je de juiste waarden in de variabelen terug, zolang alles in orde is met de hardware.

Om uw locatie te achterhalen, kunt u de functie f_get_position() aanroepen. Deze functie neemt als parameters twee verwijzingen naar variabelen: latitude latitude en longitude longitude . Het aanroepen van deze functie ziet er als volgt uit:

Gps.f_get_position(&breedtegraad, &lengtegraad);

Bron programma's:

#erbij betrekken #erbij betrekken #erbij betrekken #define RXPIN 10 #define TXPIN 9 #define GPSBAUD 4800 #define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7 TinyGPS gps; SoftwareSeriële uart_gps (RXPIN, TXPIN); LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); // Variabelen int seconden; int tijdsverschuiving = 1; // De gebruiker moet de eenheid wijzigen in de juiste tijdzone. In het voorbeeld hanteren we een dienst van +1 uur. // Verklaring van functies. ongeldig getgps(TinyGPS &gps); // Setup-functie - werkt alleen als deze is ingeschakeld void setup() (Serial.begin(115200); // Launch seriële interface voor het debuggen van uart_gps.begin(GPSBAUD); // Start de UART-ontvanger voor GPS lcd.begin(16,2); // LCD-verklaring lcd.print("GPS-klok"); // Welkomstberichtvertraging (1000); // Wacht één seconde lcd.clear(); // Helder LCD-scherm) // Lus hoofdprogramma- void loop() is altijd actief ( while(uart_gps.available()) ( int c = uart_gps.read(); if(gps.encode(c)) ( getgps(gps); ) ) /* * Deze functie ontvangt gegevens van de GPS-module * en geeft deze weer op het LCD-scherm */ void getgps(TinyGPS &gps) ( int jaar; float latitude, longitude; byte maand, dag, uur, minuut, seconde, honderdste; gps.f_get_position(&latitude, &longitude ); gps .crack_datetime(&jaar, &maand, &dag, &uur, &minuut, &seconde, &honderdste); : "); if (uur<= 9) { lcd.print("0"); lcd.print(hour, DEC); } else { lcd.print(hour, DEC); } lcd.print(":"); if (minute <=9) { lcd.print("0"); lcd.print(minute, DEC); } else { lcd.print(minute, DEC); } lcd.print(":"); if (second <= 9) { lcd.print("0"); lcd.print(second, DEC); } else { lcd.print(second, DEC); } lcd.setCursor(0,1); lcd.print("Date: "); if (day <= 9) { lcd.print("0"); lcd.print(day, DEC); } else { lcd.print(day, DEC); } lcd.print("-"); if (month <= 9) { lcd.print(month, DEC); } else { lcd.print(month, DEC); } lcd.print("-"); lcd.print(year, DEC); delay(2000); lcd.clear(); lcd.print("Lat: "); lcd.print(latitude, DEC); lcd.setCursor(0,1); lcd.print("Lon: "); lcd.print(longitude, DEC); delay(2000); // Debugging purpose only. Serial.print(latitude, DEC); Serial.print(" - "); Serial.println(longitude, DEC); }

Onze portal heeft al herhaaldelijk gesproken over zelfgemaakte producten met Arduino, ik heb mijn eigen producten gemaakt - ik deel de resultaten en ervaringen met het publiek.

Het artikel beschrijft het begin van het werken met Arduino Pro mini en een kleine kritiek op de Orange Pi PC, vanwege mijn chagrijnigheid.

Het resultaat is een eenvoudig apparaatje waarmee u GPS-gegevens op een SD-kaart kunt opslaan, waarmee u vervolgens een trackbestand kunt opbouwen in elk gewenst formaat (bijvoorbeeld GPX).

Achtergrond

Ik fiets: soms naar mijn werk, soms voor gezelschap, soms gewoon omdat mijn gewrichten tijdens het hardlopen ‘niet meer hetzelfde zijn’. Tijdens het gebruik verslijten de mechanismen en voor tijdig onderhoud is het raadzaam om op de een of andere manier uw ritten te registreren, omdat Ik had geen fietscomputer, ik nam de route op mijn telefoon op, of na de rit bouwde ik een route uit mijn geheugen op YandexMaps (met dank aan de ontwikkelaar voor de handige tool "Ruler") en registreerde de afgelegde afstand in een Excel-spreadsheet:
Datum | Titel | Afstand
Toen vatte hij het samen Afstand en een beslissing genomen wanneer de ketting moet worden gewassen (of vervangen), wanneer deze moet worden aangeboden voor technische inspectie, enz. Het bleek erg handig om een ​​database van je ritten te hebben: je kunt zelf zien hoeveel je de afgelopen maand hebt gereden, zodat je deze maand niet minder kunt rijden; laat vrienden zien waar je bent geweest; laat je snelheid zien op het segment... Of, als je als verdacht persoon wordt aangehouden zonder documenten, laat dan in ieder geval zien waar je vandaan komt =)

Mijn telefoon (Samsung Galaxy Gio) hij bouwde normale GPS-grafieken, maar de starttijd maakte hem steeds zenuwachtiger, en een keer begon hij al 12 km later. Op de een of andere manier lukte het niet om iets nieuws te kopen: ik kocht het niet meteen ZenFone4, en toen was er geen verlangen: de oude ploegt nog steeds, en de nieuwe zijn ofwel niet productief genoeg of zijn te omslachtig.

En toen kroop het idee in mijn hoofd om een ​​gespecialiseerd apparaat te vinden (met antenne!) voor het opnemen van GPS-tracks: het kost weinig en begon sneller en bepaalde de positie nauwkeuriger. Maar nogmaals, er was geen bijzondere wens om ergens slim over te zijn... Het is vooral ijskoud als je de ingang verlaat en wacht tot de GPS start!

Afgelopen herfst verscheen er een onderwerp - Orange Pi PC! Het goedkoopste bord voor het maken van zelfgemaakte producten en het bestuderen van robotica (?!) en nog iets dat we in laboratoria aan de universiteit hebben gebruikt en met succes zijn vergeten. Trouwens, op het instituut leerde ik tellers, comparators, triggers, leerde ik hoe ik systemen moest ontwerpen die ze gebruikten, evenals de principes van het construeren van microcontrollers, hun werking en toepassing, maar waarschijnlijk werd na de sessie de opgedane kennis geformatteerd en ik zal het alleen onder hypnose kunnen reproduceren, ook al ben ik cum laude afgestudeerd en ben ik zelf voor alle sessies geslaagd =)
In de hoop dat als ik de LED's op de Orange Pi-pc laat knipperen en er nog steeds niet in slaag om de felbegeerde GPS-logger te implementeren, ik op zijn minst een server kan opzetten, er 's nachts torrents op kan downloaden en overdag wat projecten kan schrijven, zodat het werkt constant en verbruikt weinig ... Het verbruikte echt niet veel - ongeveer 500 mA bij 5V met een USB-flashdrive aangesloten.

Ik kon zelfs een monitor van 1024x1280 aansluiten op de Orange Pi-pc zonder de beeldverhouding te vervormen, maar dat had een heleboel kleine nadelen:
- na de tweede "hot shutdown" begon de HDMI-interface te haperen, na de twintigste stopte hij met werken (later ontdekte ik de aanwezigheid van buschauffeurs op andere modellen (bijvoorbeeld Orange Pi One), die niet aanwezig zijn op de Pi-pc - een defect dat inherent is aan de ontwerpfase, IMHO);
- de stuurprogramma's werkten niet goed onder Linux (hoewel ik de monitor niet kon aansluiten, geen probleem ermee)
- gebrek aan analoge ingangspoorten - Ik wilde eigenlijk geen batterijtester kopen, maar mijn eigen batterijtester maken, maar het bleek dat dit op de Pi-pc onmogelijk- die is er niet Analoog lezen().
- (vergeleken met Arduino) hoog stroomverbruik, groot formaat;
- gebrek aan ondersteuning en informatie over ontwikkelingen en compatibiliteit: ik heb twee weken lang geprobeerd een WIFI-USB-adapter aan te sluiten, en daarna met succes een andere aangesloten, waarvan de naam een ​​paar tekens verschilde.

Over het algemeen is Orange Pi een goede zaak, maar niet als microcontroller, maar als subcomputer: hij wordt gevoed door een tabletoplader, ondersteunt HDMI- en video-uitvoer, heeft veel USB-poorten, kan zo worden geconfigureerd dat hij dat niet doet warmt op en neemt minder ruimte in beslag dan een stationair exemplaar.

Dus, to the point, door de wil van het lot...

Het werd besteld met een UART-interface. Maar als ik de kans had, zou ik het kopen ublox neo-m8n, nu is de minimumprijs voor zo'n module $18.39 .

Laatste moedeloosheid

Toen ik een GPS-module koos, heb ik om de een of andere reden geen aandacht besteed aan het feit dat ze misschien nauwkeuriger waren, beter zouden passen bij de Orange Pi en minder zouden kosten vanwege hun populariteit - ze zijn geïnstalleerd in auto-GPS navigatiesystemen en laptops. Echter, . Ach ja...
De module werkte met de Orange Pi-pc - en ik begon een PHP-script te schrijven om nummers op te slaan, en deze laatste ook aan te passen voor draagbaar gebruik: gevoed door vier 18650-batterijen, via een step-down-module, in een behuizing die er allemaal in kon passen ...
Trouwens, het PHP-script is vrij eenvoudig, zelfs voor "live" uitzendingen op internet: parseer de GLL-string, herbereken de coördinaten en breng de huidige positie over naar de server, en sla deze vervolgens op in de database en, bij het betreden van de pagina , geef een Google-kaart weer met de route, opgebouwd door punten.
Ik besloot de behuizing te nemen, een step-down module, deze werd afgesloten van het bord, gedemonteerd en compact op de behuizing gelijmd...
Ik weet niet hoe ik 4 18650-batterijen en de behuizing van de router op de fiets zou hebben bevestigd als het experiment een succes was geweest, maar tijdens het gieten van hete lijm op de step-down-module merkte ik het niet dat de batterijen op de draden waren aangesloten en deze met een warmtepistool ergens op de verkeerde plaats prikte, waardoor de ingangsspanning van de Orange Pi waarschijnlijk 16V bedraagt. De lineaire stabilisatoren op het bord zijn doorgebrand, over de rest (processor, geheugen) is niets bekend, we moeten ze op de een of andere manier laten repareren.

Er was een wens om de GPS-module op de computer aan te sluiten en de instellingen te doorlopen, de uitvoer uit te schakelen van lijnen die niet worden gebruikt voor het opnemen van de track. Het zou mogelijk zijn om dit probleem handmatig op te lossen vanaf de opdrachtregel, maar in de u-center-omgeving is het gemakkelijker en handiger, daarom heb ik, om geen dikke handleiding te lezen, besteld, deze is ook geschikt voor Arduino-firmware.

Omdat De “programmeur” vloog al vanuit China, nadat de OrangePi uitviel, werd besloten een Arduino te bestellen en te proberen er een GPS-logger op te maken. Het is duidelijk dat het minder verbruikt, compacter is en dat er veel thematische forums op internet zijn met specialisten die een beginner op het goede pad kunnen begeleiden! Arduino heeft echter ook zijn nadelen, die volgens de auteur geen erg goed effect hebben op de ontwikkeling van specialisten. Maar omdat Het kost anderhalve dollar en ze zijn er flink op geklonken, je kunt het zelf gebruiken.

Programmeur

De bovengenoemde CH340G-adapter wordt gebruikt als programmeur; voor het gemak van Arduino-firmware kan deze enigszins worden aangepast. Normaal gesproken moet u bij het flitsen via UART handmatig op de Reset-knop op het Arduino-bord drukken. Om deze actie te automatiseren, kunt u echter de 13e poot van de CH340G-chip aansluiten op de DTR-pinnen van het Arduino-bord:


Of, als je geen bord hebt, maar een ‘kale’ Atmega-controller, via een 0,1uF-condensator die in serie is geschakeld met de Reset-pin.

Voeding

We hebben 5V nodig om de GPS-module en controller van stroom te voorzien. Het Arduino-bord heeft een lineaire stabilisator die kan worden gebruikt als de bron minimaal 5V is. Om dit te doen, moet u spanning op de pin aanbrengen RAUW. Maar omdat Ik zal één Li-Ion-batterij (3-4,2V) hebben, er werd besloten om deze te gebruiken toenemend module:
of
.
Vanaf de module-uitgang wordt 5V op de pin aangesloten VCC, Wij doen niet aan RAW.

SD/MicroSD-kaart

Deze geheugenkaarten hebben een vergelijkbare pin-out en zijn hardware-compatibel. Ze kunnen in twee modi werken: SD En SPI. In dat laatste zijn wij geïnteresseerd.

Je kunt een kant-en-klare module bestellen: aansluiten is eenvoudiger. Of als je er een extra hebt downgraden module, weerstanden van 10 en 4,7 kOhm en een kaartsleuf, u kunt met uw eigen handen een kaartlezer maken. De aangegeven module bevat al alles wat nodig is om een ​​MicroSD-kaart aan te sluiten, maar ik had net een kapotte kaartlezer bij de hand, waarin je aan één kant SD- of MicroSD-kaarten kunt plaatsen - en ik heb wat bespaard, maar heb een meer universele kaartlezer gekregen .

Een zelfgemaakte neemt 3 keer meer ruimte in beslag, maar je kunt er ook SD-kaarten mee gebruiken.
Hier zijn de verbindingen. Om de kaart van stroom te voorzien, heb je ongeveer 3,3 V nodig. Om de installatie gemakkelijk te maken, verdelen we de contacten in drie of vier groepen: plus voeding, signalen van de controller naar de kaart (10-CS, 11-DI, 13-CLK), aarde (minus voeding) en signaal van de kaart (DO-13).
Plus de stroom gaat via een step-down module of lineaire stabilisator.
Signalen van de controller gaan naar de 4,7 kO-weerstanden en vervolgens naar de geheugenkaart vanaf het verbindingspunt van de 4,7 kO- en 10 kO-weerstanden.
De negatieve voeding is rechtstreeks aangesloten vanaf een gemeenschappelijke draadspiraal, of vanaf de dichtstbijzijnde Arduino-pin, en er zijn ook weerstanden van 10 kO op aangesloten.
Het signaal van de kaart wordt rechtstreeks op pin 13 van de Arduino aangesloten.
Zo zag de angst eruit op het moment van testen:


in de voltooide vorm bleven alleen de stroomdraden over van de "dikke" draden, maar de interfacedraden werden vervangen door dunne koperen draden van de rotor van de harde schijf van de transformator:

GPS-module

Wordt aangesloten op de controller via een standaard seriële poort met één pin van de TX-module - RX Arduino. Frequentie - 9600 Baud, indien hoger ingesteld kunnen er problemen optreden als gevolg van vertragingen bij het verwerken van andere opdrachten (controleer knop 7, zie hieronder).

Knop

Er is één knop, aangesloten op pin 7 in de modus INPUT_PULLUP (zonder externe weerstand), door er alleen op te klikken om de SD-kaart los te koppelen en te stoppen, wordt het apparaat verwerkt. Ik ben er niet helemaal zeker van dat het simpelweg uitzetten van de stroom geen enkele invloed heeft op de werking van de geheugenkaart, dus besloot ik eerst te stoppen met opnemen en daarna de stroom uit te zetten. Of, als optie, verwijder de geheugenkaart, verwijder de gegevens ervan, plaats deze vervolgens terug en druk op reset op het bord om door te gaan met opnemen.

Indicator

De LED is via een weerstand van 220 Ohm verbonden met een superheldere blauwe LED op pin 6. Om de gloed merkbaar te maken, moesten we alle standaard rode LED's vullen met zwarte hete lijm (twee op de Arduino, twee op de voedingsmodules ). De LED-indicatie is als volgt...
Periodiek knipperen - GPS start - er worden geen geldige gegevens ontvangen van de module. Bij het starten geeft GPS niet direct actuele informatie, dus instellen() een wachtrijlus opgenomen ".00,A,", wat (met mijn module-instellingen) aangeeft dat het betrouwbare positiegegevens heeft verzonden.
Twee keer knipperen - fout bij het starten van het werken met de geheugenkaart. Soms vergeet u hem erin te plaatsen of kan hij per ongeluk verkeerd worden aangesloten. Het wordt alleen aan het begin van het werk gecontroleerd; de kaart verdwijnt op een ander moment, dit wordt op geen enkele manier opgemerkt.
Drie of vier keer knipperen betekent stoppen na het indrukken van de knop (pin 7). 3 - als de GPS de gegevens nooit heeft verzonden, 4 - als de stop plaatsvond nadat de logger begon te werken. Handig om te achterhalen hoe de GPS-module het deed op het moment van uitschakelen =)
Hieronder ziet u trouwens de bedrading van de SPI-interface naar de SD-kaart. Alles wat onnodig werd geteleporteerd werd opgevuld met transparante hete lijm, de voeding en aansluiting op de GPS-module werd losgemaakt, om de programmeur aan te sluiten op de Arduino en de GPS-module zijn er dikkere draden (vanaf IDE-kabel).

Schematische afbeelding van Fritzing:


Echte foto, de zwarte “bult” boven de kaartlezer is ontworpen om de batterij te ondersteunen:

Over het algemeen is het buitengewoon lastig om de kaarten eruit te halen; ik gebruik een pincet, maar ze vallen er niet uit door trillingen. Gesloten past hij in een zak, de behuizing is lang geleden gekocht, de equivalente prijs vandaag is waarschijnlijk $ 0,50:

... hoogte ~25 mm. IMHO, een witte plastic montagedoos zou nog beter zijn! Het kan geen kwaad om van tevoren uit te zoeken of u een afgesloten of geventileerde behuizing nodig heeft. Ik heb het nog niet voor mezelf besloten, misschien moet ik gaten boren voor ventilatie.

Andere "zelfgemaakte"

Naast de SD-kaartlezer zijn er op een aantal andere plaatsen "gekke handen" gelanceerd waar je het zonder kunt doen.
1. Batterijhouder.
De contacten van de oude AT-voeding worden op het breadboard gesoldeerd, zodat ze op de overeenkomstige contacten van de telefoonbatterij vallen. Vervolgens wordt het bord met contacten gevuld met hete lijm. De volgende stap is het vormen van een zitplaats voor de accu; dit is mij voor de derde keer gelukt. Om de batterij niet met hete lijm te lijmen, plaatsen we folie of glad papier van de sticker; deze komt van het papier los nadat het is opgedroogd. Je kunt dit epische gedoe achterwege laten als je een normale lithiumbatterij hebt, 18650, of als je gewoon een polymeerbatterij soldeert.
2. Dupont femail-connector - u kunt voor een halve dollar veertig draden kopen en u hoeft zich daar geen zorgen over te maken. Maar je moet er een maand op wachten en als je een voeding bij de hand hebt, kun je de connector afsnijden die is ontworpen om oude schijven van stroom te voorzien, de contacten daar verwijderen en ze omwikkelen met krimpkous:

Conversie

Het is beter om in het bovenstaande artikel te lezen hoe de GPS-module werkt. Ik zal alleen verduidelijken dat ik hem heb geconfigureerd om NMEA-berichten te verzenden typt alleen $GPRMC en $GPGGA, worden ze zonder verwerking op de kaart vastgelegd, waardoor we de taak kunnen vereenvoudigen en de gegevensverwerking aan iemand anders kunnen delegeren.
Misschien wel het meest gebruikte programma voor het verwerken van GPS-gegevens. De resulterende bestanden worden verwerkt door het volgende script:
"Pad naar programma\gpsbabel.exe" -w -r -t -i nmea -f 0.GPS -x throw,hdop=1.2 -o gpx -F out.gpx pauze hiermee kunt u een filter toepassen (negeren) punten die dat hebben een bepaalde nauwkeurigheidsparameter hdop onder 1.2 en haal het bestand op uit.gpx in een formaat dat geschikt is voor de meeste programma's. GPSBabel ondersteunt

14.04.2016. Het mechanisme voor het opslaan van GPS-reeksen is opnieuw ontworpen: nu worden alleen reeksen die langer zijn dan 48 tekens naar de kaart geschreven als er een kortere reeks wordt aangetroffen, stopt het opnemen in het bestand en gaat de LED (6) branden; Daarom probeerde ik een indicatie te geven van het verschijnen van ongeldige GPS-lijnen. Mijn GPS-module is geconfigureerd om uit te voeren Alleen $GPRMC en $GPGGA Als daar geldige gegevens verschijnen, wordt de lengte van deze regels meer dan 48; als u andere regels opneemt, komen deze niet in het bestand terecht. Om deze modus uit te schakelen, moet u de code wijzigen
if (btReaded > 48) ( // Gegevens zijn actueel if (bWaitingGps) ( bWaitingGps = false; PORTD &= 0b110111111; // Reset de PD6-pin. mkLogFile(); // Open het GPS-logboek. ) flDataFile.write(chGpsLint , btReaded) ; // Schrijf de gegevens naar het bestand ) else ( if (!bWaitingGps) ( bWaitingGps = true; PORTD |= 0b001000000; // Stel de PD6-pin in. flDataFile.close(); // Sluit het GPS-logboek . ) ) naar de code
flDataFile.write(chGpsLint, btReaded); // Schrijf gegevens naar een bestand.

Mogelijke verbeteringen

1. Je kunt het apparaat 3 keer compacter maken als je de elementen correct plaatst, en ook een kant-en-klare SD-kaartlezer nemen, de prijs is, net als de step-down module die ik gebruik, een halve dollar!
2. Gebruik 18650-batterijen - deze zijn goedkoper en hebben een grotere capaciteit.
3. Omdat het apparaat aan de fiets is vastgeschroefd en de meeste een fietskoplamp hebben, die wordt gevoed door verschillende 18650-batterijen, kun je twee batterijen (6-4,8 V) aansluiten via de RAW-pin op de Arduino - en de stap verwijderen -down-pulsmodule - waardoor het apparaat nog compacter wordt.
4. Omdat het apparaat aan de fiets is vastgeschroefd, kun je op zijn minst een cadanssensor toevoegen, wat ik in de nabije toekomst zal doen.

Totaal, als je alles nieuw koopt:

Arduino-module met Atmega328-controller ~ $ 1,5
(Micro)SD-kaartlezer voor Arduino ~$0,60
GPS-module met UART vanaf ~$10
USB-naar-UART (programmeur) ~$0,70
/ ~$12,8
Boostmodule ~$0,70
Batterij ~2,50
/ ~$16
Dat is waarschijnlijk alles, er is veel tekst, als je opheldering nodig hebt, vraag het dan. Als ik je verveel, bied ik mijn excuses aan, ik zal in de toekomst proberen te schrijven meer ter zake.

Speciale dank voor je hulp op het forum.

Ik ben van plan om +60 te kopen Toevoegen aan favorieten Ik vond de recensie leuk +50 +94

Met GPS-modules kan uw autonome apparaat zijn coördinaten en bewegingsparameters volgen. Deze functionaliteit is belangrijk voor allerlei trackers, slimme halsbanden en rugzakken. In dit artikel hebben we geprobeerd een kort overzicht te geven van GPS-modules en -programma's voor het werken met GPS op een computer. Verbinding met Arduino wordt overwogen aan de hand van het voorbeeld van de meest populaire NEO 6.0-module

Voordat u GPS met Arduino gaat verbinden, moet u leren hoe u de module zelf kunt testen. Om dit te doen hebben we zeker een programma nodig waarmee we de status van het apparaat, het aantal gevangen satellieten en andere testinformatie kunnen weergeven. We hebben geprobeerd de meest populaire software samen te stellen voor het werken met GPS op een computer.

U-centrum

Het u-center programma wordt gebruikt om te werken met GNSS-ontvangers van U-Blox. Met deze software kunt u de positioneringsnauwkeurigheid testen, de configuratie van de ontvanger wijzigen en algemene diagnostiek uitvoeren, de ontvangen gegevens verwerken en in realtime weergeven. De ontvanger ontvangt coördinaten met behulp van GPS, GLONASS. De verkregen informatie kan worden geëxporteerd en weergegeven in Google Maps, Google Earth. Met dit programma kunt u tweedimensionale grafieken, histogrammen en andere soorten grafieken maken. u-center kan gebruikt worden bij het werken met meerdere ontvangers.

U-Center-softwarefuncties:

  • Werken met Windows;
  • NMEA-, SiRF-gegevens, UBX lezen;
  • Uitvoer van ontvangen gegevens in de vorm van tekst en grafieken;
  • Gegevens opnemen en afspelen;
  • Volledige controle over de GPS-module;
  • Mogelijkheid om de configuratie van de GPS-module te wijzigen;
  • Een nieuwe configuratie naar de module schrijven;
  • Het schrijven van de configuratie naar een bestand in .txt-formaat;
  • Modulefirmware-update;
  • Mogelijkheid tot koude, warme en warme start van de module.

Met dit programma kunt u de prestaties van de ontvanger evalueren, de prestaties ervan analyseren en de instellingen ervan instellen. Naast U-Center kunnen andere programma's worden gebruikt, bijvoorbeeld Visual GPS, Time Tools GPS Clock en andere.

Visuele GPS

Dit programma wordt gebruikt om GPS-gegevens weer te geven met behulp van het NMEA 0183-protocol in grafische vorm. Met dit programma kunt u een GPS-datalogboek naar een bestand schrijven. Er zijn twee werkingsmodi in het programma: in de eerste communiceert Visual GPS met de GPS-ontvanger, en in de tweede leest Visual GPS NMEA-metingen uit een bestand. Het programma heeft 4 hoofdvensters: signaalkwaliteit, navigatie, overzicht, azimut en hoogte.

Tijd Tools GPS-klok

Dit programma werkt op Windows en alle werkstations, het controleert de tijd vanaf een standaard NMEA GPS-tijdontvanger die op de computer is aangesloten en stelt u in staat de tijd op de pc te synchroniseren. Informatie over tijd, datum en GPS-status ontvangen van de ontvanger wordt weergegeven. Het nadeel van het programma is de onmogelijkheid van een zeer nauwkeurige tijdbepaling, aangezien GPS-apparaten geen tweede puls hebben voor de seriële poort van de computer.

GPS Trimble Studio

De software wordt gebruikt om te werken met de Copernicus-ontvanger op Windows. Het programma geeft ontvangen navigatiegegevens weer. De verkregen coördinaten kunnen worden geselecteerd op Google Maps, Microsoft Visual Earth. Alle geconfigureerde ontvangerinstellingen kunnen in een configuratiebestand worden opgeslagen

Fugawi

Het programma wordt gebruikt voor routeplanning en GPS-navigatie in realtime. Met het programma kunt u routes en waypoints op kaarten vastleggen en opslaan. Navigatie vindt plaats zowel op het land als op het water en in de lucht. Het programma maakt gebruik van verschillende soorten digitale kaarten: topografische kaarten, NOAA RNC-standaarden, gescande kopieën van papieren kaarten, Fugawi Street Maps.

3D-wereldkaart

In dit programma kun je de aarde in drie dimensies zien. Het wordt gebruikt als een handig geografisch naslagwerk waarin u informatie kunt vinden over 269 landen en dertigduizend nederzettingen, metingen kunt uitvoeren tussen twee punten en audio-opnamen kunt afspelen.

Herziening van GPS-modules voor Arduino

Er zijn een groot aantal verschillende GPS-modules voor het werken met Arduino. Met hun hulp kunt u de exacte locatie (geografische coördinaten, hoogte boven zeeniveau), bewegingssnelheid, datum en tijd bepalen.

ModuleEM-411. Het apparaat is gebaseerd op een krachtige SiRF Star III-chip, die een laag stroomverbruik heeft. De module heeft een grote hoeveelheid geheugen voor het opslaan van almanakgegevens en ondersteunt het standaard NMEA 0183-protocol. De koude starttijd bedraagt ​​ongeveer 45 seconden.

VK2828U7G5LF. Deze module is gebaseerd op de Ublox UBX-G7020-KT-chip. Met zijn hulp kunt u coördinaten verkrijgen met behulp van GPS en GLONASS. De ontvanger heeft een ingebouwd geheugen waarin instellingen kunnen worden opgeslagen. De module is uitgerust met een ingebouwde keramische antenne en werkt volgens het NMEA 0183-protocol. De voedingsspanning van de module is 3,3-5V.

SKM53-gps. Een van de goedkoopste modules met een laag stroomverbruik. De koude starttijd bedraagt ​​ongeveer 36 seconden, de warme starttijd is 1 seconde. Er worden 66 kanalen gebruikt voor positionering en 22 kanalen voor tracking. De module heeft een ingebouwde GPS-antenne en biedt hoge navigatieprestaties onder verschillende zichtomstandigheden.

Neo-6M GPS. De ontvanger is vervaardigd door u-blox. Deze module maakt gebruik van de nieuwste technologie om nauwkeurige locatie-informatie te verstrekken. Modulevoedingsspanning 3-5V. De lijn apparaten wordt vertegenwoordigd door de typen G, Q, M, P, V en T met hun eigen unieke kenmerken. De koude starttijd bedraagt ​​ongeveer 27 seconden.

locosys 1513. Deze module ondersteunt GPS, GLONASS, Galileo, QZSS, SBAS. Gebaseerd op de MediaTek MT333-chip, die een laag stroomverbruik, hoge gevoeligheid en stabiele werking onder verschillende omstandigheden heeft. De ontvanger heeft ondersteuning voor een tekstcontroleprotocol. De koudestarttijd bedraagt ​​ongeveer 38 seconden.

Arduino GPS-module GY-NEO6MV2

De module maakt gebruik van het standaard NMEA 0183-protocol voor communicatie met GPS-ontvangers. De ontvanger is een bord waarop de NEO-6M-0-001-module, spanningsstabilisator, niet-vluchtig geheugen, LED en batterij zich bevinden.

Modulespecificaties:

  • Voedingsspanning 3,3-5V;
  • Interface UART 9600 8N1 3,3V;
  • NMEA-protocol;
  • Modulegewicht 18 g;
  • Beschikbaarheid van EEPROM voor het opslaan van instellingen;
  • Beschikbaarheid van ingebouwde batterij;
  • Mogelijkheid om een ​​antenne aan te sluiten op de U-FL-connector;
  • De koude starttijd is ongeveer 27 seconden, de warme starttijd is 1 seconde;
  • Beschikbaarheid van meer dan 50 positioneringskanalen;
  • Vernieuwingsfrequentie 5 Hz;
  • Bedrijfstemperaturen van -40C tot 85C.

De module wordt veel gebruikt voor helikopters en bepaalt de huidige positie van langzaam bewegende objecten en voertuigen. De verkregen coördinaten kunnen worden geladen in Google Maps, Google Earth en andere.

Na een koude start van de module begint het downloaden van de almanak. De laadtijd bedraagt ​​maximaal 15 minuten, afhankelijk van de omstandigheden en het aantal satellieten in de zichtzone.

Pinout: GND (aarde), RX (UART-gegevensinvoer), TX (UART-gegevensuitvoer), Vcc - 3,3V tot 5V voeding.

Om verbinding te maken heb je een GY-NEO6MV2-module, een Arduino-bord, draden en een GPS-antenne nodig. Pinverbindingen: VCC naar 5V, GND naar GND, RX naar pin 9 op Arduino, TX naar pin 10. Vervolgens moet de Arduino via USB op de computer worden aangesloten.

Om te werken, moet u verschillende bibliotheken verbinden. SoftwareSerial – Vereist om de hardwarefunctionaliteit van het apparaat uit te breiden en de seriële communicatietaak af te handelen. De TinyGPS-bibliotheek wordt gebruikt om NMEA-berichten om te zetten in een gemakkelijk leesbaar formaat.

Werking controleren via het U-Center programma

Zoals hierboven vermeld, wordt de module vervaardigd door u-blox, dus het U-Center-programma wordt gebruikt om de ontvanger te configureren.

Wanneer de ontvanger is aangesloten op de UART, verzendt hij één keer per seconde berichten via het NMEA-protocol. Met behulp van het programma kunt u de verzonden berichten aanpassen.

Om de module te configureren, moet u deze aansluiten via een USB-UART(COM-UART)-converter. U kunt de verbinding configureren via het Receiver-Port-menu. Zodra de verbinding tot stand is gebracht, gaat het groene lampje branden. De ontvanger begint verbindingen met satellieten tot stand te brengen, waarna de huidige coördinaten, tijd en andere informatie op het scherm verschijnen. Alle berichten verschijnen in het venster Berichten. In het menu Beeld – Berichten kunt u berichten selecteren die naar de microcontroller worden verzonden. Afhankelijk van de taak die voorhanden is, kunt u het aantal verzonden berichten verminderen, waardoor de snelheid van de gegevensverwerking toeneemt en het algoritme voor het parseren van berichten door de controller wordt vergemakkelijkt.

Als er geen communicatie met de satelliet tot stand is gebracht, moet u controleren of de antenne is aangesloten. Dan moet u de voedingsspanning controleren, deze moet 5V zijn. Als de verbinding nog steeds niet tot stand is gebracht, kunt u de module bij een raam plaatsen of naar buiten gaan in een open ruimte.

U kunt de verzonden gegevens bekijken via het menu Bekijken.

Alle berichten beginnen met het $-symbool, de volgende tekens zijn bericht-ID's. GP is een mondiaal systeem, de volgende 3 letters laten zien welke informatie het bevat.

RMC – de kleinste navigatie-informatie (tijd, datum, coördinaten, snelheid, richting).

GGA – vastgelegde positioneringsinformatie. Tijd, coördinaten, hoogte, locatiestatus en aantal satellieten worden geregistreerd.

Werking controleren via Arduino IDE

Je kunt ook met de module werken via de standaard Arduino IDE-ontwikkelomgeving. Nadat je de module op het bord hebt aangesloten, moet je de schets uploaden en het resultaat bekijken. Als er een onsamenhangende reeks tekens op de monitor verschijnt, moet u de snelheid van de Arduino-interface met de computer en de snelheid van de module-interface met de controller aanpassen.

Schets voor het weergeven van locatiegegevens.

#erbij betrekken #erbij betrekken //verbinden van TinyGPS gps-bibliotheken die nodig zijn voor gebruik; SoftwareSeriële gpsSeriële(8, 9); //aantal pinnen waarmee de module is verbonden (RX, TX) bool newdata = false; ongetekende lange start; lang lat, lon; ongetekend lange tijd, datum; void setup())( gpsSerial.begin(9600); // de wisselkoers instellen met de ontvanger Serial.begin(9600); Serial.println("Wachtende gegevens van GPS..."); ) void loop()) ( if (millis () - start > 1000) // stel een vertraging van één seconde in tussen gegevensupdates ( newdata = readgps(); if (newdata) ( start = millis(); gps.get_position(&lat, &lon); gps. get_datetime(&date, &time); Serial.print("Lat: "); Serial.print(" Lang: "); (datum); Serial.print(" Tijd: "); / controleer op beschikbaarheid van gegevens bool readgps() ( while (gpsSerial.available()) ( int b = gpsSerial.read( ); //er is een fout in de TinyGPS-bibliotheek: gegevens met \r en \n worden niet verwerkt als ("\r" != b) ( if (gps.encode(b)) retourneert waar; ) ) retourneert onwaar;

Nadat de code is geüpload, moet u een paar seconden wachten (koude starttijd), zodat het apparaat de locatie kan bepalen en de coördinaten kan gaan weergeven. Zodra het apparaat begint te werken, gaat de LED op het bord knipperen.

De gegevens over de breedte- en lengtegraad verschijnen in de havenmonitor. De huidige GMT-datum en -tijd worden ook opgehaald. U kunt uw tijdzone handmatig instellen - dit doet u in de regel Serial.print(static_cast(hour+8));

Conclusie

Zoals u kunt zien, vereist het starten met GPS geen erg ingewikkelde manipulaties. Kant-en-klare modules of schilden die via UART met Arduino communiceren, komen te hulp. Om het schrijven van schetsen gemakkelijker te maken, kunt u kant-en-klare bibliotheken gebruiken. Bovendien kan elke GPS-module zonder Arduino worden getest door deze op een computer aan te sluiten en speciale software te gebruiken. In dit artikel hebben we een overzicht gegeven van de populairste programma’s.

Na verschillende experimenten met Arduino besloot ik een eenvoudige GPS-tracker te maken.
Gebruikte Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS-module (voor het verzenden van informatie naar de server), GPS-ontvanger SKM53 GPS.
Alles werd gekocht op ebay.com, voor een totaal van ongeveer 1500 roebel (ongeveer 500 roebel voor de Arduino, iets minder voor de GSM-module, iets meer voor de GPS).

GPS-ontvanger

Eerst moet u begrijpen hoe u met GPS moet werken. De geselecteerde module is een van de goedkoopste en eenvoudigste. De fabrikant belooft echter een batterij om satellietgegevens op te slaan. Volgens de datasheet zou een koude start 36 seconden moeten duren, maar onder mijn omstandigheden (10e verdieping vanaf de vensterbank, er zijn helemaal geen gebouwen) duurde het maar liefst 20 minuten. De volgende start is echter al 2 minuten.

Een belangrijke parameter van apparaten die op de Arduino zijn aangesloten, is het stroomverbruik. Als u de Arduino-converter overbelast, kan deze doorbranden. Voor de gebruikte ontvanger bedraagt ​​het maximale stroomverbruik 45mA @ 3,3V. Waarom de specificatie de stroomsterkte zou moeten aangeven bij een andere spanning dan de vereiste (5V) is mij een raadsel. De Arduino-converter is echter bestand tegen 45 mA.

Verbinding

GPS wordt niet aangestuurd, hoewel het een RX-pin heeft. Met welk doel is onbekend. Het belangrijkste wat je met deze ontvanger kunt doen, is via het NMEA-protocol gegevens uitlezen van de TX-pin. Niveaus - 5V, alleen voor Arduino, snelheid - 9600 baud. Ik verbind VIN met VCC van de Arduino, GND met GND, TX met RX van het overeenkomstige serienummer. Ik lees de gegevens eerst handmatig uit en vervolgens met behulp van de TinyGPS-bibliotheek. Verrassend genoeg is alles leesbaar. Nadat ik naar Uno was overgestapt, moest ik SoftwareSerial gebruiken, en toen begonnen de problemen: sommige berichttekens gingen verloren. Dit is niet erg kritisch, aangezien TinyGPS ongeldige berichten afsnijdt, maar het is behoorlijk onaangenaam: je kunt de 1Hz-frequentie vergeten.

Een korte opmerking over SoftwareSerial: er zijn geen hardwarepoorten op de Uno, dus je moet de softwarepoort gebruiken. Het kan dus alleen gegevens ontvangen op een pin waarop het bord interrupts ondersteunt. In het geval van Uno zijn dit 2 en 3. Bovendien kan slechts één zo'n poort tegelijk gegevens ontvangen.

Zo ziet de “proefstand” eruit.

GSM-ontvanger/zender

Nu komt het interessantere deel. GSM-module - SIM900. Het ondersteunt GSM en GPRS. Noch EDGE, noch vooral 3G, worden ondersteund. Voor het verzenden van coördinaatgegevens is dit waarschijnlijk goed: er zullen geen vertragingen of problemen optreden bij het schakelen tussen modi, en GPRS is nu bijna overal beschikbaar. Voor sommige complexere toepassingen is dit echter mogelijk niet voldoende.

Verbinding

De module wordt ook bestuurd via de seriële poort, met hetzelfde niveau - 5V. En hier hebben we zowel RX als TX nodig. De module is schild, dat wil zeggen dat hij op de Arduino is geïnstalleerd. Bovendien is het compatibel met zowel mega als uno. De standaardsnelheid is 115200.

We monteren het op Mega, en hier wacht ons de eerste onaangename verrassing: de TX-pin van de module valt op de 7e pin van Mega. Op de 7e pin van de mega zijn er geen interrupts beschikbaar, waardoor je bijvoorbeeld de 7e pin moet aansluiten op de 6e pin, waarop wel onderbrekingen mogelijk zijn. We zullen dus één Arduino-pin verspillen. Nou, voor een mega is het niet erg eng - er zijn tenslotte genoeg pinnen. Maar voor Uno is dit al ingewikkelder (ik herinner je eraan dat er maar 2 pinnen zijn die interrupts ondersteunen - 2 en 3). Als oplossing voor dit probleem kunnen we voorstellen om de module niet op de Arduino te installeren, maar met draden aan te sluiten. Dan kunt u Serie1 gebruiken.

Na het verbinden proberen we met de module te “praten” (vergeet niet deze aan te zetten). We selecteren de poortsnelheid - 115200, en het is goed als alle ingebouwde seriële poorten (4 op mega, 1 op uno) en alle softwarepoorten op dezelfde snelheid werken. Op deze manier kunt u een stabielere gegevensoverdracht realiseren. Ik weet niet waarom, hoewel ik het wel kan raden.

We schrijven dus primitieve code voor het doorsturen van gegevens tussen seriële poorten, verzenden Atz en ontvangen als reactie stilte. Wat is er gebeurd? Ah, hoofdlettergevoelig. ATZ, het komt goed. Hoera, de module kan ons horen. Wilt u ons uit nieuwsgierigheid even bellen? ATD +7499... De vaste telefoon gaat, er komt rook uit de Arduino, de laptop gaat uit. De Arduino-converter is doorgebrand. Het was een slecht idee om hem 19 volt te geven, hoewel er geschreven staat dat hij van 6 tot 20 V kan werken, 7-12 V wordt aanbevolen. De datasheet van de GSM-module vermeldt nergens iets over het stroomverbruik onder belasting. Nou, Mega gaat naar het magazijn met reserveonderdelen. Met ingehouden adem zet ik de laptop aan, die +19V ontving via de +5V-lijn van USB. Het werkt, en zelfs de USB is niet doorgebrand. Bedankt Lenovo voor het beschermen van ons.

Nadat de converter was doorgebrand, zocht ik naar het huidige verbruik. Dus piek - 2A, typisch - 0,5A. Dit valt duidelijk buiten de mogelijkheden van de Arduino-converter. Heeft aparte voeding nodig.

Programmering

De module biedt uitgebreide mogelijkheden voor gegevensoverdracht. Beginnend met spraakoproepen en sms-berichten en eindigend met GPRS zelf. Bovendien is het voor dit laatste mogelijk om een ​​HTTP-verzoek uit te voeren met behulp van AT-opdrachten. Je zult er meerdere moeten sturen, maar het is de moeite waard: je wilt niet echt handmatig een verzoek indienen. Er zijn een paar nuances bij het openen van een datatransmissiekanaal via GPRS - onthoud de klassieke AT+CGDCONT=1, “IP”, “apn”? Hier is dus hetzelfde nodig, maar dan iets sluwer.

Om een ​​pagina op een specifieke URL te krijgen, moet u de volgende opdrachten verzenden:

AT+SAPBR=1,1 //Open carrier (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //verbindingstype - GPRS AT+SAPBR=3,1,"APN","internet" //APN, voor Megafon - internet AT+HTTPINIT //Initialiseer HTTP AT+HTTPPARA="CID",1 //Carrier ID om te gebruiken. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //De daadwerkelijke URL, na sprintf met coördinaten AT+HTTPACTION=0 // Vraag gegevens op met behulp van de GET-methode //wacht op antwoord AT+HTTPTERM //stop HTTP

Als er dus verbinding is, krijgen wij een reactie van de server. Dat wil zeggen dat we in feite al weten hoe we coördinaatgegevens moeten verzenden als de server deze via GET ontvangt.

Voeding

Omdat het voeden van de GSM-module via een Arduino-converter, zoals ik ontdekte, een slecht idee is, werd besloten om op dezelfde eBay een 12v->5v, 3A-converter te kopen. De module houdt echter niet van 5V-voeding. Laten we voor een hack gaan: sluit 5V aan op de pin waar 5V uit de Arduino komt. Vervolgens maakt de ingebouwde converter van de module (veel krachtiger dan de Arduino converter, MIC 29302WU) vanaf 5V wat de module nodig heeft.

Server

De server schreef een primitieve versie: coördinaten opslaan en tekenen op Yandex.maps. In de toekomst is het mogelijk om diverse features toe te voegen, waaronder ondersteuning voor veel gebruikers, “gewapend/ongewapend”-status, de staat van de autosystemen (ontsteking, koplampen etc.) en mogelijk zelfs bediening van de autosystemen. Uiteraard met passende ondersteuning voor de tracker, die soepel verandert in een volwaardig alarmsysteem.

Veldtesten

Zo ziet het gemonteerde apparaat eruit, zonder behuizing:

Nadat u de stroomomvormer hebt geïnstalleerd en in de behuizing van een dood DSL-modem hebt geplaatst, ziet het systeem er als volgt uit:

Ik heb de draden gesoldeerd en verschillende contacten uit de Arduino-blokken verwijderd. Ze zien er zo uit:

Ik sloot 12V aan in de auto, reed door Moskou en kreeg de track:


De baan blijkt gescheurd. De reden hiervoor is dat het verzenden van gegevens via GPRS relatief lang duurt, en gedurende deze tijd worden de coördinaten niet gelezen. Dit is duidelijk een programmeerfout. Het wordt ten eerste behandeld door onmiddellijk een pakket coördinaten in de loop van de tijd te verzenden, en ten tweede door asynchroon te werken met de GPRS-module.