modulo rf tutorial

12
http://labduino.blogspot.com.br/ Tutoriais - Módulo RF [email protected] ou [email protected] 1 Modulo RF tutorial http://produto.mercadolivre.com.br/MLB-435313532-modulo-rf-transmissor-receptor- 433mhz-_JM (acesso em 17/09/2012) http://lojabrasilrobotics.blogspot.com.br/2011/06/wireless-rf-r2500.html (17/09/2012) Radio frequência são sinais que se propagam em um cabo condutor e são irradiados no ar através de antenas. A antena permite converter o sinal que é transmitido em um circuito via cabos em um sinal wirelesse ao mesmo tempo receber as ondas eletromagnéticas e converte-las em um sinal a ser conduzido através de fios. Fig.01: Espectro eletromagnético (http://fisicapaidegua.com/teoria/moderna/espectro.jpg ) A ANATEL (agencia Nacional de telecomunicação) regulariza o uso das faixas de frequência que podem ser utilizadas O que ocorre na transmissão é que temos uma onda portadoraque carrega a informação como se fosse um carro em uma estrada. Ou seja o sinal é modulado. Para este modulo o tipo de modulação é Modulação por chaveamento de amplitude, ou do inglês "Amplitude Shift Keying (ASK)", é uma técnica de modulação de sinais digitais os quais são representados como variações de amplitude da onda portadora .Normalmente este tipo de modulação é usada para regiões de baixos ruídos.

Upload: vitorjss

Post on 22-Nov-2015

94 views

Category:

Documents


0 download

