Pico Car Bibliotheek - Functie Referentie

Dit document beschrijft alle functies en klassen in de pico_car.py bibliotheek voor de Raspberry Pi Pico Robot.


Inhoudsopgave

  1. Klasse: pico_car

  2. Klasse: ws2812b

  3. Klasse: ultrasonic

  4. Klasse: SSD1306_I2C

  5. Klasse: ir

  6. Klasse: ds


Klasse: pico_car

De hoofdklasse voor het besturen van de robot. Deze klasse regelt de motoren en servo’s.

Constructor

__init__()

Initialiseer de pico_car klasse.

Gebruik:

Motor = pico_car()

Wat doet het:

  • Stelt PWM frequenties in voor alle servo’s (100 Hz)

  • Stelt PWM frequenties in voor alle motoren (1000 Hz)

  • Maakt de robot klaar voor gebruik


Motor Functies

Car_Run(speed1, speed2)

Laat de robot vooruit rijden.

Parameters:

  • speed1 (int): Snelheid linker motor (0-255)

  • speed2 (int): Snelheid rechter motor (0-255)

Voorbeeld:

Motor = pico_car()
Motor.Car_Run(255, 255)  # Volle snelheid vooruit
Motor.Car_Run(150, 150)  # Halve snelheid vooruit
Motor.Car_Run(200, 150)  # Vooruit met bocht naar rechts

Uitleg:

  • 0 = motor staat stil

  • 255 = maximale snelheid

  • Verschillende snelheden voor linker en rechter motor zorgen voor bochten


Car_Stop()

Stop de robot volledig.

Parameters: Geen

Voorbeeld:

Motor.Car_Stop()

Uitleg:

  • Zet alle motor PWM signalen op 0

  • Robot stopt met bewegen

  • Gebruik dit altijd aan het einde van een beweging


Car_Back(speed1, speed2)

Laat de robot achteruit rijden.

Parameters:

  • speed1 (int): Snelheid linker motor (0-255)

  • speed2 (int): Snelheid rechter motor (0-255)

Voorbeeld:

Motor.Car_Back(200, 200)  # Achteruit op volle snelheid
Motor.Car_Back(100, 150)  # Achteruit met bocht

Uitleg:

  • Werkt hetzelfde als Car_Run maar dan in achterwaartse richting

  • Verschillende snelheden zorgen voor bochten tijdens achteruitrijden


Car_Left(speed1, speed2)

Laat de robot op de plaats naar links draaien.

Parameters:

  • speed1 (int): Snelheid linker motor (0-255)

  • speed2 (int): Snelheid rechter motor (0-255)

Voorbeeld:

Motor.Car_Left(150, 150)  # Draai links met gemiddelde snelheid
time.sleep(0.5)           # Draai een halve seconde
Motor.Car_Stop()

Uitleg:

  • Linker motor draait achteruit

  • Rechter motor draait vooruit

  • Robot draait linksom op zijn as (spot turn)

  • Hogere snelheid = snellere draaiing


Car_Right(speed1, speed2)

Laat de robot op de plaats naar rechts draaien.

Parameters:

  • speed1 (int): Snelheid linker motor (0-255)

  • speed2 (int): Snelheid rechter motor (0-255)

Voorbeeld:

Motor.Car_Right(150, 150)  # Draai rechts met gemiddelde snelheid
time.sleep(0.5)            # Draai een halve seconde
Motor.Car_Stop()

Uitleg:

  • Linker motor draait vooruit

  • Rechter motor draait achteruit

  • Robot draait rechtsom op zijn as

  • De tijd bepaalt hoe ver de robot draait (bijv. 0.5s voor 90°)


Servo Functies

servo180(num, angle)

Bestuur een 180 graden servo motor.

Parameters:

  • num (int): Servo nummer (1, 2, 3 of 4)

  • angle (int): Gewenste hoek (0-180 graden)

Voorbeeld:

Motor.servo180(1, 90)   # Zet servo 1 naar middenpositie
Motor.servo180(2, 0)    # Zet servo 2 naar uiterst links
Motor.servo180(3, 180)  # Zet servo 3 naar uiterst rechts

Uitleg:

  • Standaard servo met 180° bereik

  • 0° = helemaal links

  • 90° = midden

  • 180° = helemaal rechts

  • Veel gebruikt voor robotarmen, camera mounts, etc.


servo270(num, angle)

Bestuur een 270 graden servo motor.

