Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Arduino Projekt: Alarmanlage mit RFID Steuerung

Posted on 18. Juni 20165. März 2024 by Stefan Draeger

Im Tutorial Arduino Lektion 20 – Teil 1: RFID RC522 – Kartenleser habe ich erklärt, wie man das RFID Modul RC522 ansteuert bzw. auswertet. Nun möchte ich mit diesem Modul eine Mini Alarmanlage bauen.

  • Teileliste
  • Aufbau
    • Fliegende Schaltung mit dem Breadboard
    • Aufbau auf dem Breadboard
  •  Funktionsweise
    • aktivieren
    • deaktivieren
    • auslösen eines Alarmes
    • deaktivieren mit falschem RFID Chip
    • aktivieren mit falschem RFID Chip
  • Quellcode
  • Download des Quellcodes
  • Ausblick auf die nächste Ausbaustufe

Teileliste

BezeichnungAnzahlEinzelpreisBezugsquelle
Arduino NANO13,3 €ebay*
Terminal Board13,2 €ebay*
RFID Modul RC522 15,1 €ebay*
1fach Relais Modul13 €ebay*
Buzzer11,35 €ebay*
Breadboard 13,8 €ebay*
Breadboard Kabel 10 cm122,65 €ebay*
Breadboard Kabel 20 cm82,8 €ebay*
LED 5 mm, rot10,1 €ebay*
LED 5 mm, grün10,2 €ebay*
Kohleschichtwiderstand, 220 Ohm20,1 €ebay*

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Aufbau

In dem Aufbau ist zusätzlich ein kapazitiver Sensor enthalten, mit diesem Sensor löse ich zu Testzwecke den Alarm aus.

Fliegende Schaltung mit dem Breadboard

Aufbau der Alarmanlage mit dem RFID Modul.
Aufbau der Alarmanlage.

Aufbau auf dem Breadboard

Aufbau "Alarmanlage mit RFID Modul am Arduino Nano"
Aufbau „Alarmanlage mit RFID Modul am Arduino Nano“
BauteilArduino Nano V3
RFID-Kartenleser
SDAD10
SCKD13
MOSID11
MISOD12
IRQ–
GNDGND
RSTD9
3v33.3V
Relais
SD5
+5V
–GND
LED, grün
KathodeGND
AnodeD2
LED, rot
KathodeGND
AnodeD3
Piezo Buzzer
rot (+)D4
schwarz (-)GND

Funktionsweise

Die Alarmanlage wird mit einem registrierten RFID Chip aktiviert und deaktiviert. Beim Deaktivieren der Alarmanlage wird auch ein bestehender Alarm deaktiviert

aktivieren

Alarmanlage aktivieren
Dieses Video auf YouTube ansehen.

deaktivieren

Alarmanlage deaktivieren
Dieses Video auf YouTube ansehen.

auslösen eines Alarmes

Alarmanlage Alarm auslösen
Dieses Video auf YouTube ansehen.

deaktivieren mit falschem RFID Chip

Alarmanlage deaktivieren mit falscher RFID Karte
Dieses Video auf YouTube ansehen.

aktivieren mit falschem RFID Chip

Alarmanlage aktivieren mit falscher RFID Karte
Dieses Video auf YouTube ansehen.

Quellcode

#include <SPI.h>
#include <RFID.h>

#define SS_PIN 10
#define RST_PIN 9

int ledStatusPin = 2; // Status LED Gruen an digitalen PIN 2
int ledAktivPin = 3; // Aktiv LED Rot an digitalen PIN 3
int buzzerPin = 4; // Buzzer an digitalen PIN 4
int relaisPin = 5; // Relais an digitalen PIN 5 (HIGH == deaktiviert & LOW == aktiviert)
int alarmPin = 6; // Schalter fuer Alarm an digitalen PIN 6

boolean isActive = false;
boolean isAlarm = false;

RFID rfid(SS_PIN, RST_PIN);

String ids[2] = {"453B56D16", "8C3B3924AA1"}; //Zugelassene ID's

