Вы находитесь на странице: 1из 8

HIGRÓMETRO CON MODULO DE

COMUNICACION RF (433MHz)
SIMPLEX CRC
Autores: Catherine Rendón Acosta, Daniela Quintero Romero, Ian Alexander López
Peña, Wilson Fernando López Santacruz y Andrés Felipe Martin Gaviria
Universidad Tecnológica de Pereira, Risaralda, Colombia
Correo-e: Fernando.lopez1@utp.edu.co, Catherine.rendon@utp.edu.co,
ian.lopez@utp.edu.co daniela.quintero12@utp.edu.co, anfema@utp.edu.co

Resumen— Para este proyecto se busca llevar a la practica el


II. CONTENIDO
montaje de un dispositivo que mida la humedad del suelo
(Higrómetro) donde su información tomada pueda ser
transmitida de forma inalámbrica mediante los módulos de
transmisión, recepción RF (433MHz), basándose en una a. Materiales
comunicación simplex con CRC. El montaje y desarrollo será
explicado a continuación donde se explicará la programación  Alambre de cobre esmaltado
Arduino uno
y la realización de pruebas.
 Arduino Mega Sensor FC- 28
Palabras clave— Comunicación, CRC, parametrización,  Módulos RF
programación, recepción, simplex, transmisión. (433MHz)
 Protoboard
Abstract— The aim of this project is to implement the  Cables
installation of a device to measure soil humidity (hygrometer)
where the information collected can be transmitted wirelessly b. Procedimiento
through the transmission modules, RF reception (433MHz), El procedimiento está desarrollado bajo la consideración de un
based on simplex communication with CRC. The assembly proyecto paulatino, llevado a cabo por pasos y que ha sido
and development will be explained below where programming ensamblado a diferentes parámetros a medida de su desarrollo.
and testing will be explained.
1. Se consulta las características físicas y digitales del sensor a
Key Word— Communication, CRC, parameterization, usar para una parametrización de señal más acorde para nuestro
programming, reception, simplex, transmission. laboratorio.

2. Se realizan pruebas y se perciben errores en la medición. El


sensor funciona de manera inversa, es decir, interpreta el dato de
I. INTRODUCCIÓN
1023 como 0% y el de 0 como 100%. Se realizan las correcciones
a través del código en Arduino.

Actualmente es altamente demandado ciertos instrumentos de 3. Se consultan la hoja de datos de los módulos RF (433MHz).
medición para el sector de la agroindustria y el control de riegos, Así como la del Arduino UNO y Arduino Mega para visualizar la
teniendo en cuenta la temperatura, humedad y demás parámetros resolución y características del dispositivo que se va a usar.
importantes es por esto que un higrómetro es una pieza clave al
4. Se hacen las respectivas conexiones del Arduino con el sensor y
igual que la comunicación y el reporte de datos que se envían para
la conexión con el emisor de RF. La recepción se hace a través de
el control y la automatización del mismo
la adaptación de un Arduino Mega.
Los módulos RF de 433Mhz son muy populares por su bajo costo
5. Posteriormente se diseñó el protocolo de transmisión
y fácil uso. Vienen en pareja, emisor (FS1000A) y receptor (XY-
(HandShaking). Para esto se realizó una trama de datos como guía
MK-5V) y son de baja velocidad de transmisión, pero para
para adaptarlo posteriormente al código (ver anexos). Las
aplicaciones básicas son muy útiles. [1]
componentes del, crc, checksum y el data se definieron a partir del
Este proyecto integra las cualidades de los módulos RF para la código, con la adquisición de la señal. Por ello no aparecen en la
generación de una comunicación simplex usando un protocolo que trama guía como valores constantes. Asimismo, se integró al
permite detectar errores en la trama. código que ya se tenía de la comunicación simplex, la parte del
CRC, para ello se declararon las diferentes variables, se crearon emisión como para la recepción.
rutinas que cumplieran con los parámetros establecidos en la guía
y se dispuso a desarrollar los programas necesarios tanto para la 6. Se acondiciona las antenas a los módulos ya que es necesario
realizarle una antena de cobre de 30cm para la emisión y 17cm Por su parte, los módulos RF también presentan una conexión
para la recepción esto con el fin de lograr una correcta transmisión simple, cada uno tiene sus respectivas conexiones a 5V y a GND.
de los datos. Adicional a eso se conectan a los pines Tx y Rx del arduino para
desarrollar el proceso de transmisión y recepción inalámbrica. (ver
7. Se hacen las pruebas para verificar que el sensor si este
anexos)
funcionado y que si se estén leyendo sus datos conectando
directamente ambos Arduinos, una vez verificado que la 3) Módulos RF (433MHz)
información es correcta se procede a realizar la verificación con
los módulos RF. (ver anexos) [3] Los módulos de radio frecuencia RF 433MHz son
transmisores/receptores inalámbricos que podemos emplear como
8. Se hacen las pruebas con el aplicativo proporcionado por el forma de comunicación entre procesadores como Arduino. Este
docente (APPX433). tipo de módulos emisor (FS1000A) y el receptor (XY-MK-5V) se
c. Reseña bibliográfica han hecho populares como medio de comunicación,
1) Higrómetro FC-28 [2] principalmente, por su bajo coste.

