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.