PicoBello 3

Im Folgenden sind die in diesem Workshop besprochenen Projekte und Programme aufgeführt (TLN = Teilnehmende; WSL = Workshop-Leiter).

Die Projekt-/Programm-Beschreibungen umfassen:

  • Screenshot des Programms in Thonny, speziell, wenn in der Kommandozeile Programm-Eingaben und -Ausgaben gezeigt werden sollen,
  • kopierfähiger Programmcode im Bereich "MicroPython Programm-Code für Thonny",
  • Steckbrett-Graphik mit benötigten Kabel-Verbindungen und Bauteilen,
  • Steckbrett-Foto mit einer Beispiel-"Steckung".


In den Workshops gehen wir folgendermaßen vor:

  • Der WSL erklärt kurz Sinn und Zweck des nächsten Projekts.
  • Der WSL zeigt seine Projekt-Steckung live per Video, startet das Programm und zeigt und erklärt das Programm und die Programm-Auswirkungen.
  • Die TLN kopieren den Programm-Code in ihren eigenen Thonny-Editor.
  • Die TLN bauen ihre eigene Steckung anhand der Steckbrett-Graphik und des Steckbrett-Fotos.
  • Die TLN starten jeweils ihr Programm und beobachten die Programm-Auswirkungen.
  • Die TLN bestätigen die planmäßige Ausführung, oder beschreiben ein Problem oder einen Fehler.
  • Gemeinsam werden Problem oder Fehler besprochen und GEKLÄRT.
  • Erst wenn alle TLN-Programme planmäßig laufen, wird das nächste Programm in Anmgriff genommen.
  • Abhängig vom Workshop-Verlauf bestimmt der WSL Projekt-Inhalte und -Folge des Workshops.


Die Projekte / Programme sollen die Basis dafür bieten, dass die TLN die Programme anschließend selbständig nachvollziehen und erweitern, sowie eigene Projekte planen und durchführen können.

  1. Was macht das Programm? erklärt, was das jeweilige Programm bewirkt.
  2. Beschreibung der Befehle erläutert kurz benutzte Programm-Befehle .
  3. Was probieren ...? gibt Anregungen zum selber experimentieren .

Mit eckigen Klammern [ ] werden Programm-Befehle beschrieben; "Z4" steht für Zeile 4.

Viel Spaß beim Testen und Ausprobieren ...

 


 

Informationen zu MicroPython: https://docs.micropython.org/en/latest/rp2/quickref.html

MicroPython für Kids: https://www.sivakids.de/python-entwicklungsumgebung/

Python Tutorial: https://www.w3schools.com/python/default.asp

Link zu Download von "Get started ...": https://hackspace.raspberrypi.com/books/micropython-pico

Link zu Download von MicroPython UF2-Datei: https://www.raspberrypi.com/documentation/microcontrollers/micropython.html

 


 

Überblick PicoBello 3


PB-3-1-10-Fading LED with PWM.py

PB-3-1-20-Fading LED with PWM auto.py

PB-3-4-10-GS_085 HC-SR501 PIR-Alarm LED.py

PB-3-3-60-2 x Temp plus 2x auf LCD1.py

PB-3-3-70-2 x Temp plus 2x auf LCD1 speichern.py

PB-3-3-40-Temperatur-Speicher-Werte einlesen.py

0460 Reaktionsspiel mit 2 Tastern.py


PB-3-1-10-Fading LED with PWM.py

Thonny Screenshot

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

import machine   #GS_102 Fading LED with PWM.py
import utime

poti = machine.ADC(0)
led = machine.PWM(machine.Pin(15))
led.freq(1000)

while True:
    wertpoti = poti.read_u16()
    print(wertpoti)
    led.duty_u16(wertpoti)
    utime.sleep(0.05)

===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Steckbrett-Grafik

Steckbrett-Foto

 

ggf. Beschreibung

Zurück zum Überblick ...


GS_103 Fading LED with PWM auto.py

Thonny Screenshot

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

import machine    #GS_103 Fading LED with PWM auto.py
import utime

