Arduino Projekt: PIR & RFID Alarmanlage

In diesem Projekt möchte ich die bereits erzeugte und vorgestellte Arduino Projekt: Alarmanlage mit RFID Steuerung um einen Pyroelektrischer Infrarot Motion Sensor (PIR) erweitern.

Alarmanlage mit PIR ind RFID Modul
Alarmanlage mit PIR ind RFID Modul

Warum das Projekt PIR & RFID Alarmanlage?

Das Projekt entstand aus einem Kommentar zum Beitrag Arduino Projekt: Alarmanlage mit RFID Steuerung der Leser hatte mich hier gefragt wie denn ein PIR Sensor in die Schaltung integriert werden kann. Dieses habe ich zum Anlass genommen das Projekt neu aufzubauen und zwei PIR Sensoren zu integrieren.

Des Weiteren verwende ich nun auch eine RGB SMD Led statt zwei einzelne LEDs somit kann ich noch weitere Zustände farblich darstellen.

Benötigte Bauteile / Bauelemente

Bezeichnung Preis Link
Arduino Leonardo (oder vergleichbar) 4,50 € ebay.de
RFID Modul – RC522 3,50 € ebay.de
PIR Modul – HC-SR505 1,09 € ebay.de
PIR Modul – HC–SR501 2,85 € ebay.de
NeoPixel Modul 4,44 € ebay.de
Piezo Buzzer 1,40€ ebay.de
400 PIN Breadboard 3,85 € ebay.de
Breadboardkabel 1,90 € ebay.de
Benötigte Bauelemente / Bauteile für die Alarmanlage mit zwei PIR Sensoren
Benötigte Bauelemente / Bauteile für die Alarmanlage mit zwei PIR Sensoren

Aufbau

Der Aufbau ist auf einem Breadboard, lötfrei und schnell erledigt. Die verbauten Module benötigen 10 digitale Pins somit reicht ein Arduino Leonardo völlig aus.

Sicherlich könnte man auch hier einen Arduino UNO oder sogar einen Arduino Nano verwenden, jedoch habe ich sehr gute Erfahrungen mit dem Leonardo gemacht.

Anschluss

Modul Pin Arduino Leonardo
RFID Modul – RC522
SDA D10
SCK D19
MOSI D17
MISO D18
IRQ -bleibt frei-
GND GND
RST Reset
3.3V 3.3V
PIR Modul – HC-SR505
+ 5V
OUT D5
GND
PIR Modul – HC–SR501
VCC 5V
OUT D6
GND GND
NeoPixel Modul
GND GND
RED D4
GREEN D2
BLUR D7
Piezo Buzzer
SIG D3
VCC 5V
GND GND

Schaltplan

Aufbau der Schaltung auf dem Steckbrett
Aufbau der Schaltung auf dem Steckbrett

Quellcode

Für das kompilieren und den Betrieb des Quellcodes wird die Bibliothek für das RFID Modul benötigt, diese kannst du von der Wiki Seite Electrodragon.com herunterladen.

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

//RGB LED
#define BLUE_LED 7  /* PIN für die blaue LED */
#define RED_LED 4   /* PIN für die rote LED */
#define GREEN_LED 2 /* PIN für die grüne LED */
 
//Piezo Buzzer
#define BUZZER 3 /* PIN für den Buzzer */

//RFID Modul - RC522
#define SS_PIN 10 /* PIN SDA für das RFID Modul */
#define RST_PIN 9 /* PIN RST für das RFID Modul */
RFID rfid(SS_PIN, RST_PIN);
String ids[2] = {"453B56D16", "8C3B3924AA1"}; //Zugelassene ID's

//PIR Modul HC-SR505
#define PIR505_PIN 5 /* PIN OUT für das PIR Modul HC-SR505 */

//PIR Modul HC-SR501
#define PIR501_PIN 6 /* PIN OUT für das PIR Modul HC-SR501 */

boolean isActive = false;

void setup() {
  Serial.begin(9600);

  pinMode(PIR501_PIN, INPUT);
  pinMode(PIR505_PIN, INPUT);

  pinMode(BLUE_LED, OUTPUT);   /* Setzt den PIN für die blaue LED als Ausgang. */
  pinMode(RED_LED, OUTPUT);    /* Setzt den PIN für die rote LED als Ausgang. */
  pinMode(GREEN_LED, OUTPUT);  /* Setzt den PIN für die grüne LED als Ausgang. */

  pinMode(BUZZER, OUTPUT) ; /* Setzt den PIN für den Piezo Buzzer als Ausgang. */

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

void loop() {

  boolean foundId = false;
  if (rfid.isCard() && rfid.readCardSerial()) {
    Serial.println("drin");
    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;
    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;
        break;
      }
    }
    Serial.println(foundId);
}

if(isActive){
  blinkActiveLED();
  int pirHC505 = digitalRead(PIR505_PIN);
  int pirHC501 = digitalRead(PIR501_PIN);

  if(pirHC505 == HIGH || pirHC501 == HIGH){
     tone(BUZZER, 500, 50);
     noTone(BUZZER);
  }
}

if(foundId){
    lightUpLED(0, 255, 0);
} else {
    lightUpLED(255, 0, 0);
}
delay(1500);

}

//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);
}

void blinkActiveLED(){
  lightUpLED(0, 0, 255);
  delay(350);
  lightUpLED(0, 0, 0);
  delay(350);
  lightUpLED(0, 0, 255);
  delay(350);
  lightUpLED(0, 0, 0);
}

void lightUpLED(int red, int green, int blue){
  analogWrite(RED_LED, red);
  analogWrite(GREEN_LED, green);
  analogWrite(BLUE_LED, blue );
  
}

Schreibe einen Kommentar

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