Transmissão de dados analógicos no módulo RF usando Arduino (Parte 17/23)

Transmisión de datos analógicos en módulo RF usando Arduino (Parte 17/23)

La transmisión de datos digitales a través de un módulo de RF es bastante común. Los módulos RF 434 son capaces de transmitir datos de 4 bits junto con el byte de dirección. Los circuitos que utilizan módulos de RF para la transmisión de datos digitales son simples y utilizan circuitos integrados de codificador HT12E y decodificador HT12D para la conversión de datos de paralelo a serie y de serie a paralelo, respectivamente. En situaciones de la vida real, la fuente de datos digitales son únicamente computadoras, microcomputadoras o circuitos integrados digitales. El mundo real no es digital, es analógico. La mayoría de los sensores son en realidad sensores analógicos y son capaces de transmitir datos analógicos a formato digital sólo cuando una microcomputadora los procesa del formato analógico al digital.

Los microcontroladores Arduino más utilizados en proyectos de hardware también son capaces de leer datos analógicos y representarlos en formato digital. La digitalización de datos analógicos en un formato digital se puede lograr utilizando la biblioteca virtualWire de código abierto de Arduino. Los datos analógicos leídos se pueden enviar en serie a un transmisor de RF desde cualquier pin de entrada/salida digital.

Este proyecto demuestra la lectura de datos analógicos del sensor LDR mediante una placa Arduino y su transmisión a otra placa Arduino que muestra los datos en forma digitalizada en una pantalla LCD.

Componentes necesarios

Sr. no Componentes necesarios Cantidad
1 Módulo de recepción de RF (434 MHz) 1
dos Módulo de transmisión RF (434 Mhz) 1
3 LDR 1
4 LCD 1
5 bote de 1k 1
6 resistencia de 10k 1
7 Placa de desarrollo arduino pro mini dos
8 Batería – 9V dos
9 Tabla de pan dos
10 Cables de conexión

Diagrama de blocos do transmissor de dados RF analógico baseado em Arduino

Figura 1: Diagrama de bloques del transmisor de datos RF analógico basado en Arduino

Conexiones de circuito

El sensor analógico utilizado en este proyecto es un LDR (resistencia dependiente de la luz). El LDR está conectado al pin A2 del Arduino Pro Mini. El sensor LDR está conectado en una configuración pull-up. En esta configuración, el LDR está conectado entre VCC y la salida (pin A2 de Arduino) y una resistencia pull-up de valor adecuado está conectada entre la salida y tierra. Los datos analógicos leídos desde el pin A2 salen en serie desde el pin 12 (pin de E/S digital) del Arduino, por lo que el pin 12 está conectado al pin 2 del transmisor de RF. El transmisor de RF tiene una antena conectada al pin 4 para un mayor alcance operativo.

En el lado de la pantalla, los datos transmitidos en serie son recuperados por un receptor de RF. El pin 2 del receptor está conectado al pin 11 de la segunda placa Arduino. Se conecta una pantalla LCD a la placa Arduino para mostrar la lectura del sensor recibida. La pantalla LCD 16X2 se conecta a la placa Arduino conectando sus pines de datos a los pines 7 a 4 de la placa Arduino. Los pines RS y E de la pantalla LCD están conectados a los pines 3 y 2 del Arduino ProMini, respectivamente. El pin LCD RW está conectado a tierra.

Tabela listando conexões de circuito entre Arduino Uno e Character LCD

Fig. 2: Tabla que enumera las conexiones del circuito entre Arduino Uno y el LCD de caracteres

La biblioteca de códigos estándar para interconectar Arduino UNO y Arduino Pro Mini se utiliza en el proyecto para programar la pantalla LCD con la placa.

Protótipo do lado do receptor do transmissor de dados RF analógico baseado em Arduino

Fig. 3: Prototipo del lado del receptor de un transmisor de datos de RF analógico basado en Arduino

Cómo funciona el circuito

El sensor LDR funciona según el principio de fotoconductividad. Su resistencia se reduce cuando la luz incide sobre él, al igual que la resistividad del sensor se reduce cuando se expone a la luz. El sensor LDR está conectado en configuración pull-up. El voltaje se reduce primero mediante el LDR y luego mediante la unión de salida y la resistencia pull-up. Cuando la luz incide sobre el LDR, su resistencia se reduce y, por lo tanto, la caída de voltaje a través de la resistencia pull-up en el pin de datos analógicos es mayor. Aunque cuando el LDR está cubierto para restringir su exposición a la luz, el valor de resistencia aumenta de modo que se reduce la caída de voltaje a través de la resistencia pull-up en el pin de datos analógicos. La lectura analógica se realiza en el pin A2 del Arduino Pro Mini. Esto se puede hacer en cualquier pin del A0 al A7 del Arduino Pro Mini.

