3.7 LÁSER
3.7.1 Conocimientos previos
El diodo láser es un elemento motivador, barato y fácil de usar con el Arduino pues se activa digitalmente:
Si quieres saber más de este componente, te recomendamos esta página de Luis Llamas. Si tienes que comprar uno, te recomendamos que no sea superior a 5mW, pues puede dañar permanentemente la retina del ojo [+info]. El modelo que te proponemos es de 1mW, no obstante, EVITA SIEMPRE QUE EL LÁSER APUNTE A LOS OJOS especialmente con niños.
3.7.1 Objetivos
Es el mismo objetivo que el la alarma FUEGO pero que esta vez:
- Si activo la alarma el láser tiene que encenderse
- Una vez activada si se corta el láser, por lo tanto el valor del LDR sube, la alarma se dispara.
- Si desactivo la alarma
- La alarma se apaga si se ha disparado
- El laser de apaga.
3.7.3 Maqueta
En este caso hay que tener cuidado con la fijación del láser y el LDR para que apunte al LDR y otra cuestión son los cables: al instalarse fuera de la casa hay que utilizar cables largos o añadir dos M-H consecutivos.
- Hemos utilizado dos fijaciones con alambre el LDR para que quede fijo.
- En el láser hemos fijado con una chincheta para fijar el láser además de alambre
3.7.4 Conexiones eléctricas
- La alimentación del láser y el del LDR igual que en los casos anteriores
- El control del LÁSER a la salida digital D10
- La lectura del LDR a la entrada analógica A0
3.7.5 Vídeo
3.7.6 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 LASER=10; //diodo LASER const int LED = 13; ////////////////////////////////////// ENTRADAS ANALÓGICAS /////////////////////// const int LDR = 0; //sensor luz LDR 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); pinMode(LASER,OUTPUT); ///////////////////////////////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 digitalWrite(LASER,LOW); 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 y LASER ///////////////////////////////////// if (PONERALARMA){ digitalWrite(VERDE,HIGH); digitalWrite(LASER,HIGH); if (digitalRead(LLAMA)==0){ DISPARO=true; QUESENSOR =" ########## FUEGO ##########"; } if (800<analogRead(LDR)){ DISPARO=true; QUESENSOR =" ########## LADRON ##########"; } ////////////// DISPARO ////////////// if (DISPARO) Alarma(QUESENSOR); }else{ digitalWrite(VERDE,LOW); digitalWrite(LASER,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); } }