Un higrómetro de suelo FC-28 es un sensor que mide la humedad La frecuencia de operación es de 433MHz, aunque también
del suelo. Son ampliamente empleados en sistemas automáticos de existen módulos similares a 315MHz. Ambas frecuencias
riego para detectar cuando es necesario activar el sistema de pertenecen a bandas libres, por lo que su uso es gratuito.
bombeo. El FC-28 es un sensor sencillo que mide la humedad del
El alcance depende del voltaje con el que alimentemos el módulo
suelo por la variación de su conductividad. No tiene la precisión
y la antena que usemos. A 5V y con la antena del módulo, el
suficiente para realizar una medición absoluta de la humedad del
alcance difícilmente excederá de los 2 metros. Alimentando a 12V
suelo, pero tampoco es necesario para controlar un sistema de
y con una antena de cobre de 16.5cm el rango en exteriores puede
riego.
alcanzar 300 metros. La comunicación es simplex (canal único y
El FC-28 se distribuye con una placa de medición estándar que unidireccional) y tienen baja velocidad de transmisión
permite obtener la medición como valor analógico o como una (típicamente 2400bps). Se realiza, básicamente, por modulación
salida digital, activada cuando la humedad supera un cierto ASK (amplitude shift keying). No disponen de filtro ni ID por
umbral. hardware, por lo que si queremos una comunicación robusta
tendremos que implementarlo por software
Los valores obtenidos van desde 0 sumergido en agua, a 1023 en
el aire (o en un suelo muy seco). Un suelo ligeramente húmero
daría valores típicos de 600-700. Un suelo seco tendrá valores de
800- 1023.

La salida digital dispara cuando el valor de humedad supera un


cierto umbral, que ajustamos mediante el potenciómetro. Por
tanto, obtendremos una señal LOW cuando el suelo no está
húmedo, y HIGH cuando la humedad supera el valor de consigna.
El valor concreto dependerá del tipo de suelo y la presencia de
elementos químicos, como fertilizantes. Además, no todas las Figura 2.Modulos RF
plantas requieren la misma humedad, por lo que lo mejor es que
hagáis una pequeña calibración en el terreno real. Este tipo de comunicación RF 433MHz es muy frecuente en
proyectos caseros de electrónica y robótica, debido a su bajo
2) Montaje precio y medio-largo alcance en condiciones adecuadas, aunque
debemos tener en cuenta que la calidad de la comunicación puede
El esquema eléctrico del sensor es sencillo. Se alimenta
ser limitada.
conectando GND y 5V a los pines correspondientes de Arduino.
Si se quiere usar la lectura analógica, se conecta la salida A0 a una
de las entradas analógicas de Arduino.
4) Código de redundancia cíclica

[4] Los CRC (Códigos de Redundancia Cíclica), también


