- Módulo transmissor e receptor RF 433 MHz:
- Necessidade de codificador e decodificadores:
- Componentes necessários:
- Diagrama de circuito:
- Explicação do código:
Olá a todos, Hoje, neste projeto, faremos a interface do módulo receptor e transmissor de RF com o microcontrolador PIC e a comunicação entre dois microcontroladores pic diferentes sem fio.
Neste projeto, faremos o seguinte: -
- Usaremos PIC16F877A para o Transmissor e PIC18F4520 para a seção Receptor.
- Faremos a interface do teclado e LCD com o microcontrolador PIC.
- No lado do transmissor, faremos a interface do teclado com o PIC e transmitiremos os dados. No lado do receptor, receberemos os dados sem fio e mostraremos qual tecla foi pressionada no LCD.
- Usaremos codificador e decodificador IC para transmitir dados de 4 bits.
- A frequência de recepção será de 433Mhz usando o módulo RF TX-RX barato disponível no mercado.
Antes de entrar nos esquemas e códigos, vamos entender o funcionamento do módulo RF com CIs codificadores-decodificadores. Leia também os dois artigos abaixo para aprender como fazer a interface do LCD e do teclado com o microcontrolador PIC:
- Interface LCD com microcontrolador PIC usando MPLABX e XC8
- Interface de teclado de matriz 4x4 com microcontrolador PIC
Módulo transmissor e receptor RF 433 MHz:
Esses são os módulos transmissor e receptor que estamos usando no projeto. É o módulo mais barato disponível para 433 MHz. Esses módulos aceitam dados seriais em um canal.
Se observarmos as especificações dos módulos, o transmissor está classificado para operação de 3,5-12 V como tensão de entrada e a distância de transmissão é de 20-200 metros. Ele transmite no protocolo AM (modulação de áudio) na frequência de 433 MHz. Podemos transferir dados a uma velocidade de 4KB / S com 10mW de potência.
Na imagem superior podemos ver a pinagem do módulo Transmissor. Da esquerda para a direita, os pinos são VCC, DATA e GND. Também podemos adicionar a antena e soldá-la no ponto indicado na imagem acima.
Para a especificação do receptor, o receptor tem uma classificação de 5 V CC e corrente de repouso 4MA como entrada. A frequência de recepção é 433,92 MHz com uma sensibilidade de -105DB.
Na imagem acima podemos ver a pinagem do módulo receptor. Os quatro pinos são da esquerda para a direita, VCC, DATA, DATA e GND. Esses dois pinos do meio são conectados internamente. Podemos usar qualquer um ou ambos. Mas é uma boa prática usar ambos para diminuir o acoplamento de ruído.
Além disso, uma coisa não é mencionada na folha de dados, o indutor variável ou POT no meio do módulo é usado para calibração de frequência. Se não pudéssemos receber os dados transmitidos, há possibilidades de que as frequências de transmissão e recepção não correspondam. Este é um circuito RF e precisamos sintonizar o transmissor no ponto de frequência transmitido perfeito. Além disso, assim como o transmissor, este módulo também possui uma porta de antena; podemos soldar o fio em forma de bobina para uma recepção mais longa.
A faixa de transmissão depende da tensão fornecida ao Transmissor e do comprimento das antenas em ambos os lados. Para este projeto específico não usamos antena externa e usamos 5V no lado do transmissor. Verificamos com 5 metros de distância e funcionou perfeitamente.
Módulos de RF são muito úteis para comunicação sem fio de longa distância. Um transmissor RF básico e circuito receptor é mostrado aqui. Fizemos muitos projetos usando o Módulo RF:
- Eletrodomésticos controlados por RF
- Carro de brinquedo controlado por Bluetooth usando Arduino
- LEDs RF com controle remoto usando Raspberry Pi
Necessidade de codificador e decodificadores:
Este sensor de RF tem algumas desvantagens: -
- Comunicação unilateral.
- Apenas um canal
- Muito interferência de ruído.
Devido a esta desvantagem, usamos CIs codificadores e decodificadores, HT12D e HT12E. D significa decodificador que será usado no lado do receptor e E significa codificador que será usado no lado do transmissor. Este ICs fornece 4 canais. Também devido à codificação e decodificação, o nível de ruído é muito baixo.
Na imagem acima, o esquerdo é o decodificador HT12D e o direito é o HT12E, o codificador. Ambos os ICs são idênticos. A0 a A7 é usado para codificação especial. Podemos usar pinos de microcontrolador para controlar esses pinos e definir configurações. As mesmas configurações precisam ser combinadas no outro lado. Se ambas as configurações forem precisas e correspondentes, podemos receber dados. Esses 8 pinos podem ser conectados ao Gnd ou VCC ou deixados abertos. Quaisquer que sejam as configurações que fizermos no codificador, precisamos combinar a conexão no decodificador. Neste projeto, deixaremos em aberto esses 8 pinos para codificador e decodificador. 9 e 18 pinos são VSS e VDD, respectivamente. Podemos usar o pino VT emHT12D para fins de notificação. Para este projeto não o usamos. O pino TE é para ativar ou desativar o pino de transmissão.
A parte importante é o pino OSC onde precisamos conectar os resistores é fornecer oscilação para o codificador e decodificador. O decodificador precisa de oscilação maior do que o decodificador. Normalmente, o valor do resistor do codificador será 1Meg e o valor do decodificador é 33k. Usaremos esses resistores para nosso projeto.
O pino DOUT é o pino de dados do transmissor RF no HT12E e o pino DIN no HT12D é usado para conectar o pino de dados do módulo RF.
No HT12E, AD8 para AD11 é uma entrada de quatro canais que é convertida e transmitida serialmente através do módulo RF e o inverso exato acontece no HT12D, os dados seriais são recebidos e decodificados, e temos uma saída paralela de 4 bits nos 4 pinos D8 a D11.
Componentes necessários:
- 2 - Tábua de pão
- 1 - LCD 16x2
- 1 - teclado
- Par HT12D e HT12E
- Módulo RF RX-TX
- 1- predefinição de 10K
- 2 - resistor de 4,7k
- 1- 1M Resistor
- 1- resistor de 33k
- 2- capacitores de cerâmica 33pF
- Cristal de 1 - 20Mhz
- Bergsticks
- Alguns fios simples.
- PIC16F877A MCU
- PIC18F4520 MCU
- Uma chave de fenda para controlar o potenciômetro de frequência precisa ser isolada do corpo humano.
Diagrama de circuito:
Diagrama de circuito para o lado do transmissor (PIC16F877A):
Usamos PIC16F877A para fins de transmissão. O teclado hexadecimal conectado ao PORTB e os 4 canais conectados aos últimos 4 bits do PORTD. Saiba mais sobre como conectar o teclado 4x4 Matrix aqui.
Identifique como segue-
1. AD11 = RD7
2. AD10 = RD6
3. AD9 = RD5
4. AD8 = RD4
Diagrama de circuito para o lado do receptor (PIC18F4520):
Na imagem acima, o circuito receptor é mostrado. O LCD está conectado ao PORTB. Usamos oscilador interno de PIC18F4520 para este projeto. Os 4 canais são conectados da mesma forma que fizemos antes no circuito do transmissor. Aprenda mais sobre como conectar o LCD 16x2 com o microcontrolador PIC aqui.
Este é o lado do transmissor -
E o lado do receptor na placa de ensaio separada -
Explicação do código:
O código contém duas partes, uma é para o transmissor e a outra é para o receptor. Você pode baixar o código completo aqui.
Código PIC16F877A para Transmissor RF:
Como sempre primeiro, precisamos definir os bits de configuração no microcontrolador pic, definir algumas macros, incluindo bibliotecas e frequência de cristal. A porta AD8-AD11 do Encoder ic é definida como RF_TX em PORTD. Você pode verificar o código para todos aqueles no código completo fornecido no final.
Usamos duas funções, void system_init (void) e void encode_rf_sender (char data).
O system_init é usado para inicialização de pinos e inicializações de teclado. A inicialização do teclado é chamada a partir da biblioteca do teclado.
A porta do teclado também é definida no keypad.h. Fizemos o PORTD como saída usando TRISD = 0x00, e fizemos a porta RF_TX como 0x00 como estado padrão.
vazio system_init (vazio) { TRISD = 0x00; RF_TX = 0x00; keyboard_initialization (); }
No encode_rf_sender mudamos o estado dos 4 pinos dependendo do botão pressionado. Nós criamos 16 diferentes valores hexadecimais ou PORTD -membros em função ( 4x4) 16 botão diferente pressionado.void encode_rf_sender (dados de caracteres) { if (dados == '1') RF_TX = 0x10; if (dados == '2') RF_TX = 0x20; if (dados == '3') …………... …. …
Na função principal , primeiro recebemos os dados pressionados do botão do teclado usando a função switch_press_scan () e armazenamos os dados na variável chave. Depois disso, codificamos os dados usando a função encode_rf_sender () e alterando o status do PORTD.
Código PIC18F4520 para receptor RF:
Como sempre, primeiro definimos os bits de configuração em PIC18f4520. É um pouco diferente do PIC16F877A, você pode verificar o código no arquivo zip em anexo.
Incluímos o arquivo de cabeçalho do LCD. Definida a conexão da porta D8-D11 do decodificador IC através do PORTD usando #define RF_RX linha PORTD, a conexão é a mesma usada na seção do codificador. A declaração da porta LCD também é feita no arquivo lcd.c.
#incluir
Conforme declarado antes, estamos usando o oscilador interno para o 18F4520, usamos a função system _ init onde configuramos o registro OSCON do 18F4520 para definir o oscilador interno para 8 MHz. Também definimos o bit TRIS para os pinos do LCD e do decodificador. Como o HT - 12D fornece saída nas portas D8-D11, precisamos configurar o PORTD como entrada para receber a saída.
vazio system_init (vazio) { OSCCON = 0b01111110; // 8Mhz,, intosc // OSCTUNE = 0b01001111; // habilitar PLL, prescaler máx. 8x4 = 32Mhz TRISB = 0x00; TRISD = 0xFF; // Últimos 4 bits como bit de entrada. }
Configuramos o registrador OSCON em 8 MHz, também definimos a porta B como saída e a porta D como entrada.
A função abaixo é feita usando a lógica reversa exata usada na seção anterior do transmissor. Aqui obtemos o mesmo valor hexadecimal da porta D e por esse valor hexadecimal identificamos qual chave foi pressionada na seção do transmissor. Podemos identificar cada tecla pressionada e enviar o caractere correspondente ao LCD.
void rf_analysis (unsigned char recived_byte) { if (recived_byte == 0x10) lcd_data ('1'); if (recived_byte == 0x20) lcd_data ('2'); if (recived_byte == 0x30) ……. ….. …… ………..
O lcd_data é chamado a partir do arquivo lcd.c.
Na função principal , primeiro inicializamos o sistema e o LCD. Nós tomou uma variável de bytes, e armazenado o valor hexadecimal recebido de porta D. Então, pela função rf_analysis , podemos imprimir o caractere no LCD.
void main (void) { unsigned char byte = 0; system_init (); lcd_init (); enquanto (1) { lcd_com (0x80); lcd_puts ("CircuitDigest"); lcd_com (0xC0); byte = RF_RX; rf_analysis (byte); lcd_com (0xC0); } return; }
Antes de executá-lo, ajustamos o circuito. Primeiro, pressionamos o botão ' D ' no teclado. Portanto, o 0xF0 está sendo transmitido continuamente pelo transmissor RF. Em seguida, sintonizamos o circuito do receptor até que o LCD mostrasse o caractere ' D '. Às vezes, o módulo é ajustado corretamente pelo fabricante, às vezes não. Se tudo estiver conectado corretamente e não obtiver o valor do botão pressionado no LCD, é possível que o receptor RF não esteja sintonizado. Usamos a chave de fenda isolada para diminuir as possibilidades de ajuste incorreto devido à indutância do nosso corpo.
É assim que você pode fazer a interface do Módulo RF com o Microcontrolador PIC e se comunicar entre dois microcontroladores PIC sem fio usando o Sensor RF.
Você pode baixar o código completo do transmissor e receptor aqui, também confira o vídeo de demonstração abaixo.