Parameters:

  • num (int): Servo nummer (1, 2, 3 of 4)

  • angle (int): Gewenste hoek (0-270 graden)

Voorbeeld:

Motor.servo270(1, 135)  # Zet servo 1 naar middenpositie
Motor.servo270(2, 0)    # Zet servo 2 naar uiterst links
Motor.servo270(2, 270)  # Zet servo 2 naar uiterst rechts

Uitleg:

  • Servo met groter draaigebied (270° in plaats van 180°)

  • Biedt meer bewegingsvrijheid

  • 0° = uiterst links, 135° = midden, 270° = uiterst rechts


servo360(num, speed)

Bestuur een 360 graden (continue rotatie) servo motor.

Parameters:

  • num (int): Servo nummer (1, 2, 3 of 4)

  • speed (int): Rotatie snelheid/richting (0-360)

Voorbeeld:

Motor.servo360(1, 180)  # Stop servo 1
Motor.servo360(2, 270)  # Draai servo 2 vooruit (halve snelheid)
Motor.servo360(3, 360)  # Draai servo 3 vooruit (volle snelheid)
Motor.servo360(4, 90)   # Draai servo 4 achteruit (halve snelheid)
Motor.servo360(4, 0)    # Draai servo 4 achteruit (volle snelheid)

Uitleg:

  • Dit is geen standaard servo maar een continue rotatie motor

  • Kan oneindig in beide richtingen draaien

  • 0 = volle snelheid achteruit

  • 180 = stop

  • 360 = volle snelheid vooruit

  • Handig voor wielen, transportbanden, etc.


Klasse: ws2812b

Klasse voor het aansturen van WS2812B RGB LED strips (NeoPixels).

Constructor

__init__(num_leds, state_machine, delay=0.001)

Initialiseer de LED strip.

Parameters:

  • num_leds (int): Aantal LEDs in de strip

  • state_machine (int): PIO state machine nummer (0-7)

  • delay (float): Vertragingstijd na update in seconden (standaard 0.001)

Voorbeeld:

pixels = ws2812b(8, 0)  # 8 LEDs, state machine 0

LED Functies

set_pixel(pixel_num, red, green, blue)

Zet een individuele LED naar een specifieke kleur.

Parameters:

  • pixel_num (int): LED nummer (0 tot num_leds-1)

  • red (int): Rood component (0-255)

  • green (int): Groen component (0-255)

  • blue (int): Blauw component (0-255)

Voorbeeld:

pixels.set_pixel(0, 255, 0, 0)    # LED 0 helder rood
pixels.set_pixel(1, 0, 255, 0)    # LED 1 helder groen
pixels.set_pixel(2, 0, 0, 255)    # LED 2 helder blauw
pixels.set_pixel(3, 255, 255, 0)  # LED 3 geel (rood + groen)
pixels.set_pixel(4, 255, 0, 255)  # LED 4 magenta (rood + blauw)
pixels.set_pixel(5, 0, 255, 255)  # LED 5 cyaan (groen + blauw)
pixels.set_pixel(6, 255, 255, 255) # LED 6 wit (alle kleuren)
pixels.show()  # VERGEET NIET OM show() AAN TE ROEPEN!

Belangrijke kleuren:

  • (255, 0, 0) = Rood

  • (0, 255, 0) = Groen

  • (0, 0, 255) = Blauw

  • (255, 255, 0) = Geel

  • (255, 0, 255) = Magenta

  • (0, 255, 255) = Cyaan

  • (255, 255, 255) = Wit

  • (0, 0, 0) = Uit


set_pixel_line(pixel1, pixel2, red, green, blue)

Zet een reeks LEDs naar dezelfde kleur.

Parameters:

  • pixel1 (int): Start LED nummer

  • pixel2 (int): Eind LED nummer (inclusief)

  • red, green, blue (int): RGB kleurwaarden (0-255)

Voorbeeld:

pixels.set_pixel_line(0, 3, 255, 0, 0)  # LEDs 0 t/m 3 rood
pixels.set_pixel_line(4, 7, 0, 0, 255)  # LEDs 4 t/m 7 blauw
pixels.show()

Handig voor:

  • Snel meerdere LEDs tegelijk instellen

  • Status indicatie met meerdere LEDs

  • Zones maken op de LED strip


set_pixel_line_gradient(pixel1, pixel2, left_red, left_green, left_blue, right_red, right_green, right_blue)

