KOFFER-
SICHERUNG
MIT
RASPBERRY PI
Markus Schwer (13)
DOS Lauchheim
Schüler experimentieren 2015
Regionalwettbewerb Heilbr...
Markus Schwer [1]
Inhaltsverzeichnis
1. Kurzfassung..........................................................................
Markus Schwer [2]
1. Kurzfassung
Nachdem ich im letzten Jahr mein Türschloss mit einem Mikrocontroller
(Arduino) gesichert...
Markus Schwer [3]
4. Durchführung
Zu Beginn des Projekts habe ich das Betriebssystem Raspbian von
www.raspberrypi.org/down...
Markus Schwer [4]
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) CHARACTER S...
Markus Schwer [5]
GPIO.output(13, True)
time.sleep(time_open)
GPIO.output(13, False)
else:
print "Transpondernummer",id, "...
Markus Schwer [6]
add=self.cur.execute("INSERT INTO user (rfid, name) " + "VALUES (%s,%s)", (rfid_id, name))
def mysql_rea...
Markus Schwer [7]
(http://data.designspark.info/uploads/images/53bc258dc6c0425cb44870b50a
b30621)
und vom RFID-Reader (htt...
Markus Schwer [8]
Nun musste ich „nur noch“ den Zugmagnet ansteuern. Nach einem Tipp von
Herrn Barth habe ich dafür einen ...
Markus Schwer [9]
Die komplette Platine habe ich mit Fritzing erstellt und bestellt:
Dies ist die Pinbelegung vom Raspberr...
Markus Schwer [10]
Zum Testen habe ich die Schaltungen auf einem Steckbrett ausprobiert.
Damit das Ganze auch transportabe...
Markus Schwer [11]
5. Aufgetretene Probleme und Problemlösung
Bei der Durchführung dieses Projekts traten folgende Problem...
Markus Schwer [12]
beim B+ anders als im Buch. Das hatte ich zuerst nicht beachtet, war aber
kein großes Problem.
4. Ein w...
Markus Schwer [13]
6. Fazit
Bei der Suche nach Problemlösungen im Internet habe ich festgestellt, dass
dieses Projekt deut...
Nächste SlideShare
Wird geladen in …5
×

Markus schwer jufo

525 Aufrufe

Veröffentlicht am

Jugend forscht Projekt

Veröffentlicht in: Bildung
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
525
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
32
Aktionen
Geteilt
0
Downloads
4
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Markus schwer jufo

  1. 1. KOFFER- SICHERUNG MIT RASPBERRY PI Markus Schwer (13) DOS Lauchheim Schüler experimentieren 2015 Regionalwettbewerb Heilbronn-Franken
  2. 2. Markus Schwer [1] Inhaltsverzeichnis 1. Kurzfassung.......................................................................................................................................... 2 2. Einleitung............................................................................................................................................. 2 3. Materialien .......................................................................................................................................... 2 4. Durchführung ...................................................................................................................................... 3 5. Aufgetretene Probleme und Problemlösung .................................................................................... 11 6. Fazit ................................................................................................................................................... 13 7. Danksagung ....................................................................................................................................... 13
  3. 3. Markus Schwer [2] 1. Kurzfassung Nachdem ich im letzten Jahr mein Türschloss mit einem Mikrocontroller (Arduino) gesichert habe, habe ich mich in diesem Jahr entschlossen, einen Koffer vor unerlaubtem Zugriff zu sichern. Schon im letzten Jahr wollte ich zur Steuerung ein Webinterface benutzen, habe aber festgestellt, dass dies mit Arduino nicht so einfach geht. Deshalb habe ich für mein neues Projekt den Raspberry Pi ausgewählt. Der Raspberry Pi ist ein Mini-Computer ohne internen Speicher. Ich habe einen Koffer mit einem Entriegelungsmagnet gesichert, der über den Raspberry Pi gesteuert wird. Der Raspberry Pi erlaubt nur authorisierten Personen mit RFID-Karte den Zugriff. Über ein Webinterface kann ich auswählen, welche Personen meinen Koffer öffnen können. Das Programm dafür habe ich mit Python geschrieben. 2. Einleitung Ich habe im Herbst 2014 die Empfehlung bekommen, mir einen Raspberry Pi zuzulegen. Der Raspberry Pi ist ein Mini-Computer ohne internen Speicher. Dazu habe ich noch das Buch „Raspberry Pi, Das umfassende Handbuch“ von dem Verlag Galileo Computing bekommen. In diesem Buch ist ein Projekt beschrieben, das genau meinem geplanten Projekt entspricht. Ich musste „nur noch“ einiges anpassen. 3. Materialien Raspberry Pi B+ RFID-Reader RDM6300 von Itead Studio 125 kHz RFID-Transponderkarten Zugmagnet REGDON L5081 Motortreiber TLE 4202B Micro SD-Karte WLAN-Stick Handy Akku
  4. 4. Markus Schwer [3] 4. Durchführung Zu Beginn des Projekts habe ich das Betriebssystem Raspbian von www.raspberrypi.org/downloads auf eine SD Karte geladen. Raspbian ist eine Linux Distribution. Dafür habe ich die Zip-Datei auf meinem PC gespeichert, die Zip geöffnet und den Inhalt auf eine SD Karte kopiert. Nun wurde die SD Karte in den Raspberry Pi gesteckt und der Raspberry Pi mit Strom versorgt. Nachdem der Raspberry Pi gebootet hat, habe ich Raspbian installiert. Bei der Konfiguration von Raspbian habe ich SSH aktiviert. SSH dient der Kommunikation innerhalb eines Netzwerkes. Nach dem Reboot habe ich mich mit username: pi und password: raspberry eingeloggt. Als Nächstes habe ich startx in die Konsole eingegeben. Daraufhin öffnet sich die Oberfläche von Raspbian. In der Konsole habe ich das Passwort mit passwd geändert. Nachdem sichergestellt war, dass Raspberry Pi mit dem Internet verbunden ist, habe ich Apache 2 installiert, und zwar mit sudo apt-get install apache2. Danach habe ich MySQL mit sudo apt-get install mysql-server php5-mysql installiert. Nun musste ich noch phpMyAdmin installieren, und zwar mit sudo apt-get install phpmyadmin. Nun musste noch die UART Schnittstelle aktiviert und gesäubert werden. Dazu muss in der cmdline.txt der text console=ttyAMA0, 115200, kgdboc=ttyAMA0, 115200 gelöscht werden. In cmdline.txt kommt man mit sudo leafpad /boot/cmdline.txt. Als Nächstes musste ich die etc/inittab in einem Editor öffnen und die letzte Zeile mit # auskommentieren. Dann musste ich noch pySerial installieren. Das geht mit: sudo apt-get install python-setuptools sudo easy_install pip pip install pyserial Danach musste ich den Webbrowser öffnen und die IP-Adresse vom Raspberry Pi eingeben. Die IP-Adresse des Raspberry Pi findet man unter Menü->Einstellungen->Wifi Konfiguration. Nach der IP-Adresse des Raspberry Pi musste man /phpmyadmin eingeben. Als Nächstes habe ich eine neue Datenbank mit dem Namen rfid erstellt. Danach muss man folgenden SQL-Befehl eingeben:
  5. 5. Markus Schwer [4] CREATE TABLE IF NOT EXISTS `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) CHARACTER SET utf8 DEFAULT NULL, `rfid` text CHARACTER SET utf8, `timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) Dann habe ich die Programme main.py, functions.py und add.py aus dem Buch „Raspberry Pi“ (Kapitel 27) abgetippt und in /home/pi gespeichert. Nun war die Programmierung fertig. main.py: #!/usr/bin/python # coding=utf-8 # Datei main.py import RPi.GPIO as GPIO from functions import * import time,sys GPIO.setmode(GPIO.BOARD) GPIO.setup(13,GPIO.OUT) db = DB() time_open = 5 try: while True: print "Warte auf Transponder...n" id = read_rfid() check = db.mysql_read(id) if check[1] != 0: print "Hallo",check[1],"n" print "Tuer",time_open,"Sekunden geoeffnet " db.update_timestamp(id)
  6. 6. Markus Schwer [5] GPIO.output(13, True) time.sleep(time_open) GPIO.output(13, False) else: print "Transpondernummer",id, "nicht gefunden!" print "Kein Zutritt!" continue except KeyboardInterrupt: db.close_db() GPIO.cleanup() sys.exit() functions.py: #!/usr/bin/python # coding=utf-8 # Datei functions.py import serial import MySQLdb # Auslesen der RFID-Transponder def read_rfid(): ser = serial.Serial("/dev/ttyAMA0") ser.baudrate = 9600 daten = ser.read(14) ser.close() daten = daten.replace("x02", "" ) daten = daten.replace("x03", "" ) return daten class DB(): def __init__(self): db = MySQLdb.connect(host="localhost", user="root", passwd="*******", db="rfid") db.autocommit(True) self.cur = db.cursor() def close_db( self ): self.cur.close() def add_user(self,rfid_id, name):
  7. 7. Markus Schwer [6] add=self.cur.execute("INSERT INTO user (rfid, name) " + "VALUES (%s,%s)", (rfid_id, name)) def mysql_read(self, rfid_id): a= self.cur.execute("SELECT id, name, timestamp, rfid " + "FROM user WHERE rfid = %s" ,rfid_id) id = 0 name = 0 timestamp = 0 rfid = 0 for row in self.cur.fetchall(): id = int(row[0]) name = str(row[1]) timestamp = str(row[2]) rfid = str(row[3]) return id, name, timestamp,rfid def update_timestamp(self, rfid_id): a= self.cur.execute("UPDATE user SET timestamp = NOW() " + "WHERE rfid = %s" ,rfid_id) add.py: #!/usr/bin/python # coding=utf-8 # Datei add.py import RPi.GPIO as GPIO from functions import * db = DB() print "Neuer Zugangsberechtigtern" print "Transponder einlesen...n" id = read_rfid() name = raw_input("Name eingeben: ") try: db.add_user(id,name) print "Neuer Datensatz angelegt" except: print "Fehler beim Schreiben" db.close_db() Nun kam die Hardware. Zuerst habe ich mir die Pinbelegung vom Raspberry Pi B+
  8. 8. Markus Schwer [7] (http://data.designspark.info/uploads/images/53bc258dc6c0425cb44870b50a b30621) und vom RFID-Reader (http://wiki.iteadstudio.com/RDM6300) angeschaut. Dann habe ich den RFID-Reader mit Hilfe von zwei 1 kOhm Widerständen nach folgendem Schaltplan an den Raspberry Pi angeschlossen. Als Nächstes habe ich mit sudo python add.py das Programm add.py ausgeführt und mit dem RFID Reader die Daten der Transponderkarten eingelesen. Nun habe ich das Programm main.py ausgeführt, und es hat funktioniert.
  9. 9. Markus Schwer [8] Nun musste ich „nur noch“ den Zugmagnet ansteuern. Nach einem Tipp von Herrn Barth habe ich dafür einen Motortreiber verwendet, und zwar den TLE4202B. Da über den Raspberry Pi maximal 5V verfügbar sind und mein Magnet mind. 6V benötigt, musste ich eine externe Spannungsquelle (9V-Block) verwenden. Den Motortreiber habe ich folgendermaßen angeschlossen:
  10. 10. Markus Schwer [9] Die komplette Platine habe ich mit Fritzing erstellt und bestellt: Dies ist die Pinbelegung vom Raspberry Pi B+. Quelle: http://www.rs-online.com/designspark/electronics/eng/blog/introducing-the- raspberry-pi-b-plus
  11. 11. Markus Schwer [10] Zum Testen habe ich die Schaltungen auf einem Steckbrett ausprobiert. Damit das Ganze auch transportabel ist, habe ich den Raspberry Pi zur Stromversorgung an einen Handy Akku angeschlossen. Als letztes habe ich alles in den Deckel des Koffers eingebaut.
  12. 12. Markus Schwer [11] 5. Aufgetretene Probleme und Problemlösung Bei der Durchführung dieses Projekts traten folgende Probleme auf: 1. Ich hatte /etc/inittab in einem Editor geöffnet und geschaut, ob die Zeile auskommentiert ist, so wie in dem Buch „Raspberry Pi“ beschrieben (T0:23:respawn:/sbin/getty –L ttyAMA0 115200 vt100. Leider ist diese Zeile zweimal in der inittab vorhanden, und ich hatte nur die erste Zeile gesehen. Die letzte Zeile habe ich übersehen. Ich bekam dann beim Ausführen der main.py ständig folgenden Fehler: Traceback (most recent call last): File "main.py", line 18, in <module> id = read_rfid() File "/home/pi/functions.py", line 13, in read_rfid daten = ser.read(14) File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 449, in read buf = os.read(self.fd, size-len(read)) OSError: [Errno 11] Resource temporarily unavailable Ich habe dann im Raspberry Pi Forum (http://www.forum- raspberrypi.de/) nachgefragt, bekam aber keine befriedigende Antwort. Bei einem der Autoren des Buches, Herrn Christopher Scherbeck habe ich dann per Mail angefragt, ob er mir helfen kann. Herr Scherbeck hat mir sehr schnell geantwortet und hat sich viel Mühe gegeben. Nach einigen Mails hin und her hatte er dann die Lösung mit der inittab gefunden. 2. Auf der Suche nach einer Lösung für das Problem mit der main.py (siehe oben) habe ich mein System (Raspbian) neu aufgesetzt. Die SQL Datei rfid habe ich aber vor dem neu Aufsetzen und danach wieder übernommen. Als das Problem mit er main.py gelöst war, wurde beim Auslesen der Transponderkarte die richtige ID angezeigt, aber der Zutritt verweigert. Nach einiger Zeit habe ich den Fehler gefunden. Ich habe die alten Daten in der SQL-Datei gelöscht und mit add.py neu eingelesen. Nun hat es funktioniert. Warum weiß ich bis heute nicht. 3. Ein anderes Problem war, dass im Buch nicht beschrieben war, wie man einen RFID Reader beim Raspberry Pi B+ anschließt. Die Pinbelegung ist
  13. 13. Markus Schwer [12] beim B+ anders als im Buch. Das hatte ich zuerst nicht beachtet, war aber kein großes Problem. 4. Ein weiteres Problem war der Anschluss des Zugmagneten. Da der Raspberry Pi nur maximal 5V liefert, habe ich zuerst ausprobiert, ob der Magnet auch mit 5V funktioniert. Dies habe ich mit einer Batterie überprüft und festgestellt, dass es mit 5V nicht geht, aber er mit 9V auch nicht kaputt geht. Zu meiner Verwunderung habe ich dabei auch festgestellt, dass der erste Magnet, sobald man Spannung anlegt, nur anzieht. Auch bei Umpolung zog der Magnet an. Das stellte mich vor ein weiteres Problem, da ich davon ausgegangen war, dass der Magnet, wie online beschrieben, bei einem 6V-Impuls den Anker freigibt und bei einem weiteren Impuls wieder einzieht. Als Lösung des Problems habe ich mir überlegt eine Druckfeder zu benutzen. Im Raspberry Pi Forum habe ich auf die Frage nach dem Anschluss eines Zugmagneten keine befriedigende Antwort erhalten. Auch bei der Internetrecherche habe ich nichts dazu gefunden. Deshalb habe ich Herrn Barth kontaktiert. Von ihm habe ich zwei mögliche Lösungsansätze erhalten. Entweder das PiFace (eine Erweiterungsplatine für den Raspberry Pi) oder einen Motortreiber benutzen. Zuerst habe ich mich für das PiFace entschieden, weil es einfacher erschien. Es stellte sich jedoch heraus, dass das PiFace für diese Zwecke nicht geeignet ist, da ich damit die serielle Schnittstelle nicht benutzen kann. Diese brauche ich aber für den RFID-Reader. Auch im Internet habe ich dafür keine Lösung gefunden. Mittlerweile hatte ich noch eine andere Idee, und zwar ein MOSFET zu benutzen. Ich war mir nicht sicher, ob man einen Motortreiber zum Ansteuern eines Zugmagneten verwenden kann. Deshalb schrieb ich nochmals an Herrn Barth, ob das wirklich funktioniert und ob man alternativ vielleicht auch einen MOSFET benutzen kann. Herr Barth meinte, dass sowohl Motortreiber als auch MOSFET möglich sind. Da ich bereits einen passenden Motortreiber zu Hause hatte, habe ich nach Anleitung von Herrn Barth diesen ausprobiert. Nach einigen Versuchen hat es auch funktioniert!
  14. 14. Markus Schwer [13] 6. Fazit Bei der Suche nach Problemlösungen im Internet habe ich festgestellt, dass dieses Projekt deutlich anspruchsvoller war, als mein Jugend forscht-Projekt vom letzten Jahr. Ich habe bei diesem Projekt die Grundlagen von Python und Linux gelernt, sowie für weitere Projekte interessante elektronische Kenntnisse gesammelt. Dies hätte ich ohne externe Hilfe nicht geschafft. 7. Danksagung Herrn Dr. Andreas Barth (Studiengang Ingenieurpädagogik, HTW Aalen) möchte ich für seine wertvollen Tipps zum Anschluss des Zugmagneten und für die schnelle Erreichbarkeit (selbst an Feiertagen) danken. Herrn Christoph Scherbeck (Mitautor des Buches „Raspberry Pi, Das umfassende Handbuch) danke ich für die Hilfe bei meinem größten Problem, bei dem ich selbst von den Spezialisten im Raspberry Pi Forum keine Unterstützung fand. Ich war verblüfft und erfreut von der schnellen Unterstützung. Bei meiner Mutter bedanke ich mich für viele Internetrecherchen und für sehr viel Geduld. Bei Herrn Bich bedanke ich mich für die hilfreiche Fixierung der Elektronik im Koffer.

×