Interactieve NFC-navigatie voor Arduino Alvik Robotplatform

31 Maart 2025

Interactie met navigatie
Voor een van de komende projecten heb ik de afgelopen dagen een interactieve navigatie geprogrammeerd. Hiermee kunnen deelnemers van alle leeftijden eenvoudig instructies geven aan een rondrijdende robot. Er is gekozen voor een NFC (Near Field Communication) oplossing, waarbij instructies zoals “Vooruit”, “Achteruit”, “Links” en “Rechts” worden gegeven met een soort creditcard.

Vormen van NFC-tags
De keuze voor NFC biedt diverse mogelijkheden. NFC-tags zijn beschikbaar in verschillende vormen, zoals een creditcard, kleine tags, stickers, plastic schijven, armbanden, seals en glasmodules. De leesafstand van een NFC-tag tot de NFC-lezer hangt af van het type lezer, maar bedraagt doorgaans zo’n 2 cm. De prijzen van de tags variëren, afhankelijk van de uitvoering, tussen € 0,20 en € 1,50.

Gebruik van Arduino Uno
Voor de processor ben ik gestart met een Arduino Uno. Dit bord is eenvoudig te programmeren en kan feedback geven via licht (LED’s), geluid (speaker) of een seriële interface met een LCD-scherm. Voor deze NFC-navigatie is het belangrijk dat de gebruiker bevestiging krijgt dat een instructie is gelezen en een overzicht heeft van de verzamelde instructieset (bijvoorbeeld: V V V L V V R V V V V L A A). Dit betekent dat de robot drie keer vooruitgaat, één keer linksaf slaat, twee keer vooruitgaat, één keer rechtsaf, vier keer vooruitgaat, nog één keer linksaf en tot slot twee keer achteruit. Ook moet het mogelijk zijn de laatste ingevoerde stap te corrigeren en opnieuw toe te voegen. Een LCD-scherm zal de volledige instructieset tonen. Daarnaast is er een speciale NFC-tag die de robot activeert om alle ingevoerde stappen uit te voeren.

Betrouwbare communicatie
Naast gebruiksgemak is vooral de robuustheid van de communicatie tussen de NFC-lezer en het robotplatform essentieel. Hiervoor wordt Bluetooth Low Energy (BLE) gebruikt, een energiezuinige draadloze communicatiemethode die snelle communicatie over korte afstanden mogelijk maakt. De feedback bij het inlezen van instructies wordt verzorgd door een piezo-tweeter in combinatie met een heldere LED. Aangezien er meerdere NFC-lezer/robotplatform-combinaties in dezelfde ruimte kunnen zijn, is het belangrijk dat elke combinatie een unieke identificatie heeft. Dit wordt gerealiseerd met een unieke device-name in de BLE-stack, waardoor de verbinding tussen de NFC-lezer en het robotplatform vastligt.

Uitdaging voor deelnemers
De NFC-tags worden gebruikt om deelnemers uit te dagen een instructieset samen te stellen, waarmee het robotwagentje een bepaalde route aflegt. De toepassing van de NFC-tags staat nog niet vast en kan thematisch worden aangepast. Voor jongere deelnemers kunnen de tags bijvoorbeeld in poppetjes of autootjes worden verwerkt. Voor oudere gebruikers kunnen de tags de vorm aannemen van bedrukte creditcards met logo’s, teksten of instructies.

Uitvoer en weergave
Tijdens de ontwikkelfase wordt de output van de NFC-lezer weergegeven via de seriële bus. Voor het uitlezen kan de Arduino Serial Monitor worden gebruikt, evenals tools zoals Putty. In de definitieve versie zal de output via een LCD-scherm worden weergegeven, met een mogelijke uitbreiding naar een HDMI-monitor. De koppeling van embedded processors met HDMI-weergave is recent vereenvoudigd door de introductie van de Adafruit HSTX naar DVI-adapter.

Van idee naar realiteit
Dit soort projecten zijn erg leuk om te ontwikkelen. Het proces van een vaag idee naar een concreet werkend model maakt alle functionaliteiten tastbaar. Vooral het realiseren van de werkelijke werking is interessant, omdat technische hindernissen dan praktisch voelbaar en zichtbaar worden. Het lezen van specificaties en het selecteren van componenten is een kunst op zich, maar het verbinden van de componenten vormt een extra uitdaging. Protocollen sluiten niet altijd op elkaar aan of kunnen elkaar zelfs uitsluiten. Timing van seriële communicatie en de handshake om gegevensoverdracht te garanderen, zijn hierbij belangrijke aandachtspunten.