Skip to main content

FUEGO

ATENCIÓN hemos pensado la utilización del sensor de fuego sólo en la parte de CODIGO, pues es para nivel de secundaria.
Implica la utilización de un mechero, con el peligro que conlleva. Utilizar este ejemplo en clase bajo responsabilidad y supervisión del docente.

Reto

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.

Solución 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.

Solución esquema eléctrico
  • Sensor llama a D9
  • Pulsador analógico a A4
Solución vídeo

Solución código

https:///////////////////////////////////////LIBRERIAScreate.arduino.cc/editor/javierquintana/fce4e1a9-c2c2-4806-9540-04c3d26c04bd/preview

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