Wir bauen ein elektronisches Schloss 2331 In vielen „Smart-Homes“ können die Türen automatisch über ein Keypad, mittels App oder sogar per Sprache geöffnet und geschlossen werden. Wir wollen mit einem Raspberry Pi Pico ein elektrisches Schloss selber bauen und dann auch programmieren, damit wir es öffnen und wieder schließen können. Inhalt Keypad – Tastatur anschließenSchloss mit Relais öffnenAlles zusammenfügenLinks Im folgenden Video siehst du das Schloss in Aktion: Folgende Bauteile benötigst du, um das Schloss nachbauen zu können: Raspberry Pi Pico (Link Reichelt)Relais SRC-05VDC-SL-C (Link Reichelt)MP1584EN Spannungsregulator (Link Amazon)Keypad (Link Amazon)12V Elektroschloss (Link Amazon) Des Weiteren brauchst du ein Breadboard und Kabel zum Verbinden. 1) Keypad – Tastatur anschließen Verkabelung Keypad und Raspberry Pi Pico Im ersten Schritt schließen wir das Keypad an den Raspberry Pi Pico an und testen die Funktionalität. Den Rasbperry Pi Pico musst du mit Circuit Python bespielen, um das Programm weiter unten ausführen zu können. Wie das funktioniert, kannst du im Artikel Python und der Raspberry Pi Pico nachlesen. An das Keypad habe ich 8 Kabel angelötet und diese der Reihe nach von links nach rechts an die Pins GP10 bis GP17 angeschlossen: Pinbelegung vom Keypad Folgendes Programm nutzt das bereits in Circuit Python enthaltene Modul keypad, um das Keypad auszulesen: import board import keypad #Tupel mit genutzten Pins rowPins = (board.GP10, board.GP11, board.GP12, board.GP13) columnPins = (board.GP14, board.GP15, board.GP16, board.GP17) #keypad Matrix wird erstellt keypadMatrix = keypad.KeyMatrix(rowPins, columnPins) #Tastenzuweisung tastenMap = { 0: "1", 1: "4", 2: "7", 3: "*", 4: "2", 5: "5", 6: "8", 7: "0", 8: "3", 9: "6", 10: "9", 11: "#", 12: "A", 13: "B", 14: "C", 15: "D"} while True: event = keypadMatrix.events.get() if event: if event.pressed: #gibt die Keynummer zurück. Bei einem 4x4 Keypad sind das Zahlen von 0-15 print(event.key_number) #hier wird anhand der Keynummer in der Map nachgeschlagen, welche Taste #gedrückt wurde z.B.: key_number 12 wird zu "A" print(tastenMap[event.key_number]) Im Video erkläre ich das Programm und zeige die Funktion auf: 2) Schloss mit Relais öffnen Das Keypad funktioniert nun und wir wollen mit dem Raspberry Pi Pico das elektrische Schloss öffnen und schließen. Dafür legen wir das Keypad zuerst beiseite und schauen, wie wir mit dem Pico ein Schloss öffnen können, welches 12 V benötigt und wir mit dem Pico nur 3,3 V ausgeben können. Um mit einem kleinen Stromkreis (3,3 V vom Raspberry Pi Pico) einen großen Stromkreis (12 V vom elektrischen Schloss) zu schalten, benötigt man ein Relais. Ein Relais ist ein durch elektrischen Strom betriebener Schalter mit zwei Schaltstellungen. Das Relais wird über einen Steuerstromkreis aktiviert und schaltet dadurch den zweiten Stromkreis. Wir nutzen für unser Beispiel das Relais SRD-05VDC-SL-C. Im folgenden Bild sieht man links die Anschlüsse für den größeren zu schaltenden Stromkreis und rechts die Anschlüsse für den Raspberry Pi Pico. Relais mit Anschlüssen NO = Normally Open, der zu schaltende Stromkreis wäre hier immer offen, also es fließt kein Strom. Erst wenn das Relais ein Signal bekommt, wird dieser Stromkreis geschlossen.C = Common Terminal, hier kann zum Beispiel der Pluspol des Stromkreises angeschlossen werden.NC = Normally Closed, der zu schaltende Stromkreis wäre hier immer geschlossen, also es fließt Strom. Erst wenn das Relais ein Signal bekommt, wird dieser Stromkries geöffnet und es fließt kein Strom mehr. Beachte das Datenblatt des Relais, welches du nutzt. Dieses kann einen anderen Aufbau als den hier beschriebenen haben. Da bei unserem Projekt das Schloss immer geschlossen sein soll, bis der Raspberry Pi Pico das Signal gibt, schließen wir den 12 V Stromkreis an C und NO an. Dies ist ein Beispielcode, der das Relais öffnet, wenn man den angeschlossenen Knopf drückt: import time import board import digitalio #Signalpin der mit dem Relais verbunden ist relais = digitalio.DigitalInOut(board.GP0) relais.direction = digitalio.Direction.OUTPUT #Button zum Testen der Relaisschaltung button = digitalio.DigitalInOut(board.GP15) button.switch_to_input(pull=digitalio.Pull.DOWN) while True: if(button.value): print("Button gedrückt") relais.value = True time.sleep(2) relais.value = False time.sleep(0.5) Folgendes Video zeigt dir den Aufbau und erklärt die Funktionsweise: 3) Alles zusammenfügen Wir haben gesehen, wie man ein Keypad nutzt, um Informationen zum Raspberry Pi Pico zu senden und wie man mithilfe eines kleinen Stromkreises einen größeren Stromkreis schalten kann. Jetzt fügen wir alles zusammen und passen den Code an, damit dieser nur das Schloss öffnet, wenn man den richtigen Code eingegeben hat. Neu hinzugekommen ist der Spannungswandler, der die 12 V vom Netzteil auf 5 V reduziert und damit den Raspberry Pi Pico über Pin 39 (VSYS) versorgt. Damit kann das Schloss und der Raspberry Pi Pico mit nur einer Spannungsquelle (12 V) betrieben werden. Wie der Spannungswandler MP1584EN eingestellt wird, kannst du in diesem Video anschauen: Mini MP1584EN adjustable step down DC to DC voltage buck converter electronics module Wenn der Raspberry Pi Pico über Pin 39 mit 5V versorgt wird, darf nicht gleichzeitig der Raspberry Pi Pico mit dem USB Kabel am Computer angeschlossen sein.Will man den Code ändern, muss vorher die Spannung an Pin 39 entfernt werden, da sonst der Pico zu viel Spannung bekommt und kaputt gehen kann! Schaltplan import board import keypad import time import digitalio #Tupel mit genutzten Pins rowPins = (board.GP10, board.GP11, board.GP12, board.GP13) columnPins = (board.GP14, board.GP15, board.GP16, board.GP17) #keypad Matrix wird erstellt keypadMatrix = keypad.KeyMatrix(rowPins, columnPins) #Tastenzuweisung tastenMap = { 0: "1", 1: "4", 2: "7", 3: "*", 4: "2", 5: "5", 6: "8", 7: "0", 8: "3", 9: "6", 10: "9", 11: "#", 12: "A", 13: "B", 14: "C", 15: "D"} #Signalpin der mit dem Relais verbunden ist relais = digitalio.DigitalInOut(board.GP0) relais.direction = digitalio.Direction.OUTPUT #LED auf dem Pico, wird aktiviert um zu sehen, dass das Programm läuft led = digitalio.DigitalInOut(board.GP25) led.direction = digitalio.Direction.OUTPUT #Variable speichert die Eingabe des Nutzers tempCode = "" #Methode testet den eingegebenen Code, wenn die #-Taste gedrückt wird def testeCode(): global tempCode if(tempCode == "1011"): print("open") relais.value = True time.sleep(2) relais.value = False tempCode = "" else: print("not open") tempCode = "" #Dauerschleife while True: led.value = True event = keypadMatrix.events.get() if event: if event.pressed: #hier wird anhand der Keynummer in der Map nachgeschlagen, welche Taste #gedrückt wurde z.B.: key_number 12 wird zu "A" print(tastenMap[event.key_number]) if(tastenMap[event.key_number] == "#"): testeCode() else: #gedrückte Taste wird Variable hinzugefügt tempCode += tastenMap[event.key_number] print(tempCode) Links Mini MP1584EN adjustable step down DC to DC voltage buck converter electronics modulePico battery power (and detection)Draw.io – Schaltplan unsere-schule.org × Wir bauen ein elektronisches Schloss Code: 2331 Infos: unsere-schule Codes