Los datos analógicos leídos se almacenan digitalmente en una variable en el código del programa que se convierte a una forma decimal digitalizada mediante la lógica del programa. La lectura digitalizada sale en serie desde el pin 12 de la placa Arduino en el lado del transmisor hasta el transmisor de RF.

La lectura digitalizada es detectada por el receptor de RF y sale en serie desde el pin 2 del receptor al pin 11 de la placa Arduino en el lado del receptor. La lectura se muestra en una pantalla LCD utilizando funciones de la biblioteca estándar lcd.h en el código del programa. La ejecución principal del proyecto está orientada al software, por lo que el código del programa es el que debe entenderse cuidadosamente.

Protótipo do lado do transmissor do transmissor de dados RF analógico baseado em Arduino

Fig. 4: Prototipo del lado del transmisor de un transmisor de datos de RF analógico basado en Arduino

Guía de programación

En el lado del transmisor, la placa Arduino debe leer la lectura analógica en forma de caída de voltaje a través del pin de interfaz del sensor. Para lo mismo se importa la biblioteca VirtualWire.

#incluir

Se conectó un LED al pin 13 para una indicación visual de la transmisión de datos. Se declara una variable "ledPin" y se asigna al pin 13. El sensor LDR se conecta al pin A2, luego se declara una variable "Sensor1Pin" y se asigna al pin A2 del Arduino. Se declara una variable "Sensor1Data" para obtener lecturas analógicas digitalmente y se crea la matriz "Sensor1CharMsg" para una representación decimal precisa de 3 dígitos de la lectura.

//LED

constante int ledPin = 13;

//Sensores

constante int Sensor1Pin = A2;

int Sensor1Datos;

Se llama a una función de configuración, dentro de la cual el pin con interfaz LED se configura en salida digital y el pin con interfaz de sensor se configura en modo de entrada usando la función pinMode. La velocidad en baudios de Arduino se establece en 9600 bits por segundo usando la función Serial.begin. La velocidad en baudios para la salida en serie se establece en 2000 bits por segundo utilizando la función vw_setup de la biblioteca VirtualWire.

Se llama a una función de bucle donde los datos analógicos del pin A2 se leen usando la función analogRead y se asignan a la variable Sensor1Data. El valor Seria1Data se convierte a una representación en formato decimal y se almacena en la matriz Sensor1CharMsg utilizando la función de conversión de entero a carácter de ito.

bucle vacío

Las lecturas almacenadas en la variable y la matriz se almacenan en serie mediante la función Serial.print.

El pin de la interfaz LED está configurado en ALTO para encender el LED como indicación de transmisión de datos. La lectura almacenada en la matriz Sensor1Char se convierte a caracteres sin signo hasta que los cuatro elementos de la matriz se convierten al formato de caracteres sin signo. Los caracteres se envían en serie usando la función vw_send y la función vw_wait_tx se usa para continuar la transmisión hasta que todos los datos (los cuatro caracteres) se eliminen en serie del búfer. El LED está apagado para indicar que la transmisión de datos se ha completado.

En el lado del receptor, nuevamente se importa la biblioteca VirtualWire para leer datos analógicos.

Se asigna una variable ledPin al pin 13 donde está conectado el LED indicador de recepción de datos. Se declara una variable Sensor1Data para leer la lectura de datos como un número entero y se crea la matriz Sensor1CharMsg para asignar la forma decimal de la lectura de datos.

Se llama a una función de configuración, donde la velocidad en baudios de Arduino del lado del receptor se establece en 9600 bits por segundo usando la función Serial.begin. El pin conectado al LED se define como salida digital.

El módulo transmisor y receptor de RF no tiene un pin Push To Talk. Están inactivos cuando no hay datos presentes para transmitir o recibir respectivamente. Por lo tanto, vw_set_ptt_inverted(true) se utiliza para configurar la polaridad de pulsar para hablar y solicitar al receptor que continúe recibiendo datos después de recuperar el primer carácter. La velocidad en baudios para la entrada en serie se establece en 2000 bits por segundo mediante la función vw_setup. La recepción de datos se inicia mediante la función vw_rx_start.

Se llama a una función de bucle donde los datos en el búfer del microcontrolador se leen y se muestran en la pantalla LCD. Se declara una matriz "buf" de tipo char unsigned para recuperar los bytes de caracteres recibidos y se declara la variable "buflen" para almacenar la longitud de los datos del buffer recibidos.

El búfer de caracteres recibidos se lee usando la función vw_get_message y se inicializa un contador "i". El pin de la interfaz LED se establece en ALTO para indicar que se han recibido datos y el búfer de caracteres recibidos se convierte al tipo de datos de caracteres y se almacena en la matriz Sensor1Msg.

