Debuggen
Hieronder vind je een lijst met veelvoorkomende problemen en tips om ze op te lossen.
Stroom
Mijn robot doet helemaal niets!
- Controleer het groene lampje op je microcontroller: Brandt deze niet, dan krijgt de microcontroller geen stroom.
- Controleer of de ON/OFF switch op ON staat op je
Murphy Shield - Controleer of de ON/OFF switch op ON staat op je
Motor Shield - Controleer of de ON/OFF switch op ON staat op je
batterijhouder
Mijn computer heeft geen verbinding met de robot
- Controleer de USB-kabel: Is de kabel goed aangesloten op zowel de computer als de microcontroller? Probeer een andere USB-poort of een andere kabel.
- Controleer de interpreter: Staat er rechtsonder in Thonny iets wat begint met
Micropython (RP2040)..., dan is alles goed! Zo niet, klik dan rechtsonder en kies wat begint metMicropython (RP2040). - Controleer de poortinstellingen in Thonny: Ga naar
Run > Configure interpreter...en zorg ervoor dat de juiste poort is geselecteerd. Soms helpt het om de microcontroller los te koppelen en opnieuw aan te sluiten, en dan in Thonny op de 'Stop/Restart backend' knop te drukken.
Mijn computer heeft alleen maar USB-C ingangen
Dan heb je een zeer moderne laptop! Heb je toevallig een USB-C naar USB-A adapter? Overleg anders even met je docent!
IR-sensoren
Pinnen A4 en A5 worden gebruikt voor I2C communicatie (SDA en SCL). Als je een multiplexer, TOF-sensor of OLED-scherm gebruikt, zijn deze pinnen al bezet. Sluit hier geen IR-sensoren op aan! Gebruik alleen A0, A1, A2, A3, A6, A7 voor IR-sensoren.
Mijn sensor geeft rare of geen waardes.
- Krijgt de sensor stroom? Is de sensor aangesloten op de juiste pinnen? Als het groene lampje op de sensor brandt, dan krijgt deze in ieder geval stroom!
- Print de sensorwaardes: De beste manier om te zien wat een sensor doet, is door de waardes continu te printen in de 'Shell'.
Beweeg nu je hand boven de sensor of houd er een zwart/wit vel papier voor. Zie je de waardes veranderen?
from leaphymicropython.sensors.ir import IR
from time import sleep
# Vervang A0 door de pin waar jouw sensor op aangesloten is
ir_sensor = IR("A0")
while True:
print(ir_sensor.read_analog())
sleep(0.1)
Mijn lijnvolger volgt de lijn niet.
- Kalibreer je sensoren: De waardes voor 'zwart' en 'wit' kunnen verschillen per ondergrond en lichtinval. Print de waardes van je IR-sensoren boven de lijn en naast de lijn. Bepaal een goede 'drempelwaarde' (threshold) in je code om te beslissen of de sensor de lijn ziet.
- Controleer de sensorpositie: Staan de sensoren niet te ver van de grond? Staan ze op de juiste breedte om de lijn te kunnen detecteren?
- Controleer je logica: Wat moet de robot doen als de linker sensor zwart ziet? En de rechter? En als ze allebei wit zien? Loop je code stap voor stap na in je hoofd (of op papier).
Motoren
Pinnen D2, D3, D4 en D11 worden door het motor shield gebruikt om de motoren aan te sturen. Sluit hier geen andere sensoren of actuatoren op aan (zoals een buzzer, LED of sensor), anders kunnen je motoren raar doen!
Motor draait niet
Snelheid te laag? Probeer minimaal 180-200 door het gewicht van de robot. Check ook of de batterijen vol genoeg zijn.
Motor draait verkeerde kant op
Wissel de + en - draden van de motor om op het motor shield.
Motor shield lampje brandt maar motor draait niet
Check of de batterijen vol genoeg zijn of verhoog de snelheid naar minimaal 180-200.
Robot rijdt niet rechtdoor
Motoren hebben vaak verschillende snelheden nodig om recht te rijden. Kalibreer door verschillende waarden te testen (bijv. motor_a op 200 en motor_b op 210).
Eén of beide motoren werken niet.
- Gebruik de
test()functie: Deleaphymicropythonbibliotheek heeft een handige testfunctie.Als de motor kort vooruit en achteruit beweegt, weet je dat de aansturing en bedrading goed zijn.from leaphymicropython.actuators.dcmotor import DCMotors
motoren = DCMotors()
motoren.motor_a.test() # Test motor A
motoren.motor_b.test() # Test motor B - Controleer de snelheid: Een snelheid onder de
200is vaak te laag om de robot in beweging te krijgen vanwege het gewicht. Probeer de motor met maximale snelheid aan te sturen:motor_a.forward(255). - Controleer de bedrading: Zitten de draden van de motor goed in de schroefterminals van het motor shield? Zitten de jumper wires van het shield naar de Nano goed?
De robot rijdt de verkeerde kant op.
- Draai de draden om: De makkelijkste manier om de draairichting van een DC-motor om te draaien, is door de twee draden die van de motor naar het motor shield lopen om te wisselen.
- Pas de code aan: Je kunt ook
forward()enbackward()in je code omwisselen. Dit is handig als je de draden niet wilt aanpassen.
TOF-sensoren
TOF-sensor geeft 0 of 8190
- Object is buiten bereik: De TOF-sensor meet tussen ongeveer 3cm en 200cm. Als het object te dichtbij of te ver is, krijg je 0 of 8190 als waarde.
- Test de sensor: Houd een wit vel papier of karton op ongeveer 10-30cm afstand van de sensor en print de waardes:
from leaphymicropython.sensors.tof import TimeOfFlight
from time import sleep
tof = TimeOfFlight()
while True:
afstand = tof.get_distance()
print(afstand)
sleep(0.1)
TOF-sensor geeft onstabiele metingen
- Gebruik een wit oppervlak: Donkere of reflecterende oppervlakken geven minder betrouwbare metingen. Test met een witte muur of wit karton.
- Voeg een kleine vertraging toe: Gebruik
sleep(0.05)tussen metingen voor stabielere waardes. - Check de bedrading: Controleer of de SDA en SCL kabels goed aangesloten zijn op de multiplexer of rechtstreeks op de Nano.
Meerdere TOF-sensoren werken niet tegelijk
- Gebruik een multiplexer: Meerdere TOF-sensoren hebben hetzelfde I2C-adres. Je hebt een multiplexer nodig om meerdere TOF-sensoren te gebruiken.
- Geef elk een eigen channel: In je code moet elke sensor een eigen channel krijgen:
tof_1 = TimeOfFlight(channel=0)
tof_2 = TimeOfFlight(channel=1)
TOF-sensor werkt helemaal niet
- Check de multiplexer: Als je een multiplexer gebruikt, check of deze goed is aangesloten op de Nano (SDA en SCL pinnen).
- Controleer de stroom: Krijgt de sensor voldoende stroom? Check de bedrading van VCC en GND.
- Juiste channel: Gebruik je het juiste channel nummer in je code? Dit moet overeenkomen met waar de sensor op de multiplexer is aangesloten.
OLED-scherm
OLED-scherm blijft leeg of zwart
- Vergeten
show()aan te roepen: Tekst verschijnt pas op het scherm nadat jeoled.show()aanroept.oled.text('Hallo!', x=0, y=0)
oled.show() # Vergeet deze niet! - Check de multiplexer: Is het scherm aangesloten op het juiste channel van de multiplexer? Controleer of je in de code het juiste channel gebruikt (meestal 7).
- Controleer de bedrading: Zitten de SDA en SCL kabels goed op de multiplexer? Is de stroom (VCC en GND) goed aangesloten?
Oude tekst blijft op het scherm staan
- Wis het scherm eerst: Gebruik
oled.fill("black")ofoled.fill("white")voordat je nieuwe tekst schrijft:oled.fill("white") # Scherm wit maken
oled.text('Nieuwe tekst', x=0, y=0)
oled.show()
Error bij het tonen van getallen op het scherm
- Gebruik
str()voor getallen: Je kunt alleen tekst (strings) op het scherm zetten. Converteer getallen metstr():afstand = 123
oled.text('Afstand: ' + str(afstand), x=0, y=0)
oled.show()
Tekst valt buiten het scherm
- Check de X en Y coördinaten: Het scherm is 128 pixels breed (X: 0-128) en 64 pixels hoog (Y: 0-64).
- Gebruik meerdere regels: Elke tekstregel is ongeveer 10 pixels hoog. Gebruik y=0, y=10, y=20, etc. voor verschillende regels:
oled.text('Regel 1', x=0, y=0)
oled.text('Regel 2', x=0, y=10)
oled.text('Regel 3', x=0, y=20)
oled.show()
Scherm flikkert of is traag
- Update niet te vaak: Probeer het scherm maximaal 10 keer per seconde te updaten. Voeg
sleep(0.1)toe in je loop. - Vermijd onnodige updates: Roep alleen
show()aan wanneer de tekst echt verandert, niet bij elke loop iteratie.