Las computadoras personales generalmente están conectadas entre sí mediante cables de red en una red de oficina basada en LAN. Conectar dos computadoras mediante un cable USB o un cable RS – 232 para la comunicación de datos es una opción viable cuando los dos sistemas se colocan cerca uno del otro. Además, un único cable de red conecta una PC a otra PC. Si los sistemas informáticos de una oficina están diseñados para comunicar datos de forma inalámbrica, se puede ahorrar el coste de instalar un complicado cableado de red y toda la configuración parecerá más organizada y limpia. De esta manera, cualquier computadora se puede conectar a cualquier otra computadora sin ningún problema. Una sola computadora también se puede conectar fácilmente a cualquier cantidad de otras computadoras al mismo tiempo.
Este proyecto ilustró la comunicación de datos inalámbrica entre PC utilizando un módulo de RF de 434 MHz. El módulo de RF tiene un alcance de 50 a 60 metros y se puede extender a 300 a 350 metros usando una antena y aumentando la potencia de transmisión del módulo. Por lo tanto, la red de comunicación de datos inalámbrica basada en RF se puede instalar en cualquier oficina o lugar de trabajo pequeño. En el proyecto, como las PC no pueden interactuar directamente con el módulo de RF, están interconectadas mediante placas Arduino. La PC que funcionará como servidor de datos está conectada a un transmisor de RF a través de la placa Arduino, mientras que las PC que funcionarán como clientes de datos en la red de área local inalámbrica están conectadas a receptores de RF a través del Arduino. La comunicación de datos se ilustró utilizando el monitor serie en ambas PC.
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 | Arduino para mini | dos |
4 | Computadora de escritorio/portátil | dos |
5 | Batería – 9V | dos |
6 | tablero de prueba | dos |
7 | Cables de conexión |
Fig. 1: Diagrama de bloques de una PC basada en Arduino para conexiones del circuito de comunicación de datos RF de PC
En el proyecto, un PC está configurado como servidor de datos y otro PC como cliente de datos. Muchas PC se pueden convertir en clientes de datos, pero solo una PC se convirtió en cliente en el proyecto con fines de demostración. El servidor fabricado en PC está conectado a una placa Arduino mediante un cable USB y un transmisor de RF interactúa con la placa Arduino para la transmisión de RF. Para interconectar el transmisor de RF con Arduino, su pin de entrada en serie (pin 2) se conecta al pin 12 de la placa Arduino y se conecta una antena al pin 4 del módulo transmisor de RF para ampliar el alcance.
En la PC cliente, la PC se conecta nuevamente al Arduino mediante el cable USB y la placa Arduino se conecta además a un receptor de RF para una operación similar a la del cliente. Para interconectar el receptor de RF con Arduino, el pin de salida en serie (pin 2) del módulo receptor se conecta al pin 11 de la placa Arduino del lado del cliente y se conecta una antena al pin 8 del receptor de RF para ampliar el alcance. VCC y tierra se proporcionan en los respectivos pines de los módulos Arduino y RF como se indica en sus hojas de datos.
Fig. 2: Prototipo de comunicaciones de datos RF de PC a PC basado en Arduino
¿Cómo funciona el circuito?
En el proyecto, los datos se transfieren desde el PC servidor al PC cliente. La PC servidor transfiere los datos a transmitir a la placa Arduino conectada mediante el cable USB. El programa de monitor serie se utiliza para transferir datos desde la PC a la placa Arduino. El Arduino tiene el código de programa para leer el carácter transferido a su buffer y transmitirlo en serie al módulo RF usando las funciones de la Biblioteca VirtualWire. Dado que el módulo de RF transmite solo un carácter a la vez, el búfer de caracteres recibido desde la PC debe almacenarse en una matriz en el código del programa Arduino del lado del servidor.
En la PC del lado del cliente, el receptor de RF detecta el búfer de caracteres transmitidos por RF y lo pasa en serie a la placa Arduino del lado del cliente. El código del programa en la placa Arduino del lado del cliente lee el búfer de caracteres y lo almacena en una matriz. A continuación, los elementos de la matriz se transfieren en serie mediante un cable USB al PC cliente. En la PC cliente, la matriz de caracteres recibida se muestra utilizando el programa Serial Monitor. También se puede desarrollar un programa basado en Java para transmitir y recibir datos desde puertos USB.
Fig. 3: Imagen que muestra las placas Arduino utilizadas para la transferencia de datos RF de PC a PC
guía de programación
En el Arduino del lado del servidor, 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 del indicador data_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 del lado del servidor.
En Arduino del lado del cliente, el código del programa primero importa las bibliotecas estándar requeridas. La biblioteca VirtualWire se importa para permitir la recepción de datos en serie desde el módulo de RF.
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 ledpin está configurado para emitir 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 almacena en la matriz Sensor1CharMsg utilizando el bucle for con el contador inicializado.
data_available se establece en 0 y cada elemento de la matriz MsgcharAR se establece en 0 como valor predeterminado.
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 }bucle vacío { longitud = 0; mientras (Serie.disponible) { 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// 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 nulabucle vacío { uint8_t buf(VW_MAX_MESSAGE_LEN); uint8_t buflen = VW_MAX_MESSAGE_LEN; 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)); }datos_disponibles = 0; para(yo = 0; yo < 40; yo++) { MsgcharAR (i) = 0; } } } // FINALIZAR bucle vacío...
###
Diagramas de circuito
RF22_0 |
Vídeo del proyecto