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 encenderseUna vez activada si se corta el láser, por lo tanto el valor del LDR sube, la alarma se dispara.
Si desactivo la alarmaLa alarma se apaga si se ha disparadoEl 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 anterioresEl control del LÁSER a la salida digital D10La 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/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);pinMode(LASER,OUTPUT);///////////////////////////////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 apagadadigitalWrite(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";}}}ifif(command=="boton"){if (!PUERTAABIERTA){Serial.println("Abriendo puerta .... ");PUERTAABIERTA=true;myservo.write(ABIERTO);}else{CerrarPuerta(); }else{CerrarPuerta();}}command}=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);ifif(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);}}}