Para esto desarrollé un circuito con una placa Arduino que me permitió tomar la temperatura a tiempo real dentro del tostador, y enviarla vía bluetooth hasta un Tablet, donde la temperatura es registrada y graficada a través de una aplicación móvil, desarrollada a través de AppInventor.
Este proyecto cuenta entonces de dos etapas:
- La implementación de un circuito con Arduino y su programa, a través de los cuales tomaremos los datos de temperatura desde el tostador, las muestre en una pantalla física, y sean enviadas a través de Bluetooth.
- El desarrollo de una aplicación móvil para Android a través de AppInventor, que recibirá los datos desde el Arduino vía Bluetooth, las grafique y podamos procesarlos.
Primera Parte: circuito Arduino y Programa
Para esta primera etapa, utilicé los siguientes elementos:
- Una placa WAVGAT UNO R3 (es una Arduino Uno
piratade fabricación alternativa), - Un módulo Bluetooth HC-05,
- Una pantalla LCD 12x6 y un módulo I2C,
- Una termocupla tipo K y un módulo Transmisor Max6675,
- Una mini protoboard de 400 puntos,
- Cables DuPont macho-macho.
Revisaremos la conexión y programación por separado de cada uno de los elementos al Arduino, para finalmente revisar conexión y programa de todo el conjunto.
A) Conexión de termocupla y módulo MAX6675
La termocupla tipo K que utilicé consta de una sonda sensor con una rosca y de dos cables de conexión, uno positivo y uno negativo. Esta termocupla permite medir temperaturas de entre -200°C a 1300 °C. Para poder utilizarla, se necesita conectarla a un módulo transmisor MAX6675, conectando los terminales de la termocupla a los correspondientes del módulo transmisor (+ y -). El módulo transmisor limita el rango de medición a entre 0ºC a 1023ºC.
El módulo transmisor, MAX6675, debe a su vez ser conectado al Arduino.
El módulo cuenta con cinco entradas, dos de alimentación (GND y VCC) y tres de comunicación (SCK , CS y SO).
Montaje
La conexión que utilicé es la siguiente:
Módulo | Arduino
SO = Pin 11
CS = Pin 12
SCK = Pin 13
VCC = 5v
GND = GND
Las entradas de comunicación del módulo transmisor irán a los pines 11 (SO), 12 (CS) y 13 (SCK), mientras que las entradas de alimentación irán a 5v (VCC) y tierra (GND).
Programa
Para configurar el módulo transmisor MAX6675, será necesario incluir su librería. Para esto, en la interfaz de programación de Arduino nos dirigiremos a la pestaña Programa > Incluir Librería > Administrar Bibliotecas.
Aquí nos abrirá la ventana “Gestor de Librerías”.
En ella buscaremos “MAX6675 Library” y la instalaremos. Una vez instalada, nos aparecerá esta librería en el menú anterior “Incluir Librería”, donde al hacer clic se incorporará a nuestro código.
Aquí nos abrirá la ventana “Gestor de Librerías”.
En ella buscaremos “MAX6675 Library” y la instalaremos. Una vez instalada, nos aparecerá esta librería en el menú anterior “Incluir Librería”, donde al hacer clic se incorporará a nuestro código.
#include "max6675.h" //se incluye la librería para controlar el módulo MAX6675float temperatura=0; //Se crea una variable flotante para almacenar la temperatura
//Se definen los pines a usar para conectar el modulo MAX6675
int ktcSO = 11;
int ktcCS = 12;
int ktcCLK = 13;
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);
void setup() {
//activa comunicacion serial.Serial.begin(9600);}void loop() {//Leer temperatura.temperatura=ktc.readCelsius();//temperatura=ktc.readFahrenheit();//Enviar dato de temperatura por el puerto serial.Serial.println(temperatura);//Pausa de medio segundo para repetir el procesodelay(500);}
Con este programa se configura el módulo MAX6675 a través del cual realizaremos la lectura de temperatura desde la termocupla, y, por ahora, la temperatura es enviada a través del puerto serial. Puedes comprobar que funciona correctamente abriendo el monitor serie, en donde aparecerán cada 0,5 s. la temperatura medida.
B) Conexión de pantalla LCD y visualización de la temperatura en pantalla.
Para visualizar la temperatura obtenida en la termocupla en tiempo real, instalé una pantalla LCD de 16x2. En realidad con la aplicación móvil que luego veremos se hace prescindible, pero es útil contar con ella para algunas tareas, por lo que opté por mantenerla dentro del proyecto y darle utilidad autónoma al circuito construido en Arduino.
Este tipo de pantallas poseen 16 pines y su conexión se hace un poco complicada y aparatosa, pero con la ayuda de un módulo I2C, conectado a la pantalla obtenemos una entrada de sólo 4 pines, lo que simplifica enormemente la instalación y nos ahorra un montón de cables. En mi caso, la pantalla de LCD que compré venía con el módulo ya soldado, por lo que también me ahorré ese trabajo. En caso de que requieran profundizar en el funcionamiento del módulo I2C, les recomiendo ver este tutorial en el que me apoyé realizando mi proyecto:
Este tipo de pantallas poseen 16 pines y su conexión se hace un poco complicada y aparatosa, pero con la ayuda de un módulo I2C, conectado a la pantalla obtenemos una entrada de sólo 4 pines, lo que simplifica enormemente la instalación y nos ahorra un montón de cables. En mi caso, la pantalla de LCD que compré venía con el módulo ya soldado, por lo que también me ahorré ese trabajo. En caso de que requieran profundizar en el funcionamiento del módulo I2C, les recomiendo ver este tutorial en el que me apoyé realizando mi proyecto:
Montaje
Con el módulo I2C ya soldado a la pantalla LCD únicamente debemos conectar los pines del módulo al Arduino. La conexión que realicé fue la siguiente:
Módulo | Arduino
GND = GND
VCC = 5v
SDA = A4
SCL = A5
Se debe tomar en consideración además que el brillo y contraste de la pantalla se puede regular girando la cruceta celeste que está en el módulo, por lo que si no se visualiza el texto correctamente, el problema pudiera solucionarse ahí. Existe también en el módulo I2C un jumper en el extremo contrario a los pines. Este jumper permite encender o apagar la luz de fondo de la pantalla. Hay una manera de realizar este apagado a través de sofware que podrás ver en el código de más abajo.
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/
Deberás descargar la última versión de esta librería y descomprimirla y, luego, ponerla en reemplazo de la librería "LiquidCrystal" con que ya cuenta el ID de Arduino.
Para esto, puedes hacer click derecho en el ícono del ID de Arduino > Abrir Ubicación del Archivo.
Ahí encontrarás la carpeta "libraries" y, dentro, la carpeta "LiquidCrystal". Quitamos esta carpeta y pegamos en su lugar la carpeta que acabamos de descargar. Con esto ya podremos utilizar la nueva librería en nuestro código. Esta librería nueva es una extensión de la anterior, por lo que las funciones contenidas en la anterior también podrán utilizarse.
Haremos uso también de la librería "Wire", pero esta ya se encuentra incorporada en el ID de Arduino, por lo que la llamaremos directamente en nuestro código.
El código es el siguiente:
Con este programa, de momento, podremos visualizar un mensaje a través de la pantalla LCD, donde posteriormente mostraremos en tiempo real la temperatura.
4. Asignaremos un pin o contraseña. En este caso, asigné el clásico "1234":
GND = GND
VCC = 5v
SDA = A4
SCL = A5
Se debe tomar en consideración además que el brillo y contraste de la pantalla se puede regular girando la cruceta celeste que está en el módulo, por lo que si no se visualiza el texto correctamente, el problema pudiera solucionarse ahí. Existe también en el módulo I2C un jumper en el extremo contrario a los pines. Este jumper permite encender o apagar la luz de fondo de la pantalla. Hay una manera de realizar este apagado a través de sofware que podrás ver en el código de más abajo.
Programa
El control de este módulo I2C requiere la instalación de una librería que no se encuentra disponible en el gestor de librerías de Arduino, por lo que es necesario descargarla de una web externa:https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/
Deberás descargar la última versión de esta librería y descomprimirla y, luego, ponerla en reemplazo de la librería "LiquidCrystal" con que ya cuenta el ID de Arduino.
Para esto, puedes hacer click derecho en el ícono del ID de Arduino > Abrir Ubicación del Archivo.
Ahí encontrarás la carpeta "libraries" y, dentro, la carpeta "LiquidCrystal". Quitamos esta carpeta y pegamos en su lugar la carpeta que acabamos de descargar. Con esto ya podremos utilizar la nueva librería en nuestro código. Esta librería nueva es una extensión de la anterior, por lo que las funciones contenidas en la anterior también podrán utilizarse.
Haremos uso también de la librería "Wire", pero esta ya se encuentra incorporada en el ID de Arduino, por lo que la llamaremos directamente en nuestro código.
El código es el siguiente:
#include <Wire.h> // libreria de comunicacion por I2C
#include <LCD.h> // libreria para funciones de LCD
#include <LiquidCrystal_I2C.h> // libreria para LCD por I2C
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7); // DIR, E, RW, RS, D4, D5, D6, D7
void setup() {
lcd.setBacklightPin(3,POSITIVE); // puerto P3 de PCF8574 como positivo
lcd.setBacklight(HIGH); // habilita iluminacion posterior de LCD
lcd.begin(16, 2); // 16 columnas por 2 lineas para LCD 1602A
lcd.clear(); // limpia pantalla
//activa comunicacion serial.
Serial.begin(9600);
}
void loop() {
lcd.setCursor(0, 0);
lcd.print("Aquí mostraremos "); // escribe texto
lcd.setCursor(0, 2);
lcd.print(la temperatura); //texto en segunda línea
}
Con este programa, de momento, podremos visualizar un mensaje a través de la pantalla LCD, donde posteriormente mostraremos en tiempo real la temperatura.
C) Conexión de módulo Bluetooth, configuración y envío de datos
Para la comunicación de los datos al dispositivo Android utilicé un módulo Bluetooth HC-05. Este módulo cuenta con 6 pines de salida, pero sólo utilizaremos 4.
Montaje
Módulo | Arduino
STATE = (Libre)
RXD = Pin 9 (funcionará como TX de Arduino)
TXD = Pin 8 (funcionará como RX de Arduino)
GND = GND
VCC = 5v
EN = (Libre)
Los pines TX y TXD, y RX y RXD corresponden a pines de transmisión y recepción, de Arduino y del Módulo, respectivamente.
Arduino ya cuenta con pines asignados como TX y RX, sin embargo, utilizaremos los pines 9 y 8 con esa funcionalidad, lo que se hará a través de una librería del ID de Arduino.
Así entonces, es de notar que las conexiones de comunicación están cruzadas entre Arduino y el Módulo, de tal manera que el pin TXD del módulo va al RX de Arduino y viceversa, el pin TX de Arduino irá al RXD del módulo.
Configuración
Previo a programar nuestro módulo, es necesario configurarlo, para ello debemos ingresar al modo de configuración del módulo.
Este modo se activa presionando un pequeño pulsador durante los primeros 5 segundos de energizado el módulo, por lo que deberás mantener pulsado este botón antes de conectar la energía del Arduino o del pin VCC del módulo.
Un parpadeo más lento del led del módulo nos indica que ingresó a modo configuración.
Ya en este modo, podemos soltar el pulsador e ingresamos al ID de Arduino, donde abriremos el Monitor Serie.
En él, el módulo Bluetooth será configurado a través de comandos AT:
AT+NAME Nombre del dispositivo
AT+PSWD Contraseña (PIN)
AT+UART Parámetros de comunicación
AT+ROLE Rol del dispositivo
0 = esclavo (slave)
1 = maestro (master)
AT+ORGL Restaura a valores de fábrica
AT+RESET Vuelve a modo usuario
Configuraremos el módulo escribiendo los siguientes comandos en el monitor serie:
- Restauraremos la configuración a valores de fábrica:
AT+ORGL2. Asignaremos un nombre al dispositivo, en este caso lo llamé "miBT":
AT+NAME=miBT
3. Podemos comprobar el cambio realizado consultando el nombre del dispositivo con el siguiente comando:
AT+NAME?El módulo debería respondernos indicando a través del monitor serie el nombre que asignamos previamente.
4. Asignaremos un pin o contraseña. En este caso, asigné el clásico "1234":
AT+PSWD=1234
Puedes comprobar el cambio de la misma manera que en el ejemplo anterior, esta vez con el comando AT+PSWD?
5. Asignaremos el rol de esclavo (slave) al dispositivo:
AT+ROLE=0
6. Asignaremos los parámetros de comunicación del dispositivo. Lo que nos interesa aquí es la velocidad de comunicación. El dispositivo Bluetooth funciona a 38400 baudios, velocidad bastante mayor a diferencia de la mayoría de los componentes Arduino que funcionan a 9600, por lo que tendremos que configurarlo luego también en el programa, como se indicará. Para esto ejecutaremos el siguiente comando:
AT+UART=38400,0,0
7. Finalmente, volvemos al modo usuario:
AT+RESET
Tras cada uno de los cambios realizados, el módulo debiera habernos respondido "OK" en el monitor serial.
El módulo conectado a Arduino y ya en modo usuario mostrará un parpadeo rápido. Esta modalidad permite al módulo realizar su comunicación y uso normal.
Programa
#include <SoftwareSerial.h> //librería para utlizar pines como tx y rx para bluetooth
SoftwareSerial miBT(8, 9); //define los pines que se utilizarán como rx y tx para bluetooth, creando un objeto llamado miBT
void setup() {
//activa comunicacion serial.
Serial.begin(9600); // configura en general la velocidad de comunicación
miBT.begin(38400); // configura velocidad de módulo bluetooth
}
void loop() {
miBT.println("Mensaje"); //aquí podremos enviar la temperatura registrada
//Pausa de medio segundo para repetir el proceso
delay(500);
}
Es muy importante aquí la utilización de la librería SoftwareSerial que nos permitirá utilizar los pines 8 y 9 como RX y TX para lograr la comunicación que anteriormente se señaló. Así también, esta librería nos permite crear un objeto, aquí denominado "miBT", el cual luego con la función .begin nos permitirá configurar el módulo a una velocidad de 38400 baudios, distinta a los demás componentes del Arduino que se mantendrán a 9600 baudios.
Personalmente en este proyecto se me presentó problema, debido a un error: en un principio conecté el módulo de Bluetooth directamente a los pines TX y RX de Arduino, y no configuré la velocidad del módulo de forma separada, manteniendo la configuración general de 9600 baudios. Al transmitir los datos al dispositivo Android, éste los recibía, pero en un formato desconocido, apareciéndome únicamente caracteres de interrogación (�������) en pantalla del dispositivo que los recibía. Al configurar correctamente la velocidad en el programa con ayuda de la librería SoftwareSerial, el problema se solucionó.
D) Conexión conjunta del circuito y programa
Hasta aquí hemos conectado y programado cada módulo por separado. Veremos ahora la conexión y programación final del proyecto, haciendo funcionar conjuntamente todos los componentes, a fin de tomar la temperatura, mostrarla en pantalla y enviarla vía Bluetooth.Montaje
Para la conexión conjunta de todos los componentes he utilizado una mini protoboard de 400 puntos, en la que he montado el módulo HC05, el módulo MAX6675 al que va conectada la termocupla, y la pantalla LCD la he dejado con una extensión en la que sus pines de comunicación van directamente al Arduino.
La conexión de los pines no ha variado en nada a lo señalado precedentemente. La protoboard sólo se ha utilizado a fin de ordenar relativamente los cables.
Programa
En el programa final, básicamente se ha incluido todo lo explicado anteriormente y se ha compartido el valor de la temperatura entregada por la termocupla a través de la variable flotante temperatura. El código utilizado:
#include <SoftwareSerial.h> //librería para utlizar pines como tx y rx para bluetooth
#include "max6675.h"
#include <Wire.h> // libreria de comunicacion por I2C
#include <LCD.h> // libreria para funciones de LCD
#include <LiquidCrystal_I2C.h> // libreria para LCD por I2C
SoftwareSerial miBT(8, 9); //define los pines que se utilizarán como rx y tx para bluetooth
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7); // DIR, E, RW, RS, D4, D5, D6, D7
float temperatura=0; //Se crea una variable flotante para almacenar la temperatura
//Se definen los pines a usar para conectar el modulo MAX6675
int ktcSO = 11;
int ktcCS = 12;
int ktcCLK = 13;
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);
void setup() {
lcd.setBacklightPin(3,POSITIVE); // puerto P3 de PCF8574 como positivo
lcd.setBacklight(HIGH); // habilita iluminacion posterior de LCD
lcd.begin(16, 2); // 16 columnas por 2 lineas para LCD 1602A
lcd.clear(); // limpia pantalla
//activa comunicacion serial.
Serial.begin(9600);
miBT.begin(38400); // configura velocidad de módulo bluetooth
delay(500);
}
void loop() {
//Leer temperatura.
temperatura=ktc.readCelsius();
//int temp = temperatura;
Serial.println(temperatura);
lcd.setCursor(0, 0);
lcd.print("Temperatura: "); // escribe texto
lcd.setCursor(0, 2); // ubica el cursor para escribir en la segunda línea
lcd.print(temperatura); // toma la variable temperatura y la muestra en la pantalla LCD
lcd.print(" C");
miBT.println(temperatura); //toma la variable temperatura y envía su valor por Bluetooth
//Pausa de medio segundo para repetir el proceso
delay(500);
}
Aquí queda concluida la primera etapa de este proyecto.
En la segunda parte se desarrollará una aplicación móvil a través de AppInventor, comprendiendo principalmente:
- Recepción de datos a través de Bluetooth en un dispositivo Android.
- Visualización de datos a través de un gráfico.
- Otros procesamientos de datos.
No hay comentarios:
Publicar un comentario