Comunicación de ARDUINO con SMARTPHONE via Bluetooth
INTRODUCCIÓN:
Además de las desiciones, esperas (para recibir mis compras) y pequeñas pruebas de cada uno de los componentes y luego de pasar por muchas luchas con los Microprocesadores (Caso: PIC F18-XXX).
Junté todo lo aprendido a golpes y preguntas sin respuestas claras (para mi poco conocimiento) en la Web y ya no recuerdo de que modo y como llegué a conocer el mundo ARDUINO.
fue esto lo que terminó de hacerme sentir realmente útil frente a este nuevo mundo de la Electrónica Digital.
Fue así que terminé de comprender y encontrar todas las respuestas que me hacía detrás de la compra de un simple módulo que me permitía hacer y aplicar muchisimas aplicaciones. Muchas de ellas (inimaginables para mi) y que luego de unos días lograba concretar.
Lo que veremos en este Post no es otra cosa que lo explicado en mil y una formas distintas, lo que nos muestran en videos sin decirnos como lo lograron, lo que explican y explican mareandonos llevándonos de un lado para el otro. Diciendonos lo sencillo que es hacer y "MANOS A LA OBRA".
Pero que al final de todo esto ¡NADA FUNCIONA!
Claro Nada funciona porque omitieron explicar detalles creyendo que ya lo sabemos, o porque simplemente consideraron que no hacía falta aclarar o explicar.
Bien de una cosa te juro y aseguro, esto esta hecho para nosotros, los que necesitamos que nos ayuden a ¡ARRANCAR! para que a partir de esto y cuando queramos modificarlo y no funciones comencemos a aprender de verdad. Bueno, ahora como dicen TODOS!!! Manos a la OBRA!.
HARDWARE: Para esta comunicación hemos de usar:
Placa Arduino UNO, NANO, MEGA.
Módulo Bluetooth HC-05
Led colores Azul y Rojo
Sensor DHT-11
ProtoBoard con 8 o 10 Cables para conectar cada múdulo con nuestro Arduino.
SOFTWARE:
Arduino con su editor (.INO)
Android Studio para la realización de la Aplicación (.APK)
Desarrollo de todo
Este código de Arduino permite que con mi Smartphone via Bluetooth pueda:
- Enviarle un texto. Este puede ser una clave de acceso por ejemplo.
- Presionar Tecla Led ON y Tecla OFF para Encender y Apagar un Led de color Azul.
- Por medio de una Barra de Corrimiento Enciendo, Apago y le doy mayor o menor densidad a un Led de color Rojo.
- Presiono una Tecla de nombre Temperatura y me envía la Temp. y Humedad captada por el Sensor DHT-11.
Codigo del Arduino:
// Creado el 11/12/2016 Combinado.INO // Permite Encender/Apagar LED Azul // Controla LED Rojo con PWN // Informa la Temperatura y Humedad con DHT11 #include#include SoftwareSerial BTxT(10, 11); // Crea nueva conexion- Pin10(RX) a TX y Pin11(TX) a RX /*-----( Declaro Variables )-----*/ dht DHT; #define DHT_PIN 3 String Temx; // Variable que contiene Temperatura String Humx; // Variable que contiene Humedad String Mensaje; // Variable de cadena de caracteres para el mensaje String DigitoEnvio; // La libreria Envia una cadena de a un caracter por vez int Bandera; // Bandera de Recepción de mensajes void setup() { Serial.begin(9600); // Iniciamos el puerto que esta conectado al PC a 9600 Baudios BTxT.begin(9600); // Iniciamos el puerto nuevo Serial_2 a 9600 Baudios Serial.println("PROGRAMA Led Azul y Rojo con Sensor DHT11 para Tolba Con Bluetooth"); Serial.println(); pinMode(10, INPUT); // RxD Recepcion pinMode(11, OUTPUT); // TxD Transmicion pinMode(13, OUTPUT); // Configura Pin 13 como Salida pinMode(5, OUTPUT); // Configura Pin 05 como Salida PWN pinMode(3, OUTPUT); // Configura Pin 03 como Salida Temperatura/Humedad } void loop() { vuelta: Mensaje = ""; // Preparamos el mensaje ha recibir hacia el PC Bandera = 0; // Recepcion de mensajes // Mientras que lleguen caracteres por el puerto BTxT (serial_2) while (BTxT.available()) { char c = BTxT.read(); // Lee los caracteres uno a uno con la variable c delay(10); Mensaje += c; // Almacena la suma de caracteres en el mensaje Bandera = 1; } if (Bandera == 1) { Mensaje.trim(); Serial.println("Hemos recibido un Mensaje: ["+Mensaje+"]"); } else { goto vuelta; } if (Mensaje == "A" || Mensaje == "B") { Serial.println("Recibimos esta Orden: "+Mensaje); if (Mensaje == "A"){ digitalWrite(13,1); // Enciende LED en Pin 13 DigitoEnvio = "A~"; BTxT.println(DigitoEnvio); } else { digitalWrite(13,0); // Apaga LED en Pin 13 DigitoEnvio = "B~"; BTxT.println(DigitoEnvio); } delay(10); Serial.println("Respuesta: " + DigitoEnvio); goto vuelta; } if (Mensaje == "TH"){ Tolvas(); Serial.println("Recibimos este Texto "+Mensaje); delay(100); BTxT.println("TH-"+Temx+"-"+Humx+"~"); goto vuelta; } if (Mensaje.substring(0,3) == "TXT"){ int desde = 4; int hasta = Mensaje.length(); Mensaje = Mensaje.substring(desde, hasta); Serial.println("Recibimos este Texto "+Mensaje); BTxT.println("Enviaste "+Mensaje+"~"); goto vuelta; } if ((Mensaje.toInt() >= 0) && (Mensaje.toInt() < 256)) { Serial.println("Recibimos este Numero: "+Mensaje); if (Mensaje.toInt() < 65){ analogWrite(5,0); BTxT.println("Led Rojo OFF~"); } else { analogWrite(5, Mensaje.toInt()); // Esta linea molesta más de lo que sirve // BTxT.println(Mensaje+"~"); } delay(10); Serial.println("PWM Recibido ["+Mensaje+"]"); } } void Tolvas(){ int chk = DHT.read11(DHT_PIN); delay (100); chk = DHT.read11(DHT_PIN); delay (1000); switch (chk) { case DHTLIB_OK: Serial.print("OK \t"); break; case DHTLIB_ERROR_CHECKSUM: Serial.print("Error en el Checksum \t"); break; case DHTLIB_ERROR_TIMEOUT: Serial.print("Error Tiempo de Salida \t"); break; case DHTLIB_ERROR_CONNECT: Serial.print("Error de Coneccion \t"); break; case DHTLIB_ERROR_ACK_L: Serial.print("Error Ack Bajo (Low)/Falta 5v \t"); break; case DHTLIB_ERROR_ACK_H: Serial.print("Error Ack Alto (High) \t"); break; default: Serial.print("Error Desconocido \t"); break; } // DISPLAY DATA Temx = ""; Humx = ""; Serial.println(DHT.temperature, 1); Serial.println(DHT.humidity, 1); Temx = DHT.temperature; Humx = DHT.humidity; delay (100); return Temx, Humx; }
OBSERVACIONES:
No tengo duda alguna, que este codigo luego de analizarlo, podremos conincidir que sobran muchas cosas y que se podía hacer más "técnico" de otros modos y con otros comandos. No es el objetivo de ello. Este programa primario enseña como se comporta cada componente y le dice a TODOS que esta pasando a cada momento. Esa fue la necesidad de hacerlo de este modo tan básico de Comandos y Estructuras.
Les deseo lo mejor!
No hay comentarios:
Publicar un comentario