Sistema de Alarma de Seguridad Doméstica

Autores : Miguel Lameiro Martinez, Miguel Quero Prieto y Victor Candel Casado.

Introducción

En este proyecto, desarrollado para la asignatura de Sistemas Empotrados, diseñamos un sistema básico de seguridad doméstica utilizando Arduino. El objetivo era crear una solución funcional y económica capaz de detectar intrusos de manera efectiva, tanto con una alarma sonora como por un aviso por bluetooth .

Objetivos del Proyecto

  • Detección de intrusos: mediante un sensor de ultrasonidos de proximidad.
  • Alarma sonora: activación de un buzzer cuando se detecta un intruso.
  • Control remoto: activación y desactivación del sistema a través de un mando por infrarrojos (IR) o mediante Bluetooth desde el móvil.
  • Visualización del estado: monitorización en tiempo real del estado del sistema (activado, desactivado, intruso detectado) mediante una pantalla LCD.
  • Simulación de alarma de gas: un ventilador simula la expulsión de humo al detectar un intruso.

Retos y Problemas

Nos encontramos con varios desafíos durante el desarrollo:

  • Alimentación insuficiente del ventilador: El motor provocaba reinicios del sistema cuando se alimentaba desde el Arduino.
  • Conflicto entre Bluetooth e IR: Ambos dispositivos compartían los pines 0 y 1, causando errores en la recepción de comandos.
  • Falta de pines digitales: La pantalla LCD requería más pines de los disponibles inicialmente.
  • Daño del sensor IR: Por un error al insertar los pines, el sensor de infrarrojos se dañó.

Soluciones Implementadas

  • Problema del ventilador: Añadimos un módulo Power MBv2 para conectar una pila de 9V como fuente externa.
  • Conflicto Bluetooth/IR: Optimizamos el uso de pines y modularizamos mejor el código.
  • Escasez de pines: Incorporamos una mini protoboard para mejorar la conexión y funcionalidad.
  • Sensor IR dañado: El grupo 16 (Álvaro, Tarek y Jorge) nos prestó su sensor para continuar con las pruebas.

Funcionalidades Clave

  • Comprobación del sensor de ultrasonidos.
  • Cambio de estado de la alarma.
  • Verificación de los módulos Bluetooth e IR.

Costes del Proyecto

ComponenteCantidadPrecio
Módulo Bluetooth110 €
Cajas de cartón22 €
Bolas de poliestireno11,20 €
Kit Arduino125,99 €
Total41,19 €

Video explicativo del hardware utilizado y su disposición

Fotos del Prototipo

Incluimos imágenes del montaje en diferentes estados previo a empotrarlo: desde el circuito sin corriente, con la alarma desactivada y activada, y por último, alarma disparada.

Fotos del proyecto final

Incluimos imágenes del proyecto empotrado

Vídeo de Funcionamiento

Para visualizar mejor el funcionamiento del sistema, hemos grabado un vídeo demostrativo donde se puede ver cómo el sistema detecta a un intruso y acciona la alarma sonora y visual.

Código Fuente y Explicación

El siguiente script en Arduino es el corazón de nuestro sistema de alarma. Gestiona la interacción entre todos los módulos y permite controlar la alarma tanto por Bluetooth como por infrarrojos, además de monitorizar el estado en la pantalla LCD y accionar la alarma cuando se detecta un intruso.

#include <IRremote.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

// Pin Ventilador
#define MOTOR_PIN 5

// Pines Sensor Infrarrojos
int irPin = 11;
int trigPin = 8;
int echoPin = 9;

// Pin LED
int ledPin = 6;

// Pin BUZZER
int buzzerPin = 7;

// Pines Módulo BLUETOOTH
int brxPin = 2;
int btxPin = 3;

// Iniciar Bluetooth
SoftwareSerial btSerial(brxPin, btxPin);

// Iniciar Pantalla LCD con los pines
LiquidCrystal lcd(A5, A4, A3, A2, A1, A0);

// Booleano para saber el Estado de la Alarma
bool sensorActivo = false;

// Configuración Inicial
void ConfigurarInicio() {
  Serial.begin(9600);
  btSerial.begin(9600); 
  IrReceiver.begin(irPin, ENABLE_LED_FEEDBACK);

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(MOTOR_PIN, OUTPUT);

  lcd.begin(16, 2);
  ImprimirMensajeLCD("Alarma", "Desactivada");
}

// Imprime en la pantalla LCD los parámetros introducidos
void ImprimirMensajeLCD(String s1, String s2) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(s1);
  lcd.setCursor(0, 1);
  lcd.print(s2);
}

// Cambia el estado de la Alarma dependiendo del estado del booleano
void CambiarEstadoAlarma() {
  sensorActivo = !sensorActivo;

  if (sensorActivo) {
    btSerial.println("ALARMA ACTIVADA");
    ImprimirMensajeLCD("Alarma", "Activada");
  } else {
    ApagarAlarma();
  }
}

// Apagar por completo el sistema de Alarma
void ApagarAlarma() {
  analogWrite(MOTOR_PIN, 0);
  btSerial.println("ALARMA DESACTIVADA");
  digitalWrite(ledPin, LOW);

  noTone(buzzerPin);
  digitalWrite(buzzerPin, LOW);
  ImprimirMensajeLCD("Alarma", "Desactivada");
}

// Calcular la Distancia del Sensor Ultrasonidos para detectar al intruso
long DistanciaSensor() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duracion = pulseIn(echoPin, HIGH);
  return duracion * 0.034 / 2;
}

// Inicia el Estado de Intruso Detectado, gestionando el ventilador, el lcd y el buzzer.
void DetectarIntruso() {
  tone(buzzerPin, 4000);
  btSerial.println("!!!INTRUSO DETECTADO!!!");
  ImprimirMensajeLCD("Intruso", "Detectado");
  analogWrite(MOTOR_PIN, 100);
  digitalWrite(ledPin, HIGH);
  delay(500);
  digitalWrite(ledPin, LOW);
  delay(500);
}

// Comprueba que se reciba el comando por Bluetooth para cambiar el Estado de la Alarma si es necesario
void ComprobarBluetooth() {
  if (btSerial.available()) {
    String comando = btSerial.readStringUntil('\n');
    comando.trim();
    Serial.println("Recibido: " + comando);

    if (comando == "alarma") {
      CambiarEstadoAlarma();
    }
  }
}

// Comprueba que el Sensor Infrarrojo detecte la señal del mando para cambiar el Estado de la Alarma
void ComprobarInfrarrojo() {
  if (IrReceiver.decode()) {
    uint32_t valor = IrReceiver.decodedIRData.command;
    if (valor == 69 || valor == 0) {
      CambiarEstadoAlarma();
    }
    IrReceiver.resume();
  }
}

// Comprueba si se ha activado la Alarma para poder detectar al intruso
void ComprobarSensor() {
  if (sensorActivo) {
    digitalWrite(ledPin, HIGH);
    long distancia = DistanciaSensor();
    Serial.println(distancia);

    if (distancia < 15) {
      DetectarIntruso();
    }
  }
}

void setup() {
  ConfigurarInicio();
}

void loop() {
  ComprobarBluetooth();
  ComprobarInfrarrojo();
  ComprobarSensor();
}

Conclusión

Este proyecto ha sido una gran oportunidad para poner en práctica nuestros conocimientos sobre sistemas empotrados, aprendiendo como funciona el ensamblado que hay detrás del código y probando de múltiples formas el mismo. Así como también hemos aprendido de los proyectos de los compañeros. Esperamos que nuestra experiencia sirva como referencia para futuros desarrollos similares.

¡Gracias por leernos!

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *