Im Mittelpunkt des Projekts „Musikplayer“ steht der RFID Reader. Die Grundidee des Projektes ist die Ausgabe einer Audiodatei beim einlesen einer Karte. Anfangs war die Umsetzung mit Spotify geplant, leider konnte dies auf Grund mehrerer Probleme nicht umgesetzt werde. Als Ersatz werden einfach mp3 Dateien gespielt die im Ordner gespeichert sind.
Als erstes wurden die Bibliotheken für den RFID Scanner installiert, und der SPI ( Serial Peripheral Interface) am Raspberry ausgeschaltet. Es muss mit sudo pip3 install spidev noch Gerätedatei installiert werden über den der Zugriff im Betriebssystem Raspbian erfolgt. Um den unten stehenden Beispiel Code habe habe ich dann eine while True Schleife gebastelt, die darauf wartet das eine Karte gescannt wird. Hierbei wird direkt auch die Karten ID ausgegeben. Zum Testen kann man mit print die Nummer in der Konsole ausgeben. Der try Befehl kann mit Str + C beendet werden.
Wenn das lesen der Karten einwandfrei funktioniert kann man sich im Internet einen Musikplayer installieren der die mp3-Dateien abspielt. In diesem Projekt wurde der vcl.Mediaplayer verwendet. Wenn der Mediaplayer funktioniert kann man beides zusammenfügen. Also mit einer if Anweisung die Kartennummer mit der eingescannten Karte vergleichen. In die if Bedingung können dann verschiedene Aktionen hinzugefügt werden. Hier werden Titel und Interpret einmal auf dem Display und einmal per Audio ausgegeben. Hinweis: Es ist wichtig den Player in der Schleife zu schließen(p.stop()) sonst werden die Dateien gleichzeitig gespielt.
Display: hd44780.pdf So können dann alle Notwendigen Sachen auf dem Display ausgegeben werden. Hinweis: Auch hier sollte man das Display immer wieder lcd.lcd_clear() leeren.
Als letztes muss der PIR Sensor angeschlossen werden. Mit dem Beispiel Code sollte man vorher die Senilität und die Zeit einstellen. Mit der Bibliothek GPIOzero kann man den Sensor ganz einfach ins Programm einbinden. Sonst kann man ihn auch ganz einfach über den GPIO.Pin ansprechen und mit dem Input arbeiten. Mit einer weiteren while Schleife und einer if Bedingung wartet der das Programm jetzt auf eine Bewegung bis es die zweite while Schleife startet. So lange sich nichts bewegt würde eine Meldung auf dem Display ausgegeben.
Am Ende kann man zum Beispiel ein paar Pausen mit time.sleep() eingefügt, damit das Programm sinnvoll läuft. Außerdem kann eine weitere if Bedingung eingefügt werden um eine Fehlermeldung auszugeben wenn die Karte nicht hinterlegt ist. Zusätzlich gibt das Programm eine Aufforderung „eine Karte zu scannen“, wenn eine Bewegung erkannt wurde. Diese steht also mit in der if Bedingung.
- erkennt bestimmte Menge an Infrarotstrahlen/wärme
- Sensor reagiert nur auf Bewegung
→ dafür extra Fesnel-Linse damit nicht statische Wärmequellen auslösen
- max 7 Meter , max. Ca. 120G mit 3,3V
- verstellbare sind Potenziometer Time(Tx) & Sensitive (Ti)
- Bibliothek → von gpiozero MotionSensor
from gpiozero import MotionSensor pir = MotionSensor(4) while True: if pir.motion_detected: print("Es gab eine Bewegung")
httpsstatic.raspberrypi.orgfileseducationpostersgpio_zero_cheatsheet.pdf.pdf
- erzeugt magnetisches oder elektronisches Feld
- RFID-Transponder wird dann passiv mit Energie versorgt
→ solang der Transponder in dem Feld ist, kann Datentransport stattfinden
- Bibliotheken → aus mfrc522 SimpleMFRC522
import RPi.GPIO as GPIO from mfrc522 import SimpleMFRC522 reader = SimpleMFRC522() try: print("Bitte scanne eine Karte") id = reader.read()[0] print("Die Karten ID lautet:", id) finally: GPIO.cleanup()
- 4×20 Zeichen
- senden linear polarisiertes Licht aus
- nutzen Polifilter, zwischen zwei gekreuzten Filtern befinden sich Flüssigkristalle, je nach Ausrichtung verändert sich das Licht
- wird über das HD44780 Controller angesteuerter
- mit den I2C Datenbus müssen nur zwei GPIOs belegt werden
- Bibliotheken → lcddriver
#!/usr/bin/env python import os #Bibliotheken laden import time import vlc from mfrc522 import SimpleMFRC522 import lcddriver from gpiozero import MotionSensor lcd = lcddriver.lcd() #lcd definieren lcd.lcd_clear() p = vlc.MediaPlayer() # Player öffnen reader = SimpleMFRC522() pir = MotionSensor(23) # Sensor auf in 23 try: while True: # Endlosschleife die auf Bewegung wartet if pir.motion_detected: # aus der gpiozero wartet auf Bewegung p = vlc.MediaPlayer("Bitte scannen Sie eine Karte.mp3") # Mediaplayer öffnen p.play() lcd.lcd_clear() lcd.lcd_display_string("Bitte scannen ", 1) lcd.lcd_display_string("Sie eine Karte", 2) time.sleep(5) lcd.lcd_clear() lcd.lcd_display_string("Nutzen Sie Str+C", 1) lcd.lcd_display_string("um zu beenden", 2) while True: # Endlosschleife die darauf wartet das eine Karte gescannt wird id = reader.read()[0] # dazu wird die jeweilige Karten ID auf dem Display ausgegeben lcd.lcd_clear() print("Die Karten ID lautet:", id) lcd.lcd_display_string("Die Karten ID: ", 1) lcd.lcd_display_string('{0}'.format(id), 2) p.stop() time.sleep(2) if (id == 129095266764): p = vlc.MediaPlayer("Call me.mp3") p.play() time.sleep(3) lcd.lcd_display_string("Es wird Call me von", 3) lcd.lcd_display_string("Rae Jepsen gespielt", 4) p = vlc.MediaPlayer("Carly Rae Jepsen - Call Me Maybe.mp3") p.play() time.sleep (2) elif (id == 164276487417): p = vlc.MediaPlayer("Almost There.mp3") p.play() time.sleep(4) lcd.lcd_display_string("Es wird Almost There", 3) lcd.lcd_display_string("gespielt", 4) p = vlc.MediaPlayer("Disney's The Princess and The Frog OST - Almost There.mp3") p.play() time.sleep(2) elif (id ==613034193387): p = vlc.MediaPlayer("Happy.mp3") p.play() time.sleep(3) lcd.lcd_display_string("Es wird Happy ", 3) lcd.lcd_display_string("Birthday gespielt :)", 4) p = vlc.MediaPlayer("New Kids on the Block - Happy Birthday.mp3") p.play() time.sleep(2) elif (id == 611859984696): p = vlc.MediaPlayer("Linkin Park - Shadow Of The Day.mp3") p.play() lcd.lcd_display_string("Es wird Shadow ", 3) lcd.lcd_display_string("of the Day gespielt", 4) time.sleep(2) elif (id != 611859984696 or 613034193387 or 164276487417 or 129095266764): # prüft karte auf vorhandene Nummern lcd.lcd_clear() lcd.lcd_display_string("Diese Karte ist ", 1) lcd.lcd_display_string("leider nicht", 2) lcd.lcd_display_string("gueltig. Bitte versuchen", 3) lcd.lcd_display_string("Sie eine andere ", 4) else: lcd.lcd_clear() p.stop() lcd.lcd_display_string("Leider wurde keine", 1) lcd.lcd_display_string("Aktivitaet erkannt.", 2) lcd.lcd_display_string("Warte auf Aktivitaet", 3) lcd.lcd_display_string("um Programm zu starten", 4) time.sleep(10) except KeyboardInterrupt: p.stop() print ("Das Programm wird jetzt beendet") lcd.lcd_clear() lcd.lcd_display_string("Das Programm wird", 1) lcd.lcd_display_string("beendet....", 2) lcd.lcd_display_string("", 3) lcd.lcd_display_string("Auf Wiedersehen", 4) time.sleep(5) lcd.lcd_clear() GPIO.cleanup() }