
RPi Picon kanssa voi tehdä pieniä projekteja ja kokeiluja, sensoreilla ja ilman. Törmäsin jo aikoja sitten ledivalo nauhan ohjelmointiin, se tehtiin käyttäen tavallista Raspberrya. Picon tultua markkinoille on ledi valot taas nousseet pintaan. Ledit yhdistettynä ultraääni sensoriin, voidaan tehdä vaikka peruutustutka. Valot kertovat etäisyyden objektiin, vihreä on kaukana ja punainen on liian lähellä tai jo osuma.
Ultraäänen ja valon lisäksi voisi tietysti olla myös summeri, joka varoittaa lähestyvästä kontaktista. Täysin luotettava tämä ei ole! Mutta hauska tapa oppia Python ohjelmointia.
Picon kanssa työskennellessä käytetään Thonny kehitysympäristöä. Koodia voi tehdä millä tahansa editorilla, mutta Thonnyn avulla koodi pystytään ajamaan suoraan Picolle. Arduino laitteilla on sama toimintaperiaate, käytetään Arduinon kehitysympäristöä joka samalla tallentaa tiedoston laitteelle.
Aloitaan liittämällä ultraäänisensori ja ledinauha Picoon. Tähän projektiin voisi käyttää yksittäisiä ledejä, tässä tapauksessa on käytetty pätkä RGB-ledinauhaa. Tehdään ensin hyvin yksinkertainen ratkaisu, jossa käytetään perusvärejä punainen, vihreä ja sininen. Myöhemmin voidaan kokeilla onnistuisiko liukuvärien toteuttaminen, se vaatii jo enemmän perehtymistä. Windows koneelle MicroPython Thonny koodi editorin/kehitysympäristön voi ladata osoitteesta; https://thonny.org/
Linux koneelle Thonny koodi editorin voi asentaa helposti, python pip asennustyökalun avulla; https://koodinkutoja.com/raspberry-pico-testing-with-ultrasonic-sensor-and-led-light-strip-thonny-code-editor/
from machine import Pin, PWM
import utime
pulse = Pin(3, Pin.OUT)
receiver = Pin(2, Pin.IN, Pin.PULL_DOWN)
pwm1 = PWM(Pin(16)) # PUNAINEN
pwm2 = PWM(Pin(17)) # SININEN
pwm3 = PWM(Pin(18)) # VIHREA
MIN = 9999999
MID = 5000000
MAX = 0000010
pwm1.freq(100)
pwm1.duty_ns(MIN)
pwm2.freq(100)
pwm2.duty_ns(MIN)
pwm3.freq(100)
pwm3.duty_ns(MIN)
def Kysy_etaisyys():
AanenNopeus_mm = 0.343
pulse.low()
utime.sleep_us(20)
pulse.high()
utime.sleep_us(10)
pulse.low()
exitLoop = False
laskuri = 0
while receiver.value() == 0 and exitLoop == False:
laskuri = laskuri + 1
kysely_aika = utime.ticks_us()
if laskuri > 3000 : exitLoop == True
while receiver.value() == 1 and exitLoop == False:
laskuri = laskuri + 1
vastaanotettu_kaiku_aika = utime.ticks_us()
if laskuri > 3000 : exitLoop == True
if exitLoop == True: #We failed somewhere
return 0
else:
etaisyys = ((vastaanotettu_kaiku_aika - kysely_aika) * AanenNopeus_mm) / 2
return etaisyys
while True:
etaisyys = Kysy_etaisyys()
print("etaisyys esineeseen: ", etaisyys, "mm")
if etaisyys > 1500:
pwm1.duty_ns(MIN) # Punainen
pwm2.duty_ns(MIN) # Sininen
pwm3.duty_ns(MAX) # Vihrea LED loistaa valoa.
elif etaisyys > 100 and etaisyys < 1500:
pwm1.duty_ns(MIN) # Punainen
pwm2.duty_ns(MAX) # Sininen LED loistaa valoa.
pwm3.duty_ns(MIN) # Vihrea
elif etaisyys > 0 and etaisyys < 100:
pwm1.duty_ns(MAX) # Punainen LED loistaa valoa.
pwm2.duty_ns(MIN) # Sininen
pwm3.duty_ns(MIN) # Vihrea
utime.sleep(0.50)

