viernes, 24 de febrero de 2017

Sistema de alarma con Arduino que funciona con detector de ultrasonidos HC - SR04, buzzer pasivo y varios LEDs que simulan luces policiales

He hecho un sistema de alarma creado con Arduino, que como curiosidad no está nada mal, pero si quieren usarlo como sistema antirrobo, recuerden que algunos ladrones usan inhibidores de frecuencia para neutralizarlos.

Este sistema de alarma utiliza un Módulo de alcance ultrasónico HC - SR04 que tiene las siguientes características:
  • Dimensiones del circuito: 43 x 20 x 17 mm
  • Tensión de alimentación: 5 Vcc
  • Frecuencia de trabajo: 40 KHz
  • Rango máximo: 4.5 m
  • Rango mínimo: 1.7 cm
  • Duración mínima del pulso de disparo (nivel TTL): 10 μS.
  • Duración del pulso eco de salida (nivel TTL): 100-25000 μS.
  • Tiempo mínimo de espera entre una medida y el inicio de otra 20 mS.
Mi sistema de alarma utiliza un buzzer pasivo que emite una serie de frecuencias que tratan de imitar el sonido de sirena de la policía pero probablemente existan códigos para Arduino que emiten mejor el sonido de las sirenas de la policía que el mío, busquen, comparen y se encuentran un código mejor, súbanlo a la placa de su microcontrolador.


Se puede comprar un megáfono, bocina altavoz, sirena o similar y acoplar el buzzer pasivo para amplificar el sónido de la alarma y que se escuche a larga distancia. También se podría considerar la introducción de otros componentes como un interruptor de palanca para activar o desactivar el sistema de alarma cuando se desee o incluso programarlo para que se ejecute por la noche o en una determinada franja horaria.


Componentes

  • Placa de pruebas (protoboard)
  • Buzzer passivo
  • Módulo de alcance ultrasónico HC - SR04
  • 4 LEDs rojos
  • 4 LEDS azules
  • 8 resistencias de 220 Ohmios
  • Cables M-M y M-H
  •  Arduino Uno R3 o similar



Y recordar que el código se puede alargar todo lo que quieran y usar infinidad de tonos y LEDs.