Maak een vloeiend kleurverloop tussen twee LEDs.

Parameters:

  • pixel1 (int): Start LED

  • pixel2 (int): Eind LED

  • left_red, left_green, left_blue (int): Start kleur RGB

  • right_red, right_green, right_blue (int): Eind kleur RGB

Voorbeeld:

# Gradient van rood naar blauw over alle 8 LEDs
pixels.set_pixel_line_gradient(0, 7, 255, 0, 0, 0, 0, 255)
pixels.show()

# Gradient van groen naar geel
pixels.set_pixel_line_gradient(0, 7, 0, 255, 0, 255, 255, 0)
pixels.show()

Mooie effecten:

  • Regenboog effect

  • Zonsondergang (rood → oranje → geel)

  • Oceaan (blauw → groen → cyaan)


fill(red, green, blue)

Zet alle LEDs naar dezelfde kleur.

Parameters:

  • red, green, blue (int): RGB kleurwaarden (0-255)

Voorbeeld:

pixels.fill(255, 0, 0)  # Alle LEDs rood
pixels.show()

pixels.fill(0, 0, 0)    # Alle LEDs uit
pixels.show()

pixels.fill(255, 255, 255)  # Alle LEDs wit
pixels.show()

Gebruik:

  • Snel alle LEDs dezelfde kleur geven

  • LEDs uitzetten met (0, 0, 0)

  • Status indicatie (rood = fout, groen = OK)


brightness(brightness=None)

Stel de helderheid in of lees deze uit.

Parameters:

  • brightness (int, optioneel): Helderheid (1-255)

    • Als None: geeft huidige helderheid terug

    • Als getal: stelt nieuwe helderheid in

Voorbeeld:

pixels.brightness(50)   # Zet helderheid op 50/255 (dimmen)
pixels.brightness(255)  # Maximale helderheid
pixels.brightness(1)    # Minimale helderheid (bijna uit)

current = pixels.brightness()  # Lees huidige helderheid
print("Helderheid:", current)

Tip:

  • Gebruik lagere helderheid om stroom te besparen

  • Bij heldere omgevingsverlichting: hogere helderheid

  • Bij gebruik in het donker: lagere helderheid is prettiger


rotate_left(num_of_pixels=1)

Roteer alle LEDs een aantal posities naar links.

Parameters:

  • num_of_pixels (int): Aantal posities (standaard 1)

Voorbeeld:

# Maak een lopend licht effect
while True:
    pixels.rotate_left(1)
    pixels.show()
    time.sleep(0.1)

Effect:

  • LED 0 → LED 7

  • LED 1 → LED 0

  • LED 2 → LED 1

  • etc.


rotate_right(num_of_pixels=1)

Roteer alle LEDs een aantal posities naar rechts.

Parameters:

  • num_of_pixels (int): Aantal posities (standaard 1)

Voorbeeld:

# Maak een lopend licht effect (andere kant op)
while True:
    pixels.rotate_right(1)
    pixels.show()
    time.sleep(0.1)

show()

Stuur de LED data naar de strip en toon de kleuren.

Parameters: Geen

Voorbeeld:

pixels.set_pixel(0, 255, 0, 0)  # Stel kleur in
pixels.set_pixel(1, 0, 255, 0)  # Stel kleur in
pixels.show()                    # NU pas worden kleuren zichtbaar!

BELANGRIJK:

  • Je MOET show() aanroepen na het instellen van kleuren

  • Zonder show() zie je geen veranderingen

  • Je kunt meerdere set_pixel() aanroepen doen en dan één keer show()


Klasse: ultrasonic

Klasse voor het uitlezen van de HC-SR04 ultrasone afstandssensor.

Constructor

__init__()

Initialiseer de ultrasone sensor.

Voorbeeld:

sensor = ultrasonic()

Hardware:

  • Trigger pin: GPIO 0

  • Echo pin: GPIO 1

  • Bereik: 2cm tot 400cm

  • Nauwkeurigheid: ±3mm


Sensor Functies

Distance()

Voer een enkele afstandsmeting uit (basis functie).

Parameters: Geen

Returns: float - Afstand in centimeters

Voorbeeld:

sensor = ultrasonic()
afstand = sensor.Distance()
print("Afstand:", afstand, "cm")

Let op:

  • Deze functie kan soms onbetrouwbare metingen geven

  • Gebruik bij voorkeur Distance_accurate() voor betere resultaten

  • Geeft -1 terug bij een fout


