Raspberry Pi Fingerprint Sensor zur Authentifizierung nutzen

17. März 2017
24 Comments

Nicht nur in Hollywood Filmen werden Fingerabdruck Leser immer häufiger gesehen. Solche Module sind oftmals in Heimüberwachungssystem eingebaut und dienen der einfachen aber sicheren Verifikation von Personen. Mit einem solchen Raspberry Pi Fingerprint Sensor kann man auch einige andere Projekte, wie gesicherten Schlössern, realisieren.

Einer der Vorteile ist, dass komplett auf Passwörter bzw. Zahlencodes verzichtet werden kann. Zwar ist dies weiterhin möglich, aber ohne doch um einiges bequemer. Um zu beginnen, geht es in diesem Tutorial um den Anschluss sowie das Auslesen, Speichern und Verifizieren von eingelesenen Fingerabdrücken.

 

Zubehör

Raspberry Pi Fingerprint Sensor ttyUSB0 UART Konverter

Ein USB TTL Adapter mit 3.3V und 5V Spannungsausgang kann für viele serielle Module verwendet werden.

Diese Sensoren wurden ursprünglich für den Arduino entwickelt und können über UART ausgelesen werden. Der Raspberry Pi hat zwar zwei Pins (Pin 8 / GPIO14 und Pin 10 / GPIO 15), allerdings arbeiten diese mit 3.3V. Da es verschiedene Fingerabdruck Sensoren gibt, die nicht alle mit 3.3V arbeiten, bietet sich ein USB UART Konverter an. Einige Modelle können sowohl 3.3V als auch 5V Spannung ausgeben. Diese eignen sich besonders (auch in Verbindung mit einem Arduino).

Folgendes wird also benötigt:

Beachte in der Artikelbeschreibung, welche Spannung dein Sensor benötigt. Meiner braucht 3.3V Eingangsspannung, allerdings wollen z.B. andere Modelle eine Spannung zw. 3.8V und 6V. Die Spannung ist gleich entscheidend für den Anschluss.

 

Anschluss des Raspberry Pi Fingerprint Sensor

Der USB Adapter ist beschriftet, die Kabel des Fingerprint Sensors hingegen nicht. Die Kabel haben allerdings eine eindeutige Farbe, mit Hilfe der wir sie identifizieren und an den USB Konverter anschließen können. Wir benötigen nur vier der Kabel (falls dein Fingerabdruckssensor mehr hat, kannst du die restlichen Farben ignorieren):

  • Rot: Je nach akzeptierter Spannung des Sensors an 3.3V oder 5V.
  • Weiß: RXD
  • Grün: TXD
  • Schwarz: GND

Falls dein Sensor eine höhere Spannung als 3.3V möchte (und der Maximalwert größer/gleich 5V ist), kannst du das rote Kabel getrost an den 5V Pin anschließen.

Um zu prüfen, ob die Verkabelung richtig ist und ob der Sensor erkannt wird, kannst du deine Konsole öffnen und vor und nach dem Anschließen folgendes ausführen:

ls /dev/ttyUSB*

Falls keine anderen seriellen Geräte über USB angeschlossen sind, sollte zunächst nichts angezeigt werden und danach /dev/ttyUSB0. Bei abweichendem Namen (weil z.B. noch andere Geräte angeschlossen sind), musst du dies in den folgenden Schritten entsprechend anpassen.

Zweite Variante per GPIO’s

Sofern du einen Sensor mit 3.3V benötigter Eingangsspannung hast, so kannst du diesen auch ohne USB Konverter direkt an die GPIOs anschließen. Theoretisch geht dies auch bei 5V mit einem TTL Konverter (wie hier gezeigt), worauf ich in diesem Tutorial aber nicht näher eingehe. Ein Vorteil der USB Variante ist, dass man einfacher überprüfen kann, ob der Sensor erkannt wurde.

 

Installation der Raspberry Pi Fingerprint Bibliothek

Für einige Befehle, die für die Installation nötig sind, sind Root-Rechte erforderlich. Daher starten wir ein Terminal und tippen folgendes ein, was alle folgenden Befehle als Root ausführt:

sudo bash

Nun fügen wir die benötigten Paketquellen hinzu (der Autor hat übrigens auch noch einige andere spannende Projekte):

wget -O - http://apt.pm-codeworks.de/pm-codeworks.de.gpg | apt-key add -
wget http://apt.pm-codeworks.de/pm-codeworks.list -P /etc/apt/sources.list.d/

Anschließend aktualisieren wir die verfügbaren Pakete und installieren die Python Bibliothek:

apt-get update
apt-get install python-fingerprint --yes

