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.
- Was macht das Programm? erklärt, was das jeweilige Programm bewirkt.
- Beschreibung der Befehle erläutert kurz benutzte Programm-Befehle .
- 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
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-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