Es habitual utilizar pantallas en estaciones de ferrocarril, aeropuertos, paradas de autobús y otros lugares públicos para mostrar mensajes o alertas. Al igual que en la estación de tren, se instalan tableros de anuncios en el andén para mostrar la alerta de que un tren llega al andén y mostrar los números de vagón en la ubicación específica del andén. Se utilizan pantallas similares en aeropuertos y paradas de autobús para mostrar información útil a los viajeros. Incluso en bancos y oficinas se utilizan pantallas para mostrar el número de token actual u otra información relevante del cliente. Estas tarjetas de visualización obtienen la información que se mostrará en una computadora. A menudo, la computadora y la placa del monitor están conectadas mediante un cable para la transmisión de datos.
La conexión por cable entre la computadora y el tablero de visualización es suficiente y viable hasta que el mensaje se envía a una sola unidad de visualización. Al igual que un cajero de banco, la conexión por cable entre la computadora y el tablero de visualización de fichas ya no es costosa debido a la necesidad de un cable corto, y no es muy compleja ya que solo es necesario conectar un tablero de visualización a la computadora. Este no es el caso de los paneles informativos instalados en estaciones de ferrocarril y aeropuertos. El coste de instalación de una conexión por cable se vuelve más caro y complejo en este caso. Por lo tanto, la computadora y las tarjetas de video deben estar conectadas de forma inalámbrica.
Fig. 1: Prototipo de circuito del lado de la PC para comunicación de datos por RF con la PC
Este proyecto muestra una transmisión inalámbrica similar de mensajes desde una computadora a los circuitos de visualización utilizando un módulo de RF de 434 MHz. El módulo de RF tiene un alcance de entre 50 y 60 metros y se puede extender a 300-350 metros usando una antena y aumentando la potencia de transmisión.
Por lo tanto, este proyecto de bajo costo se puede instalar en lugares públicos para conectar varias tarjetas gráficas a una computadora. Una computadora no puede interactuar directamente con el módulo de RF, por lo que debe conectarse a través del módulo de RF mediante una placa Arduino.
Componentes necesarios
Sr. No. | Componentes necesarios | Cantidad |
---|---|---|
1 | Módulo de recepción RF (434 Mhz) | 1 |
dos | Módulo de transmisión RF (434 Mhz) | 1 |
3 | PC de escritorio con software Arduino | 1 |
4 | LCD | 1 |
5 | bote 1K | 1 |
6 | resistencia de 10K | 1 |
7 | Placa de desarrollo arduino pro mini | dos |
8 | Batería – 9V | dos |
9 | tablero de prueba | dos |
10 | Cables de conexión |
Figura 2: Diagrama de bloques de comunicación de datos de PC a Arduino RF
Conexiones de circuito
Los datos que se transmitirán a las unidades de visualización se pasan a través del monitor serie en la PC. Para conectar la PC a RF, la primera PC se conecta a la placa Arduino mediante un cable USB. El transmisor de RF interactúa directamente con el Arduino conectando su pin de entrada en serie (pin 2) al pin 12 del Arduino Pro Mini y una antena conectada al pin 4 del módulo. En la unidad de visualización del receptor, un receptor de RF está conectado a otro Arduino Pro Mini con el pin de salida en serie (pin 2) conectado al pin 11 de la placa Arduino en el lado del receptor y una antena conectada al pin 8 del módulo de RF. Se conecta una pantalla LCD a la placa Arduino en el lado del receptor para mostrar los mensajes transmitidos. 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 Pro Mini, respectivamente. El pin LCD RW está conectado a tierra.
LCD | Arduino UNO |
---|---|
JAJAJA | 3 |
RW | GRND |
Y | dos |
D7,D6,D5,D4 | 7,6,5,4 respectivamente |
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.
Cómo funciona el circuito
Los caracteres que se deben transmitir se pasan desde el monitor serie del PC. Estos caracteres son leídos por la placa Arduino mediante la conexión USB. El carácter leído por el microcontrolador permanece en el buffer. La biblioteca VirtualWire se utiliza en el código del programa para transmitir los caracteres del búfer a través de RF. La biblioteca permite transmitir sólo un carácter serial a la vez. Los caracteres del búfer primero deben almacenarse en una matriz, y cada elemento de la matriz debe eliminarse en serie uno por uno.
En el lado del receptor, el receptor de RF detecta el búfer de caracteres y lo pasa en serie al Arduino Pro Mini en el lado del receptor. El Arduino Pro Mini en el lado del receptor tiene el código de programa incorporado para recuperar el búfer de caracteres en una matriz y convertir cada elemento de carácter en una representación entera respectiva. La representación completa de los caracteres se pasa a la pantalla LCD de 16X2 para mostrar el mensaje.
Fig. 3: Prototipo de circuito Arduino para comunicación de datos por RF con PC
guía de programación
En el lado del transmisor Arduino, primero, se importa la biblioteca VirtualWire para facilitar la interfaz con el módulo de RF.
#incluir
Un LED está conectado al pin 13 para indicar que la transmisión en serie está en curso. Así, se declara una variable “ledpin” y se asigna al pin 13 del Arduino. La variable "MsgData" se declara para almacenar caracteres de lectura y la matriz "MsgcharAR" se declara para almacenar varios caracteres antes de la transmisión en serie. Se inicializan algunas variables globales: "longitud" para almacenar la longitud del mensaje, "datos_disponibles" para verificar la disponibilidad de datos y un contador "i".
Se llama a una función de configuración, donde ledpin se configura en modo de salida usando la función pinMode, la velocidad en baudios del sistema se establece en 9600 bits por segundo usando la función Serial.begin y la función vw_setup se usa para configurar la velocidad en baudios en serie RF. Transmisión de transmisión a 2.000 bits por segundo.
Se llama a una función de bucle, dentro de la cual la primera variable de longitud se inicializa en 0 y los datos en serie se verifican si están disponibles usando la función Serial.available. Si hay datos en serie disponibles, se leen usando la función Serial.read y se almacenan en la matriz MsgcharAR. El contador de longitud se incrementa y data_available se establece en 1 para lógica booleana. El bloque de código se repite en un bucle While hasta que los datos en serie estén disponibles.
Si hay datos disponibles, la variable de indicador dat_available se deja con una configuración booleana de 1, luego el mensaje almacenado en la matriz MsgcharAR se envía en serie al búfer usando la función Serial.print.
El mensaje almacenado en el buffer debe enviarse en serie en RF. El led que indica transmisión en curso se enciende enviando una lógica ALTA al ledpin. El mensaje se envía en serie en RF utilizando la función vw_send, donde los caracteres del mensaje se convierten primero al formato de caracteres sin firmar. vw_wait_tx se utiliza para esperar hasta que se transmita el mensaje completo. Cuando finaliza la transmisión, el ledpin recibe una lógica BAJA para apagar el LED de la transmisión en curso.
data_available se establece en 0 y cada elemento de la matriz MsgcharAR se establece en 0 como valor predeterminado.
datos_disponibles = 0;
Esto finaliza el código Arduino en el lado del transmisor.
En el lado del receptor Arduino, el código del programa primero importa las bibliotecas estándar requeridas. LiquidCrystal.h se importa para interactuar con la pantalla LCD y la biblioteca VirtualWire se importa para leer la entrada en serie del receptor de RF. Los pines 2 a 7 están asignados a la pantalla LCD del objeto de cristal líquido.
El pin 13 donde está conectado el LED indicador de progreso de transmisión se asigna a la variable ledpin y se declaran dos variables: “Sensor1Data” para capturar el mensaje en su forma completa y “Sensor1CharMsg” para almacenar la representación de caracteres del mensaje que se mostrará.
Se llama a una función de configuración donde la velocidad en baudios de Arduino se establece en 9600 bits por segundo usando la función Serial.begin. El objeto LCD se inicializa en modo 16X2 y los mensajes iniciales se muestran en la pantalla LCD. El pin conectado al LED y el pin conectado a RS y RW se configuran en modo de salida usando la función pinMode.
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 utilizando vw_rx_start.
Se llama a una función de bucle dentro de la cual se declaran la matriz "buf" para leer el búfer en serie y la variable "buflen" para almacenar la longitud del búfer.
El búfer de caracteres se detecta usando la función vw_get_message; si está presente, se inicializa un contador "i" y el LED conectado al pin 13 se enciende enviando un ALTO en el pin 13 para indicar una detección exitosa del búfer de caracteres.
El búfer de caracteres se almacena en la matriz Sensor1CharMsg utilizando el bucle for con el contador inicializado.
El carácter nulo se detecta en el flujo del búfer para que no lleguen valores basura a la pantalla LCD. Los caracteres recibidos del búfer se convierten al valor entero y se almacenan en la variable "Sensor1Data".
El valor de la variable junto con las cadenas relevantes incluidas se pasa al búfer del microcontrolador y se pasa a la pantalla LCD para mostrarlo en un formato presentable.
Esto finaliza la función de bucle y el código Arduino en el lado del receptor.
Código fuente del proyecto
###
#incluir// LED constante int ledPin = 13; int DatosMensaje; //int Sensor2Datos; char MsgcharAR(40); longitud int, datos_disponibles; ent i; configuración nula { // Modos Pin //CONDUJO pinMode(ledPin,SALIDA); // para depurar Serie.begin(9600); // configuración de VirtualWire vw_setup(2000); // Bits por segundo }configuración nula { // Modos Pin // CONDUJO pinMode(ledPin,SALIDA); // para depurar Serie.begin(9600); // configuración de VirtualWire vw_setup(2000); // Bits por segundo }MsgcharAR(longitud) = Serial.read; longitud++; retraso(100); datos_disponibles = 1; }// Convierte datos enteros a una matriz Char directamente // itoa(datos,Sensor1CharMsg,10); si(datos_disponibles == 1) { // DEPURAR Serial.print("Enviando datos: "); Serial.println(MsgcharAR); //Serial.println(" "); retraso(1000); // FINALIZAR LA DEPURACIÓNescritura digital (13, verdadero); // Enciende una luz para mostrar la transmisión vw_send((uint8_t *) MsgcharAR, longitud); 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); para(yo = 0; yo < 40; yo++) { MsgcharAR (i) = 0; }} } // FINALIZAR bucle vacío... #incluir#incluir Lcd de cristal líquido (2, 3, 4, 5, 6, 7); // LED intledPin = 13; // Sensores int Sensor1Datos; // Contenedor de transmisión RF char Sensor1CharMsg(4); configuración nula { Serie.begin(9600); lcd.comenzar(16, 2); lcd.print("GARAJE PARA INGENIEROS"); lcd.setCursor(0, 1); // establece el pin digital como salida pinMode(ledPin, SALIDA); pinMode(9, SALIDA); pinMode(8, 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 nulabucle 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); lcd.setCursor(0, 2); lcd.print("Temperatura ="); lcd.print(Sensor1Datos); // cambiar el valor de salida analógica: si(DatosSensor1 > 50){ escritura digital (9, ALTO); retraso(2000); }escritura digital(9,BAJO); } }
###
Diagramas de circuito
Diagrama de circuito-PC-Arduino-RF-Comunicación de datos | ![]() |
Vídeo del proyecto