26 Mei 2026 –
De vraag om praktische begeleiding bij integratie van sensors
Vandaag sta ik in de kas overlegruimte op SPARK Campus naast een oranje Arduino Braccio en een Duitse studente van de International Minor van Avans Hogeschool. De vraag is concreet: kan ik helpen om twee sensoren aan de praat te krijgen, zodat de robotarm straks zelfstandig een plaatje met QR-code oppakt en aan voorbijgangers toont? Die QR verwijst door naar het pixel-art project van een andere groep internationale minorstudenten – de robotarm wordt dus letterlijk de attentietrekker voor het werk van hun medestudenten.

Wat er op tafel ligt
Een gemonteerde Braccio (zes servo’s, M1 base tot en met M6 gripper, 5V/5A voedingsadapter volgens de Quick Start Guide), een Arduino R4 onder de Braccio-shield, een breadboard, en twee sensoren: een JoyIT IR-module en een HC-SR04 ultrasoonsensor. De studente heeft de Braccio-bibliotheek al draaiend en schrijft zelf de Braccio.ServoMovement(...) calls. Mijn rol is puur sensorintegratie – het stuk tussen “ding gebeurt in de wereld” en “robot weet het”.

Eerst de basis – wat zeg z’n sensor eigenlijk?
Voordat we ook maar één draad in een breadboard prikken, doe ik het rondje dat ik altijd doe: pak het datasheet erbij, of in dit geval de Braccio Quick Start Guide, en bepaal drie dingen per component. Welke spanning vraagt het? Welke pinnen, welke functie? En vooral – wat is het signaal dat eruit komt? Digitaal HIGH/LOW, analoog 0-1023, of een pulsbreedte die je zelf moet uitmeten?

Bij de Braccio is dat zo gepiept. De shield levert per servo drie pinnen: 5V, signaal, GND, voor M1 tot en met M6. De R4 hangt eronder, de 5V/5A adapter doet de servo-stroom – een blok dat werkt en waar ik niets aan wil sleutelen. De twee sensoren zijn een verhaal apart.
JoyIT IR – werkt, maar wankel
We beginnen met de JoyIT IR-module. Aansluiten is triviaal: VCC naar 5V, GND naar GND, digitale uitgang naar een digitale pin op de R4. Met behulp van de PDF Braccia manual komen we er achter dat GPIO pin 2 nog niet bezet is. En deze is ook niet verbonden aan de GPIO pinnen voor de USB connector. Een pinMode(2, INPUT) in setup(), een digitalRead(2) in loop(), een Serial.println() erachter en we lezen live HIGH of LOW uit zodra er iets reflecteert.
En daar zit precies het probleem – uitlezen lukt, maar de waarde flippert. Bij de minste lichtverandering, een hand die langs het breadboard zweeft of de eigen schaduw van de studente, slaat de status om. Voor een trigger waar de robotarm beslissingen op moet nemen – pakt-ie het plaatje wel of niet – is dat onbruikbaar. Een robotarm die om de drie seconden iets ophaalt omdat een wolk voor de zon schuift, is geen demo maar een ongeluk in slow motion. In tegenstelling tot verwacht, is hij HIGH wanneer de lichtstraal niet teruggekaatst worden en LOW wanneer deze wel terugkaatst.
Switch naar de standaard gele 5V IR-sensor
Ik besluit een greep te doen in mijn eigen voorraad prototyping sensors. Daarin heb ik een groot scala en sensors voor licht, warmte, vochtigheid, geluid, afstand en wat al niet meer. Ik zoek naar de bekende knalgele D80NK sensor. Een ronde cilindertje met instelpotmeter voor gevoeligheid. Op de foto hieronder liggen ze naast elkaar: de JoyIT-module links op het breadboard, het gele exemplaar rechts erin geprikt. Het verschil in stabiliteit is direct merkbaar. Geen flicker, geen ruis. Object aanwezig → HIGH, object weg → LOW.