Distance_accurate()

Voer een nauwkeurige afstandsmeting uit (aanbevolen).

Parameters: Geen

Returns: int - Gemiddelde afstand in centimeters

Voorbeeld:

sensor = ultrasonic()
afstand = sensor.Distance_accurate()

if afstand < 20:
    print("Obstakel dichtbij!")
    Motor.Car_Stop()
elif afstand < 50:
    print("Voorzichtig rijden")
    Motor.Car_Run(100, 100)
else:
    print("Vrij baan")
    Motor.Car_Run(255, 255)

Hoe werkt het:

  • Voert 5 metingen uit

  • Filtert onbetrouwbare waarden

  • Neemt gemiddelde van middelste 3 metingen

  • Vermindert meetruis en geeft stabielere resultaten

  • Geeft 999 terug bij een fout of buiten bereik

Praktische toepassing:

# Obstakelvermijding
while True:
    afstand = sensor.Distance_accurate()
    
    if afstand < 15:
        # Te dichtbij! Draai weg
        Motor.Car_Back(150, 150)
        time.sleep(0.3)
        Motor.Car_Right(150, 150)
        time.sleep(0.5)
    else:
        # Rij vooruit
        Motor.Car_Run(200, 200)
    
    time.sleep(0.1)

Klasse: SSD1306_I2C

Klasse voor het aansturen van een SSD1306 OLED display via I2C.

Constructor

__init__(width, height, i2c, addr=0x3c, external_vcc=False)

Initialiseer het OLED display.

Parameters:

  • width (int): Breedte in pixels (meestal 128)

  • height (int): Hoogte in pixels (32 of 64)

  • i2c (I2C): I2C bus object

  • addr (int): I2C adres (standaard 0x3c)

  • external_vcc (bool): Gebruik externe voeding (standaard False)

Voorbeeld:

from machine import Pin, I2C
from pico_car import SSD1306_I2C

# Initialiseer I2C
i2c = I2C(1, scl=Pin(15), sda=Pin(14), freq=100000)

# Initialiseer OLED (128x32 pixels)
oled = SSD1306_I2C(128, 32, i2c)

Display Functies

text(string, x, y, col=1)

Toon tekst op het display.

Parameters:

  • string (str): De tekst om te tonen

  • x (int): X positie (0 = links)

  • y (int): Y positie (0 = boven)

  • col (int): Kleur (1 = wit, 0 = zwart)

Voorbeeld:

oled.text("Hello", 0, 0)
oled.text("World", 0, 10)
oled.text("Robot!", 0, 20)
oled.show()  # Vergeet niet!

Tips:

  • Lettergrootte is 8x8 pixels

  • Maximum ~16 karakters per regel (bij 128 pixels breedte)

  • Y-coördinaten: 0, 10, 20, 30 voor 4 regels tekst


pixel(x, y, col)

Zet een enkele pixel aan of uit.

Parameters:

  • x (int): X positie (0-127)

  • y (int): Y positie (0-31 of 0-63)

  • col (int): 1 = aan, 0 = uit

Voorbeeld:

# Teken een punt
oled.pixel(64, 16, 1)
oled.show()

# Teken een lijn van pixels
for i in range(128):
    oled.pixel(i, 16, 1)
oled.show()

fill(col)

Vul het hele scherm met een kleur.

Parameters:

  • col (int): 0 = zwart (leeg scherm), 1 = wit (vol scherm)

Voorbeeld:

# Maak scherm leeg
oled.fill(0)
oled.show()

# Vul scherm (test)
oled.fill(1)
oled.show()

Gebruik:

  • oled.fill(0) voor het wissen van het scherm

  • Doe dit voor je nieuwe tekst toont


show()

Toon de inhoud van de buffer op het display.

Parameters: Geen

Voorbeeld:

oled.text("Test", 0, 0)
oled.show()  # NU pas verschijnt de tekst!

BELANGRIJK:

  • Je MOET show() aanroepen om wijzigingen te zien

  • Zonder show() verandert het scherm niet


Praktische Voorbeelden OLED

Voorbeeld 1: Sensor waarde tonen

from machine import Pin, I2C
from pico_car import SSD1306_I2C, ultrasonic
import time

# Initialiseer
i2c = I2C(1, scl=Pin(15), sda=Pin(14), freq=100000)
oled = SSD1306_I2C(128, 32, i2c)
sensor = ultrasonic()

