- Módulo transmisor y receptor de RF de 433 MHz:
- Necesidad de codificador y decodificadores:
- Componentes requeridos:
- Diagrama de circuito:
- Explicación del código:
Hola a todos, Hoy en este proyecto, conectaremos el módulo receptor y transmisor de RF con el microcontrolador PIC y nos comunicaremos entre dos microcontroladores pic diferentes de forma inalámbrica.
En este proyecto haremos las siguientes cosas: -
- Usaremos PIC16F877A para el transmisor y PIC18F4520 para la sección del receptor.
- Conectaremos el teclado y la pantalla LCD con el microcontrolador PIC.
- En el lado del transmisor, conectaremos el teclado con el PIC y transmitiremos los datos. En el lado del receptor, recibiremos los datos de forma inalámbrica y mostraremos qué tecla está presionada en la pantalla LCD.
- Usaremos codificador y decodificador IC para transmitir datos de 4 bits.
- La frecuencia de recepción será de 433 Mhz utilizando un módulo RF TX-RX económico disponible en el mercado.
Antes de entrar en los esquemas y códigos, comprendamos el funcionamiento del módulo de RF con los circuitos integrados de codificador-decodificador. Consulte también los siguientes dos artículos para aprender cómo conectar la pantalla LCD y el teclado con el microcontrolador PIC:
- Interfaz LCD con microcontrolador PIC usando MPLABX y XC8
- Interfaz de teclado matricial 4x4 con microcontrolador PIC
Módulo transmisor y receptor de RF de 433 MHz:
Esos son los módulos transmisores y receptores que estamos usando en el proyecto. Es el módulo más barato disponible para 433 MHz. Estos módulos aceptan datos en serie en un canal.
Si vemos las especificaciones de los módulos, el transmisor está clasificado para una operación de 3.5-12V como voltaje de entrada y la distancia de transmisión es de 20-200 metros. Transmite en protocolo AM (Modulación de audio) a una frecuencia de 433 MHz. Podemos transferir datos a una velocidad de 4 KB / S con una potencia de 10 mW.
En la imagen superior podemos ver el pin-out del módulo Transmisor. De izquierda a derecha, los pines son VCC, DATA y GND. También podemos agregar la antena y soldarla en el punto indicado en la imagen de arriba.
Para la especificación del receptor, el receptor tiene una clasificación de 5 VCC y una corriente de reposo de 4 mA como entrada. La frecuencia de recepción es de 433,92 MHz con una sensibilidad de -105DB.
En la imagen de arriba podemos ver el pin-out del módulo receptor. Los cuatro pines son de izquierda a derecha, VCC, DATA, DATA y GND. Esos dos pines del medio están conectados internamente. Podemos usar cualquiera o ambos. Pero es una buena práctica utilizar ambos para reducir el acoplamiento de ruido.
Además, una cosa no se menciona en la hoja de datos, el inductor variable o POT en el medio del módulo se usa para la calibración de frecuencia. Si no pudiéramos recibir los datos transmitidos, existe la posibilidad de que las frecuencias de transmisión y recepción no coincidan. Este es un circuito de RF y necesitamos sintonizar el transmisor en el punto de frecuencia de transmisión perfecto. Además, al igual que el transmisor, este módulo también tiene un puerto de antena; Podemos soldar alambre en forma enrollada para una recepción más larga.
El rango de transmisión depende del voltaje suministrado al transmisor y la longitud de las antenas en ambos lados. Para este proyecto específico no usamos una antena externa y usamos 5V en el lado del transmisor. Lo comprobamos con 5 metros de distancia y funcionó perfectamente.
Los módulos de RF son muy útiles para la comunicación inalámbrica de larga distancia. Aquí se muestra un circuito básico de transmisor y receptor de RF. Hemos realizado muchos proyectos utilizando RF Module:
- Electrodomésticos controlados por RF
- Coche de juguete controlado por Bluetooth usando Arduino
- LED de RF controlados a distancia con Raspberry Pi
Necesidad de codificador y decodificadores:
Este sensor de RF tiene algunos inconvenientes: -
- Comunicación unidireccional.
- Solo un canal
- Muy interferencia de ruido.
Debido a este inconveniente, hemos utilizado circuitos integrados de codificador y decodificador, HT12D y HT12E. D significa decodificador que se usará en el lado del receptor y E significa codificador que se usará en el lado del transmisor. Estos circuitos integrados proporcionan 4 canales. También debido a la codificación y decodificación, el nivel de ruido es muy bajo.
En la imagen de arriba, el de la izquierda es HT12D el decodificador y el de la derecha es HT12E, el codificador. Ambos circuitos integrados son idénticos. A0 a A7 se utiliza para codificaciones especiales. Podemos usar pines del microcontrolador para controlar esos pines y establecer configuraciones. Las mismas configuraciones deben combinarse en el otro lado. Si ambas configuraciones son precisas y coinciden, podemos recibir datos. Estos 8 pines pueden conectarse a Gnd o VCC o dejarse abiertos. Independientemente de las configuraciones que hagamos en el codificador, necesitamos hacer coincidir la conexión en el decodificador. En este proyecto dejaremos abiertos esos 8 pines tanto para el codificador como para el decodificador. 9 y 18 pines son VSS y VDD respectivamente. Podemos usar el pin VT enHT12D como notificación. Para este proyecto no lo usamos. El pin TE es para habilitar o deshabilitar la transmisión.
La parte importante es el pin OSC donde necesitamos conectar resistencias para proporcionar oscilación al codificador y decodificador. El decodificador necesita una mayor oscilación que el decodificador. Normalmente, el valor de la resistencia del codificador será 1Meg y el valor del decodificador es 33k. Usaremos esas resistencias para nuestro proyecto.
El pin DOUT es el pin de datos del transmisor de RF en HT12E y el pin DIN en el HT12D se utiliza para conectar el pin de datos del módulo de RF.
En HT12E, AD8 a AD11 es una entrada de cuatro canales que se convierte y transmite en serie a través del módulo RF y exactamente lo contrario sucede en HT12D, los datos en serie se reciben y decodifican, y obtenemos una salida paralela de 4 bits a través de los 4 pines D8 a D11.
Componentes requeridos:
- 2 - Tabla de pan
- 1 - pantalla LCD 16x2
- 1 - Teclado
- Par HT12D y HT12E
- Módulo de RF RX-TX
- 1 preajuste de 10K
- 2 - resistencia de 4.7k
- 1 resistencia de 1 M
- 1- resistencia de 33k
- 2- condensadores cerámicos de 33pF
- 1 - cristal de 20Mhz
- Bergsticks
- Pocos cables de una sola hebra.
- MCU PIC16F877A
- PIC18F4520 MCU
- Un destornillador para controlar el potenciómetro de frecuencia debe estar aislado del cuerpo humano.
Diagrama de circuito:
Diagrama de circuito para el lado del transmisor (PIC16F877A):
Hemos utilizado PIC16F877A para fines de transmisión. El teclado hexadecimal conectado a través de PORTB y los 4 canales conectados a través de los últimos 4 bits de PORTD. Obtenga más información sobre cómo conectar el teclado de matriz 4x4 aquí.
Pin de la siguiente manera:
1. AD11 = RD7
2. AD10 = RD6
3. AD9 = RD5
4. AD8 = RD4
Diagrama de circuito para el lado del receptor (PIC18F4520):
En la imagen de arriba, se muestra el circuito del receptor. La pantalla LCD está conectada a través de PORTB. Usamos el oscilador interno de PIC18F4520 para este proyecto. Los 4 canales están conectados de la misma manera que lo hicimos antes en el circuito del transmisor. Obtenga más información sobre cómo conectar una pantalla LCD de 16x2 con el microcontrolador PIC aquí.
Este es el lado del transmisor -
Y el lado del receptor en una placa de pruebas separada -
Explicación del código:
Hay dos partes del código, una es para el transmisor y otra para el receptor. Puede descargar el código completo desde aquí.
Código PIC16F877A para transmisor de RF:
Como siempre, primero, debemos establecer los bits de configuración en el microcontrolador pic, definir algunas macros, incluidas las bibliotecas y la frecuencia de cristal. El puerto AD8-AD11 del codificador ic se define como RF_TX en PORTD. Puede verificar el código de todos los que se encuentran en el código completo que se proporciona al final.
Usamos dos funciones, void system_init (void) y void encode_rf_sender (char data).
El system_init se utiliza para la inicialización pin y teclado inicializaciones. La inicialización del teclado se llama desde la biblioteca del teclado.
El puerto del teclado también se define en el teclado. H. Hicimos el PORTD como salida usando TRISD = 0x00 y el puerto RF_TX como 0x00 como estado predeterminado.
vacío system_init (vacío) { TRISD = 0x00; RF_TX = 0x00; keyboard_initialization (); }
En encode_rf_sender hemos cambiado el estado de 4 pines dependiendo del Botón presionado. Hemos creado 16 valores hexadecimales diferentes o estados PORTD dependiendo de ( 4x4) 16 botones diferentes presionados.void encode_rf_sender (char data) { if (data == '1') RF_TX = 0x10; si (datos == '2') RF_TX = 0x20; si (datos == '3') …………... …. ….
En la función principal , primero recibimos los datos presionados del botón del teclado usando la función switch_press_scan () y almacenamos los datos en la variable clave. Después de eso, hemos codificado los datos usando la función encode_rf_sender () y cambiando el estado de PORTD.
Código PIC18F4520 para receptor de RF:
Como siempre, primero establecemos los bits de configuración en PIC18f4520. Es un poco diferente de PIC16F877A, puede verificar el código en el archivo zip adjunto.
Incluimos el archivo de encabezado de LCD. Se definió la conexión del puerto D8-D11 del decodificador IC a través de PORTD usando la línea #define RF_RX PORTD, la conexión es la misma que se usa en la sección del codificador. La declaración del puerto LCD también se realiza en el archivo lcd.c.
#incluir
Como se indicó anteriormente, estamos usando un oscilador interno para el 18F4520, hemos usado la función system _ init donde configuramos el registro OSCON del 18F4520 para configurar el oscilador interno para 8 MHz. También configuramos el bit TRIS para los pines LCD y los pines decodificadores. Como HT - 12D proporciona salida en los puertos D8-D11, necesitamos configurar el PORTD como entrada para recibir la salida.
vacío system_init (vacío) { OSCCON = 0b01111110; // 8Mhz`` intosc // OSCTUNE = 0b01001111; // PLL habilitado, Max prescaler 8x4 = 32Mhz TRISB = 0x00; TRISD = 0xFF; // Últimos 4 bits como bit de entrada. }
Configuramos el registro OSCON a 8 MHz, también hicimos el puerto B como salida y el puerto D como entrada.
La siguiente función se realiza utilizando la lógica inversa exacta utilizada en la sección anterior del transmisor. Aquí obtenemos el mismo valor hexadecimal del puerto D y por ese valor hexadecimal identificamos qué interruptor se presionó en la sección del transmisor. Podemos identificar cada pulsación de tecla y enviar el carácter correspondiente a la pantalla LCD.
void rf_analysis (carácter sin firmar recived_byte) { if (recived_byte == 0x10) lcd_data ('1'); if (recived_byte == 0x20) lcd_data ('2'); si (recived_byte == 0x30) ……. ….. …… ………..
El lcd_data se llama desde el lcd.c archivo.
En la función principal , primero inicializamos el sistema y la pantalla LCD. Tomamos una variable de bytes, y se almacena el valor hexadecimal recibido del puerto D. Luego, mediante la función rf_analysis podemos imprimir el carácter en la pantalla LCD.
void main (void) { byte de carácter sin firmar = 0; system_init (); lcd_init (); while (1) { lcd_com (0x80); lcd_puts ("CircuitDigest"); lcd_com (0xC0); byte = RF_RX; rf_analysis (byte); lcd_com (0xC0); } volver; }
Antes de ejecutarlo, hemos ajustado el circuito. Primero hemos presionado el botón ' D ' en el teclado. Por lo tanto, el transmisor de RF transmite continuamente el 0xF0. Luego, sintonizamos el circuito del receptor hasta que la pantalla LCD muestra el carácter ' D '. A veces, el módulo está ajustado correctamente por el fabricante, a veces no. Si todo está conectado correctamente y no se obtiene el valor del botón presionado en la pantalla LCD, es posible que el receptor de RF no esté sintonizado. Hemos utilizado el destornillador aislado para disminuir las posibilidades de sintonización incorrecta debido a la inductancia de nuestro cuerpo.
Así es como puede conectar el módulo RF al microcontrolador PIC y comunicarse entre dos microcontroladores PIC de forma inalámbrica mediante el sensor RF.
Puede descargar el código completo para transmisor y receptor desde aquí, también verifique el video de demostración a continuación.