Les 4: Programmeren van actoren

Een actor is een apparaat dat signalen van een computer of microcontroller omzet in fysieke acties, zoals beweging of lichtsignalen af te geven. Op de pico-robot zijn verschillende actoren aanwezig die je kunt programmeren om je robot te laten bewegen en reageren op de omgeving.

Motoren

De pico-robot heeft twee motoren die de wielen aandrijven. Je kunt deze motoren programmeren om vooruit, achteruit, links of rechts te bewegen. Hier is een voorbeeld van hoe je de motoren kunt aansturen:

# Import de pico_car bibliotheek
from pico_car import pico_car
import time

# Maak een Motor object aan
Motor = pico_car()

print("Robot start met bewegen!")

# Auto vooruit, parameter (Linker motor snelheid, Rechter motor snelheid)
# Snelheid kan tussen 0-255 zijn
Motor.Car_Run(255, 255)

# Wacht 5 seconden
time.sleep(5)

# Stop de auto
Motor.Car_Stop()

print("Robot gestopt!")

De uitleg van dit Python-programma vind je in de Motor Code Uitleg.

Notitie

De robot gaat rijden!!! Plaats de robot op een open oppervlak voordat je dit programma uitvoert, of houd de robot vast terwijl je het programma uitvoert.

Opdracht 1

Expirimenteer met verschillende snelheden en richtingen door de parameters van Motor.Car_Run() aan te passen. Probeer bijvoorbeeld de robot langzaam vooruit te laten rijden of een bocht naar links te maken.

Opdracht 2

Maak een programma dat de robot dat de volgende stappen uitvoert:

  • 3 seconden vooruit

  • bocht naar rechts (door de linker motor sneller te laten draaien dan de rechter) voor 2 seconden

  • 3 seconden vooruit

  • stop 2 seconden

  • 5 seconden achteruit

  • stop

LED

Op de pico-robot is ook een lampje aanwezig. We noemen zo’n lampje een LED (Light Emitting Diode). Je kunt deze LED aan- en uitzetten met je programma. Hier is een voorbeeld:

import machine 
import time 
led_onboard = machine.Pin(25, machine.Pin.OUT)

while True: 
    # Zet de LED aan
    led_onboard.value(1) 
    # Wacht 1 seconde
    time.sleep(1) 
    # Zet de LED uit
    led_onboard.value(0) 
    # Wacht 1 seconde
    time.sleep(1)

De uitleg van dit Python-programma vind je in de LED Code Uitleg.

Opdracht

Breid het programma van de motoren uit door de LED aan te zetten wanneer de robot vooruit rijdt en uit te zetten wanneer de robot stopt.

Display

Op de pico-robot zit ook een klein schermpje, een OLED-display. OLED staat voor “Organic Light Emitting Diode”. Je kent mischien de term wel van de OLDE-tv, deze werkt op dezefde principe. Je kunt hier tekst en eenvoudige afbeeldingen op weergeven. Hier is een voorbeeld van hoe je het OLED-display kunt gebruiken:

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

# Stel I2C pinnen in
i2c = I2C(1, scl=Pin(15), sda=Pin(14), freq=100000)
# Initialiseer OLED
oled = SSD1306_I2C(128, 32, i2c)
# Toon "Hello" op OLED op positie 0,0
oled.text("Hello", 0, 0)
oled.show()
oled.fill(0)
time.sleep(1)
# Toon "World" op OLED op positie 0,10
oled.text("World", 0, 10)
oled.show()
oled.fill(0)
time.sleep(1)
# Toon pixel op positie 100,30
oled.pixel(100, 30, 1)
oled.show()
oled.fill(0)
time.sleep(1)

De uitleg van dit Python-programma vind je in de Display Code Uitleg.

Opdracht

Programmeer een programma dat de tekst “Pico Robot” op het OLED-display toont wanneer de robot vooruit rijdt en “Stopped” wanneer de robot stopt.

Buzzer

De pico-robot heeft ook een buzzer, een klein apparaatje dat geluid kan maken. Je kunt deze buzzer gebruiken om geluidssignalen te geven. Hier is een voorbeeld van hoe je de buzzer kunt aansturen:

from machine import Pin, PWM
import time
# Stel buzzer pin in
BZ = PWM(Pin(22))
BZ.freq(1000)
# Initialiseer muziek
CM = [0, 330, 350, 393, 441, 495, 556, 624] 
song = [CM[1],CM[1],CM[5],CM[5],CM[6],CM[6],CM[5],CM[4],CM[4],CM[3],CM[3],CM[2],CM[2],CM[1],]
beat = [ 0.5,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,0.5,0.5,1,]
# Muziek functie   
def music():
        print('Speelt liedje ...')
        for i in range(len(song)):
            BZ.duty_u16(500)
            BZ.freq(song[i])
            time.sleep(beat[i]) 
            BZ.duty_u16(0)
            time.sleep(0.01) 
# Speel muziek   
music()
print("Einde")

De uitleg van dit Python-programma vind je in de Buzzer Code Uitleg.

Opdracht

Programmeer een programma dat een piepje afspeelt op de buzzer wanneer de robot vooruit rijdt en stopt wanneer de robot stopt.

Next Level: NeoPixels

De pico-robot heeft ook een rijtje van 8 kleine 3 kleuren-leds, ook wel NeoPixels genoemd. Deze kleuren leds zitten aan de onderkant van de robot. Deze kunnen in verschillende kleuren oplichten. Hier is een voorbeeld van hoe je de NeoPixels kunt aansturen:

import time
from pico_car import ws2812b

num_leds = 8  # Aantal NeoPixels
# Pin waar NeoPixels zijn aangesloten
pixels = ws2812b(num_leds, 0)
# Zet alle leds aan
pixels.fill(10,10,10)
pixels.show()
# Lopend licht effect
while True:
    for i in range(num_leds):
        for j in range(num_leds):
            #pixel_nummer, rood, groen, blauw
            pixels.set_pixel(j,abs(i+j)%10,abs(i-(j+3))%10,abs(i-(j+6))%10)
        pixels.show()
        time.sleep(0.05)

De uitleg van dit Python-programma vind je in de NeoPixel Code Uitleg.