GPS (Global Positioning System: wereldwijd plaatsbepalingssysteem)

U kent ongetwijfeld GPS. Het wordt onder andere gebruikt in navigatiesystemen in de auto. Inmiddels zijn de antennes klein, gevoelig en goedkoop geworden, zodat ze ook voor de Arduino-hobbyist haalbaar zijn. Je kunt GPS echter niet gebruiken om in huis met een nauwkeurigheid van een centimeter je positie te bepalen. Vaak is een nauwkeurigheid van 11 meter het hoogst haalbare en dan nog alleen nog buiten. Inmiddels wordt wel gewerkt aan systemen die ook binnen werken. De 1 cm nauwkeurigheid is buiten al haalbaar met geavanceerde technieken. Zodra dat ook voor de Arduino haalbaar is zal ik dat hier ook beschrijven.

Geschikte modules

Het handigst is om een module te kopen waar de antenne al op zit. Type NEO STM32 C51 (zie foto) is er zo een.
Module met geïntegreerde keramische antenne
De module heeft een vaste keramische antenne, maar er wordt een plug voor een actieve antenne bijgeleverd. Nadat ik deze module met de vaste antenne had getest heb ik de plug erop gesoldeerd, zodat ik de module ook met een actieve antenne kon testen. Actieve antennes hebben een ingebouwde lage ruis versterker en kunnen daardoor een lange snoer hebben, maar ze gebruiken meer stroom; keramische antennes kunnen alleen dichtbij de ontvanger worden gemonteeerd. Je kunt dezelfde software gebruiken voor zowel de keramische als de actieve antenne. Sommige GPS-module hebben een usb-plug waarmee je hem rechtsstreeks op je computer kunt aansluiten en uitlezen. Voor gebruik met de Arduino heb je die USB aansluiting niet nodig.
De communicatie tussen de Arduino en de module verloopt via de pinnen TX en RX. Je kunt deze verbinden met RX en TX van de Arduino (RX gaat naar TX en TX gaat naar RX). Als je van je Arduino liever twee andere pinnen gebruikt (en dat is aan te bevelen) dan kan dat met de (standaard) bibliotheek SoftwareSerial.
Er zijn heel veel programma's en bibliotheken op Internet te vinden die de GPS gegevens kunnen uitlezen en vertalen naar een datum, tijd en positie. Ik heb min of meer willekeurig gekozen voor TinyGPS++. Deze blijkt goed blijkt te werken en is niet te ingewikkeld.
Scherm met tijd en GPS coördinaten. Deze kun je precies zoals ze hier staan in Google Earth invoeren.
BELANGRIJK: nadat je hebt getest of de verbinding met de module werkt zul je een GPS signaal moeten oppikken. Dat lukt niet als je onder een betonnen plafond zit. Ga daarom naar buiten of houd de antenne dicht bij een raam. Het kan even duren voor het signaal is opgepikt. Ik heb een display gebruikt voor de uitvoer en een powerbank voor de voeding, zodat ik naar buiten kan zonder computer. Door het slechte weer heb ik dat nog maar een keer gedaan. Hiernaast zie je het resultaat. Het GPS systeem geeft "Universal time" (UTC); deze loopt in de winter 1 uur en in de zomer 2 uur achter ten opzichte van de tijd in Nederland. Je zou dit in je sketch kunnen aanpassen, maar dat is nog tamelijk ingewikkeld. Als je het systeem gebruikt om data te loggen dan is het verstandig UTC te blijven gebruiken.

Vier antennes, twee modules

Antennes (K85 en G165) en de module
Ik testte de NEO STM32 C51 nogmaals, maar nu met de actieve antenne erop. Daarnaast tesste ik de NEO-6m Mini GPS Satellite Positioning Module. Deze module heeft geen ingebouwde antenne, maar je kunt er een keramische antenne inklikken. Ik heb deze module getest met twee verschillende antennes, zie de foto. In alle gevallen heb ik de antenne zo dicht mogelijk bij een raam gelegd. Alle combinaties werkten naar behoren. Ze vonden vrij snel de correct (UTC) tijd. Na geruime tijd wachten vonden alle combinaties drie en meestal vier satellieten. Ik zag hierbij geen verschillen tussen de antennes. Het vierde cijfer achter de komma van de coördinaten komt overeen met 11 meter. Dat cijfer zou dus niet mogen veranderen, maar met slechts drie of vier satellieten en ook nog tussen gebouwen is dat cijfer niet helemaal betrouwbaar. De laatste twee cijfers zie je steeds verspringen, maar dat is normaal. Met gewone GPS kun je geen nauwkeurigheid van beter dan 11 meter verwachten. Bij alle combinaties kreeg ik variërende positiebepalingen, die maximaal 50 meter fout waren. Als het beter weer wordt zal de tests in het open veld herhalen om te zien of dan 11 meter gehaald wordt.