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.
- 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.
Solución esquema eléctrico
- Sensor llama a D9
- Pulsador analógico a A4
Solución vídeo
Solución código
#include
<Servo.h>#include<SoftwareSerial.h>///////////////////////////////////////ENTRADAS SALIDAS DIGITALES ///////// 0 ocupado por el puerto serie ordenador-arduino// 1 ocupado por el puerto serie ordenador-arduinoconstintPULSADORTIMBRE=2;//sensor tactilconstintTIMBRE=3;//buzzer activoconstintPUERTA=4;//servo puertaconstintAZUL=5;//led RGBconstintROJO=6;//led RGBconstintVERDE=7;//led RGBconstintAGUA=8;//sensor aguaconstintLLAMA=9;//sensor LLAMAconstintLED=13;////////////////////////////////////// ENTRADAS ANALÓGICAS ///////////////////////constintJOYSTICKAZUL=1;//potenciómetro eje x del joystickconstintJOYSTICKROJO=2;//potenciómetro eje y del joystickconstintJOYSTICKSW=3;//switch del joystickconstintONOFF=4;//interruptor que apaga o enciende la alarma/////////////////////////////////////////////////////////// OBJETOS///////////////Servomyservo;//objeto servo///////////////////////////////////////VARIABLES//////////////////////////////////constintABIERTO=0;//ángulo abierto puertaconstintCERRADO=75;//ángulo cerrado puerta, se ha modificado con respecto a 90 que es cierre total pues tropezaba con la paredboolPUERTAABIERTA;//guardará si está abierto o noconstintQUITAREBOTES=1000;//el tiempo para eliminar rebotesStringcommand="";// guardará la respuesta desde el BTboolENCENDIDO;//guardará que debe de dejar la luz encendidaboolPONERALARMA;//guardará que las alarmas están activasStringQUESENSOR;//guarda qué sensor se ha disparado;boolDISPARO;//guardará que ha ocurrido un disparo de alarma/////////////////////////////////////FUNCIONESvoidCerrarPuerta();voidAlarma(StringQue);///////////////////////////////////////////////////////////////////////////////////////////////////////////////////INICIO ////////////////////////////////////////////////////////////////////////////////////////////////////voidsetup(){Serial.begin(9600);//inicializar el puerto serie del ordenador////////////////////////////////fijar input/outputpinMode(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 inicialdigitalWrite(TIMBRE,HIGH);// timbre apagadomyservo.attach(PUERTA);//servo en el pin correspondientemyservo.write(CERRADO);//puerta cerradaPUERTAABIERTA=false;digitalWrite(AZUL,LOW);//luz rgb apagadadigitalWrite(ROJO,LOW);//luz rgb apagadadigitalWrite(VERDE,LOW);//luz verde apagadaPONERALARMA=false;DISPARO=false;QUESENSOR="";}///////////////////////////////////////////////////////////////////////////////////////////////////////////////////BUCLE /////////////////////////////////////////////////////////////////////////////////////////////////////voidloop(){//////////////////////////// timbre ////////////////////////////////////////if(digitalRead(PULSADORTIMBRE)){Serial.println("Abriendo puerta .... ");PUERTAABIERTA=true;myservo.write(ABIERTO);delay(3000);CerrarPuerta();}////////// pulsadorjoystick abrir y cerrar la puerta //////////////////////intvalor=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 //////////////////////////////////////////intvalorAz=analogRead(JOYSTICKAZUL);valorAz=(valorAz-500)/2.5;if(valorAz<5)valorAz=0;if(!ENCENDIDO)analogWrite(AZUL,valorAz);intvalorRo=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//////////////////////////////////////////////////////////////////////////////////////////////voidCerrarPuerta(){if(PUERTAABIERTA){for(inti=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 /////////////////////////////////////////////////////////////////////////////////////////////voidAlarma(StringQue){for(inti=1;i<=10;i++){digitalWrite(TIMBRE,LOW);digitalWrite(LED,HIGH);Stringmensaje="ALARMA !!!!!!"+Que;Serial.println(mensaje);delay(100);digitalWrite(TIMBRE,HIGH);digitalWrite(LED,LOW);mensaje="ATENCIÓN !!!!!!"+Que;Serial.println(mensaje);delay(100);}}