carlosvolt
Published © LGPL

Laser alarm with RFID module

In this project, we build a security alarm using a laser detection system, a laser receiver sensor, a buzzer and an RFID-RC522 module.

IntermediateProtip113
Laser alarm with RFID module

Things used in this project

Hardware components

Arduino Nano
×1

Story

Read more

Code

Source code

C/C++
Source code
#include <SPI.h>
#include <MFRC522.h>
//SDA (SS) a Pin 10 del Arduino
//SCK a Pin 13 del Arduino
//MOSI a Pin 11 del Arduino
//MISO a Pin 12 del Arduino
//IRQ a N/C (no conectado)
//GND a GND del Arduino
//RST a Pin 9 del Arduino
//3.3V a 3.3V del Arduino
const int pinReceptorLaser = 8; // Pin digital donde está conectado el receptor láser
const int pinBuzzer = A4; // Pin digital donde está conectado el buzzer
const int pinRST = 9; // Pin RST del módulo RFID-RC522
const int pinSS = 10; // Pin SDA del módulo RFID-RC522
int estadoReceptorLaser = 0; // Variable para almacenar el estado del receptor láser
bool alarmaArmada = false; // Variable para controlar si la alarma está armada
bool alarmaActiva = false; // Variable para controlar el estado de la alarma
const int pinLED = 2; // Pin digital donde está conectado el LED
MFRC522 lectorRFID(pinSS, pinRST); // Crear instancia del objeto MFRC522
// UID de la tarjeta autorizada
byte UIDAutorizado[] = {0xC5, 0x81, 0xB6, 0x35};
void setup() {
  pinMode(pinReceptorLaser, INPUT);
  pinMode(pinLED, OUTPUT); // Configurar el pin del emisor Laser como salida
  pinMode(pinBuzzer, OUTPUT);
  Serial.begin(9600); // Iniciar comunicación serial para debug
  SPI.begin(); // Iniciar bus SPI
  lectorRFID.PCD_Init(); // Iniciar módulo MFRC522
  Serial.println("Coloca la tarjeta RFID...");
}
void loop() {
  estadoReceptorLaser = digitalRead(pinReceptorLaser); // Leer el estado del receptor láser
  Serial.print("Estado del receptor láser: ");
  Serial.println(estadoReceptorLaser);
  // Verificar si hay una tarjeta RFID
  if (lectorRFID.PICC_IsNewCardPresent() && lectorRFID.PICC_ReadCardSerial()) {
    digitalWrite(pinLED, HIGH); // Encender el LED cuando la alarma esté armada
    if (esAutorizada(lectorRFID.uid.uidByte, lectorRFID.uid.size)) {
      alarmaArmada = !alarmaArmada; // Alternar el estado de armado de la alarma
      alarmaActiva = false; // Resetear el estado de la alarma
      if (alarmaArmada) {
        Serial.println("Tarjeta RFID autorizada detectada, alarma armada.");
      } else {
        Serial.println("Tarjeta RFID autorizada detectada, alarma desarmada.");
        digitalWrite(pinLED, LOW); // Apagar el LED cuando la alarma esté desarmada
      }
    } else {
      Serial.println("Tarjeta RFID no autorizada detectada.");
    }
    lectorRFID.PICC_HaltA(); // Detener lectura de la tarjeta
  }
  // Activar la alarma si está armada y el receptor láser está en LOW
  if (alarmaArmada) {
    alarmaActiva = true;
  }
  // Controlar el buzzer basado en el estado de la alarma
  if (alarmaActiva) {
    estadoReceptorLaser = digitalRead(pinReceptorLaser); // Leer el estado del receptor láser
    if (estadoReceptorLaser == 0) {
      digitalWrite(pinBuzzer, HIGH); // Encender el buzzer si la alarma está activa
    }
  } else {
    digitalWrite(pinBuzzer, LOW); // Apagar el buzzer si la alarma no está activa
  }  
  delay(100); // Pequeña pausa para evitar lecturas erráticas
}
bool esAutorizada(byte *uid, byte tamanoUID) {
  // Verificar si el UID leído coincide con el UID autorizado
  if (tamanoUID != sizeof(UIDAutorizado)) {
    return false;
  }
  for (byte i = 0; i < tamanoUID; i++) {
    if (uid[i] != UIDAutorizado[i]) {
      return false;
    }
  }
  return true;
}

Credits

carlosvolt
34 projects • 3 followers
Contact

Comments

Please log in or sign up to comment.