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.
En la próxima entrega veremos el Desarrollo de la aplicación (.APK) realizada con Android Studio.
Les deseo lo mejor!