Falls ein Fehler aufgetreten ist (insbesondere, dass nicht alle abhängigen Pakete installiert wurden), führe anschließend noch folgendes aus:

apt-get -f install

Um zurück in die normale Shell (unter dem Pi Nutzer) zu kommen, führe exit aus.

Übrigens: Wer lieber eine  C++ Bibliothek nutzen möchte, kann sich diese von Adafruit (ursprünglich für Arduino) ansehen. Der Code der Python Bibliothek ist auf Github verfügbar.

 

Testcode & Beispielszenario

Als erstes machen wir einen kleinen Test, um zu sehen, ob der Sensor erkannt und zugriffsbereit ist. Dazu führen wir eine der angehängten Beispieldateien aus:

python2 /usr/share/doc/python-fingerprint/examples/example_index.py

Insgesamt können bis zu 1000 verschiedene Fingerabdrücke gespeichert werden. Dabei kann ein Finger auch mehrfach z.B. in unterschiedlichen Positionen gespeichert werden, damit sie schneller/eindeutiger erkannt werden. Folgendes sollte erscheinen, womit du durch die Wahl einer Seite (0-3) die Positionen anzeigen lassen kannst, unter denen ein Abdruck gespeichert ist.

Sofern die Fehlermeldung „Exception message: The fingerprint sensor port „/dev/ttyUSB0″ was not found!“ erscheint, so stimmt etwas mit der Verkabelung bzw. dem Sensor nicht. Überprüfe ihn erneut.

Speichern und auslesen

Anbei sind auch Beispieldateien zum Speichern eines neuen Abdrucks, Auslesen sowie löschen gespeicherter Fingerabdrücke. Fangen wir an und speichern zunächst einen Finger. Rufe folgendes auf:

python2 /usr/share/doc/python-fingerprint/examples/example_enroll.py

Leg nun deinen Finger auf die Glasfläche, warte auf die Anweisung im Terminal und entferne deinen Finger wieder, sobald es dort steht. Anschließend musst du deinen Finger noch ein zweites mal zur Verifikation auflegen und der Abdruck ist an der nächsten freien Stelle gespeichert.

Wir wollen nun auch sehen, ob unser Finger erkannt wird. Entferne deinen Finger also wieder vom Sensor und rufe folgendes Skript auf:

python2 /usr/share/doc/python-fingerprint/examples/example_search.py

Lege deinen Finger wieder darauf. Falls der Fingerabdruck am Raspberry Pi erkannt, so erscheint eine solche Nachricht:

Currently stored templates: 2
Waiting for finger...
Found template at position #1
The accuracy score is: 63
SHA-2 hash of template: 3aa1b01149abf0a7ad0d7803eaba65c22ba084009700c3c7f5f4ecc38f020851

Hierbei wird zusätzlich auch noch ein Genauigkeitswert angegeben (umso höher, umso besser).

In diesem Verzeichnis sind übrigens noch weitere Skripte, mit denen du gespeicherte Abdrücke löschen kannst oder diese gar als Bild laden kannst. Mit ls /usr/share/docs/python-fingerprint/ kannst du dir alle anzeigen lassen.

Ich habe daraus mal ein kleines Video als Vorgeschmack erstellt:

 

 

Besteht weiteres Interesse an Projekten mit Fingerprint Lesern (Tresore, etc.)?

