Skip to main content

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 met Micropython (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

Let op: A4 en A5 zijn bezet bij gebruik van een multiplexer!

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'.
    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)
    Beweeg nu je hand boven de sensor of houd er een zwart/wit vel papier voor. Zie je de waardes veranderen?
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

Let op: D2, D3, D4 en D11 zijn bezet door het motor shield!

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: De leaphymicropython bibliotheek heeft een handige testfunctie.
    from leaphymicropython.actuators.dcmotor import DCMotors
    motoren = DCMotors()
    motoren.motor_a.test() # Test motor A
    motoren.motor_b.test() # Test motor B
    Als de motor kort vooruit en achteruit beweegt, weet je dat de aansturing en bedrading goed zijn.
  • Controleer de snelheid: Een snelheid onder de 200 is 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() en backward() 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 je oled.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") of oled.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 met str():
    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.