Sparki heeft ook een soort ogen. Hiermee kan hij de afstand tot een muur of object bepalen. Je kunt Sparki dan zo programmeren dat hij niet tegen de muur botst. Als Sparki bijvoorbeeld 10 centimeter van de muur is moet hij draaien of achteruit rijden.
Zijn ogen kunnen niet echt zien, ze werken met ultrageluid of ultrasoon geluid. Het geluid wat gemaakt wordt is zo hoog dat wij het niet kunnen horen. Sommige dieren horen deze hoge geluiden wel, bijvoorbeeld honden, muizen, dolfijnen en vleermuizen.
Sparki zendt een ultrasoon geluid uit, dit signaal reflecteerd tegen een muur of ander object en kaatst weer terug naar de richting waar het geluid vandaan kwam. Sparki berekent het tijdsverschil tussen zenden en ontvangen van het geluidsignaal. Sparki berekent de afstand aan de hand van het tijdsverschil.
Met de opdracht sparki.ping();
bepaalt Sparki de afstand tot een muur of object. Bij deze opdracht moet je altijd
een delay
gebruiken want Sparki heeft tijd nodig om de afstand te bepalen. Verder wil je natuurlijk dat de afstand op het beeldscherm komt te staan zodat je het kan aflezen.
Daarvoor gebruik je de opdracht sparki.print();
. Als je deze 3 opdrachten samen wilt voegen doe je dat zo:
#include <sparki.h> void setup() { } void loop() { sparki.clearLCD(); // wis het scherm sparki.print(sparki.ping()); // leest de afstand en print het op het scherm sparki.print(" cm"); sparki.updateLCD(); // update het scherm met nieuwe informatie delay(100); }
De ogen van Sparki kun je laten bewegen met de volgende opdrachten: sparki.servo(SERVO_LEFT);
en sparki.servo(SERVO_CENTER);
en sparki.servo(SERVO_RIGHT);
.
In plaats van SERVO_LEFT, SERVO_CENTER en SERVO_RIGHT KUN JE OOK -90, 0 en 90 graden gebruiken. Het is handig om graden aan te geven omdat je dan ook bijvoorbeeld 45 graden kan gebruiken.
#include <sparki.h> void setup() { } void loop() { sparki.servo(SERVO_LEFT); // draait de ogen naar links delay(1000); sparki.servo(SERVO_CENTER); // draait de ogen naar het midden, rechtvooruit. delay(1000); sparki.servo(SERVO_RIGHT); // draait de ogen naar rechts delay(1000); }
Je kunt Sparki laten rondrijden zonder dat hij tegen objecten aan botst. Met sparki.ping();
bepaal je eerst de afstand. Wat je terugkrijgt bij de ping opdracht zet je in een variable afstand
.
We hoeven dit keer de afstand niet op het beeldscherm te laten verschijnen. Wat Sparki wel moet doen is draaien als hij te dicht bij een object of muur komt.
De volgende opdrachten moeten gegeven worden:
Zet de ogen in het midden
Herhaal
Rij vooruit
Ultrasonische sensor bepaalt de afstand
Als de afstand kleiner is dan 10
rij een klein stukje achteruit
draai naar links (of rechts)
vertraging of delay
Bekijk hieronder de echte Sketch en probeer het maar eens uit.
#include <sparki.h> void setup() { sparki.servo(SERVO_CENTER); } void loop() { sparki.moveForward(); int afstand = sparki.ping(); if(afstand<10){ sparki.moveBackward(3); sparki.moveLeft(90); } delay(100); }
Schrijf een programma waarbij Sparki vooruit rijd met een groen LED aan. Als Sparki een muur of object detecteerd op 20 centimeter afstand dan moet het LED rood worden en moet Sparki een piep geven en hij moet naar achteren rijden en draaien.
Voorbeeld