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
https:///////////////////////////////////////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-arduinoconst int PULSADORTIMBRE =2; //sensor tactilconst int TIMBRE =3; //buzzer activoconst int PUERTA = 4; //servo puertaconst int AZUL = 5; //led RGBconst int ROJO = 6; //led RGBconst int VERDE = 7; //led RGBconst int AGUA =8; //sensor aguaconst int LLAMA=9; //sensor LLAMAconst int LASER=10; //diodo LASER const int RX = 11; //transmisión Bluetooth TXconst int TX = 12; //transmisión Bluetooth RXconst int LED = 13; //led interno////////////////////////////////////// ENTRADAS ANALÓGICAS ///////////////////////const int LDR = 0; //sensor luz LDRconst int JOYSTICKAZUL = 1; //potenciómetro eje x del joystickconst int JOYSTICKROJO = 2; //potenciómetro eje y del joystickconst int JOYSTICKSW = 3; //switch del joystickconst int ONOFF = 4; //interruptor que apaga o enciende la alarma/////////////////////////////////////////////////////////// OBJETOS///////////////Servo myservo; //objeto servoSoftwareSerial Serial1(RX, TX); // objeto puerto serie1 del Bluetooth///////////////////////////////////////VARIABLES//////////////////////////////////const int ABIERTO =0; //ángulo abierto puertaconst int CERRADO =75; //ángulo cerrado puerta, se ha modificado con respecto a 90 que es cierre total pues tropezaba con la paredbool PUERTAABIERTA; //guardará si está abierto o noconst int QUITAREBOTES = 1000; //el tiempo para eliminar rebotesString command = ""; // guardará la respuesta desde el BTbool ENCENDIDO; //guardará que debe de dejar la luz encendidabool PONERALARMA; //guardará que las alarmas están activasString QUESENSOR; //guarda qué sensor se ha disparado;bool DISPARO; //guardará que ha ocurrido un disparo de alarma/////////////////////////////////////FUNCIONESvoid CerrarPuerta();void Alarma(String Que);void ComandoBT();create.arduino.cc/editor/javierquintana/e14ca107-67ba-4508-a5a0-6012213b4c1d/preview
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////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 (command=="P"){ if (!PUERTAABIERTA){ Serial.println("Abriendo puerta .... "); PUERTAABIERTA=true; myservo.write(ABIERTO); }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); //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); }}