Voor de studente is dit een belangrijke les en die benoem ik expliciet – een sensor die werkt is niet hetzelfde als een sensor die bruikbaar is. Het eerste is een vinkje op een spec sheet, het tweede is een keuze die past bij de toepassing. In dit geval: betrouwbare detectie van een hand of een plaatje binnen handbereik, in een wisselend belichte beursomgeving.
Ultrasoon – van pulsbreedte naar centimeters
Met de ultrasoonsensor HC-SR04 schakelen we van digitale aan/uit naar een meting. Vier pinnen: VCC, GND, Trig, Echo. 5V, GND, en twee digitale pinnen van de R4. Tot zover hetzelfde liedje. Het verschil zit in hoe je de meting krijgt. Je stuurt een korte puls (10 microseconden HIGH op Trig), de sensor stuurt een ultrasoon “tik” uit, en de Echo-pin blijft HIGH zolang het signaal onderweg is naar het object en terug. Met pulseIn(echoPin, HIGH) lees je de duur in microseconden uit, en omdat geluid in lucht ongeveer 343 m/s gaat, deel je door 58 om centimeters te krijgen.
cpp
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duur = pulseIn(echoPin, HIGH);
afstand_cm = duur / 58;
Eerst een paar metingen op de seriële monitor laten lopen – hand op 20 cm, op 50 cm, op een meter – om te zien of de waarden ergens op slaan. Dat doe ik altijd voordat ik een sensor aan een actuator hang. Print je de meting niet eerst kaal-en-bloot, dan weet je later nooit of vreemd robotgedrag aan de sensor, de berekening of de servo-logica ligt. Test je basisfuncties los van elkaar – geen verplichting, maar een goed gebruik als manier om te voorkomen dat je een uur naar de verkeerde bug zit te staren.
Het stabiele bereik blijkt tussen de 10 en 120 cm te liggen. Dichterbij dan 10 cm is dode hoek, verder dan 120 cm wordt het signaal te zwak en krijgen we uitschieters. Voor de toepassing – een passant detecteren en de Braccio laten reageren op hoe dicht die persoon staat – ruim voldoende.
Van sensor naar interactie
Met deze twee sensoren samen ontstaat een gelaagd gedrag voor de Braccio: De ultrasoon sensor draait continu en bepaalt of er überhaupt iemand in de buurt is. Komt iemand binnen 120 cm, dan ontwaakt de arm uit de rustpositie. Komt diezelfde persoon dichter dan een ingestelde drempel – pakweg 40 cm – dan beweegt de Braccio richting het plaatje met de QR-code. De gele IR-sensor zit op of vlak bij dat plaatje en geeft het definitieve “ja, hier, grijpen” signaal aan de gripper.

De afstand uit de ultrasoonmeting is bovendien als variabele te gebruiken – de snelheid van de armbeweging laten meeschalen met hoe dichtbij iemand staat, of de hoogte waarop het plaatje wordt aangeboden laten variëren. Dat is het verschil tussen een robot die een kunstje doet en een robot die reageert. En reageren is precies wat je nodig hebt om iemand lang genoeg te boeien om die QR daadwerkelijk te scannen.

Wat de studente meeneemt
Na deze sessie staan er twee werkende sensoren, maar belangrijker: een werkwijze die generaliseert naar elke volgende sensor die ze wil aansluiten. Datasheet eerst. Signaaltype bepalen. Drie basispinnen aansluiten (voeding, signaal, massa). Kaal uitlezen via de seriële monitor. Pas dán koppelen aan de actuator.
En één extra les die niet in de manuals staat: blijft een sensor onstabiel ondanks correcte bedrading, dan ligt het niet altijd aan jou. Soms is het simpelweg de verkeerde sensor voor de klus. Een geel cilindertje van een paar tientjes wint het van een dure module, puur omdat het ontwerp robuuster is voor jouw use case.
De studente kan nu zelfstandig verder met de code-uitwerking. De bouwstenen liggen er, de meetwaarden zijn betrouwbaar, en ze weet hoe ze nieuwe sensoren op dezelfde manier kan inwerken. Vanaf nu is het haar project. De Braccio staat klaar. De QR wacht op de gripper. En straks, op een open dag / expo, leidt een arm in oranje plastic bezoekers naar het pixel-art van een andere groep studenten – met dank aan een gele sensor en een tikkend ultrasoonoogje.
Tot slot
Dit soort sessies zijn precies waarom ik graag op de SPARK Campus rondloop. Een concrete vraag, de benodigde tijd, en een studente die aan het einde zelf verder kan. Kennis overdragen is leuk werk, en studenten een stukje verder op weg helpen is voor mij minstens zo waardevol als het maakwerk zelf.
Project: International Minor support, Avans Hogeschool / SPARK Campus. Hardware: Arduino R4 + Braccio shield, JoyIT IR-module, generieke 5V IR reflectieve sensor (geel), HC-SR04 ultrasoonsensor. Braccio Quick Start Guide via arduino.org/braccio.
