Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry PI

Menu
  • Projekte
    • LED’s
    • Servo & Schrittmotoren
    • Sound
    • Displays (LCD, OLED, LED)
    • Kommunikation
    • Sicherheit
    • Smarthome
    • Weekend Project
  • Mikrocontroller
    • Arduino
      • Tutorials
      • ProMini
        • Anschließen & Programmieren
      • Nano
        • Arduino Nano – Übersicht
      • UNO
        • Übersicht
        • Funduino UNO
        • Maker UNO – Überblick und Test
        • Arduino UNO R4 WiFi / Minima
      • MEGA 2560
        • Funduino Mega 2560 R3
        • Übersicht
      • Leonardo
        • Übersicht
    • ESP32
      • ESP32-CAM
        • Einrichten der ESP32-CAM und erster betrieb
        • ESP32 CAM als Access Point einrichten
        • DIY ESP32 CAM FTDI Adapter
        • ESP32 CAM – Vergleich der verfügbaren Kameralinsen
        • Python – ESP32 CAM Bild speichern
        • ESP32-CAM – Bewegung ermitteln mit Python3
        • ESP32-CAM WROVER E
        • ESP32-CAM Stream per Python3 aufzeichnen
      • Infrarot-Fernbedienung mit dem ESP32 und MicroPython auslesen: Ein Anfängerleitfaden
      • Der ESP32 Plus von Keyestudio: Ein leistungsstarker Mikrocontroller im Arduino-UNO-Format
      • Mikrocontroller ESP32 H2 im Test
      • Seeed Studio ESP32C3 & Bluetooth
    • ESP8266
      • NodeMCU – “Einer für (fast) Alles!”
      • WEMOS
        • WEMOS D1 – Arduino UNO kompatibles Board mit ESP8266 Chip
        • WEMOS D1 Mini – Übersicht
        • Wemos D1 mini Shields
    • Raspberry Pi Pico
      • Raspberry Pi Pico RESET-Taster: So fügst du ihn hinzu
      • Ein erster Blick auf den Melopero Cookie RP2040: Raspberry Pi Pico meets micro:bit
      • Raspberry Pi Pico Pinout: Eine ausführliche Übersicht
      • Vergleich Raspberry Pi Pico & RP2040:bit
      • Raspberry Pi Pico: Programmierung und Entwicklung mit der Arduino IDE auf Linux
  • Newsletter
  • Über mich
  • DeutschDeutsch
  • EnglishEnglish
Menu

Arduino Projekt: Alarmanlage mit RFID Steuerung

Posted on 18. Juni 201625. Mai 2023 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

BezeichnungAnzahlEinzelpreis*Bezugsquelle
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 €conrad.de
LED 5 mm, grün10,2 €conrad.de
Kohleschichtwiderstand, 220 Ohm20,1 €conrad.de

* Die Einzelpreise wurde kaufmännisch aufgerundet.

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


Unterstütze meinen Blog!


Liebe Leserinnen und Leser,

Unterstützt meinen Blog auf Tipeee und helft dabei, hochwertige Inhalte zu sichern! https://de.tipeee.com/draeger-itblog/.

Jeder Beitrag zählt. Vielen Dank für eure Unterstützung!

Stefan Draeger


Kategorien

Tools

  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator
  • Widerstandsrechner
  • Rechner für Strom & Widerstände
  • ASCII Tabelle

Meta

  • Videothek
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Kontakt
  • Cookie-Richtlinie (EU)

Links

Blogverzeichnis Bloggerei.de Blogverzeichnis TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com
©2023 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb