Telemetría Inalámbrica con LoRa y Arduino: Temperatura y RSSI en Tiempo Real
Arduino + LoRa SX1278: Monitoreo de temperatura e intensidad de señal
Este proyecto sirve para comprender cómo implementar un sistema de telemetría con LoRa básico y Arduino Uno. Se trata de un sistema de comunicación LoRa de largo alcance o transmisión inalámbrica de datos de sensores para Arduino. En este caso, enviaremos el valor de temperatura detectado por un sensor LM35 y también mediremos la intensidad de la señal recibida, lo cual puede ser muy útil para profundizar en otros proyectos relacionados.
Se trata de un sistema de monitoreo remoto con Arduino, que se implementa mediante módulos LoRa de 433 MHz. Principalmente, utilizaremos un transmisor y un receptor. En este caso, la temperatura inalámbrica y la intensidad de señal LoRa (RSSI) se muestran en el receptor a través de una pantalla LCD Arduino I2C de 16x2, todo en tiempo real. También existe la posibilidad de visualizar la recepción de estos datos LoRa en un ordenador mediante un monitor serie, de forma similar a un proyecto IoT pero sin conexión a internet, o comunicación sin internet. En este caso, este tipo de aplicación está pensada para largo alcance.
Diagramas del proyecto:
A continuación presentamos los correspondientes diagramas del transmisor y receptor:
Transmisor LoRa 433MHz:
Circuito para transmisión de datos inalámbrica, temperatura inalámbrica
Receptor LoRa 433 MHz:
Circuito para recepción de datos LoRa,
Mostrar datos LoRa en pantalla LCD I2C: conectamos módulo i2c a Arduino
Materiales del proyecto LoRa de 433 MHz con pantalla LCD de 16x2:
- 2 Arduino Uno (genéricos u originales, según tu presupuesto)
- 2 módulos LoRa SX1278, Ra02, con antenas incluidas (transceptores para 433MHz, o puede usar otros para la frecuencia que mejor le convenga).
- 2 placas prototipo.
- Cables para las conexiones en la placa prototipo.
- Sensor de temperatura LM35 (analógico).
- Fuentes de alimentación, baterías externas (5 voltios).
- Módulo i2c, para conectar una pantalla LCD de 16x2 a Arduino.
- Pantalla LCD de 16x2, con terminales para conexión a la placa prototipo.
- Ordenador con el IDE de Arduino instalado.
- 2 condensadores electrolíticos de 470 uF.
Conexiones (Transmisor y Receptor)
El módulo LoRa SX1278 se comunica a través de SPI.
Módulo LoRa
Arduino UNO
Notas
VCC
3,3 V
No conectar a 5V
GND
GND
SCK
D13
MISO
D12
MOSI
D11
NSS/CS
D10
RST
D9
DIO0
D2
Pin de interrupción
Recomendaciones para el módulo LoRa SX1278:
- Conecte el condensador de 470 uF entre VCC (3,3 V) y GND del módulo LoRa; esto ayuda a mantener estable la tensión de alimentación de este módulo, lo que evitará que funcione mal.
- Nunca encienda el módulo LoRa sin antes conectar su antena al terminal correspondiente, ya que de lo contrario el módulo podría dañarse.
Conexión del sensor de temperatura, lm35 (transmisor):
• Pin 1 (VCC): 5V del Arduino.
• Pin 2 (Salida de señal - OUT): Pin analógico A0 de Arduino.
• Pin 3 (GND): Tierra del Arduino.
Recomendaciones para el sensor de temperatura:
En este caso, utilizo un módulo LM35 montado en una pequeña placa de circuito impreso (PCB), conectado a otros componentes electrónicos para reducir el ruido que puede afectar al sensor durante su funcionamiento y, de esta forma, obtener una lectura de voltaje más fiable. De lo contrario, si solo se conecta el sensor, pueden surgir problemas que provoquen lecturas erróneas o un mal funcionamiento. En la imagen de abajo puedes ver el sensor que utilizo, aunque la verdad no es el único que existe, hay diferentes versiones de este tipo de módulo que incluye la PCB, en este caso solo varía el orden de los pines.
Sensor de temperatura, usado en la práctica
Conecta el módulo i2c a la pantalla LCD y al Arduino:
Conectar una pantalla LCD de 16x2 a Arduino mediante el protocolo I2C es sencillo y solo requiere 4 cables: VCC, GND, SDA y SCL. El adaptador I2C (generalmente con el chip PCF8574) simplifica el cableado, permitiendo conectar el pin SDA al pin A4 y el SCL al pin A5 de Arduino Uno. Para ello, es necesario instalar la librería LiquidCrystal_I2C. Además, si se desea, se pueden conectar los terminales VCC y GND del módulo I2C a los terminales de 5 voltios y GND correspondientes de Arduino, en caso de no querer utilizar una fuente de alimentación independiente.
Otra ventaja es que no necesitas conectar un potenciómetro externo para controlar el contraste de la pantalla LCD, ya que este módulo lo incluye de serie, lo que también ahorra espacio; en este caso, puedes ajustarlo con un destornillador.
El módulo viene listo para conectarlo a la placa de prototipos, según la cantidad de terminales de la pantalla LCD, o si lo prefiere, puede soldarlo directamente a la pantalla LCD según los terminales disponibles. Por defecto, el módulo solo proporciona la señalización de los 4 pines principales, pero en la imagen de arriba podrá ver cómo se conecta en la placa de prototipos, siguiendo los terminales de la pantalla LCD y observando en qué lado se encuentra el potenciómetro (cuadrado celeste) del módulo I2C.
Recomendación para el módulo i2c:
El módulo i2c puede tener dos direcciones posibles (0x27 o 0x3F). Si no sabes cuál es, puedes ejecutar el archivo correspondiente del IDE de Arduino, cuya ruta es Archivo > Ejemplos > Cable > i2c_scanner, cargar el programa en el Arduino y activar el monitor serie para ver la dirección correcta del módulo i2c (para ello, obviamente, debes tener el módulo i2c conectado al Arduino).
Busque el archivo para ver la dirección del módulo i2c.
Subiendo el archivo a Arduino Uno
Visualización de la dirección correcta del módulo I2C en el monitor serie del IDE de Arduino.
Una vez obtenida esta dirección del módulo i2c (0x27), la colocaremos en el código correspondiente del receptor.
Códigos del sistema de monitorización LoRa, comunicación LoRa con Arduino
Código del transmisor (LoRa 433MHz):
#include <SPI.h>
#include<LoRa.h>//Librería para conectar Lora
constint lm35Pin = A0; // Pin analógico para el LM35
float temperatura;//Variable para almacenar la temperatura
voidsetup(){
Serial.begin(9600);
while(!Serial);
Serial.println("Iniciando Transmisor LoRa...");
// Frecuencia 433E6 para 433MHz
if(!LoRa.begin(433E6)){
//Ajustar a 915E6 o 868E6 según el módulo
Serial.println("Error al iniciar LoRa!");
while(1);
}
}
voidloop(){
// Leer LM35
int rawValue = analogRead(lm35Pin);
// Convertir a grados Celsius
temperatura = (rawValue * 5.0 * 100.0) / 1024.0;
Serial.print("Enviando temperatura: ");
Serial.print(temperatura);//Imprimir temperatura en monitor serial
Serial.println(" C");
// Enviar por LoRa
LoRa.beginPacket();
LoRa.print(temperatura);
LoRa.endPacket();
delay(5000); // Enviar cada 5 segundos
}
Código del receptor (LoRa 433MHz):
#include<SPI.h>//Librería para comunicación SPI
#include<LoRa.h>//Librería para conectar Lora
#include<LiquidCrystal_I2C.h>//Librería para conectar LCD mediante i2c
LiquidCrystal_I2C lcd(0x27,16,2);
//La dirección por defecto del módulo i2c es 0x27
voidsetup() {
lcd.init();//Inicializando LCD
lcd.clear();//Limpiando LCD
lcd.backlight();//Poner fondo negro al iniciar
Serial.begin(9600);
while(!Serial);
Serial.println("Iniciando Receptor LoRa...");
// Frecuencia 433E6 para 433MHz
if(!LoRa.begin(433E6)) {
//Ajustar a 915E6 o 868E6 según el módulo
Serial.println("Error al iniciar LoRa!");
while(1);
}
}
voidloop() {
intpacketSize = LoRa.parsePacket();
if(packetSize) {
// Paquete recibido
lcd.setCursor(0,0);
Serial.print("Temperatura recibida: ");// Mensaje en monitor serial
lcd.print("Grados: ");//Mensaje para la LCD
while(LoRa.available()) {
String LoRaData = LoRa.readString();
//Almacenamos en un string el dato recibido
Serial.print(LoRaData);//Visualizando dato recibido en serial
Serial.print("°");
lcd.print(LoRaData);//Visualizando en LCD
lcd.write(223); // Muestra el símbolo de grado en LCD
Serial.println("C");
lcd.println("C ");
}
lcd.setCursor(0,1);
Serial.print(" | RSSI: ");
//Indicando que se visualiza fuerza de señal RF
lcd.print(" | RSSI: ");
Serial.println(LoRa.packetRssi());
// Fuerza de señal recibida RF (en dbm)
lcd.print(LoRa.packetRssi());
}
}
Recomendaciones adicionales de estos códigos: Revisa que tengas todas las librerías instaladas, caso contrario los códigos no funcionarán.
Visualización de datos LoRa, en monitor serial:
Vamos visualizar los datos que se despliegan en el monitor serial, correspondientes al transmisor y el receptor:
Visualizando transmisión datos LoRa en monitor serial
Visualizando la recepción de datos LoRa en monitor serial
Aclaración las imágenes no están sincronizadas, se hicieron las capturas a diferentes momentos. Mira más detalles de este proyecto en este video:
No hay comentarios.:
Publicar un comentario