while True:
    afstand = sensor.Distance_accurate()
    
    # Wis scherm
    oled.fill(0)
    
    # Toon afstand
    oled.text('Afstand:', 0, 0)
    oled.text(str(afstand) + ' cm', 0, 10)
    oled.show()
    
    time.sleep(0.5)

Voorbeeld 2: Status display

oled.fill(0)
oled.text('Robot Status', 0, 0)
oled.text('Batterij: 87%', 0, 10)
oled.text('Mode: Auto', 0, 20)
oled.show()

Voorbeeld 3: Scrollende tekst

tekst = "Welkom bij de Pico Robot!"
x = 128  # Start rechts buiten beeld

while x > -len(tekst) * 8:  # 8 pixels per karakter
    oled.fill(0)
    oled.text(tekst, x, 12)
    oled.show()
    x -= 2  # Scroll snelheid
    time.sleep(0.05)

Klasse: ir

Klasse voor het ontvangen van infrarood signalen van een afstandsbediening.

Constructor

__init__()

Initialiseer de infrarood ontvanger.

Voorbeeld:

from pico_car import ir

Ir = ir()

Hardware:

  • IR ontvanger pin: GPIO 7

  • Ondersteunt standaard NEC protocol afstandsbedieningen


IR Functies

Getir()

Lees het ontvangen IR signaal.

Parameters: Geen

Returns:

  • int: Knop code (0-20)

  • None: Geen knop ingedrukt

Voorbeeld:

Ir = ir()

while True:
    knop = Ir.Getir()
    
    if knop != None:
        print("Knop ingedrukt:", knop)
        
        if knop == 1:  # Up knop
            Motor.Car_Run(255, 255)
        elif knop == 9:  # Down knop
            Motor.Car_Back(255, 255)
        elif knop == 4:  # Left knop
            Motor.Car_Left(150, 150)
        elif knop == 6:  # Right knop
            Motor.Car_Right(150, 150)
        elif knop == 5:  # OK knop
            Motor.Car_Stop()
    
    time.sleep(0.01)

Knop codes:

  • 0 = Power

  • 1 = Up

  • 2 = Light

  • 4 = Left

  • 5 = OK/Sound

  • 6 = Right

  • 8 = Turn Left

  • 9 = Down

  • 10 = Turn Right

  • 12 = Plus (+)

  • 13 = Zero (0)

  • 14 = Min (-)

  • 16 = 1

  • 17 = 2

  • 18 = 3


Praktisch Voorbeeld: Robot met afstandsbediening

from pico_car import pico_car, ir
import time

Motor = pico_car()
Ir = ir()

print("Robot klaar! Gebruik afstandsbediening")

while True:
    knop = Ir.Getir()
    
    if knop != None:
        if knop == 1:  # Up
            print("Vooruit")
            Motor.Car_Run(200, 200)
            
        elif knop == 9:  # Down
            print("Achteruit")
            Motor.Car_Back(200, 200)
            
        elif knop == 4:  # Left
            print("Links")
            Motor.Car_Left(150, 150)
            
        elif knop == 6:  # Right
            print("Rechts")
            Motor.Car_Right(150, 150)
            
        elif knop == 5:  # OK/Sound (stop)
            print("Stop")
            Motor.Car_Stop()
            
        elif knop == 16:  # Knop 1 (langzaam)
            print("Langzaam vooruit")
            Motor.Car_Run(100, 100)
            
        elif knop == 17:  # Knop 2 (gemiddeld)
            print("Gemiddeld vooruit")
            Motor.Car_Run(150, 150)
            
        elif knop == 18:  # Knop 3 (snel)
            print("Snel vooruit")
            Motor.Car_Run(255, 255)
    
    time.sleep(0.01)

Klasse: ds

Klasse voor het uitlezen van DS18B20 temperatuursensoren via OneWire protocol.

Constructor

__init__(unit='c', resolution=12)

Initialiseer de temperatuursensor.

Parameters:

  • unit (str): Temperatuur eenheid (‘c’ voor Celsius, ‘f’ voor Fahrenheit)

  • resolution (int): Meetresolutie in bits (9, 10, 11 of 12)

Voorbeeld:

from pico_car import ds

temp_sensor = ds(unit='c', resolution=12)

Hardware:

  • OneWire data pin: GPIO 7

  • Ondersteunt meerdere sensoren op één pin