24 Kommentare

  1. Super Video und tolle Anleitung, sehr gut beschrieben! Ich habe da nur eine allgemeine Frage, ist es möglich an den Kabeln des Sensors zu manipulieren, um trotzdem Zugang zu bekommen oder wird das erst an der Elektronik hinter dem Flachbandkabel geregelt? Ich frage nur, denn wie schon weiter oben erwähnt, sieht man ja auch in Hollywood, dass man die Elektronik ausbaut irgendwas kurzschließt und dann die Tür trotzdem öffnet …

    Antworten
    • Die Jungs in Hollywood schließen dann nicht die Elektronik vom PI kurz, sondern
      die Verdrahtung des Türöffners… 🙂

      Antworten
    • Theoretisch ja. Allerdings müsstest du dafür erst einmal wissen, welche Daten akzeptiert werden (die Auswertung findet immer noch per Software statt) und außerdem mit entsprechender Taktung senden (sprich Zubehör nötig). Da ist es einfacher einen Plastikfinger mit Abdruck zu basteln 😀

      Antworten
  2. Hallo,
    kannst du bitte den Link zu der C++ Bibliothek hinzufügen wäre sehr nett.
    Danke im Voraus!!!
    Gruß David

    Antworten
  3. tolles tutorial, ich würde gerne einmal so etwas in kombination mit einem elektronischem schloss, rfid chips, etc sehen. Ich spiele mit dem gedanken eine meiner türen so zusichern

    Antworten
  4. Hallo,
    habe heute meinen Sensor bekommen. Der Sensor wird aber nicht erkannt. Habe es auch am Arduino UNO versucht. Das Gleiche. Bei 4 Leitungen kann man ja nicht viel verkehrt machen.
    Sollte der Sensor beim Anlegen der Spannung bereits leuchten? Ich glaube der ist defekt.

    Antworten
    • Welche Spannung hast du genommen? Die ist wichtig, da der Sensor bei zu hoher Spannung kaputt gehen kann bzw. bei zu niedriger nicht funktioniert.

      Antworten
      • Laut Datenblatt verträgt er 3,8V-7V. Da hab ich ihn an 5V angeschlossen.

  5. Gibt es eine Möglichkeit beim Einlesen des Fingers die Speicherposition vorzugeben? Beim Löschen lässt sich ja logischer Weise auch angeben welche Position gelöscht werden soll. Mit der Funktion hätte ich die Möglichkeit, bei erkannter ID z.B. 100.

    Antworten
    • Hmm da fehlt doch was…
      …bei erkannter ID größer 100 eine andere Aktion ausführen zu lassen als bei kleiner 100.
      Jetzt ist es komplett

      Antworten
  6. Wo kann ich den Pfad der gespeicherten Abdrücke angeben?
    Würde diese gerne auf einem Server speichern.

    Hab leider nicht viel Ahnung von dem ganzen.

    Antworten
  7. Hallo liebe Leute!

    Habe mir dein tolles Projekt als Beispiel für die Schule genommen und sitz gerade davor.
    Habe auch noch eine Codematrix dazugehängt um eine Türsteuerung mit Codepanel und Fingerprint zu realisieren.
    Nun mein Problem:
    Ich habe eine Schleife eingebaut, dass der Fingerprint ständig nach einem Finger sucht sprich immer leuchtet und immer bereit ist, beim richtigen Finger die Tür mit dem Relais zu öffnen.

    Wenn man mehrere Male einen falschen Finger eingibt und er „No Match found!“ ausgibt, dann funktioniert er auch nach 10 mal einwandfrei.
    Jedoch wenn man einen richtigen Finger eingibt und dieser dann das Relais öffnet dann wartet er 10 Sekunden. Wenn man dies drei bis viermal wiederholt dann bekomme ich die Fehlermeldung: „The received package does not begin with a valid header“. Diese Meldung kommt im Sekundentakt und hört nicht mehr auf.
    Nachdem diese Fehlermeldung in einer Endlosschleife ausgeben wird, muss ich den ganzen RasbPi neustarten, damit der Fingerprint wieder geht.
    Auch mit STRG + C habe ich ein GPIO.cleanup() erstellt, jedoch kommt danach eine Fehlermeldung „Fingerprint could not be found!“

    Ich hoffe, jemand kann mir helfen!

    Vielen lieben Dank und großes Danke an dieses tolle Projekt!

    LG Andi

    Antworten
  8. Ich habe folgendes Problem: ich habe den Sensor direkt (über GPIO) an einen Pi Zero W angeschlossen. Das Gerät wird zwar erkannt, in der Zeile „if ( f.verifyPassword() == False ):“ bleibt das Programm allerdings hängen und tut gar nichts mehr.
    Hat irgendjemand eine Idee was ich tun kann?

    Antworten
  9. Moin Moin,

    ich habe das ganze mal nachgebaut und habe noch meine Schwierigkeiten das ganze im LCD Display dazustellen.
    Ich habe es geschafft ein Relais zu schalten, wenn ich den korrekten Finger eingescannt habe.
    Ziel soll es sein ein Garagentor zu öffnen.
    Jedoch bin ich zu sehr neu in der Materie um das alles richtig zu programmieren.
    Hast du zu deinem Video da oben noch einen Code, den man sich mal anschauen könnte um das ganze komplett umzusetzen, so wie es im Video dargestellt ist.
    Zudem sind in der Video ja noch vom Fingerscanner Wires zum Display ?!
    Welches Zweck erfüllen die?

    LG
    Sebastian

    Antworten
  10. Wenn ich versuche die beiden scripte miteinander zu verschmelzen. Meckert das programm immer das dies nicht möglich ist an dieser stelle :

    Import lcddriver

    Wenn ich es in Python Editor alles aufführe geht es. Aber in einer py Datei findet er den lcddriver nicht mehr .
    Vielleicht hat ja noch jemand das Problem .

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!