#poti = machine.ADC(0)
led = machine.PWM(machine.Pin(15))
led.freq(1000)

zuwachs=1000
pause=2

while True:
    print("es wird: heller ...")
    utime.sleep(pause)
    for hell in range(1,65536,zuwachs):
        led.duty_u16(hell)
        print("heller: ",hell)
        utime.sleep(0.05)
        
    print("es wird: dunkler ...")
    utime.sleep(pause)
    for hell in range(65536,1,-zuwachs):
        led.duty_u16(hell)
        print("dunkler: ",hell)
        utime.sleep(0.05)

===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Selbe Steckung wie bei vorherigem Programm:  GS_102 Fading LED with PWM.py

ggf. Beschreibung

Zurück zum Überblick ...


PB-3-4-10-GS_085 HC-SR501 PIR-Alarm LED.py

Thonny Screenshot

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

import machine    #GS_085 HC-SR501 PIR-Alarm LED.py
import utime

k=0

sensor_pir = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_DOWN)
led = machine.Pin(15, machine.Pin.OUT)

def pir_handler(pin):
    global k
    utime.sleep_ms(100)
    if pin.value():
        print("ALARM! Motion detected!")
        for i in range(20):
            led.toggle()
            utime.sleep_ms(100)
        k=0
        
sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)

while True:
    print(k,"kein Interrupt")
    k=k+1
    utime.sleep(.2)

===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Steckbrett-Grafik

in dieser Sicht (Potentiometer oben, im Vordergrund):

  • linker Poti: Empfindlichkeit (im Uhrzeigersinn: empfindlicher; linker Anschlag: unempfindlich; rechter Anschlag: hochempfindlich) angeblich bis 7 Meter
  • rechter Poti: Ausschaltverzögerung (im Uhrzeigersinn: länger; linker Anschlag: 1-2 Sek.; rechter Anschlag 300 - 400 Sek.)

 

Steckbrett-Foto

ggf. Beschreibung

Zurück zum Überblick ...


PB-3-3-60-2 x Temp plus 2x auf LCD1.py

Thonny Screenshot

 

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==
# Bibliotheken laden from machine import Pin from onewire import OneWire from ds18x20 import DS18X20 from machine import ADC from utime import sleep, sleep_ms from machine import I2C, Pin, Timer from machine_i2c_lcd import I2cLcd # Initialisierung I2C (für LCD 1602) i2c = I2C(0, sda=Pin(20), scl=Pin(21), freq=100000) # Initialisierung LCD 1602 über I2C lcd = I2cLcd(i2c, 0x27, 2, 16) # #Sicht auf platte Seite und 3 Anschlüsse nach unten # # DS18B20 TMP36 # ___ ___ # I I I I # I___I I___I # I I I I I I # # 1 GND 1 +3,3V # 2 Data 2 Vout # 3 +3,3V 3 GND # # Initialisierung GPIO, OneWire und DS18B20 one_wire_bus = Pin(15) sensor_ds = DS18X20(OneWire(one_wire_bus)) #Pico-interner Temperatursensor über internen ADC(4) sensor_temp = ADC(4) conversion_factor = 3.3 / (65535) # One-Wire-Geräte ermitteln devices = sensor_ds.scan() print("Devices: ",sensor_ds.scan()) print("Devices: ",devices) while True: # 1. Temperatur auf Pico messen Vp = sensor_temp.read_u16() Vp = Vp * conversion_factor # The temperature sensor measures the Vbe voltage of a biased bipolar diode, connected to the fifth ADC channel # Typically, Vbe = 0.706V at 27 degrees C, with a slope of -1.721mV (0.001721) per degree. temp_auf_pico = 27 - (Vp - 0.706)/0.001721 print("Pico: ",temp_auf_pico, '°C') # 2. Temperatur mit DS18B20 messen sensor_ds.convert_temp() # Warten: min. 750 ms sleep_ms(750) # Sensoren abfragen for device in devices: #print('Sensor:', device) print('DS18B20:', sensor_ds.read_temp(device), '°C') Temp_DS18B20=sensor_ds.read_temp(device) # Ergebnis auf Display ausgeben lcd.clear() lcd.move_to(0,0) lcd.putstr('DS18B20 on Pico'+"\n"+str(Temp_DS18B20)+" "+str(temp_auf_pico)) print() sleep(3) ===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Steckbrett-Grafik

 