Temperatuur Functies

read()

Lees de temperatuur van alle aangesloten sensoren.

Parameters: Geen

Returns: list - Lijst met temperatuurwaarden (één per sensor)

Voorbeeld:

temp_sensor = ds()
temperaturen = temp_sensor.read()

if temperaturen:
    for i, temp in enumerate(temperaturen):
        print(f"Sensor {i+1}: {temp}°C")

Resolutie en meettijd:

  • 12 bit (standaard): 0.0625°C nauwkeurigheid, ~1000ms meettijd

  • 11 bit: 0.125°C nauwkeurigheid, ~400ms meettijd

  • 10 bit: 0.25°C nauwkeurigheid, ~200ms meettijd

  • 9 bit: 0.5°C nauwkeurigheid, ~100ms meettijd


Complete Voorbeelden

Voorbeeld 1: Obstakelvermijding met LEDs en Display

from pico_car import pico_car, ultrasonic, ws2812b, SSD1306_I2C
from machine import Pin, I2C
import time

# Initialiseer hardware
Motor = pico_car()
sensor = ultrasonic()
pixels = ws2812b(8, 0)
i2c = I2C(1, scl=Pin(15), sda=Pin(14), freq=100000)
oled = SSD1306_I2C(128, 32, i2c)

print("Obstakelvermijding gestart!")

while True:
    afstand = sensor.Distance_accurate()
    
    # Update display
    oled.fill(0)
    oled.text('Afstand:', 0, 0)
    oled.text(str(afstand) + ' cm', 0, 10)
    
    if afstand < 15:
        # STOP! Te dichtbij
        Motor.Car_Stop()
        pixels.fill(255, 0, 0)  # Rood
        oled.text('STOP!', 0, 20)
        
    elif afstand < 30:
        # Langzaam rijden
        Motor.Car_Run(100, 100)
        pixels.fill(255, 255, 0)  # Geel
        oled.text('Voorzichtig', 0, 20)
        
    else:
        # Normale snelheid
        Motor.Car_Run(200, 200)
        pixels.fill(0, 255, 0)  # Groen
        oled.text('Vrije baan', 0, 20)
    
    pixels.show()
    oled.show()
    time.sleep(0.1)

Voorbeeld 2: Lijnvolger met Feedback

from pico_car import pico_car, ws2812b
from machine import Pin
import time

# Initialiseer
Motor = pico_car()
pixels = ws2812b(8, 0)

# Lijnvolg sensoren (GPIO 2-5)
sensor_L = Pin(2, Pin.IN)
sensor_ML = Pin(3, Pin.IN)
sensor_MR = Pin(4, Pin.IN)
sensor_R = Pin(5, Pin.IN)

# Snelheden
SNELHEID = 150
BOCHT_SNELHEID = 100

while True:
    # Lees sensoren (0 = zwart/lijn, 1 = wit/grond)
    links = sensor_L.value()
    midden_links = sensor_ML.value()
    midden_rechts = sensor_MR.value()
    rechts = sensor_R.value()
    
    # Logica voor lijnvolgen
    if midden_links == 0 and midden_rechts == 0:
        # Recht vooruit
        Motor.Car_Run(SNELHEID, SNELHEID)
        pixels.fill(0, 255, 0)  # Groen = goed
        
    elif midden_links == 0:
        # Draai iets naar links
        Motor.Car_Run(BOCHT_SNELHEID, SNELHEID)
        pixels.fill(0, 0, 255)  # Blauw = links
        
    elif midden_rechts == 0:
        # Draai iets naar rechts
        Motor.Car_Run(SNELHEID, BOCHT_SNELHEID)
        pixels.fill(255, 0, 255)  # Magenta = rechts
        
    elif links == 0:
        # Scherpe bocht links
        Motor.Car_Left(BOCHT_SNELHEID, BOCHT_SNELHEID)
        pixels.fill(0, 255, 255)  # Cyaan = scherp links
        
    elif rechts == 0:
        # Scherpe bocht rechts
        Motor.Car_Right(BOCHT_SNELHEID, BOCHT_SNELHEID)
        pixels.fill(255, 255, 0)  # Geel = scherp rechts
        
    else:
        # Lijn kwijt!
        Motor.Car_Stop()
        pixels.fill(255, 0, 0)  # Rood = fout
    
    pixels.show()
    time.sleep(0.01)

Voorbeeld 3: Dashboard met alle sensoren

