Skip to main content

3.6 FUEGO

3.6.1 Objetivos

Tenemos que hacer dos programaciones * Activar o no la alarma * cuando hay una pulsación larga en el pulsador escondido, se activa o se desactiva la alarma * si se ha disparado la alarma tiene que apagarla * Disparo de la alarma * Si la alarma está actividad, vigilando y se produce una detección, la alarma tiene que sonar hasta que la desactivamos con una pulsación larga del pulsador.

3.6.2 Maqueta

Fijaremos en la pared el sensor llama que lo vimos anteriormente en 2.7 y el pulsador de activación o no de la alarma.

  1. Sensor llama
  2. Pulsador analógico
  3. Conexión sensor llama a la entrada digital
  4. Conexión del pulsador analógico a la entrada analógica

Las alimentaciones de los dos sensores igual que en las páginas anteriores.

3.6.3 Esquema eléctrico

  • Sensor llama a D9
  • Pulsador analógico a A4

3.6.4 Vídeo

3.6.5 Código


///////////////////////////////////////LIBRERIAS
#include <Servo.h> 
#include <SoftwareSerial.h>
///////////////////////////////////////ENTRADAS SALIDAS DIGITALES ///////
// 0 ocupado por el puerto serie ordenador-arduino
// 1 ocupado por el puerto serie ordenador-arduino
const int PULSADORTIMBRE =2;      //sensor tactil
const int TIMBRE =3;              //buzzer activo
const int PUERTA = 4;             //servo puerta
const int AZUL = 5;               //led RGB
const int ROJO = 6;               //led RGB
const int VERDE = 7;              //led RGB
const int AGUA =8;                //sensor agua
const int LLAMA=9;                //sensor LLAMA



const int LED = 13;
////////////////////////////////////// ENTRADAS ANALÓGICAS ///////////////////////

const int JOYSTICKAZUL = 1;       //potenciómetro eje x del joystick
const int JOYSTICKROJO = 2;      //potenciómetro eje y del joystick
const int JOYSTICKSW   = 3;      //switch del joystick
const int ONOFF        = 4;       //interruptor que apaga o enciende la alarma
/////////////////////////////////////////////////////////// OBJETOS///////////////
Servo myservo;                  //objeto servo

///////////////////////////////////////VARIABLES//////////////////////////////////
const int ABIERTO =0;               //ángulo abierto puerta
const int CERRADO =75;              //ángulo cerrado puerta, se ha modificado con respecto a 90 que es cierre total pues tropezaba con la pared
bool PUERTAABIERTA;                 //guardará si está abierto o no
const int QUITAREBOTES = 1000;      //el tiempo para eliminar rebotes
String command = "";                // guardará la respuesta desde el BT
bool ENCENDIDO;                     //guardará que debe de dejar la luz encendida
bool PONERALARMA;                   //guardará que las alarmas están activas
String QUESENSOR;                   //guarda qué sensor se ha disparado;
bool DISPARO;                       //guardará que ha ocurrido un disparo de alarma
/////////////////////////////////////FUNCIONES
void CerrarPuerta();
void Alarma(String Que);