Steckbrett-Foto

 

ggf. Beschreibung

Zurück zum Überblick ...


PB-3-3-70-2 x Temp plus 2x auf LCD1 speichern.py

Thonny Screenshot

 

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

# Bibliotheken laden
from machine import Pin
from onewire import OneWire
from ds18x20 import DS18X20
from machine import ADC
from utime import sleep, sleep_ms
from machine import I2C, Pin, Timer
from machine_i2c_lcd import I2cLcd

# Initialisierung I2C (für LCD 1602)
i2c = I2C(0, sda=Pin(20), scl=Pin(21), freq=100000)

# Initialisierung LCD 1602 über I2C
lcd = I2cLcd(i2c, 0x27, 2, 16)

#
#Sicht auf platte Seite und 3 Anschlüsse nach unten
#
#     DS18B20            TMP36
#       ___               ___
#      I   I             I   I
#      I___I             I___I
#      I I I             I I I
#
#      1 GND             1 +3,3V
#        2 Data            2 Vout
#          3 +3,3V           3 GND
#
# Initialisierung GPIO, OneWire und DS18B20
one_wire_bus = Pin(15)
sensor_ds = DS18X20(OneWire(one_wire_bus))

#Pico-interner Temperatursensor über internen ADC(4)
sensor_temp = ADC(4)
conversion_factor = 3.3 / (65535)

# One-Wire-Geräte ermitteln
devices = sensor_ds.scan()
print("Devices: ",sensor_ds.scan())
print("Devices: ",devices)

k=0

DateiT = open("Keller-Temperaturen.txt","w")
DateiT.write("Temperaturen im Keller\n")

while True:
    k=k+1
    # 1. Temperatur auf Pico messen
    Vp = sensor_temp.read_u16()
    Vp = Vp * conversion_factor
    # The temperature sensor measures the Vbe voltage of a biased bipolar diode, connected to the fifth ADC channel
    # Typically, Vbe = 0.706V at 27 degrees C, with a slope of -1.721mV (0.001721) per degree. 
    temp_auf_pico = 27 - (Vp - 0.706)/0.001721
    print("Pico: ",temp_auf_pico, '°C')
    
    # 2. Temperatur mit DS18B20 messen
    sensor_ds.convert_temp()
    # Warten: min. 750 ms
    sleep_ms(750)
    # Sensoren abfragen
       
    for device in devices:
        #print('Sensor:', device)
        print('DS18B20:', sensor_ds.read_temp(device), '°C')
        Temp_DS18B20=sensor_ds.read_temp(device)
        
    # Ergebnis auf Display ausgeben
    lcd.clear()
    lcd.move_to(0,0)
    lcd.putstr('DS18B20  on Pico'+"\n"+str(Temp_DS18B20)+" "+str(temp_auf_pico))
    
    print()
    
    
    STRk=str(k)
    STRtemperatur = str(temp_auf_pico)[:5]
    SpeicherZeile=STRk+"  "+STRtemperatur+"\n"
    DateiT.write(SpeicherZeile)
    DateiT.flush()
        
    sleep(3)

===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Steckbrett wie bei vorherigem Programm 0440 Temperaturmessung TMP36.py.

ggf. Beschreibung

Zurück zum Überblick ...


PB-3-3-40-Temperatur-Speicher-Werte einlesen.py

Thonny Screenshot

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

DateiIn = open("Keller-Temperaturen.txt","r")   #0455 Temperatur-Speicher-Werte einlesen.py

for i in range(11):
    print(DateiIn.readline())
    
DateiIn.close()


===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Steckbrett wie bei vorherigem Programm 0440 Temperaturmessung TMP36.py.

ggf. Beschreibung

