Heute will ich Euch ein Raspberry Pi Projekt aus der Praxis vorstellen. In diesem Projekt geht es darum einen Türöffner mehr oder weniger automatisiert zu betätigen, dies aber nur – wenn sich bestimmte Personen in der Nähe aufhalten. Um Euch die Anforderungen etwas näher zu bringen, möchte ich Euch jetzt hier eine kleine Übersicht zur Aufgabenstellung geben:
Hauptaufgabe:
Ein schon verbauter Türöffner soll automatisiert ausgelöst werden ohne dass die Person vor der Türe eine Hand frei haben muss. Das System soll mit mehreren Nutzern (5 Stück) funktionieren.
Lösungsansatz:
Die Steuerung wollen wir mittels eines Raspberry Pi umsetzen, welcher nach bestimmten Bluetooth Endgeräten in der Umgebung sucht. Im heutigen Zeitalter besitzt jeder ein Smartphone, welches sich über Bluetooth orten lässt, daher nutzen wir dieses Verfahren für die globale Berechtigung zur Freigabe des „Schaltmechanismus“. Ist die MAC Adresse des Bluetooth Moduls im Smartphone erreichbar, wird der Schalteingang freigegeben.
Jetzt benötigen wir noch einen Schalter für die Auslösung, denn der Türöffner soll natürlich nicht ständig aktiviert werden, wenn sich das entsprechende Bluetooth-Endgerät in der Nähe befindet. Da wir eine „handfreie“ Lösung benötigen kommt ein einfacher Schalter nicht in Frage und wir haben uns für eine Fußboden-Kontakt-Matte entschieden. Läuft man nun über diese Matte, wird der Türöffner betätigt.
Denkbar wären hier auch andere Systeme wie Ultraschall-Sensoren oder Infrarotmelder – jedoch hatten diese für uns immer einen zu großen Erfassungswinkel und würden zu Fehlauslösung führen. Daher haben wir uns für die Kontaktmatte entschieden, welche es schon für knapp 15 Euro in einer sehr einfachen Ausführung im Handel gibt.
Bei der Programmiersprache greifen wir auf Python zurück, mit der man extrem schnell – Quick and Dirty – sozusagen dieses Projekt umsetzen kann.
Warum Bluetooth?
Für eine Ortung über Bluetooth haben wir uns entschieden, da die Reichweite hier nicht so groß ist, wie bei einem WLAN System und wir zudem keine aktive Verbindung benötigen! D.h. unsere Freigabe-Ortung mittels Bluetooth funktioniert auch ohne eine aktive Bluetoothverbindung. In ein WLAN System müsste man sich erst einwählen und dann könnte es Probleme mit schon existierenden WLAN Systemen geben. D.h. wäre der Nutzer schon mit dem WLAN vom Haus verbunden, würde dieser keine Verbindung mit userem Raspberry WLAN aufbauen. Dann würde keine Abfrage statt finden und die Türe würde verschlossen bleiben. Jetzt könnte man zwar den Raspberry in das globale WLAN System anbinden, hätte aber den großen Nachteil, dass die Schalterfreigabe immer aktiviert bleibt, so lange sich ein Nutzer im WLAN befindet. Da die Tür aber nur geöffnet werden soll, wenn man sich mehr oder weniger davor befindet, scheidet diese Variante über WiFi aus.
Bevor es los geht, müssen wir die Randbedingungen schaffen und unseren Raspberry Pi für die Nutzung vorbereiten. Dies erledigen wir mit folgenden Befehlen:
INFO:
Für folgende Befehle benötigen wir „Root-Rechte“ sollte der User diese nicht besitzen, müsst ihr vor jeden Befehl „sudo“ einfügen!
Zuerst installieren wir uns die erforderlichen Module für Bluetooth und Python.
apt-get update
apt-get upgrade
apt-get autoremove
Bluetooth am Raspberry Pi konfigurieren
apt-get bluetooth bluez python-gobject python-gobject-2 python-bluez python-dev python-rpi.gpio
Jetzt ist der kleine Raspi startklar!
Zumindest was die Software angeht! Allerdings müssen wir nun noch das Eingabe – Ausgabe – Modul definieren.
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
Dies wäre nun auch erledigt. Die entsprechenden Python Verbindungen haben wir schon etwas weiter oben installiert. Wer mehr über die GPIO Ein und Ausgänge wissen möchte, kann sich hierzu mein kleines Raspberry Pi HowTo zum Thema GPIO Eingänge Ausgänge definieren ansehen.
Prima – jetzt ist sowohl die Hardware als auch die Software startklar!
Kommen wir nun zur Programmierung!
Zuerst erzeugen wir uns ein Python File:
nano opendoor.py
In dieses File könnt ihr nun folgende Zeilen Code integrieren / einfügen:
#!/usr/bin/python import time import bluetooth import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.cleanup() LED = 23 GPIO.setup(LED, GPIO.OUT) TASTER = 24 GPIO.setup(TASTER, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) bt = ['A8:66:AA:9F:39:44', '34:4D:AA:AD:7F:C0'] while True: for i in range (len(bt)): doublecheck = 0 while doublecheck < 1: result = bluetooth.lookup_name(bt[i], timeout=3) if (result != None): print bt[i],"wurde gefunden. Taster freigegeben." if (GPIO.input (TASTER)): print "Taster betaetigt" GPIO.output (LED, 1) time.sleep (4) GPIO.output (LED, 0) else: print "Die MAC",bt[i],"wurde nicht gefunden." doublecheck = 1
Jetzt ist das Script schon mal grundsätzlich startbereit!
Starten könnt ihr das mit folgendem Befehl:
sudo python opendoor.py
INFO:
Unter der Variable bt = müsst ihr Eure eigenen MAC Adressen eintragen, welche abgefragt werden sollen.
Aber noch haben wir die Eingänge und Ausgänge nicht bestückt.
Folgende Belegung benötigt ihr, wenn ihr von oben drauf blickt:
PIN 3 (obere Reihe) : Ground / Masse für die LED – welcher später natürlich durch ein Relais ersetzt werden kann, um den Türöffner zu betätigen
PIN 8 (obere Reihe) : Plus 3,3 Volt Ausgang für LED oder Relais
PIN 9 (obere Reihe) : 3,3 Volt Eingang für Taster (Kontaktmatte)
PIN 1 (untere Reihe) : + 3,3 Volt Ausgang für Taster (Kontaktmatte)
Wenn ihr die Verkabelung so belegt, sollte das Script auch schon arbeiten, wenn ihr es gestartet habt.
Funktioniert alles? Prima!
Dann können müssen wir nun das Script nur noch automatisch starten!
Dies erledigen wir wie folgt:
Zuerst müssen die rechte auf das File entsprechend angepasst werden:
chmod +x /home/pi/opendoor.py
Jetzt tragen wir den Pfad zum Script in die rc.local ein:
nano /etc/rc.local
(ACHTUNG: bitte vor der Zeile „exit 0“ eintragen!)
/bin/sleep 15 && cd /home/pi/ && sudo opendoor.py &
exit 0
Jetzt starten wir das System durch:
reboot
Und checken ob das Script erfolgreich gestartet wurde:
ps -ef | grep python
In der Ausgabe müsste nun unser „opendoor.py“ Script zu finden sein!
Ist dies der Fall, habt ihr den Phyton Autostart unter dem Raspberry Pi erfolgreich eingerichtet!
Fazit:
Das Script tut was es soll und arbeitet die Befehle unter 1 Sekunde ab, wenn ein Nutzer erst einmal erkannt wird. Die Basis-Erkennung ist abhängig von der Anzahl der Leute, welche im Script über ihre MAC Adresse hinterlegt werden. Daher gibt es bei diesem Script eine Art von „Userbegrenzung“, wenn man erreichen möchte, dass die Tasterfreigabe (Sensormatte) relativ zeitnah freigegeben wird. Dies hängt natürlich auch von der Position des BlueTooth Sensors ab. Je eher dieser die Leute scannen kann, desto präziser wird die „Auslösung“ des Türöffners funktionieren.
Hier eine Auflistung der benötigten Dinge:
Raspberry Pi:
Wir haben bei uns mit der ersten Generation gearbeitet. Folgende Varianten können jedoch 1 zu 1 umgesetzt werden!
Sensormatte:
Die Matte verfügt über einen Anschluss mit dem man direkt auf ein Steckboard für Testzwecke gehen kann. (nur für den Innenbereich geeignet!)
Bluetooth Adapter:
Billig und Gut.
Relais:
Jumper zwischen JD-VCC und VCC entfernen
JD-VCC an die 5V des Raspberry Pi anschließen
Rechtes GND an GND des RPi
Rechtes VCC an 3,3V des RPi
IN1 bzw IN2 mit beliebigen GPIO Pin verbinden
ACHTUNG!
Ihr müsst bei diesem Relais die Code etwas abändern, denn dieser ist ja für eine LED geschrieben.
Dieses Relais hier zieht nämlich an, wenn keine Spannung anliegt und fällt am, wenn Spannung fliest!
Sollte man dann einen Stromausfall oder eine Störung beim Raspi haben, würde keine Spannung mehr anliegen und der Türöffner würde ständig summen! Daher 1 und 0 beim Code der LED vertauschen!
Tags:
- bluetooth raspberry programmieren
- ble relais Raspberry
- raspberry türöffner handy
- nfc modul raspberry pi Tür öffner
- Bluetooth Reichweite begrenzen