BLUETOOTH
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 el 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.
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í:
Solución 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
Solución vídeo
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;2; //sensor tactil const int TIMBRE =3;3; //buzzer activo const int PUERTA =4;4; //servo puerta const int AZUL =5;5; //led RGB const int ROJO =6;6; //led RGB const int VERDE =7;7; //led RGB const int AGUA =8;8; //sensor agua const intLLAMA=9;LLAMA=9; //sensor LLAMA const intLASER=10;LASER=10; //diodo LASER constconstintintRXRX==11;11;//transmisión Bluetooth TX const int TX =12;12; //transmisión Bluetooth RX const int LED =13;13; //led interno ////////////////////////////////////// ENTRADAS ANALÓGICAS /////////////////////// const int LDR =0;0; //sensor luz LDR const int JOYSTICKAZUL =1;1; //potenciómetro eje x del joystick const int JOYSTICKROJO =2;2; //potenciómetro eje y del joystick const int JOYSTICKSW =3;3; //switch del joystick const int ONOFF =4;4; //interruptor que apaga o enciende la alarma /////////////////////////////////////////////////////////// OBJETOS/////////////// Servomyservo;myservo; //objeto servo SoftwareSerial Serial1(RX,RX,TX)TX); // objeto puerto serie1 del Bluetooth ///////////////////////////////////////VARIABLES////////////////////////////////// const int ABIERTO =0;0; //ángulo abierto puerta const int CERRADO =75;75; //ángulo cerrado puerta, se ha modificado con respecto a 90 que es cierre total pues tropezaba con la pared boolPUERTAABIERTA;PUERTAABIERTA; //guardará si está abierto o no const int QUITAREBOTES =1000;1000; //el tiempo para eliminar rebotes String command = ""; // guardará la respuesta desde el BT boolENCENDIDO;ENCENDIDO; //guardará que debe de dejar la luz encendida boolPONERALARMA;PONERALARMA; //guardará que las alarmas están activas StringQUESENSOR;QUESENSOR; //guarda qué sensor se ha disparado; boolDISPARO;DISPARO; //guardará que ha ocurrido un disparo de alarma /////////////////////////////////////FUNCIONES voidCerrarPuerta(CerrarPuerta(); voidAlarma(Alarma(StringQueQue); void ComandoBT();voidComandoBT();////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////INICIO ////////////////////////// ////////////////////////////////////////////////////////////////////////// voidsetup(setup() { Serial.begin(9600)begin(9600); //inicializar el puerto serie del ordenador Serial1.begin(9600)begin(9600); //CONEXION SERIE PARA EL MODULO BT ////////////////////////////////fijar input/outputpinMode(PULSADORTIMBRE,pinMode(PULSADORTIMBRE,INPUT)INPUT);pinMode(TIMBRE,pinMode(TIMBRE,OUTPUT)OUTPUT);pinMode(PUERTA,pinMode(PUERTA,OUTPUT)OUTPUT);pinMode(AZUL,pinMode(AZUL,OUTPUT)OUTPUT);pinMode(ROJO,pinMode(ROJO,OUTPUT)OUTPUT);pinMode(VERDE,pinMode(VERDE,OUTPUT)OUTPUT);pinMode(LED,OUTPUT)pinMode(LED,OUTPUT);pinMode(AGUA,INPUT)pinMode(AGUA,INPUT);pinMode(LLAMA,INPUT)pinMode(LLAMA,INPUT);pinMode(LASER,OUTPUT)pinMode(LASER,OUTPUT); ///////////////////////////////fijar situación inicialdigitalWrite(TIMBRE,HIGH)digitalWrite(TIMBRE,HIGH); // timbre apagadomyservo.attach(PUERTA)myservo.attach(PUERTA); //servo en el pin correspondientemyservo.write(CERRADO)myservo.write(CERRADO); //puerta cerrada PUERTAABIERTA =falsefalse; digitalWrite(AZUL,LOW);digitalWrite(AZUL,LOW);//luz rgb apagada digitalWrite(ROJO,LOW);digitalWrite(ROJO,LOW);//luz rgb apagada digitalWrite(VERDE,LOW);digitalWrite(VERDE,LOW);//luz verde apagada digitalWrite(LASER,LOW);digitalWrite(LASER,LOW);PONERALARMAPONERALARMA= false; DISPARO =false;false;DISPAROQUESENSOR =false;QUESENSOR="";command=command=""; } ////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////BUCLE /////////////////////////// ////////////////////////////////////////////////////////////////////////// voidloop(loop() { ///////////////////////////////// bluetooth /////////////////////////////ComandoBT(ComandoBT(); //////////////////////////// timbre //////////////////////////////////////// if ((digitalRead(PULSADORTIMBREdigitalRead(PULSADORTIMBRE)))||(commandcommand==="A")){ Serial.println(println("Abriendo puerta .... ");PUERTAABIERTA=truePUERTAABIERTA=true; myservo.write(ABIERTO);myservo.write(ABIERTOdelay(3000); CerrarPuerta();delay(3000);}CerrarPuerta();}////////// pulsadorjoystick abrir y cerrar la puerta ////////////////////// intvalor=analogRead(JOYSTICKSW)valor=analogRead(JOYSTICKSW); //Serial.println(valor); if (valorvalor==0){ delay(QUITAREBOTES); valor=analogRead(JOYSTICKSW); if (valor==0)0){delay(QUITAREBOTES);valor=analogRead(JOYSTICKSW);if(valor==0){Serial.println(println("//////////////HAS PULSADO EL BOTÓN DEL JOYSTICK");command=command="P"; } } if (commandcommand==="P"){ if (!PUERTAABIERTA)PUERTAABIERTA){ Serial.println(println("Abriendo puerta .... ");PUERTAABIERTA=truePUERTAABIERTA=true; myservo.write(ABIERTO);myservo.write(ABIERTO}else{ CerrarPuerta(); }else{CerrarPuerta();}}}//////////// juego luces joystick ////////////////////////////////////////// int valorAz =analogReadanalogRead(JOYSTICKAZUL); valorAz = (JOYSTICKAZUL)valorAz-500)/2.5; if (valorAz<5) valorAz =0; if (!ENCENDIDO)analogWrite(AZUL,valorAz);valorAzint valorRo = analogRead(JOYSTICKROJO); valorRo = (valorAz-500)valorRo-550)/2.55; if (valorRo<5) valorRo =0; if (!ENCENDIDO) analogWrite(ROJO,valorRo); if (valorAz<5)valorAzcommand==0;if(!ENCENDIDO)analogWrite(AZUL,valorAz);intvalorRo=analogRead(JOYSTICKROJO);valorRo=(valorRo-550)/2.5;if(valorRo<5)valorRo=0;if(!ENCENDIDO)analogWrite(ROJO,valorRo);if(command=="R")analogWriteanalogWrite(ROJO,255); if (ROJO,255);if(commandcommand==="B")analogWriteanalogWrite(AZUL,255); if (AZUL,255);if(commandcommand==="O"){analogWrite(ROJO,0)analogWrite(ROJO,0);analogWrite(AZUL,0)analogWrite(AZUL,0); } //////////////// agua ///////////////////////////////////////////////// if (digitalRead(AGUAdigitalRead(AGUA))){Alarma(Alarma("AGUA !!!"); if (PUERTAABIERTAPUERTAABIERTA) CerrarPuerta();CerrarPuerta();}}/////////////// ALARMA FUEGO y LASER ///////////////////////////////////// if (PONERALARMA)PONERALARMA){digitalWrite(VERDE,HIGH)digitalWrite(VERDE,HIGH);digitalWrite(LASER,HIGH)digitalWrite(LASER,HIGH);delay(QUITAREBOTES)delay(QUITAREBOTES); //se pone un poco de retraso pues había falsos disparos ifif(digitalRead(LLAMA)digitalRead(LLAMA)==0)0){DISPARODISPARO=true; QUESENSOR =true;QUESENSOR=" ########## FUEGO ##########"; } if (800<analogRead(LDRanalogRead(LDR))){DISPARODISPARO=true; QUESENSOR =true;QUESENSOR=" ########## LADRON ##########"; } ////////////// DISPARO ////////////// if (DISPARO)DISPARO)Alarma(QUESENSOR)Alarma(QUESENSOR); }else{else{digitalWrite(VERDE,LOW)digitalWrite(VERDE,LOW);digitalWrite(LASER,LOW)digitalWrite(LASER,LOW); } ////////////// ONOFF ///////////////valorvalor=analogRead(ONOFF); if (valor==analogRead0){ delay(QUITAREBOTES); valor=analogRead(ONOFF); if (ONOFF);if(valorvalor===0)0){delay(QUITAREBOTES);valor=analogRead(ONOFF);if(valor==0){Serial.println(println("//////////////HAS PULSADO EL BOTÓN ON/OFF ALARMA ////////////////");command=command="L"; } } if (commandcommand==="L"){ if (PONERALARMA)PONERALARMA){PONERALARMAPONERALARMA=false; DISPARO =false;DISPAROfalse; }else{ PONERALARMA=true; } } if (command==false;}else{PONERALARMA=true;}}if(command=="T")Alarma(Alarma("PIIIIT"); } ////////////////////////////////////////////////////////////////////////// //////////////////////////////////FUNCION CERRAR PUERTA//////////////////// ////////////////////////////////////////////////////////////////////////// voidCerrarPuertaCerrarPuerta(){ if ()PUERTAABIERTA){iffor (PUERTAABIERTA){intfor(inti=1;i=1;i<=3;i3;i+++){ Serial.println(println("CERRANDO PUERTA !!!");digitalWrite(LED,HIGH)digitalWrite(LED,HIGH);digitalWrite(TIMBRE,LOW)digitalWrite(TIMBRE,LOW);delay(1000)delay(1000);digitalWrite(TIMBRE,HIGH)digitalWrite(TIMBRE,HIGH);digitalWrite(LED,LOW)digitalWrite(LED,LOW);delay(1000)delay(1000); }myservo.write(CERRADO)myservo.write(CERRADO);PUERTAABIERTA=false;PUERTAABIERTA=false; Serial.println(println("Puerta cerrada"); } } ////////////////////////////////////////////////////////////////////////// //////////////////////////////////FUNCION ALARMA /////////////////// ////////////////////////////////////////////////////////////////////////// voidAlarmaAlarma(String Que){ for (StringintQue){ifor=(int1;i=1;i<=1010;i++){ digitalWrite(TIMBRE,LOW);i++){digitalWrite(TIMBRE,LOW)digitalWrite(LED,HIGH);digitalWrite(LED,HIGH);StringStringmensaje=mensaje="ALARMA !!!!!!"+Que;Que; Serial.println(mensaje)println(mensaje);delay(100)delay(100);digitalWrite(TIMBRE,HIGH)digitalWrite(TIMBRE,HIGH);digitalWrite(LED,LOW)digitalWrite(LED,LOW);mensaje=mensaje="ATENCIÓN !!!!!!"+Que;Que; Serial.println(mensaje)println(mensaje);delay(100)delay(100); } } ////////////////////////////////////////////////////////////////////////// //////////////////////////////////FUNCION LEER COMANDO BLUETOOTH/////////// ////////////////////////////////////////////////////////////////////////// voidComandoBTComandoBT(){ if((){if((commandcommand==="R")||(commandcommand==="B")){ }else{else{command=command=""; } if (Serial1.available(available()) {while(while(Serial1.available(available()) { command += (charchar)Serial1.read()Serial1.read(); } Serial.println(println("Comando recibido por Bluetooth = " ); Serial.println(command)println(command); } }