from pico_car import ultrasonic, SSD1306_I2C, ds
from machine import Pin, I2C, ADC
import time

# Initialiseer hardware
i2c = I2C(1, scl=Pin(15), sda=Pin(14), freq=100000)
oled = SSD1306_I2C(128, 32, i2c)
ultrasone = ultrasonic()
temp_sensor = ds()
batterij = ADC(28)

while True:
    # Lees alle sensoren
    afstand = ultrasone.Distance_accurate()
    temp = temp_sensor.read()
    bat_waarde = batterij.read_u16()
    bat_procent = int((bat_waarde / 65535) * 100)
    
    # Toon op display
    oled.fill(0)
    oled.text('Dashboard', 0, 0)
    oled.text(f'Afst:{afstand}cm', 0, 10)
    if temp:
        oled.text(f'Temp:{temp[0]:.1f}C', 0, 20)
    oled.text(f'Bat:{bat_procent}%', 70, 20)
    oled.show()
    
    time.sleep(0.5)

Tips en Trucs

Motorbesturing

  1. Start altijd met lagere snelheden (100-150) om te testen

  2. Gebruik Car_Stop() na elke beweging voor controle

  3. Experimenteer met tijd - elke robot is anders

  4. Kalibreer je motoren - pas snelheden aan als robot scheef rijdt

LED Strip

  1. Vergeet show() niet - zonder show() zie je niets!

  2. Gebruik lagere helderheid om stroom te besparen

  3. Wis oude kleuren met fill(0,0,0) voor schone effecten

OLED Display

  1. fill(0) voor nieuwe tekst om oude tekst te wissen

  2. Tekst past niet? Gebruik kortere strings of kleinere font

  3. Update niet te snel - 0.1s pauze is prima

  4. Test zonder robot eerst om snelheid te controleren

Ultrasone Sensor

  1. Gebruik Distance_accurate() voor betrouwbare metingen

  2. Controleer op 999 (foutcode) in je code

  3. 15cm minimum afstand voor veilige stop

  4. Meet niet sneller dan 10x per seconde

Algemeen

  1. Test per onderdeel - eerst motor, dan sensoren, dan combinatie

  2. Gebruik print() om waarden te debuggen

  3. Voeg pauzes toe met time.sleep() voor stabiele werking

  4. Documenteer je code met comments voor later


Troubleshooting

Motor draait niet

  • Controleer batterijen

  • Controleer of PWM frequentie is ingesteld (gebeurt automatisch in init)

  • Test met lagere snelheid (50-100)

LEDs werken niet

  • Heb je show() aangeroepen?

  • Controleer GPIO 6 aansluiting

  • Test met eenvoudige code eerst

OLED toont niets

  • Controleer I2C verbinding (GPIO 14 en 15)

  • Heb je show() aangeroepen?

  • Test met oled.fill(1) voor vol wit scherm

Ultrasone sensor geeft 999

  • Obstakel te dichtbij (< 2cm) of te ver (> 400cm)

  • Controleer GPIO 0 en 1 verbindingen

  • Test met Distance() eerst

IR werkt niet

  • Richt afstandsbediening recht op sensor

  • Verwijder obstakels tussen zender en ontvanger

  • Controleer batterijen in afstandsbediening

  • Print knop waarde om te testen: print(Ir.Getir())


Snelle Referentie Tabel

Functie

Gebruik

Voorbeeld

Car_Run(s1, s2)

Rij vooruit

Motor.Car_Run(255, 255)

Car_Stop()

Stop robot

Motor.Car_Stop()

Car_Back(s1, s2)

Rij achteruit

Motor.Car_Back(200, 200)

Car_Left(s1, s2)

Draai links

Motor.Car_Left(150, 150)

Car_Right(s1, s2)

Draai rechts

Motor.Car_Right(150, 150)

servo180(num, angle)

Bestuur servo

Motor.servo180(1, 90)

set_pixel(n, r, g, b)

Zet LED kleur

pixels.set_pixel(0, 255, 0, 0)

fill(r, g, b)

Alle LEDs

pixels.fill(0, 255, 0)

show()

Toon LEDs

pixels.show()

Distance_accurate()

Meet afstand

d = sensor.Distance_accurate()

text(str, x, y)

Toon tekst

oled.text("Hi", 0, 0)

Getir()

Lees IR knop

knop = Ir.Getir()


Veel succes met programmeren van je Pico Robot! 🤖