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.
- Sensor llama
- Pulsador analógico
- Conexión sensor llama a la entrada digital
- 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); } }