void setup()
{
  pinMode(ledStatusPin, OUTPUT);
  pinMode(ledAktivPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(relaisPin, OUTPUT);

  pinMode(alarmPin, INPUT);

  digitalWrite(alarmPin, HIGH);

  Serial.begin(9600);
  SPI.begin();
  rfid.init();
}

void loop() {
  if (isActive) {
    //Wenn die Alarmanlage aktiviert ist dann soll die rote LED aufleuchten.
    digitalWrite(ledAktivPin, HIGH);
    //Wenn kein Alarm aktiviert ist, so soll der Status des Alarmpins ausgewertet werden.
    if (isAlarm == false) {
      isAlarm = digitalRead(alarmPin) == HIGH;
    }
  } else {
    //Wenn die Alarmanlage deaktiviert ist, dann soll die rote LED aus sein und das Relais soll abgefallen sein.
    digitalWrite(ledAktivPin, LOW);
    digitalWrite(relaisPin, HIGH);
  }

  //Wenn die Alarmanlage an ist und es besteht ein Alarm so soll das Relais angezogen werden.
  if ((isActive == true) && (isAlarm == true)) {
    digitalWrite(relaisPin, LOW);
  } else {
    digitalWrite(relaisPin, HIGH);
  }

  //Wird vor das RFID Modul ein Chip gehalten so wird diese ID ausgelesen.
  if (rfid.isCard() && rfid.readCardSerial()) {
    String serial = parseId(rfid);
    //Ausgabe der ID auf dem Seriellen Monitor
    Serial.println("RFID Nummer: " + serial);

    //Schleife zum pruefen der erkannten RFID.
    int counter = 0;
    boolean foundId = false;
    for (counter = 0; counter < sizeof(ids) - 1; counter++) {
      //Wenn die RFID bekannt ist so soll die Alarmanlage aktiviert bzw. deaktiviert werden.
      if (serial == ids[counter]) {
        isActive = !isActive;
        foundId = true;
        flashLED(ledStatusPin, 250);
        break;
      }
    }

    //Wurde die RFID nicht in den registrierten ID's gefunden,
    //so soll dieses durch das blinken der roten Aktiv LED und
    //dem Buzzer bestätgit werden.
    if (!foundId) {
      flashLED(ledAktivPin, 550);
    } else if (foundId && isAlarm) {
      Serial.println("!!! RFID Nummer wurde gefunden !!!");
      isAlarm = false;
      digitalWrite(relaisPin, HIGH);
    }
  }
  rfid.halt();
  delay(750); //Pause von 750ms
}

//Laesst eine LED am PIN aufblinken,
//der Intervall wird im Parameter milliseconds uebergeben.
void flashLED(int pin, int milliseconds) {
  int i = 0;
  for (i = 0; i < 2; i++) {
    digitalWrite(pin, HIGH);
    tone(buzzerPin, 1050, 350);
    delay(milliseconds);
    digitalWrite(pin, LOW);
    tone(buzzerPin, 1050, 350);
    delay(milliseconds);
  }
}

//Liesst eine ID aus dem Modul
//und gibt diese als String zurueck.
String parseId(RFID rfid) {
  String result = "";
  int position = 0;
  for (position = 0; position <= 4; position++) {
    String pos = getNumPosAsHEX(rfid, position);
    result = result + pos;
  }
  result.toUpperCase();
  return result;
}

//Liefert aus dem Wert des RFID Moduls und einer bestimmten
//Position einen HEXADEZIMAL Codierten Wert zurueck.
String getNumPosAsHEX(RFID rfid, int position) {
  return String(rfid.serNum[position], HEX);
}

Download des Quellcodes

Alarmanlage mit RFID SteuerungHerunterladen

Ausblick auf die nächste Ausbaustufe

Als nächste Stufe wird diese fliegende Schaltung nun in eine Dose verbaut.

dose
Abzweigdose, als Gehäuse für die Alarmanlage

19 thoughts on “Arduino Projekt: Alarmanlage mit RFID Steuerung”

  1. Alex sagt:
    26. Dezember 2016 um 23:12 Uhr

    Moin,
    ein echt geiles Arduino Projekt! Genau das gleiche wollte ich auch machen, aber ich habe merkt das ich nur zwei Transponder bzw. RFID Nummern einspeichern kann! Meine Frage ist jetzt wie Speicher ich mehr als zwei RFID Nummern ?

    Antworten
    1. Stefan Draeger sagt:
      27. Dezember 2016 um 08:00 Uhr

      Hallo,

      danke. Es kommt darauf an wie du diese erweitern möchtest.
      1. Programatisch
      So musst du nur die Zeile 18 um die neuen IDs erweitern (eine Komma separierte Liste)

      2. Über ein Modul
      Wenn du jedoch das ganze dynamisch machen möchtest so könntest du einen kleinen Taster anbringen und wenn du diesen drückst und die Alarmanlage aus ist und eine unbekannte RFID Karte vorgehalten wird, so wird diese Registriert. Dazu musst du dir ein neues Array aufbauen mit den schon bekannten und der neuen ID und das alte dann überschreiben.

      Ich kann ja gerne mal ein Beispiel posten, wenn bedarf besteht.

      Gruß,

      Stefan Draeger

      Antworten
      1. Alex sagt:
        27. Dezember 2016 um 18:21 Uhr

        Ich wollte es mit dem Programmatisch erweitern! Doch sobald ich eine weitere RFID-Nummer hinzufüge, bekomme ich eine Fehlermeldung! Ich bin leider noch ein Anfänger und kann mit dieser Fehlermeldung nichts anfangen!
        Fehlermeldung:
        Alarmanlage_1:18: error: too many initializers for ‚String [2]‘
        String ids[2] = {„F66AE7D54D“, „B5A3365774“, „444B56D16“}; //Zugelassene ID’s
        exit status 1
        too many initializers for ‚String [2]‘

        Antworten
        1. Stefan Draeger sagt:
          27. Dezember 2016 um 18:54 Uhr

          Hi,

          ja das Array ist nur mit 2 Stellen zu befüllen wenn noch eine dritte hinzukommen soll so muss „String [2]“ in „String [3]“ geändert werden. Man reserviert somit immer Speicherplatz für mögliche Werte.

          Antworten
      2. Hagi sagt:
        21. September 2017 um 10:15 Uhr

        Hi
        Erstmal herzlichen Dank für das kleine, aber geniale Projekt!
        Es würde mich brennend interessieren, wie man eine neue neue Karte in diesem Projekt mit Hilfe eines Tasters registrieren kaönnte. Ebenso wäre das Sperren von Karten interessant. Über ein Beispiel würde ich mich sehr freuen. Danke!
        Gruss Hagi

        Antworten
        1. Stefan Draeger sagt:
          23. September 2017 um 20:32 Uhr

          Hi, das sperren von Karten würde relativ einfach sein indem man die „KartenId“ aus dem Array entfernt. Bzw. sollte man hier vieleicht die Daten auf einer SD Karte im CSV Format speichern und diese dann beim Starten des Arduinos einlesen somit kannst du dann bequem am Rechner Ids hinzufügen und entfernen.

          Gruß,

          Stefan

          Antworten
  2. Steven marbach sagt:
    27. November 2017 um 22:35 Uhr

    Servus.

    Super tut. Bis jetzt habe ich mir damit auch alle meine Wünsche erfüllt nun hänge ich aber dabei :

    Ich möchte auf einem Lcd mit i2c einen bestimmten Text beim aktivieren und deaktiviert der Nutzer aus geben bekomme es aber einfach nicht hin die ID, S mit dem Text zu verbinden….

    Antworten
  3. Kai sagt:
    22. Dezember 2017 um 19:56 Uhr

    Hallo,
    ein sehr geiles Projekt. Nachdem Abus mich echt enttäuscht hat, kam ich mit etwas Recherche auf diese Seite. Arduino ist Neuland für mich. Habe mir diesen Quellcode geladen und stehe jetzt vor dem Problem, dass ich die RFID Bibliothek nicht habe. Eine die ich mir für das RFID Modul besorgt habe passt nicht gänzlich. In dieser wird auf eine include „application.h“ verwiesen, und die fehlt mir auch. Kannst die RFID.h zur Verfügung stellen? Gibt es noch weitere Dinge daneben die ich brauche?

    LG,

    Kai

    Antworten
    1. Stefan Draeger sagt:
      22. Dezember 2017 um 22:11 Uhr

      Hallo Kai,

      hast du die Bibliothek von http://www.electrodragon.com/w/File:Rfid-master.zip versucht?
      Diese habe ich für das Tutorial verwendet.

      Gruß,

      Stefan

      Antworten
  4. Kai sagt:
    6. Februar 2018 um 12:20 Uhr

    Hallo Stefan,
    vielen Dank für die Info. Hatte schon länger nicht mehr geguckt, sind gerade mit dem Kauf des Hauses und der Renovierung beschäftigt. Prüfe es die Tage mal.

    Viele Grüße,

    Kai

    Antworten
  5. Doudou sagt:
    2. Juni 2018 um 19:10 Uhr

    Bonjour , ton projet est très intéressant , mais comment puis – je ajouter un capteur PIR pour l’alarme ,je suis débutant;Bien cordialement

    Antworten
    1. Stefan Draeger sagt:
      2. Juni 2018 um 21:10 Uhr

      Hello,
      thanks for your comment.
      You can add a simple PIR sensor like this https://draeger-it.blog/arduino-lektion-39-pir-bewegungsmelder-hc-sr505/

      Best regards,

      Stefan Draeger

      Antworten
  6. Thomas sagt:
    30. September 2018 um 13:42 Uhr

    Ganz tolles Projekt! Wie kann man die Alarmzeit auf 1min begrenzen, bei trotzdem weiterer Scharfschaltung nach Beendigung des Alarm.

    Grüße, Thomas

    Antworten
    1. Stefan Draeger sagt:
      1. Oktober 2018 um 08:10 Uhr

      Hi Thomas,

      der einfachste Weg wäre wenn du in der Schleife
      void flashLED(int pin, int milliseconds) { int i = 0; for (i = 0; i < 2; i++) {.... den Wert "2" durch "110" ersetzt, nun sollte der Alarm ca. 1 min dauern. Jedoch kann in dieser Zeit kein weiterer Lesevorgang gestartet werden was wirklich unschön wäre. Daher sollte noch zusätzlich eine Brücke mit hinein das während der Schleife noch weitere RFIDs gelesen und ausgewertet werden können und bei Erfolg der Alarm unterbrochen wird. Gruß, Stefan Draeger

      Antworten
  7. Dirk Detert sagt:
    4. November 2020 um 08:38 Uhr

    Hallo Stefan!

    Vorweg erstmal, eine tolle Geschichte die Du hier machst.
    Dennoch habe ich ein kleines Problem mit den RFID Karten, ich habe deinen Sketch übernommen und alles soweit verkabelt.
    Die Schaltung lässt sich aber mit jeder ID aktivieren und deaktivieren, auch wenn ich acht mal die null in den String schreibe.
    Kannst Du mir an dieser Stelle helfen?

    Gruß
    Dirk

    Antworten
    1. Markus Plante sagt:
      24. Mai 2023 um 12:36 Uhr

      Hallo Dirk, ich habe heute die Alramanlage nachgebaut und erhalte den selben Fehler wie du ihn beschrieben hats. Es werden alle Transponder akzeptiert. Konntest Du eine Lösung für das Problem finden? Danke und Gruß Markus

      Antworten
      1. Stefan Draeger sagt:
        25. Mai 2023 um 08:59 Uhr

        Hi,

        ich habe das Projekt einmal nachgebaut und kann diesen Fehler nicht finden.
        Magst du mir bitte einmal deinen Sourcecode senden?
        Des Weiteren kann es helfen ein paar ausgaben der RFID-IDs einzubauen, d.h. einmal, wenn die erfolgt, Variable serial,
        und einmal innerhalb der If-Bedingung, wenn serial mit id[counter] geprüft wird.


        Serial.print("serial:");
        Serial.println(serial);
        if (serial == ids[counter]) {
        Serial.print("inside:");
        Serial.println(ids[counter]);

        Gruß

        Stefan

        Antworten
  8. Thomas Zempel sagt:
    23. November 2020 um 21:38 Uhr

    Hallo Stefan,
    deine Alarmanlage mit RFID Steuerung ist genau dass was ich suche.
    Leider stelle ich mich etwas praselig an. Ich kann den Schalt/Verdrahtungsplan nicht finden.
    kannst du mir helfen?
    Gruß, Thomas

    Antworten
  9. Joachim sagt:
    13. Januar 2023 um 11:27 Uhr

    Der Artikel hat mir echt bei meinem Alarmprojekt geholfen.
    Vielen Dank.
    Jetzt stehe ich auch vor dem oben schon erwähntem Problem mit der Alarmzeitbegrenzung.
    Der Tip mit 2 auf 120 scheint bei mir gar nicht zu funktionieren.
    Habe es mit millis probiert. Alarm geht auch kurz aus dann wieder an.
    Dann „isActive auf false“, machmal scheint es zu gehen, dann wird der chip nicht mehr erkannt.. ich habe jetzt einen Knoten im Kopf und komme nicht mehr weiter.
    Hat da nicht jemand einen neuen Ansatz für mich?

    //Wenn die Alarmanlage an ist und es besteht ein Alarm so soll das Relais angezogen werden.
    if ((isActive == true) && (isAlarm == true)) {
    digitalWrite(relaisPin, HIGH);

    unsigned long currentMillis = millis();
    if (currentMillis – previousMillis >= interval)
    {
    previousMillis = currentMillis;
    digitalWrite(relaisPin,LOW);
    (digitalWrite(ledAktivPin, LOW);
    isActive = false;
    }

    Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}