//////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////INICIO //////////////////////////
//////////////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(9600);       //inicializar el puerto serie del ordenador

  ////////////////////////////////fijar input/output
  pinMode(PULSADORTIMBRE, INPUT);
  pinMode(TIMBRE, OUTPUT);
  pinMode(PUERTA, OUTPUT); 
  pinMode(AZUL, OUTPUT);
  pinMode(ROJO, OUTPUT);
  pinMode(VERDE, OUTPUT);
  pinMode(LED,OUTPUT); 
  pinMode(AGUA,INPUT);
  pinMode(LLAMA,INPUT);
  ///////////////////////////////fijar situación inicial
  digitalWrite(TIMBRE,HIGH);  // timbre apagado
  myservo.attach(PUERTA);    //servo en el pin correspondiente
  myservo.write(CERRADO);   //puerta cerrada
  PUERTAABIERTA = false;
  digitalWrite(AZUL,LOW);  //luz rgb apagada  
  digitalWrite(ROJO,LOW);  //luz rgb apagada  
  digitalWrite(VERDE,LOW);  //luz verde apagada  
  PONERALARMA = false;
  DISPARO = false;
  QUESENSOR = "";
}
//////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////BUCLE ///////////////////////////
//////////////////////////////////////////////////////////////////////////
void loop() {

  //////////////////////////// timbre ////////////////////////////////////////
  if (digitalRead(PULSADORTIMBRE)){
    Serial.println("Abriendo puerta .... ");
    PUERTAABIERTA=true;
    myservo.write(ABIERTO);
    delay(3000);
    CerrarPuerta();
  }
  ////////// pulsadorjoystick abrir y cerrar la puerta  //////////////////////
  int valor=analogRead(JOYSTICKSW);
  //Serial.println(valor);
  if (valor==0){
    delay(QUITAREBOTES);
    valor=analogRead(JOYSTICKSW);
    if (valor==0){
      Serial.println("//////////////HAS PULSADO EL BOTÓN DEL JOYSTICK");
      command="boton";  
    }
  }
  if (command=="boton"){
    if (!PUERTAABIERTA){
        Serial.println("Abriendo puerta .... ");
        PUERTAABIERTA=true;
        myservo.write(ABIERTO);  
      }else{
        CerrarPuerta();
      }
  }
  command = "";
   //////////// juego luces joystick //////////////////////////////////////////
  int valorAz = analogRead(JOYSTICKAZUL);
  valorAz = (valorAz-500)/2.5;
  if (valorAz<5) valorAz =0;
  if (!ENCENDIDO)analogWrite(AZUL,valorAz);
  int valorRo = analogRead(JOYSTICKROJO);
  valorRo = (valorRo-550)/2.5;
  if (valorRo<5) valorRo =0;
  if (!ENCENDIDO) analogWrite(ROJO,valorRo);
  //////////////// agua /////////////////////////////////////////////////
  if (digitalRead(AGUA)){
    Alarma("AGUA !!!");
    if (PUERTAABIERTA)  CerrarPuerta();
  }
  /////////////// ALARMA FUEGO /////////////////////////////////////
  if (PONERALARMA){
    digitalWrite(VERDE,HIGH);     
    if (digitalRead(LLAMA)==0){
      DISPARO=true;
      QUESENSOR ="FUEGO";
    }
    ////////////// DISPARO //////////////
    if (DISPARO) Alarma(QUESENSOR);
  }else{
    digitalWrite(VERDE,LOW);
  }
  ////////////// ONOFF ///////////////
  valor=analogRead(ONOFF);
  if (valor==0){
    delay(QUITAREBOTES);
    valor=analogRead(ONOFF);
    if (valor==0){
      Serial.println("//////////////HAS PULSADO EL BOTÓN ON/OFF ALARMA ////////////////");
      if (PONERALARMA){
        PONERALARMA=false;
        DISPARO = false;
      }else{
        PONERALARMA=true;
      }
    }
  }
}






//////////////////////////////////////////////////////////////////////////
//////////////////////////////////FUNCION CERRAR PUERTA////////////////////
//////////////////////////////////////////////////////////////////////////
void CerrarPuerta(){
  if (PUERTAABIERTA){
    for (int i=1;i<=3;i++){
      Serial.println("CERRANDO PUERTA !!!");
      digitalWrite(LED,HIGH);
      digitalWrite(TIMBRE,LOW);
      delay(1000);
      digitalWrite(TIMBRE,HIGH);
      digitalWrite(LED,LOW);
      delay(1000);
    }
     myservo.write(CERRADO);
    PUERTAABIERTA=false;
    Serial.println("Puerta cerrada");
  }
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////FUNCION ALARMA ///////////////////
//////////////////////////////////////////////////////////////////////////
void Alarma(String Que){
  for (int i = 1;i<=10;i++){
    digitalWrite(TIMBRE,LOW);
    digitalWrite(LED,HIGH);
    String mensaje="ALARMA !!!!!!"+Que;
    Serial.println(mensaje);
    delay(100);
    digitalWrite(TIMBRE,HIGH);
    digitalWrite(LED,LOW);
    mensaje="ATENCIÓN !!!!!!"+Que;
    Serial.println(mensaje);
    delay(100);  
  }
}