El último carácter de la matriz se establece en carácter nulo, de modo que si el búfer de lectura tiene menos de cuatro dígitos, no mostrará un valor basura en la pantalla LCD. Los elementos de la matriz Sensor1Msg se convierten a números enteros y se almacenan en la matriz Sensor1Data. Los números enteros de la matriz Sensor1Data se muestran en la pantalla LCD usando la función Serial.print y el pin de la interfaz LED está configurado en BAJO para apagar el LED como una indicación visual de que los datos se han leído y mostrado correctamente. La lectura analógica se leyó en el proyecto como la lectura de voltaje en el pin analógico del Arduino Pro Mini.

La lectura del sensor no ha sido calibrada para mostrar ninguna cantidad física real, como la intensidad de la luz o la luminosidad, en el caso de un sensor basado en luz. Sin embargo, la lectura real de una cantidad física se puede mostrar a través del diseño juzgando la calibración del sensor en relación con la cantidad física que se está midiendo. La lógica para convertir la lectura de voltaje en la medición de la cantidad física bajo observación se puede incorporar a la lógica del programa basada en la calibración del sensor.

Código fuente del proyecto

###

 #incluir

 // LED

 constante int ledPin = 13;

 // Sensores

 constante int Sensor1Pin = A2;

 int Sensor1Datos;

 char Sensor1CharMsg(4);

 configuración nula {

 // Modos Pin

 // CONDUJO
 pinMode(ledPin,SALIDA);

 // Sensor(es)

 pinMode(Sensor1Pin,ENTRADA);

 // para depurar

 Serie.begin(9600);

 // configuración de VirtualWire

 vw_setup(2000); // Bits por segundo

 }
 // Leer y almacenar datos del Sensor 1

 Sensor1Data = analogRead(Sensor1Pin);

 // Convierte datos enteros a una matriz Char directamente

 itoa(Sensor1Datos,Sensor1CharMsg,10);
// DEPURAR

 Serial.print("Sensor1 Entero: ");

 Serie.print(Sensor1Data);

 Serial.print(" Sensor1 CharMsg: ");

 Serial.print(Sensor1CharMsg);

 Serial.println(" ");

 retraso(1000);

 // FINALIZAR LA DEPURACIÓN
 escritura digital (13, verdadero); // Enciende una luz para mostrar la transmisión

 vw_send((uint8_t *)Sensor1CharMsg, strlen(Sensor1CharMsg));

 vw_wait_tx; // Espera hasta que desaparezca todo el mensaje

 escritura digital (13, falso); // Apaga una luz después de la transmisión

 retraso(200);

 } // FINALIZAR bucle vacío...

 #incluir // LED
 intledPin = 13;

 // Sensores

 int Sensor1Datos;

 // Contenedor de transmisión RF

 char Sensor1CharMsg(4);
 configuración nula {

 Serie.begin(9600);

 // establece el pin digital como salida

 pinMode(ledPin, SALIDA);

 //Cable virtual

 // Inicializa IO e ISR

 // Requerido para DR3100

 vw_set_ptt_inverted(verdadero);

 // Bits por segundo

 vw_setup(2000);
 // Inicia la ejecución del PLL del receptor

 vw_rx_start;

 } // FINALIZAR la configuración nula
 bucle vacío {

 uint8_t buf(VW_MAX_MESSAGE_LEN);

 uint8_t buflen = VW_MAX_MESSAGE_LEN;

 // Sin bloqueo
 
si (vw_get_message(buf, &buflen))
 {

 ent i;

 // Enciende una luz para mostrar el buen mensaje recibido.

 escritura digital (13, verdadero);

 // Mensaje con una buena suma de comprobación recibida, descárgalo.

 para (i = 0; i < buflen; i++)
 {

 // Rellena la matriz Sensor1CharMsg Char con el correspondiente

 // caracteres del buffer.

 Sensor1CharMsg(i) = char(buf(i));

 }
 // Terminación nula de la matriz de caracteres

 // Esto debe hacerse, de lo contrario ocurrirán problemas

 // cuando los mensajes entrantes tienen menos dígitos que los

 // uno antes.

 Sensor1CharMsg(buflen) = '';

 // Convierte la matriz de caracteres Sensor1CharMsg a un número entero

 Sensor1Data = atoi(Sensor1CharMsg);
 // DEPURAR

 Serie.print("Sensor 1: ");

 Serie.println(Sensor1Data);

 // FINALIZAR LA DEPURACIÓN

 //Apaga la luz y espera el siguiente mensaje

 escritura digital (13, falso);

 }

 } 

###

Diagramas de circuito

Diagrama de circuito del transmisor de datos RF analógico basado en Arduino

Vídeo del proyecto

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.