Código para Arduino
// Definición e inicialización de las variables
#define trigPin 12 // Trig (Emisión del ultrasonido) del módulo de ultrasonidos HC-SR04 se asocia al pin 12
#define echoPin 13 // Echo ((Recepción del ultrasonido) del módulo de ultrasonidos HC-SR04 se asocia al pin 13
#define Buzzer  10 //Buzzer pasivo se asocia al pin 10
int time_ms = 60; //tiempo en milisegundos
int led1 = 2; // El LED 1 se asocia al pin 2
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;
void setup()
{
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(Buzzer, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
}
void loop() {
int duration, distance;
digitalWrite(trigPin, HIGH); //Envío de pulso ultrasónico
delayMicroseconds(1000); //Espera 1 segundo entre medición
digitalWrite(trigPin, LOW); //
duration = pulseIn(echoPin, HIGH);
// Esta fórmula mide el tiempo  transcurrido entre el envío del pulso ultrasónico y la recepción de vuelta de ese mismo pulso electrónico
distance = (duration/2) / 29.1;
// Esta fórmula convierte matematicamente el periodo de tiempo que recorre el sonido ultrasónico en centímetros.
if (distance >= 80 || distance <= 0){
// Si el módulo ultrasonidos detecta un objeto a una distancia inferior a 0 cm o superior a 80 cm
// El buzzer pasivo y todos los LEDs seguirán apagados
Serial.println("no object detected");
digitalWrite(Buzzer, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
}
  // Mientras el módulo ultrasonidos detecte un objeto a una distancia de 0 a 80 cm,
  // el buzzer pasivo emite un tono de una frecuencia de 400 Hz durante 480 ms
  // y los LEDs rojos se encienden y apagan durante periodos de 60 milisegundos
else {
Serial.println("object detected");
  tone(Buzzer, 400);
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, HIGH);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, HIGH);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, HIGH);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, HIGH);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  delay(time_ms);
  // Mientras el módulo ultrasonidos detecte un objeto a una distancia de 0 a 80 cm,
  // el buzzer pasivo cambia la emisión del tono a una frecuencia de 800 Hz durante 480 ms
  // y  ahora son los LEDs azules los que se encienden y apagan durante periodos de 60 milisegundos
  tone(Buzzer, 800);
  digitalWrite(led5, HIGH);
  digitalWrite(led6, HIGH);
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led7, LOW);
  digitalWrite(led8, LOW);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, HIGH);
  digitalWrite(led6, HIGH);
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led7, LOW);
  digitalWrite(led8, LOW);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, HIGH);
  digitalWrite(led6, HIGH);
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led7, LOW);
  digitalWrite(led8, LOW);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, HIGH);
  digitalWrite(led6, HIGH);
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led7, LOW);
  digitalWrite(led8, LOW);
  delay(time_ms);
   // Mientras el módulo ultrasonidos detecte un objeto a una distancia de 0 a 80 cm,
  // el buzzer pasivo emite un tono de una frecuencia de 400 Hz durante 480 ms
  // y los LEDs rojos se encienden y apagan durante periodos de 60 milisegundos
  tone(Buzzer, 400);
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, HIGH);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, HIGH);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, HIGH);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, HIGH);
  delay(time_ms);
  tone(Buzzer, 400);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  delay(time_ms);
   // Mientras el módulo ultrasonidos detecte un objeto a una distancia de 0 a 80 cm,
  // el buzzer pasivo emite un tono de una frecuencia de 400 Hz durante 480 ms
  // y los LEDs rojos se encienden y apagan durante periodos de 60 milisegundos
  tone(Buzzer, 800);
  digitalWrite(led5, HIGH);
  digitalWrite(led6, HIGH);
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led7, LOW);
  digitalWrite(led8, LOW);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, HIGH);
  digitalWrite(led6, HIGH);
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led7, LOW);
  digitalWrite(led8, LOW);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, HIGH);
  digitalWrite(led6, HIGH);
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led7, LOW);
  digitalWrite(led8, LOW);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, HIGH);
  digitalWrite(led6, HIGH);
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH);
  delay(time_ms);
  tone(Buzzer, 800);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led7, LOW);
  digitalWrite(led8, LOW);
  delay(time_ms);
  // Mientras el módulo ultrasonidos detecte un objeto a una distancia de 0 a 80 cm,
  // el buzzer pasivo ahora emite un tono de una frecuencia de 400 Hz durante 240 ms
  // Del LED 8 al LED 1, los LEDs se encienden y apagan uno por uno de forma secuencial durante periodos de 60 milisegundos
 tone(Buzzer, 400);
  digitalWrite(led8, HIGH);
  delay(time_ms);
  digitalWrite(led8, LOW);
  tone(Buzzer, 400);
  digitalWrite(led7, HIGH);
  delay(time_ms);
  digitalWrite(led7, LOW);
  tone(Buzzer, 400);
  digitalWrite(led6, HIGH);
  delay(time_ms);
  digitalWrite(led6, LOW);
  tone(Buzzer, 400);
  digitalWrite(led5, HIGH);
  delay(time_ms);
  digitalWrite(led5, LOW);
  // el buzzer pasivo ahora emite un tono de una frecuencia de 800 Hz durante 240 ms
  tone(Buzzer, 800);
  digitalWrite(led4, HIGH);
  delay(time_ms);
  digitalWrite(led4, LOW);
  tone(Buzzer, 800);
  digitalWrite(led3, HIGH);
  delay(time_ms);
  digitalWrite(led3, LOW);
  tone(Buzzer, 800);
  digitalWrite(led2, HIGH);
  delay(time_ms);
  digitalWrite(led2, LOW);
  tone(Buzzer, 800);
  digitalWrite(led1, HIGH);
  delay(time_ms);
  digitalWrite(led1, LOW);
  // Mientras el módulo ultrasonidos detecte un objeto a una distancia de 0 a 80 cm,
  // el buzzer pasivo ahora emite un tono de una frecuencia de 400 Hz durante 240 ms
  // Del LED 1 al LED 8, los LEDs se encienden y apagan uno por uno de forma secuencial durante periodos de 60 milisegundos
  tone(Buzzer, 400);
  digitalWrite(led1, HIGH);
  delay(time_ms);
  digitalWrite(led1, LOW);
  tone(Buzzer, 400);
  digitalWrite(led2, HIGH);
  delay(time_ms);
  digitalWrite(led2, LOW);
  tone(Buzzer, 400);
  digitalWrite(led3, HIGH);
  delay(time_ms);
  digitalWrite(led3, LOW);
  tone(Buzzer, 400);
  digitalWrite(led4, HIGH);
  delay(time_ms);
  digitalWrite(led4, LOW);
  // el buzzer pasivo ahora emite un tono de una frecuencia de 800 Hz durante 240 ms
  tone(Buzzer, 800);
  digitalWrite(led5, HIGH);
  delay(time_ms);
  digitalWrite(led5, LOW);
  tone(Buzzer, 800);
  digitalWrite(led6, HIGH);
  delay(time_ms);
  digitalWrite(led6, LOW);
  tone(Buzzer, 800);
  digitalWrite(led7, HIGH);
  delay(time_ms);
  digitalWrite(led7, LOW);
  tone(Buzzer, 800);
  digitalWrite(led8, HIGH);
  delay(time_ms);
  digitalWrite(led8, LOW);
  //El buzzer deja de emitir tono durante un instante.
  noTone(Buzzer);
}
}