RFID Praktische Einsatzmöglichkeiten

RFID Praktische Einsatzmöglichkeiten Titelbild



RFID Projekte

Nachdem die Grundlagen für das Arbeiten mit RFID-Modulen gegeben sind, wollen wir uns jetzt ansehen wie wir Projekte ganz praktisch umsetzen können. Dafür haben wir kleine Beispiel-Projekte für dich ausgearbeitet.

Kontaktlos LEDs zum Leuchten bringen

Fangen wir doch zuerst damit an, LEDs ohne Kontakt zum Leuchten zu bringen. Das Ziel ist es, jeder Karte eine Farbe zuzuordnen und eine LED entsprechend leuchten zu lassen. So sparen wir uns das nervige Umschalten. Natürlich lässt sich dieses Projekt auch beliebig erweitern z.B. mit einem RGB-LED Stripe. um dein ganzes Zimmer zum Leuchten zu bringen. Legen wir gleich mal los. Zuerst musst du eine RGB-LED an deinen Pi anschließen, im folgenden findest du den Schaltplan.

RFID-LED Projekt

Anschlüsse Pi Anschlüsse Breadboard
GPIO 18 1. Bein RGB LED
GND 2. Bein (das längste) RGB LED
GPIO23 3. Bein RGB LED
GPIO 24 4. Bein RGB LED

Als nächstes kopieren wir wieder die Read.py Datei in die farben.py Datei, mit der wir jetzt arbeiten werden. Insgesamt gibt es drei Code Stellen, die du einfügen musst, um die LEDs zum Leuchten zu bringen.

Wichtig ist, dass wir auch wirklich mit dem folgenden Befehl die RPi.GPIO Bibliothek importieren, wenn dort etwas anderes in Zeile steht, kannst du das ersetzen.

farben.py Zeile 1

import RPi.GPIO as gpio

Im nächsten Schritt müssen wir dem Pi erstmal sagen, dass wir RGB-LEDs angeschlossen haben. Dafür definieren wir zuerst Variablen mit den GPIO Anschlüssen und legen dann den Zustand der Pins fest. Im nächsten Schritt definieren wir die Funktion ledsOff(). Die macht nichts anderes als der Name schon sagt. Sie schaltet alle LEDs aus. Warum diese Funktion nützlich ist, werden wir später noch erfahren. Bei der Funktion end_read() ist noch das gpio.cleanup wichtig, damit werden die GPIO Pins aufgeräumt und können dann wieder beim nächsten Start ordentlich benutzt werden.

Zeile 11 bis 28


# LED Setup
rot = 24
gruen = 23
blau = 18
gpio.setmode(gpio.BCM)
gpio.setup(rot, gpio.OUT)
gpio.setup(gruen, gpio.OUT)
gpio.setup(blau, gpio.OUT)

def ledsOff():
    gpio.output(rot, gpio.LOW)
    gpio.output(gruen, gpio.LOW)
    gpio.output(blau, gpio.LOW)

def end_read(signal,frame):
    global continue_reading
    continue_reading = False
    gpio.cleanup()



Jetzt, da wir die LED angeschlossen haben, müssen wir natürlich noch Auslesen, welche Karte zu welcher Farbe gehört. Dafür haben wir drei verschiedene if-Bedingungen, heißt für jede Möglichkeit jeweils eine Bedingung. Zuerst aber kontrollieren wir mit if type(data) is list:, ob sich in der Variable data überhaupt eine Liste befindet. Das ist wichtig, denn teilweise wird zwar eine Karte erkannt, aber der Inhalt der Karte kann nicht ordentlich gelesen werden. Das kann passieren wenn du zum Beispiel die Karte zu schnell von dem Lesegerät entfernst. Im nächsten Schritt wandeln wir, wie bekannt, die ASCII Zahlen in Buchstaben um, dann kommen die Bedingungen. Dort benutzen wir if "gruen" in text, um zu kontrollieren ob sich der String "gruen" in der Variablen text befindet. Das müssen wir machen, denn wenn wir nur "gruen" == text machen würden, könnte es dort teilweise zu falschen Ergebnissen kommen, wenn der Rest der Karte mit noch anderen Inhalten befüllt ist. In der Bedingung schalten wir zuerst alle LEDs aus und schalten dann immer die LED an, die wir auch anschalten wollen.


if status == MIFAREReader.MI_OK:
    data = MIFAREReader.MFRC522_Read(8)
    MIFAREReader.MFRC522_StopCrypto1()
    if type(data) is list:
        text = "".join(chr(x) for x in data)
        print text
        if "gruen" in text:
            ledsOff()
            gpio.output(gruen, gpio.HIGH)
        if "rot" in text:
            ledsOff()
            gpio.output(rot, gpio.HIGH)
        if "blau" in text:
            ledsOff()
            gpio.output(blau, gpio.HIGH)
    else:
        print "Es gab einen Fehler :(" 

