Pico 2 W Projekte
getestet in CircuitPython 9.2.5
Pico 2 W Projekte
getestet in CircuitPython 9.2.5
Relaisboard mit drei angeschlossenen Sensoren
Software
- CircuitPython 9.2.5
- Bibliotheken im 'lib'-Ordner
- Ordner: adafruit_bme280
Als nächstes folgt der Anschluss aller drei Sensoren aus den vorhergehenden Versuchen an ein Relaisboard. Über den Temperatursensor
soll ein Lüfter gesteuert werden. Der Helligkeitssensor schaltet eine Lampe ein bzw. aus (Dämmerungsschalter). Ebenso der
Bewegungssensor beim Registrieren einer Bewegung. Das verwendete Relaisboard ist von SB-Components und kostet ca. 20 Euro. Der Pico wird über
die vorhandenen Steckerleisten direkt auf das Board gesetzt, gehört aber nicht zum Lieferumfang. Bestellen können Sie das Board
z.B. von hier
. Die Relais sind für 220V Verbraucher bis 10A ausgelegt. Alles ist sehr gut beschriftet und die Funktionsweise ist zuverlässig.
Auf der unteren Abbildung zeige ich den Anschluss des Temperatur-, des Licht- und des Bewegungssensors an den Pico 2 W. Normalerweise bräuchte
es hierfür keinen Pico 2W, ein einfacher Pico (ohne WLAN) wäre ausreichend. Aber die Anwendung soll später noch mit einem kleinen
HTTP-Server ins WLAN eingebunden werden, so dass sich die Geräte auch mit dem Smartphone steuern lassen.

Bei den GPIO's verwende ich die gleichen, wie in den vorhergehenden Versuchen mit jeweils einem der Sensoren.
Im Quelltext werden nach dem Import der Bibliotheken in den Zeilen 9 bis 16 einige Werte definiert, welche als Schaltschwelle für das
Ein- und Ausschalten genutzt werden. Sie können die hier auch verändern um das Verhalten entsprechend anzupassen.
Die Zeilen 18 bis 21 definieren die Onboard-LED und schalten sie aus, da sie in diesem Versuch nicht genutzt wird.
Danach werden die Sensoren definiert:
- Zeile 23 - 28: Temperatursensor (i2c)
- Zeile 30 - 32: Helligkeitssensor (Analogeingang)
- Zeile 34 - 37: Bewegungssensor
In den Zeilen 39 bis 51 werden die Relais 1 bis 4 definiert. Es folgen drei Funktionen, welche die Temperatur, die Helligkeit und Bewegung
auswerten.

1 import time 2 import board 3 import busio 4 from analogio import AnalogIn 5 import digitalio 6 from digitalio import DigitalInOut, Direction 7 from adafruit_bme280 import basic as adafruit_bme280 8 9 # Temperatur on/off Werte 10 temp_on = 25 11 temp_off = 24.5 12 # Schaltschwelle Helligkeit einstellen 13 soll_wert = 11000 14 # Verzögerung - Licht bleibt noch an (sec) 15 light_on = 15 # Helligkeitssensor 16 pir_on = 5 # Bewegungssensor 17 18 # onboard LED setup 19 led = DigitalInOut(board.LED) 20 led.direction = Direction.OUTPUT 21 led.value = False 22 23 #I2C Pin SDA: GP 0 and SCL: GP1 24 SDA = board.GP0 25 SCL = board.GP1 26 # Create sensor object, using the board's default I2C bus. 27 i2c = busio.I2C(SCL, SDA) 28 bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c, address=0x77) 29 30 #initialisieren des Analogen Pin 33 | GP28 31 # Helligkeit messen 32 ADC_2 = AnalogIn(board.GP28) 33 34 # Setup digital inputs for PIR sensor: 35 pir = digitalio.DigitalInOut(board.GP22) 36 pir.direction = digitalio.Direction.INPUT 37 pir.pull = digitalio.Pull.UP 38 39 # Relais setup 40 relais1 = DigitalInOut(board.GP18) 41 relais1.direction = Direction.OUTPUT 42 relais1.value = False 43 relais2 = DigitalInOut(board.GP19) 44 relais2.direction = Direction.OUTPUT 45 relais2.value = False 46 relais3 = DigitalInOut(board.GP20) 47 relais3.direction = Direction.OUTPUT 48 relais3.value = False 49 relais4 = DigitalInOut(board.GP21) 50 relais4.direction = Direction.OUTPUT 51 relais4.value = False 52 53 def temp(): 54 # Temperatur lesen 55 temp = bme280.temperature 56 if temp > temp_on: 57 relais1.value = True 58 #print("Temp.: %0.1f C" % (bme280.temperature)) 59 if temp < temp_off: 60 relais1.value = False 70 #print("Temp.: %0.1f C" % (bme280.temperature)) 71 72 def light(wait_light): 73 #auslesen des ADC (Helligkeit) 74 value = ADC_2.value 75 if value > soll_wert: 76 relais2.value = True 77 wait_light = time.monotonic() 78 #print(value) 79 return wait_light 80 81 def motion(wait_pir): 82 # Bewegung registrieren 83 pir_value = pir.value 84 if pir_value: 85 relais4.value = True 86 wait_pir = time.monotonic() 87 return wait_pir 89 90 wait_light = time.monotonic() 91 wait_pir = time.monotonic() 92 93 while True: 94 temp() 95 wait_light = light(wait_light) 96 if time.monotonic() - wait_light > light_on: 97 wait_light = time.monotonic() 98 relais2.value = False 99 wait_pir = motion(wait_pir) 100 if time.monotonic() - wait_pir > pir_on: 101 wait_pir = time.monotonic() 102 relais4.value = False