llamados códigos polinómicos, constituyen el método de
detección de errores más empleado en comunicaciones. Su uso
está muy extendido porque pueden implementarse en hardware
con mucha facilidad. Estos códigos se basan en el uso de un
polinomio generador G(X) de grado r, y en el principio de que n
bits de datos binarios se pueden considerar como los coeficientes
de un polinomio de orden n-1. Por ejemplo, en nuestro caso los
datos 1010101010101 pueden tratarse como el polinomio 𝑥12 + 𝑥10
Figura 1. Higrometro FC-28 + 𝑥 8 + 𝑥 6 + 𝑥 4 + 𝑥 2 + 1. A estos bits de datos se añaden r bits
de redundancia de forma que el polinomio resultante sea divisible
por el polinomio generador, sin generar resto (figura B.1). El
receptor verificará si el polinomio recibido es divisible por G(X).
Si no lo es, habrá un error en la transmisión.
5) Comunicación Simplex
[2] LUIS LLAMAS “Medir la Humedad del suelo con arduino e
[5] En este modo solo es posible la transmisión en un sentido, del
higrómetro” https://www.luisllamas.es/arduino-humedad-suelo-fc-
terminal que origina la información hacia el que la recibe y
procesa. Un ejemplo claro de este tipo son las emisoras de 28/ 18 de febrero 2020
radiodifusión.
[3] LUIS LLAMAS “Comunicación Inalámbrica en arduino con
La transmisión simplex (sx) o unidireccional es aquella que Módulos RF433mhz” https://www.luisllamas.es/comunicacion-
ocurre en una dirección solamente, deshabilitando al receptor de inalambrica-en-arduino-con-modulos-rf-433mhz/
responder al transmisor. Normalmente la transmisión simplex no
[4] Bibing.us.es. [Online].
se utiliza donde se requiere interacción humano-máquina.
http://bibing.us.es/proyectos/abreproy/11199/fichero/Volumen+I
%252FAPENDICE+B.pdf. 30 de abril 2020

d. Conclusiones [5] "TRANSMICION DE DATOS SIMPLEX, HALF - DUPLEX,


FULL - DUPLEX", Telematicaseuat.blogspot.com, 2018.
A partir del proyecto realizado se permitió tener un acercamiento [Online].
a la comunicación inalámbrica con la implementación de los http://telematicaseuat.blogspot.com/2018/01/transmicion-de-
módulos RF 433MHz. Se pudo apreciar cómo ésta permite la datos-simplex-half.html. 30 de abril 2020
libertad de movimiento, evita la necesidad de cableado y de una
forma más desarrollada, permite una cobertura en puntos de difícil
acceso.

Se pudo considerar diferentes aplicaciones relacionadas al control


y monitoreo de variables, así como la curiosidad hacia el
desarrollo de aplicaciones sencillas y robustas que permitan la
visualización de las variables monitoreadas.

La integración de un nuevo sistema de verificación ce trama como


lo es el CRC nos permitió conocer más sobre cómo podemos estar
seguros de que la información enviada y recibida es la correcta.

Finalmente cabe resaltar la importancia de la programación para el


desarrollo del cometido. Por lo cual se hizo imperante el
manifiesto de las destrezas en el área de programación, así como la
necesidad de mejoramiento e indagación en la misma.

Por otro lado, Los módulos RF 433MHz resultaron útiles y


pertinentes para introducir el concepto y apreciación de la
comunicación inalámbrica. Sin embargo, cabe destacar que estos
suelen tener un rendimiento pobre. Algunos pequeños trucos
como la adecuación de antenas y de alimentación les darán más
eficacia incluso para distancias cortas.

e. Recomendaciones

Para conseguir una señal sin perturbaciones ni ruidos se debe


acondicionar con una antena preferiblemente de cobre esmaltado.

Se debe realizar siempre una parametrización para conocer el


comportamiento de las variables y los diferentes dispositivos ya
que, para nuestro caso, el sensor no dio el 100% por lo cual toco
entrar a realizar ajustes.

El proceso de programación es arduo y largo, por lo cual se hace


necesario tener conocimiento del lenguaje a trabajar y el sistema
embebido.

f. Bibliografía

[1] NAYLAMP MECHATRONICS “Comunicación Inalámbrica


con módulos de RF de 433Mhz”
https://naylampmechatronics.com/blog/32_comunicacion-
inalambrica-con-modulos-de-rf-de.html
Tabla 1. Parametrización del sensor

Tabla 2. Caracterización de la señal dada por el sensor FC- 28

1. Conexiones

Esquema conexiones módulos RF433 Esquema conexiones para pruebas

2. Trama de datos
3. Códigos

Código para el emisor:

float F; // Variable para almacenar el valor obtenido del sensor (0 a 1023)


byte Tx[19]={0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00, 0x00};
int dato;
int origen=44444;
int destino=32429;
String dato1=" ";
bool flag;
int CRC;
#define SOH 1
#define EOT 4
#define command 192