So einfach ist der Programmcode dann auch ;) Bevor du dein Programm aber testen kannst, musst du erst noch deine Karten mit der MyWrite.py Datei so beschreiben, dass auf diesen auch wirklich gruen, rot und blau steht, sonst kann natürlich das Programm auch nicht funktionieren. Gegen den Fehlerteufel kannst du dir das Programm auch nochmal herunterladen:

wget cw42.de/p/farben.py



































Das RFID Soundboard

Gerade eben haben wir uns schon damit beschäftigt die GPIOs und damit eine LED zu kontrollieren, aber natürlich haben wir damit auch noch andere Möglichkeiten. Eine davon ist ein interaktives Soundboard. Wir haben als Beispiel einfach mal Tiergeräusche genommen, aber natürlich lassen sich auch andere Geräusche abspielen, die im Zweifelsfall auch situationsbedingt weiter helfen können. Damit du nicht selbst alles im Internet zusammen googlen musst, gibt es hier eine kleine Zusammenfassung von uns, die du dir einfach herunterladen kannst.

git clone https://github.com/coding-world/animal-sounds

Noch mehr Sounds findest du auch auf https://www.freesound.org/. Dort gibt es nur Creative Common Sounds, heißt du kannst diese einfach benutzen und verändern wie du willst.

Im nächsten Schritt müssen wir noch das Audio richtig einstellen. Der Raspberry Pi hat selbst keine Lautsprecher, deswegen brauchst du entweder Kopfhörer oder externe Lautsprecher, die du an den Pi anschließen kannst. Wir haben in unseren Fall Lautsprecher genommen, die mit einem USB-Anschluss mit Strom versorgt werden und haben die Verbindung zwischen Raspberry Pi und den Boxen mit einem Klinkenstecker vorgenommen. Wenn du diese Art der Verbindung nutzt, musst du teilweise noch einmal die Einstellungen ändern, damit auch wirklich Sounds über den Kopfhöreranschluss abgespielt werden.

sudo raspi-config -> 9 Advanced Options -> A9 Audo -> 1 Force 3.5mm [...]

Falls dein Monitor oder Fernsehr Lautsprecher eingebaut hat, die über HDMI funktionieren, kannst du auch HDMI als Sound-Ausgang wählen. Um zu testen, ob alles richtig verbunden/angeschlossen ist, kannst du mit dem folgenden Befehl einzelne Töne über das Terminal abspielen:

aplay animal-sounds/cow.wav

Wenn das klappt, solltest du das Muhen einer Kuh hören. Jetzt können wir uns daran machen, das Python Programm dafür zu schreiben. Wir benutzen dabei eine Python Bibliothek, die auf jedem Pi vorhanden ist, die pygame Bibliothek. Mit dieser können grafischen Spiele programmiert werden. Das machen wir jetzt nicht, nutzen aber den Sound-Teil dieser Bibliothek, den mixer, um Sounds ab zu spielen.




import pygame
pygame.mixer.init()
pygame.mixer.music.load("animal-sounds/cow.wav")
pygame.mixer.music.play()
while pygame.mixer.music.get_busy() == True:
    continue

Das Programm ist ganz simpel, in Zeile 1 wird die Bibliothek importiert und in Zeile 2 wird dann die Mixer Komponente initialisiert. In Zeile drei wird festgelegt, wo sich die Sound Datei befindet, du musst hier den Pfad von deinem Python Programm zu der Sound Datei angeben. In Zeile 5 wird diese Datei dann abgespielt. Da Python sich immer beendet, sobald die letzte Zeile des Programms ausgeführt wurde, können wir mit der while-Schleife in Zeile 6 das Programm solange pausieren, wie die Sound Datei noch nicht komplett abgespielt wurde. Wenn du das Programm ausführst, solltest du wieder das Muhen einer Kuh hören. Wenn du in den Ordner animal-sounds wechselst (cd animal-sounds), kannst du dir mit ls alle Sounds anzeigen lassen, die du abspielen kannst.

Der nächste Schritt ist, diese Funktion in das Farben Python Programm einzubauen, wir benutzen dabei als Grundlage die farben.py Datei. Deswegen kopieren wir diese am besten in rfid-sounds.py. In diesem müssen wir am Anfang zuerst die Bibliothek importieren und dann initialisieren. Zeile 3-6 müssen wir dann die if-Bedingungen einbauen. Wenn du das machst, müsste jetzt beim Vorhalten einer Karte der Sound abgespielt werden. Wir haben hier mal etwas vorbereitet.

if "kuh" in text:
    pygame.mixer.music.load("animal-sounds/cow.wav")
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy() == True:
if "huhn" in text:
    pygame.mixer.music.load("animal-sounds/chicken.wav")
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy() == True:
if "elefant" in text:
    pygame.mixer.music.load("animal-sounds/elephant.wav")
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy() == True:

Das Ganze funktioniert ähnlich wie mit den Farben. Aber anstatt eine LED zu schalten, spielen wir dieses Mal Sounds ab. Natürlich musst du dafür auch die Karten neu beschreiben!

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!