Bekijk Sparki maar eens aan de onderkant. Aan de onderkant/voorkant zie je een aantal Infrarood sensoren (IR sensors).
De middelste 3 zijn voor zwarte lijnen volgen. De 2 aan de zijkanten zijn voor rand detectie. In het Engels: edge detection. De infrarood sensor schijnt infrarood licht op de tafel , het licht weerkaatst alleen terug als het op bijvoorbeeld een tafel schijnt. Schijnt het licht op een zwart oppervlakte dan weerkaatst er weinig licht terug. Schijnt het infrarood licht over de rand van de tafel heen dan weerkaatst er geen licht terug.
Met deze opdracht: sparki.edgeLeft();
meet je de waarde van de linker Infrarood sensor.
Met deze opdracht: sparki.edgeRight();
meet je de waarde van de rechter Infrarood sensor.
Deze twee opdrachten gaan we aan een variabele toekennen. De variabelen noemen we voor het gemakrandLinks
en randRechts
, en het datatype is int
omdat
het een geheel getal meekrijgt uit de meting.
Om de waarde te zien kunnen we het Display (beeldscherm) gebruiken. In de les over het beeldscherm had je geleerd dat je met de opdracht
sparki.println();
tekst en getallen op het beeldscherm kan zetten. Dit gaan we doen met het volgende programma:
#include <sparki.h> void setup() { } void loop() { sparki.clearLCD(); // wis het scherm int randLinks = sparki.edgeLeft(); // meet de linker IR sensor int randRechts = sparki.edgeRight(); // meet de rechter IR sensor // schrijf de meting op het scherm sparki.print("Rand links: "); sparki.println(randLinks); sparki.print("Rand rechts: "); sparki.println(randRechts); sparki.updateLCD(); delay(100); }
Test je programma uit met Sparki. Zet sparki op verschillende oppervlakte van verschillende kleuren. Zet Sparki ook eens met één voorkant over de rand van de tafel. Lees steeds de waarde op het beeldscherm. Wanneer is de waarde het hoogst? Wanneer is de waarde het laagst?
We gaan Sparki over de tafel laten rijden zonder dat hij eraf valt. We gebruiken daarbij de informatie die we hierboven geleerd hebben. Als de metingen van de IR sensors hoge waarden doorgeven dan is Sparki nog op de Tafel. Geven de IR sensors lage metingen dan begeeft Sparki zich aan de rand.
In het programma gaan we een drempel waarde gebruiken. Als de sensor een waarde doorgeeft die onder de drempel waarde licht dan begeeft Sparki zich aan de rand. Geeft de sensor een waarde die hoger is dan de drempel waarde dan begeeft Sparki zich nog op de tafel. Hieronder in het programma zie je dat de drempel waarde 200 is gemaakt. Test het programma uit.
#include <sparki.h> void loop() { int randLinks = sparki.edgeLeft(); // meet de linker IR sensor int randRechts = sparki.edgeRight(); // meet de rechter IR sensor int drempel = 200; // onder deze waarde begeeft Sparki zich over de rand if (randLinks < drempel) // als er geen oppervlakte onder Sparki is { sparki.moveBackward(5); sparki.moveRight(20); } if (randRechts < drempel) // als er geen oppervlakte onder Sparki is { sparki.moveBackward(5); sparki.moveLeft(20); } sparki.moveForward(); delay(100); }
In het programma kun je experimenteren met drempel waarde. Ook kun je veranderen wat Sparki moet doen als hij een rand detecteerd.