A frequência de rádio de 433MHz (RF 433MHz) é amplamente utilizada no campo das transmissões de rádio, seja para controlo remoto ou transmissão de dados. Pode ser encontrado em controlos remotos ou em domótica.
Material
- Computador
- Arduino UNO
- Cabo USB A Masculino
- Reed Switch (ILS)
Como funciona
O módulo RF de 433 MHz é utilizado para transmitir informação sem fios através de ondas de rádio. O transmissor modula os dados de série externos em alta frequência e transmite-os por ligação rádio para o módulo receptor. O módulo consiste num transmissor de rádio APF03 e num receptor APRXB12. Utiliza a modulação ASK (Amplitude Shift Keying) com uma frequência de 433 MHz.
Os módulos de rádio RF433MHz têm um alcance de alguns metros (<5m). Esta gama pode ser grandemente aumentada com uma fonte de tensão mais alta e uma antena de tamanho adequado. Em teoria, até 100m sem obstrução.
Existem diferentes módulos de comunicação sem fios utilizando diferentes protocolos (Wifi, LoRa, etc.) ou com desempenho superior (HC-12, nRF24l01, nRF905, etc.) Verificar as especificações técnicas e o desempenho do módulo utilizado.
Esquema
Na biblioteca VirtualWire que vamos utilizar, os pinos predefinidos utilizados são o pino 12 para o pino de dados do transmissor e o pino 11 para o pino de dados do receptor.
A atribuição dos pinos pode ser diferente dependendo do código e da biblioteca utilizada.
Código do emissor
Para começar, é necessário descarregar a biblioteca VirtualWire em zip, depois em Arduino, ir ao sketch, incluir uma biblioteca, adicionar a biblioteca .zip e colocar a pasta .zip correspondente. Uma vez instalado, é necessário reiniciar o Arduino. Quando as placas estiverem ligadas ao seu PC, escolha uma porta diferente para cada placa.
#include <VirtualWire.h> #define TxPin 12 void setup() { pinMode(13, OUTPUT); pinMode(12, INPUT); Serial.begin(9600); // Debugging only Serial.println("Setup Transmitter"); // Initialise the IO and ISR vw_set_ptt_inverted(true); // Required for DR3100 vw_setup(2000); // Bits per sec } void loop() { const char *msg = "Bonsoir tous le monde"; digitalWrite(13, true); // Flash a light to show transmitting vw_send((uint8_t *)msg, strlen(msg)); vw_wait_tx(); // Wait until the whole message is gone digitalWrite(13, false); delay(200); }
Código do receptor
#include <VirtualWire.h> #define RxPin 11 void setup() { pinMode(13, OUTPUT); pinMode(11, OUTPUT); Serial.begin(9600); // Debugging only Serial.println("Setup Receiver"); vw_set_ptt_inverted(true); // Required for DR3100 vw_setup(2000); // Bits per sec vw_rx_start(); // Start the receiver PLL running } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) // Non-blocking { int i; digitalWrite(13, true); // Flash a light to show received good message // Message with a good checksum received, dump it. Serial.print("From transmitter : "); for (i = 0; i < buflen; i++) { //Serial.print(buf[i], HEX); →sert a afficher les valeurs en héxa Serial.print(char(buf[i])); //Serial.print(" "); } Serial.println(""); digitalWrite(13, false); } }
É possível alterar os pinos utilizados utilizando as funções vw_set_rx_pin e vw_set_tx_pin:
//Pour l’émetteur il faut taper vw_set_tx_pin(txPin); //Pour le récepteur il faut taper vw_set_rx_pin(rxPin);
Resultados
Uma vez carregados os códigos em cada um dos microcontroladores, deverá ver a mensagem exibida no monitor de série do receptor.
Aplicações
- Transmissão remota de dados
- Controlo remoto do sistema