home
Zicht op Andijk
Hoofd
pagina
APRS
Tracker
SDR
Ontvanger
RCC
Software
Dummy
Load
Kortegolf
Antenne
Antenne
Analyser
QSL
Kaarten
SWL
Kaarten

Arduino (nano) APRS Tracker

Omdat ik een licentie heb om ook op de amateurbanden te mogen zenden ligt het voor de hand om me te verdiepen in APRS. Dit is een vorm van een wereldwijd draadloos netwerk waar zendamateurs digitale berichten naar elkaar kunnen sturen. Het houdt een beetje tussen SMS en ethernet netwerk. Op inhoud bied het niet veel. Het meest toegepast is de tracker. Dat is een apparaatje die zijn locatie draadloos op het APRS netwerk plaatst. Een soort omgekeerde GPS. Vaak in een auto gebruikt door zendamateus. Op het internet zag ik dat sommigen met een Arduino een tracker hadden gemaakt. Dat ga ik ook doen.



Een paar dingen zijn nodig om te beginnen. Een zendontvanger die op 144.800 Mhz kan werken, een Arduino, en wat losse electronica onderdelen.
Dit heb ik allemaal in huis dus aan de gang. Maar om zelf de software te kunnen schrijven moet ik eerst het protocol bestuderen.
En dan blijkt weer dat zendamateurs heel erg langdradig kunnen zijn op stoffige onderwerpen en op de onderwerpen die belangrijk zijn juist weer niets zeggen. Als voorbeeld wordt tot het uiterste toegelicht hoe je een weerbericht kan versturen (wat niemand doet) maar dat vrijwel nergens staat hoe de CRC bitcontrole werkt die vaststelt of een bericht foutloos is overgekomen. Dus ben ik maar begonnen met lezen van verschillende documenten, iets wat altijd is aan te raden.

APRS wordt vrijwel altijd uitgezonden in AFSK. Een oude en stabiele methode om digitale signalen te versturen. Het werkt met vrijwel alle apparatuur en dure digitale appartauur is niet nodig. AFSK gebruikt voor APRS werkt met twee toonhoogtes 1200hz en 2200hz die de 0 en 1 voorstellen ook wel space en mark genoemd.
De snelheid gaat met 1200 baud. Ofwel 1200 tekens per seconde. Een teken duurt daardoor 833us (1sec/1200).
Dus als een mark(1) moet worden verstuurd dan gaat er 833us een toon van 2200 hz door de lucht. En bij de space (0) hetzelfde maar dan met 1200 hz.
Elke bit wordt dus in een tijdvak van 833us gezet en verzonden. Een 0 duurt even lang als een 1.

Hoe een APRS bericht is opgebouwd staat op veel plaatsen op het internet. Waar ik veel aan gehad heb is dit document over Packet.
APRS is hetzelfde maar alleen met andere berichtinhoud. Dit document heeft me ook geholpen. Verder staat er veel onzin op het internet.
De een spreekt de andere tegen en allen beweren ze gelijk te hebben. Afijn, veel uren heeft het me gekost om de software draaiend te krijgen door dit gedoe.
Het is uiteindelijk gelukt door de twee genoemde documenten goed te lezen. Dat bleek de uiteindenlijke waarheid te zijn.
En dan is het een kwestie van programmeren. De data vertalen naar een reeks van nullen en enen en dan versturen.
Kort gezegd gaat een bericht als volgt. Een preamble van 010101.. wordt verstuurd, dat wil zeggen een soort aankondiging dat er een bericht aankomt.
Maar vooral bedoeld om zowel de zender als ook de ontvanger op gang te laten komen. Daarna volgt de HDLC ofwel de startflag.
Deze startflag heeft altijd de waarde 0x7E waardoor de ontvanger kan herkennen dat dit geen ruis maar een digitaal signaal is.
Dan volgt het databericht en een controlegetal (CRC-16). En als afsluiter weer een 0x7E flag om aan te geven dat het bericht ten einde is.
Het controlegetal is een berekening over de verzonden databericht. Als de ontvanger dezelfde berekening uitvoert en hetzelfde controlegetal krijgt dan is de verzending goed gegaan. Het heeft me heel wat tijd gekost om te ontdekken hoe de CRC-16-CCITT werkt en werkend te krijgen omdat er vele varianten in omloop zijn. De berekening uit de genoemde documenten kloppen en let op .. met de CRC eerst de lowbyte en dan highbyte versturen.
De CRC gaat over alle databits, dus niet de bitstuff bits of de preambles of de CRC zelf. Alleen het infoblock dus.

 

Verzenden