TRANSCRIPT

  • http://labduino.blogspot.com.br/ Tutoriais - Mdulo RF

    [email protected] ou [email protected] 1

    Modulo RF tutorial http://produto.mercadolivre.com.br/MLB-435313532-modulo-rf-transmissor-receptor-433mhz-_JM (acesso em 17/09/2012)

    http://lojabrasilrobotics.blogspot.com.br/2011/06/wireless-rf-r2500.html (17/09/2012)

    Radio frequncia so sinais que se propagam em um cabo condutor e so

    irradiados no ar atravs de antenas. A antena permite converter o sinal que transmitido em um circuito via cabos em um sinal wireless e ao mesmo tempo receber as ondas eletromagnticas e converte-las em um sinal a ser conduzido atravs de fios.

    Fig.01: Espectro eletromagntico (http://fisicapaidegua.com/teoria/moderna/espectro.jpg)

    A ANATEL (agencia Nacional de telecomunicao) regulariza o uso das faixas de frequncia que podem ser utilizadas

    O que ocorre na transmisso que temos uma onda portadora que carrega a informao como se fosse um carro em uma estrada. Ou seja o sinal modulado. Para este modulo o tipo de modulao Modulao por chaveamento de amplitude, ou do ingls "Amplitude Shift Keying (ASK)", uma tcnica de modulao de sinais digitais os quais so representados como variaes de amplitude da onda portadora. Normalmente este tipo de modulao usada para regies de baixos rudos.

  • http://labduino.blogspot.com.br/ Tutoriais - Mdulo RF

    [email protected] ou [email protected] 2

    Transmissor (mdulo TX): Funo converter os sinais analogicos, digitais ou sinais de audio em ondas eletromagneticas e transmiti-las no espao

    Para o transmissor RF temos pinos para ligao em VCC , GND e um pno para a transmisso de dados.

    O default para a biblioteca bsica o pino 12.

    Receptor (mdulo RX): Funo de receber as ondas eletromagneticas enviadas pelo modulo TX e converter em sinais eletricos de corrente e tenso. Composto por uma antena para receber os sinais enviados pelo modulo TX

    Para o receptor RF temos pinos para ligao em VCC , GND pinos para a recepo de dados.

    O default para a biblioteca bsica o pino 11.

  • http://labduino.blogspot.com.br/ Tutoriais - Mdulo RF

    [email protected] ou [email protected] 3

    1 passo: Para usar o modulo RF devemos baixar a biblioteca VirtualWire em diferentes verses disponivel neste link http://www.open.com.au/mikem/arduino/

    Para a versao IDE do Arduino 1.0.1 recomenda-se usar a versao 1.9 disponiel para download em http://www.open.com.au/mikem/arduino/VirtualWire-1.9.zip

    Para acesso a documentao desta biblioteca clique aqui:

    Documentao da biblioteca: http://download.milesburton.com/Arduino/VirtualWire/VirtualWire.pdf

    Para incorporar a biblioteca. Descompacte a pasta na pasta libraries do Arduino. Para encontrar esta pasta abra a pasta onde se encontra o Arduino

    Ao baixar a biblioteca, feche a IDE do Arduino e abra aps a instalao

    2 passo: Testando a recepo do sinal

    No Arduino conectado ao modulo TX (que enviar os dados) usamos o pino 12 para transmitir o sinal.

    Pino 12

  • http://labduino.blogspot.com.br/ Tutoriais - Mdulo RF

    [email protected] ou [email protected] 4

    Para o receptor, utilize outro Arduino e conecte a recepo do sinal no pino 11

    Pino 11

    Em seguida clique em examples e em VirtualWire.

    No modulo TX abra o exemplo transmitter a faa upload no Arduino correspondente

  • http://labduino.blogspot.com.br/ Tutoriais - Mdulo RF

    [email protected] ou [email protected] 5

    Modulo RX Modulo TX

    Neste exemplo o transmissor dever enviar ao receptor a mensagem hello

    O receptor dever receber esta mensagem e imprimir na tela em Hexadecimal

    Veja a tabela Ascii em anexo:

    Chr HEX

    h 68

    e 65

    l 6C

    l 6C

    0 6F

  • http://labduino.blogspot.com.br/ Tutoriais - Mdulo RF

    [email protected] ou [email protected] 6

    http://www.asciitable.com/index/asciifull.gif

    Para que voc obtenha a impresso da palavra hello, basta ir at a linha de programao do modulo RX e alterar para:

    De -> Serial.print(buf[i], HEX); para -> Serial.print(buf[i]);

    Pronto j conseguimos estabelecer a comunicao entre os dois Arduinos, atravs de RF.

  • http://labduino.blogspot.com.br/ Tutoriais - Mdulo RF

    [email protected] ou [email protected] 7

    Exemplo: Coletando dados das portas analgicas e enviando via RF

    Antes de iniciarmos o nosso exemplo temos que considerar um aspecto muito importante: a transmisso de dados para estes mdulos se d atravs de portas digitais. Assim um sinal analgico coletado por um Arduino dever ser convertido em digital usando a converso PWM.

    Cdigo para o modulo TX com transmisso de dados atravs do pino 12 do Arduino

    ----------------------------------------------------------------------------------------------------

    // 433Mhz transmitter by Jan Leander Jensen 2011 // TX pin12, PTT pin 10 // include library #include // ver. 1.9 // end include library //global variable byte msg[7]; // end global variable // setup void setup() { vw_set_ptt_inverted(true); // Required for PTT para DR3100 vw_setup(2000); // Bits per sec taxa de velocidade para transmisso no modulo RF } // end setup // main loop void loop() { // Funo map para transformar a entrada de 10 bits das analgicas para 8 bits (PWM) msg[0] = map(analogRead(A0), 0, 1023, 0, 255); msg[1] = map(analogRead(A1), 0, 1023, 0, 255); msg[2] = map(analogRead(A2), 0, 1023, 0, 255); msg[3] = map(analogRead(A3), 0, 1023, 0, 255); msg[4] = map(analogRead(A4), 0, 1023, 0, 255); msg[5] = map(analogRead(A5), 0, 1023, 0, 255); vw_send(msg, 7); // transmit msg vw_wait_tx(); // Wait for message to finish delay(500); } // end main loop ----------------------------------------------------------------------------------------------------

  • http://labduino.blogspot.com.br/ Tutoriais - Mdulo RF

    [email protected] ou [email protected] 8

    Cdigo para o mdulo RX com recebendo o sinal no pino 11

    ------------------------------------------------------------------------------

    // 433Mhz receveiver2 by Jan Leander Jensen 2011 // RX pin 11 // include library #include // ver. 1.5 // end include library //global variable byte buf[7]; byte buflen; // end global variable // setup void setup() { buflen = 7; Serial.begin(9600); vw_setup(2000); // Bits per sec taxa de velocidade para transmisso no modulo RF vw_rx_start(); // Start up the receiver } // end setup // main loop void loop() { if (vw_get_message(buf, &buflen)) // check to see if anything has been received { Serial.print("A0="); int A0 = buf[0]; Serial.print(A0); Serial.println(); Serial.print("A1="); int A1 = buf[1]; Serial.print(A1); Serial.println(); Serial.print("A2="); int A2 = buf[2]; Serial.print(A2); Serial.println(); Serial.print("A3="); int A3 = buf[3];

  • http://labduino.blogspot.com.br/ Tutoriais - Mdulo RF

    [email protected] ou [email protected] 9

    Serial.print(A3); Serial.println(); Serial.print("A4="); int A4 = buf[4]; Serial.print(A4); Serial.println(); // Batt. test start Para executar este teste voce deve conectar a entrada A5 do //Arduino TX em VCC atravs do um resistor (1Kohms, p exemplo). Deste modo o //receptor avisa quando a bateria estiver abaixo de um dado valor mas para este caso //suspendemos este controle //int A5 = buf[5]; //if (A5 < 107) { //Serial.print("BATT. LOW (6,7V)"); //Serial.println(); } // Batt. test end Serial.println(); } } // end main loop

    Podemos utilizar outros pinos para enviar dados e coletar dados pelo modulo RF? Sim podemos o exemplo abaixo utilizar o pino 9 para envio de dados no Arduino TX e o pino 9 tambm para a recepo do sinal no Arduino RX Neste cdigo os dados sero enviados via teclado. Se digitarmos no modulo TX o caracter 1 acenderemos o led do pino 13 do Arduino RX e se digitarmos 2 apagaremos o led do pino 13 do Arduino RX Cdigo no modulo TX #include // biblioteca para RF void setup() { Serial.begin(9600); //Ativa Serial Monitor Serial.println("Ativado"); // avisa que esta ok vw_set_ptt_inverted(true); // vw_set_tx_pin(9); // porta que vamos usar vw_setup(2000); // bits para comunicao }

  • http://labduino.blogspot.com.br/ Tutoriais - Mdulo RF

    [email protected] ou [email protected] 10

    void loop() { if ( Serial.available() > 0) // verifica se foi digitado algo { char message = Serial.read(); // le o que foi digitado vw_send((uint8_t *)&message, strlen(&message)); // envia toda a mensage e converte para str vw_wait_tx(); // bloqueia TX at ser enviado todas as letras envia uma por uma } } Codigo para o mdulo RX #include // biblioteca para RF int LED = 8; void setup() { Serial.begin(9600); Serial.println("setup"); vw_set_ptt_inverted(true); vw_setup(2000); vw_set_rx_pin(9); // pino para recepo 9 vw_rx_start(); } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) { digitalWrite(13,true); if (buf[0] == '1') { digitalWrite(13,true); } else if ( buf[0] == '2') { digitalWrite(13,false); } Serial.print(buf[0]); } digitalWrite(13,false); }

  • http://labduino.blogspot.com.br/ Tutoriais - Mdulo RF

    [email protected] ou [email protected] 11

    Acendendo Leds utilizando o teclado do Arduino TX

    Cdigo no Arduino RX: Circuito led no pino 8 e pino 9 recebe o sinal do Arduino TX --------------------------------------------------------------------------------------------------------- #include // inclui a biblioteca para comunicao int LED = 8; // declara varivel LED, pino 8 conectado o led void setup() { Serial.begin(9600); // comunicao com a serial Serial.println("setup"); pinMode(8,OUTPUT); // declara os pinos de sada 8 e 13 pinMode(13,OUTPUT); declara os pinos de sada 8 e 13 vw_set_ptt_inverted(true); vw_setup(2000); // taxa de comunicao do modulo RF vw_set_rx_pin(9); // pino para recepo 9 vw_rx_start(); } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) { digitalWrite(13,true); / / estiver recebendo a informao led 13 acende if (buf[0] == '1') { digitalWrite(LED,true); // quando digitar 1 no monitor serial do Arduino TX acende //o Led do pino 8 por 100 ms delay (100); } else if ( buf[0] == '2') { digitalWrite(LED,false); // quando digitar 1 no monitor serial do Arduino TX apaga //o Led do pino 8 por 100 ms delay(100); } Serial.print(buf[0]); } digitalWrite(13,false); } Cdigo para o Arduino TX : pino 9 transfere informao para o RX

  • http://labduino.blogspot.com.br/ Tutoriais - Mdulo RF

    [email protected] ou [email protected] 12

    #include // lib para RF void setup() { Serial.begin(9600); //Ativa Serial Monitor Serial.println("Ativado"); // avisa que esta ok vw_set_ptt_inverted(true); // vw_set_tx_pin(9); // porta que vamos usar vw_setup(2000); // bits para comunicao } void loop() { if ( Serial.available() > 0) // verifica se foi digitado algo { char message = Serial.read(); // le o que foi digitado vw_send((uint8_t *)&message, strlen(&message)); // envia toda a mensagem e //converte para str vw_wait_tx(); // bloqueia TX at ser enviado todas as letras envia uma por uma } } Algumas informaes sobre os comandos Em setup devemos ter sempre: vw_set_tx_pin ( numero do pino) . Caracteriza o setup do pino que vai enviar a mensagem. Default o pino 12 vw_set_rx_pin (numero do pino) Caracteriza o pino que vai receber a mensagem . default o pino 11 vw_setup(2000) Caracteriza a taxa de velocidade de transferncia de dados atraves do RF vw_rx_start(); Para comear a receber informaes No void loop Em TX: vw_send(uint8_t* buf, uint8_t len); Enviar uma mensagem, com o comprimento especificado. Retorna quase imediatamente, e a mensagem ser enviada no tempo certo por interrupes. Retorna true se a mensagem foi aceita para a transmisso. Retorna false se a mensagem muito longo. Em RX vw_get_message(buf, &buflen)