Zurück zum Überblick ...


0460 Reaktionsspiel mit 2 Tastern.py

Thonny Screenshot

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

import machine   #0460 Reaktionsspiel mit 2 Tastern.py
import utime
import random

tasterLi=0
tasterRe=0

LEDblau = machine.Pin(20, machine.Pin.OUT)
LEDliRot = machine.Pin(19, machine.Pin.OUT)
LEDliGruen = machine.Pin(18, machine.Pin.OUT)
LEDreRot = machine.Pin(17, machine.Pin.OUT)
LEDreGruen = machine.Pin(16, machine.Pin.OUT)
TasterLi = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)
TasterRe = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_DOWN)

def taster_links_prog(p):
    global tasterLi
    global LiZeit
    print("Interrupt tasterLi")
    LiZeit = utime.ticks_ms()
    tasterLi = 1
    utime.sleep(0.1)

def taster_rechts_prog(p):
    global tasterRe
    global ReZeit
    print("Interrupt tasterRe")
    ReZeit = utime.ticks_ms()
    tasterRe = 1
    utime.sleep(0.1)

TasterLi.irq(trigger = machine.Pin.IRQ_RISING, handler = taster_links_prog)
TasterRe.irq(trigger = machine.Pin.IRQ_RISING, handler = taster_rechts_prog)

print("Hauptprogramm startet")

while True:
    LEDblau.value(0)
    LEDliRot.value(0)
    LEDliGruen.value(0)
    LEDreRot.value(0)
    LEDreGruen.value(0)
 
    for i in range(1,6):
        LEDblau.value(1)
        utime.sleep(0.1)
        LEDblau.value(0)
        utime.sleep(0.1)
    Zufallszeit = random.randint(2,5)
    print("Zufallszeit in Sek.: ",Zufallszeit)
    utime.sleep(Zufallszeit)
    LEDblau.value(1)
    tasterLi = 0
    tasterRe = 0
    while (tasterLi * tasterRe) == 0:
        if tasterLi == 1:
            LEDliGruen.value(1)
        elif tasterRe == 1:
            LEDreGruen.value(1)
        utime.sleep(0.1)
    if LiZeit < ReZeit:
        LEDreRot.value(1)
    else:
        LEDliRot.value(1)
    print(tasterLi,tasterRe)
    print("LiZeit = ",LiZeit," und ReZeit = ",ReZeit)
    print("beide gedrückt")
    utime.sleep(2)


===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Steckbrett-Grafik

Steckbrett-Foto

ggf. Beschreibung

Zurück zum Überblick ...



PicoBello 3 neu



PB-03-1-10-Fading LED with PWM.py

PB-03-1 1 LED+R + 1 Poti

 

PB-03-1-20-Fading LED with PWM auto.py

 


PB-03-2-10-I2C-Geräte mit Adresse anzeigen.py

PB-03-2 1 LED+R + 1 Poti + 1 LCD 16x2

 

PB-03-2-20-LCD-1602-Display mit I2C-Modul testen.py

PB-03-3-10-Temperaturmessung.py
(wie PB-02-6-10-Temperaturmessung.py)

 


PB-03-3-50-ElKo Temperaturmessung mit DS18B20.py

PB-03-3 1 LED+R + 1 Poti + 1 LCD 16x2 + 1 DS18B20

 

PB-03-3-60-Temperaturmessung 2 x auf LCD.py

PB-03-3-70-Temperaturmessung 2 x auf LCD speichern.py

 


PB-03-4-10-GS_085 HC-SR501 PIR-Alarm LED.py

PB-03-4 1 LED+R + 1 Poti + 1 LCD 16x2 + 1 DS18B20 + 1 PIR

 

PB-03-4-20-ElKo_Anwesenheitserkennung mit PIR.py

PB-03-5-10-Zeit Erfassung PC.py

PB-03-5-20-Zeit Erfassung Zeitpunkt.py

 



 

PicoBello-Konzept

PicoBello-1

PicoBello-2

PicoBello-3

PicoBello-4