Eerst maar de hardware maken. Beetje zoeken hoe anderen een sinus signaal maken en nabouwen. Aan de Arduino heb ik een R2R ladder gekoppeld. Hiermee kan je een digitaal signaal omzetten naar een analoge sinusvorm. En eigenlijk super makkelijk. Een waarde tussen 0 en 15 op de poorten geeft een variatie in amplitude. 0 is geen amplitude, 15 is maximaal. Zet dit in een loopje en je kan een sinusvormig uitgangsignaal maken. Door te varieren met de snelheid van het loopje kan je vrijwel elke frequentie maken tussen 0 en veel kilohertzen. Alleen krijg je dan wel een zaagvorm en we moeten een sinusvorm hebben. Vaak wordt het opgelost door niet linear waarden te versturen maar waarden die een vorm van een sinus maken. Excell was mijn vriend en een beetje stoeien om een mooie "lookup table" te maken. Door in een loopje de berekende waarde te versturen krijg je een hele mooi sinus op de uitgang. Dus ik stuur achtereenvolgend: 5,6,7,8,9,9,10,10, 10,10,10,9,9,8,7,6, 5,4,3,2,1,1,0,0, 0,0,0,1,1,2,3,4,


Hieronder het schema. In het midden de Nano met R2-Ladder. Aan de onderkant zie je de GPS module en rechts de PTT schakeling voor de Baofeng porto die ik eerst ga gebruiken als zender. Dit is waarschijnlijk de meest eenvoudige manier om een APRS tracker te maken. En de goedkoopste.
10 weerstanden, een transistor, een ledje, printje, een nano en een gps module moet nnder de 15 euro te vinden zijn. Lukte mij ook.
Gooi er nog een paar euro en wat plugjes en een kastje tegenaan maar dan moet je met 20 euro het wel gehad hebben.


Als proefje heb ik een progje gemaakt die random een 1200hz signaal en een 2200hz signaal afgeeft. Een APRS signaal emulator zeg maar.
En zo ziet het signaal er uit op de oscilloscoop. Duidelijk zijn de twee verschillende frequenties te zien. De brede 1,2khz en de smalle 2,2,khz (ongeveer).
Een volledige golf van 1,2 khz is dus een bit en 2x 2.4khz golven zijn ook een bit. Voor het beeld heb ik de twee 2,2kHz golven gemeten (tussen de blauwe lijnen) die 831us duren en dus een bit voorstellen. Dat zit vrij dicht tegen de 833us aan. Nu de hardware draait is het een kwestie van de software maken.


In de software moet je rekening houden met de bitstuffing wat ervoor zorgt dat de ontvanger in sync blijft.
Na 5 eentjes in een serie moet er een 0 worden tussengevoegd. Deze 0 wordt door de ontvanger verwijderd voordat de verdere verwerking gaat gebeuren.
Dus bitstuffing gaat over ALLE verzonden bits heen BEHALVE de start en eind flag's (0x7E).
En ALLE bytes gaan LSB eerst de lucht in.

Nu je dit weet moet het in een dagje wel te regelen zijn. Ik heb door alle onduidelijkheid er een week over gedaan..
Het zenden is dus gelukt. In de proefopstelling ziet het er zo uit:

GPS

Voor de GPS gebruik ik zo'n heel goedkoop chinees GPS module. Deze VK16U6 van V.Kel Is slechts 2.5 bij 2.5 cm en met drie draadjes aan te sluiten. Kost rond de 8 euro op Ebay of Aliexpress. En werkt onzettend goed en is zo gevoelig dat het binnen ook nog aardig signaal oppakt. GND op de min, VCC op de 5 volt (3.3 volt werkt niet goed) en RX op de dataport.

Configuratie software

Het is wel zo handig dat de tracker via de PC te programmeren is. Daarvoor heb ik ook een simpel programmatje gemaakt die de settings in de tracker snel en eenvoudig mogelijk maakt. Zo heb ik ingebouwd dat je ook zonder GPS kan werken en zelf coordinaten kan ingeven omdat je soms niet wilt dat de hele wereld weet waar je bent.
Voor de rest is het heel erg basis. Bizar dat je bij anderen meer dan 95 dollar moet betalen..

Alles in elkaar gezet

En daarmee is de APRS tracker uiteindelijk gereed en in een klein kastje ingebouwd.
Ik heb gebruik gemaakt van een Arduino Nano en het geheel op een gaatjes print gemonteerd.
Om alles onder spanning te krijgen wordt de gevoed vanuit de USB poort die tegenwoordig in elke auto wel aanwezig is.
Vervolgens de GPS weer vanuit de 5 volt aansluiting op de Nano. Allemaal net zo gemakkelijk.
De aansluiting naar de Baofeng is gemaakt van het kabeltje van zo'n externe mic die je bij porto's aantreft.



Hieronder kan je de ook de software en de schema's downloaden voor persoonlijk gebruik.

Het systeem werkt. Na een week dwars door nederland te hebben gereden ben ik steeds zichtbaar op aprs.fi.
Het bereik van zo'n portootje is natuurlijk beperkt vanwege 4 watt output op een klein magneetantennetje met 5 meter dunne coax.
Afijn, project geslaagd en kan worden afgesloten.
|

Schema

Nano code

Client software

(laatste update 9 oktober 2016)

 
Webdesign door mezelf en alle content is auteursrechtelijk beschermd.