Skip to main content

BLUETOOTH

3.8.1 Conocimientos previos

Tienes que visitar las siguientes páginas de la Unidad 4 Comunicaciones con Arduino:

Aprende a configurar los botones de la APP !! diapositiva 12 pero en vez de Up, Down, Right y Left los que se establezcan en 3.8.2el reto

  • Configuración avanzada pues nosotros conectaremos el HC-06 en los pines digitales D11 y D12 y no en D0 y D1 pues están ocupados con la comunicación del ordenador.

3.8.2 Objetivos

Reto

Controlar nuestra casa con el móvil, para ello vamos a definir los siguientes comandos:

|

|VOZ| DATO | ||-------------|--------|--------|--------------------------------------------------------|| |abrir| A | |||puerta| P | |||alarma| L | |||pit| T | |||rojo| R | |||azul| B | |||apaga| O | |

COMANDO VOZ DATO descripción
Comando 1 abrir A abrir la puerta y cierra automáticamente
Comando 2 puerta P abrir/cerrar la puerta
Comando 3 alarma L activar/desactivar la alarma
Comando 4 pit T hace un pit
Comando 5 rojo R enciende luz interior roja
Comando 6 azul B enciende luz interior azul
Comando 7 apaga O apaga luces interiores

Lo tienes que hacer así:

3.8.3

Solución Conexióconexión eléctrica
  • Conectaremos Vcc y GND del HC06 igual que antes en la placa protoboard sí ya sé que casi no queda sitio, es el último, lo prometo
  • TX de HC06 al pin D11
  • RX de HC06 al pin D12

3.8.4

Solución deo

3.8.5

Solución 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 RX     = 11;                           //transmisión Bluetooth TX
const int TX = 12;                               //transmisión Bluetooth RX
const int LED = 13;                             //led interno
////////////////////////////////////// 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
SoftwareSerial Serial1(RX, TX); // objeto puerto serie1 del Bluetooth
///////////////////////////////////////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);
void ComandoBT();


//////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////INICIO //////////////////////////
//////////////////////////////////////////////////////////////////////////
void setup() {
   Serial.begin(9600);             //inicializar el puerto serie del ordenador
   Serial1.begin(9600);           //CONEXION SERIE PARA EL MODULO BT
   ////////////////////////////////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 = "";
   command="";
}
//////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////BUCLE ///////////////////////////
//////////////////////////////////////////////////////////////////////////
void loop() {
   ///////////////////////////////// bluetooth /////////////////////////////
   ComandoBT();
   //////////////////////////// timbre ////////////////////////////////////////
   if ((digitalRead(PULSADORTIMBRE))||(command=="A")){
       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="P";  
     }
     }
   }if  if (command=="P"){
       if (!PUERTAABIERTA){
               Serial.println("Abriendo puerta .... ");
               PUERTAABIERTA=true;
               myservo.write(ABIERTO);  
       }else{
             CerrarPuerta();
      }else{
         CerrarPuerta();}
       }
  }
  //////////// 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);
   if (command=="R") analogWrite(ROJO,255);
   if (command=="B") analogWrite(AZUL,255);
   if (command=="O"){
       analogWrite(ROJO,0);
       analogWrite(AZUL,0);
   }
   //////////////// agua /////////////////////////////////////////////////
   if (digitalRead(AGUA)){
       Alarma("AGUA !!!");
       if (PUERTAABIERTA)   CerrarPuerta();
   }
   /////////////// ALARMA FUEGO y LASER /////////////////////////////////////
   if (PONERALARMA){
       digitalWrite(VERDE,HIGH);
       digitalWrite(LASER,HIGH);   
      delay(QUITAREBOTES);     delay(QUITAREBOTES);  //se pone un poco de retraso pues había falsos disparos   
       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 ////////////////");
           command="L";
       }
   }
   if (command=="L"){
       if (PONERALARMA){
               PONERALARMA=false;
               DISPARO = false;
       }else{
               PONERALARMA=true;
       }
   }
   if (command=="T") Alarma("PIIIIT");
}






//////////////////////////////////////////////////////////////////////////
//////////////////////////////////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);  
   }
 }
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////FUNCION LEER COMANDO BLUETOOTH///////////
//////////////////////////////////////////////////////////////////////////
void ComandoBT(){
   if((command=="R")||(command=="B")){
   }else{
       command="";
   }
   if (Serial1.available()) {
         while(Serial1.available()) { 
           command += (char)Serial1.read();
         }
         Serial.println("Comando recibido por Bluetooth = " );
         Serial.println(command);
   }
}