Skip to main content

LÁSER

{{@2992#bkmrk-el-diodo-l%C3%A1ser-es-un}}

{{@2992#bkmrk-}}

{{@2992#bkmrk-si-quieres-saber-m%C3%A1s}}

Reto

    3.7.1

  • 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.
Solución vídeo

3.7.6

Solución maqueta

{{@2992#bkmrk-en-este-caso-hay-que}}

{{@2992#bkmrk-hemos-utilizado-dos-}}

{{@2992#bkmrk--1}}

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

Solución 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);  
  }
}