BLUETOOTH
3.8.1 Conocimientos previos
Tienes que visitar las siguientes páginas de la Unidad 4 Comunicaciones con Arduino:
- ¿Qué es el HC-06?
-
La APP que tienes que intalarte
-
Vincular tu móvil con el HC-06 con tu móvil
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:
|
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.3Solució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.4Solución Vívídeo
3.8.5Solución Có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 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 ordenadorSerial1.begin(9600);//CONEXION SERIE PARA EL MODULO BT////////////////////////////////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 = "";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";}}}ifif(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 disparosif (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);} }