void crc()
{
CRC = 0x0000FFFF;
for(int i=1; i<=15;i++)//15 de 19 datos
{CRC = CRC^Tx[i];
for(int j=0;j<8;j++)
{ flag = bitRead(CRC,0);
CRC = CRC>>1;
//VALOR POLINOMIO GENERADOR X12+X10+X8+X6+X4+X2+1=0X1555
//1 0 1 0 1 0 1 0 1 0 1 0 1
if(flag==1) CRC = CRC^0x1555;
}
}
Tx[16]=CRC;
Tx[17]=CRC>>8;
}

void imprime()
{ crc();
for(int i=0;i<19;i++)
{ Serial.write(Tx[i]);
}
Serial.println();
}

void setup() {

Serial.begin(2400,SERIAL_8N1);
Tx[0]=SOH;
Tx[1]=command;
Tx[3]=destino;//destino nible bajo L
Tx[2]=destino>>8;//destino nible alto H
Tx[5]=origen;//=origL
Tx[4]=origen>>8;//=origH
Tx[18]=EOT;//caracter de finalizacion

void loop()
{ dato1=" ";
dato=analogRead(1);
F=(dato*0.0977);
F=100-F;
if(F==100)dato1=" ";
if(F<10)dato1=" ";
dato1=F+dato1;
dato1=dato1+"%";

for(byte i=0;i<10;i++)
{ Tx[i+6]=dato1[i] ;}//almacenamos lectura de datos de la posicion 6 hasta 15
imprime();
delay(1000);

Código para el receptor:

byte otra,lectura[19]={0x00,0x00,0x00,0x00,0x00,0x00,48,48,48,48,48,48,48,48,48,48,0x00,0x00,0x00};
byte Tx[19]={0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00, 0x00};
int incremento, dato;//variable de 2 bytes

int origen=44444;
int destino=32429;
int CRC;
byte csH=0,crcH=0;
byte csL=0,crcL=0;
bool espera,valido,flag=0,crcOK;
String dato1=" ";

int checksum=0;
#define STX 2
#define ETX 3
#define SOH 1
#define EOT 4
#define command 192

void crc()
{
CRC = 0x0000FFFF;
for(int i=1; i<=15;i++)//15 de 19 datos
{CRC = CRC^lectura[i];
for(int j=0;j<8;j++)
{ flag = bitRead(CRC,0);
CRC = CRC>>1;
//VALOR POLINOMIO GENERADOR X12+X10+X8+X6+X4+X2+1=0X1555
//1 0 1 0 1 0 1 0 1 0 1 0 1
if(flag==1) CRC = CRC^0x1555;
}
}
crcL=CRC;//captura
crcH=CRC>>8;
//VERIFICACION COINCIDENCIA CRC/////
if((lectura[16]==crcL)&&(lectura[17]==crcH))
{crcOK=1;}
else{crcOK=0;}
}

void check()
{ for(int i=1; i<=15;i++)//15 de 19 datos
{checksum+=Tx[i];
}
Tx[17]=checksum;
Tx[16]=checksum>>8;
}

void imprime()
{ check();
for(int i=0;i<19;i++)
{ Serial.write(Tx[i]);
}

void recibe()
{while(Serial1.available())
{
if(espera == false)
{
if(Serial1.read ()== SOH)
{
espera = true;
incremento = 1;
}
}
else
{
otra = Serial1.read();
lectura[incremento] = otra;
incremento++;
if(incremento > 18)//17
{
espera = false;
}
if(otra ==EOT)valido=1;
else{valido=0;}
}
}
}
//////////////////////////programa principal

void setup()
{pinMode(13,OUTPUT);
Serial.begin(9600,SERIAL_8N1);
Serial1.begin(2400,SERIAL_8N1);
Tx[0]=STX;
Tx[1]=command;
Tx[3]=destino;//destino nible bajo L
Tx[2]=destino>>8;//destino nible alto H
Tx[5]=origen;//=origL
Tx[4]=origen>>8;//=origH
Tx[18]=ETX;//caracter de finalizacion

void loop()
{
recibe();///////////////////////////////////////////////////
/////VERIFICACION CRC Y CARACTERES SOH Y EOT
if((valido==1)&&(crcOK==1)) //
{ for(int i=6;i<16;i++)
{Tx[i]=lectura[i];
}
imprime();
delay(1000);
}
checksum=0;
}

Вам также может понравиться