Nu jij!
Je robot rijdt rechtdoor zolang beide sensoren wit zien. Maar zodra hij afdwaalt, komt de lijn onder één van de sensoren — en dan gebeurt er nog niets. Aan jou de taak om het bijsturen toe te voegen, zodat de robot de lijn echt blijft volgen.
De opdracht
Breid de code van stap 3 uit met twee extra gevallen:
- Linkersensor ziet zwart, rechter wit → de lijn ligt links. Stuur bij.
- Linkersensor ziet wit, rechter zwart → de lijn ligt rechts. Stuur bij.
Gebruik hiervoor elif. De vuistregel: zet de motor aan de kant van de sensor die de lijn ziet wat zachter, dan draait de robot precies die kant op — terug naar de lijn.
from leaphymicropython.sensors.linesensor import AnalogIR
from leaphymicropython.actuators.dcmotor import DCMotors
from leaphymicropython.actuators.oled_screen import OLEDSH1106
from time import sleep
motoren = DCMotors()
motor_a = motoren.motor_a
motor_b = motoren.motor_b
links = AnalogIR("A0", 2500)
rechts = AnalogIR("A1", 2500)
oled = OLEDSH1106(width=128, height=64, channel=7)
while True:
kleur_links = links.black_or_white()
kleur_rechts = rechts.black_or_white()
oled.fill('white')
oled.text('Links: ' + kleur_links, 0, 0)
oled.text('Rechts: ' + kleur_rechts, 0, 10)
oled.show()
if kleur_links == "white" and kleur_rechts == "white":
motor_a.forward(255)
motor_b.forward(255)
elif kleur_links == "black" and kleur_rechts == "white":
# TODO: welke motor zet je zachter?
pass
elif kleur_links == "white" and kleur_rechts == "black":
# TODO: en hier de andere kant op
pass
sleep(0.01)
Vervang elke # TODO en de pass door de juiste motor_a.forward(...) en motor_b.forward(...). Het scherm laat ondertussen zien wat de sensoren meten — handig om te controleren of je robot het goede geval kiest.
Je hebt hier vooral elif en vergelijkingen nodig:
Meer oefenen met while en if op sensoren? Bekijk Code beter begrijpen.
Tip — ik kom er niet uit
- Ziet de linkersensor de lijn (
black)? Zet danmotor_a(links) bijvoorbeeld op150enmotor_b(rechts) op255. - Ziet de rechtersensor de lijn? Dan precies andersom.
- Draait je robot de verkeerde kant op? Dan zit je bedrading gespiegeld — wissel
motor_aenmotor_bom, of test eerst metmotor_a.test().
Afstellen
Werkt het, maar niet soepel?
- Slingert hij hard heen en weer? Maak het verschil kleiner (bijvoorbeeld
200in plaats van150). - Reageert hij te traag in de bocht? Maak het verschil juist groter.
Extra uitdaging
Wat doet je robot als beide sensoren tegelijk zwart zien? Dat is meestal een kruising. Voeg zelf een extra elif toe en bedenk wat er dan moet gebeuren: stoppen, rechtdoor, of een kant op draaien.