Conectando um receptor infravermelho ao Arduino. Arduino: controle remoto infravermelho e receptor. Bibliotecas para trabalhar com IR

Conectando um receptor infravermelho ao Arduino. Arduino: controle remoto infravermelho e receptor. Bibliotecas para trabalhar com IR

  • Tensão de entrada: 4,0 ... 5,5 V (5 V nominal)
  • Consumo de corrente: até 100 mA em modo pulsante (em Vcc = 5 V)
  • Comprimento de onda da luz: 940 nm (valor de pico)
  • Frequência máxima do sinal: até 10 MHz
  • Distância de transmissão: até 10m (em Vcc=5V)
  • Temperatura operacional: -25 … 85 °C
  • Ângulo direcional: 120° (com perda de potência< 50%)

Todos os módulos da linha "Trema" são confeccionados no mesmo formato

Conexão:

É conveniente conectar o módulo de 3 maneiras, dependendo da situação:

Método - 1: Usando um cabo com fio e Piranha UNO

A biblioteca usa um segundo temporizador de hardware,

NÃO EMITE SINAIS PWM PARA 3 OU 11 SAÍDAS!

Leia mais sobre como instalar a biblioteca em nosso...

Informações adicionais sobre como trabalhar com o módulo:

Pacotes: Quase todos os controles remotos enviam não apenas um pacote de informações (indicando o tipo de dispositivo e o código do botão pressionado), mas também pacotes repetidos, informando ao dispositivo que o botão está pressionado. Assim, o dispositivo receptor pode responder ao pressionar o botão uma vez ou durante todo o tempo em que ele for pressionado.
Por exemplo: ao pressionar e segurar um botão com um número de canal de TV, a TV mudará para esse canal apenas uma vez. Ao pressionar e segurar o botão de aumentar o volume, a TV irá aumentá-lo durante todo o tempo em que o botão for pressionado.

Número de pacotes de informações A maioria dos controles remotos possui um, mas alguns dispositivos, como aparelhos de ar condicionado, usam 2, 3 ou mais pacotes de informações.

Conteúdo do pacote: O pacote de informações contém informações sobre o código do fabricante, tipo de dispositivo, código do botão pressionado, etc. Pacotes repetidos podem coincidir parcial ou totalmente com um pacote de informação, copiar seus bits com inversão ou não transportar nenhuma informação, representando uma sequência de vários bits idênticos para cada pacote repetido.

Duração das pausas entre pacotes: geralmente não excede 200ms.

Protocolos de transferência de dados: determine os seguintes parâmetros básicos:

Frequência da operadora: para a maioria dos controles remotos é 38 kHz; é nessa frequência que o receptor Trema IR está sintonizado.

Codificação de informações: Este é o princípio de transmissão de bits de dados. Destacamos três tipos principais de codificação, em que cada bit é transmitido em uma sequência de um pulso e uma pausa:

Sinais de início, parada e alternância: de acordo com o nome, estão localizados no início, final ou meio da embalagem.

Parar: Ao codificar uma pausa longa, é impossível determinar o valor do último bit do pacote, pois o pacote é seguido por uma pausa longa, e o último bit será sempre definido como “1”, então o sinal Stop é adicionado ao pacote, que é um pulso que não carrega nenhuma informação.

Começar: Com a codificação bifásica, é necessário um sinal de início, pois é impossível iniciar a transmissão de um pacote a partir de uma pausa.

Alternar:É um bit que muda de valor a cada novo pressionamento de botão, utilizado nos protocolos RS5, RS5X, RS6 (Philips), onde pacotes repetidos repetem completamente os dados do pacote de informações. Dessa forma, o dispositivo receptor pode diferenciar entre segurar um botão e pressioná-lo novamente.

codificação de comprimento de pulso- primeiro é transmitido um pulso, cuja duração depende do valor do bit transmitido, depois segue-se uma pausa, cuja duração não depende do valor do bit. Por exemplo: no protocolo SIRC (Sony), a duração do pulso para o bit “1” = 1200 µs, e para o bit “0” = 600 µs, a duração das pausas é sempre 600 µs. Desta forma, você pode distinguir “1” de “0” pela duração do pulso.

codificação de comprimento de pausa- primeiro é transmitido um pulso, cuja duração não depende do valor do bit transmitido, seguido de uma pausa, cuja duração depende do valor do bit. Por exemplo: no protocolo NEC, a duração da pausa para o bit “1” = 1687,5 µs, e para o bit “0” = 562,5 µs, a duração do pulso é sempre 562,5 µs. Assim, você pode distinguir “1” de “0” pela duração da pausa.

codificação bifásica- a duração do pulso é igual à duração da pausa, e sua sequência determina o tipo de bit transmitido. Por exemplo: no protocolo RS5 (Philips), para o bit "1" um pulso segue uma pausa, e para o bit "0" uma pausa segue um pulso. Para o protocolo NRC (Nokia), ao contrário, para o bit “1” uma pausa segue um pulso, e para o bit “0” um pulso segue uma pausa.

Exemplos:

Transferência única de dados:

#incluir // Conecta a biblioteca para trabalhar com o transmissor IR iarduino_IR_TX VD(10); // Declara um objeto VD, indicando o pino ao qual o transmissor IR está conectado void setup())( VD.begin(); // Inicia o trabalho com o transmissor IR VD.send(0x00FFA25D); // Envia o código 0x00FFA25D uma vez , sem repetição de pacotes ) void loop()() // Arduino enviará o código 0x00FFA25D, sinalizando que está ligado

Transmissão de dados com pacotes de repetição:

#incluir // Conecta a biblioteca para trabalhar com o transmissor IR iarduino_IR_TX VD(2); // Declara o objeto VD, indicando o pino ao qual o transmissor IR está conectado void setup())( pinMode(3,INPUT); // Configure o pino 3, ao qual o botão está conectado, como entrada pinMode(4, INPUT); // Configure o pino 4, ao qual o botão está conectado, como entrada pinMode(5,INPUT); // Configure o pino 5, ao qual o botão está conectado, como entrada VD.begin(); Inicie o trabalho com o transmissor IR ) void loop())( if(digitalRead(3))(VD.send(0x00FFA25D, true);) // Se o botão conectado ao pino 3 for pressionado, enviamos o código 0x00FFA25D, e quando pressionado, enviamos pacotes repetidos, pois a função foi chamada com o parâmetro true if(digitalRead(4))(VD.send(0x00FF629D, true);) // Se o botão conectado ao pino 4 for pressionado, então enviamos o código 0x00FF629D, e quando mantido pressionado, enviamos pacotes repetidos, pois a função foi chamada com o parâmetro true if(digitalRead(5))(VD.send(0x00FFE21D, true);) // Se o botão conectado ao pino 5 é pressionado, então enviamos o código 0x00FFE21D, e quando pressionado, enviamos pacotes repetidos, pois a função foi chamada com o parâmetro true)

Transferência de dados indicando o protocolo:

#incluir // Conecta a biblioteca para trabalhar com o transmissor IR iarduino_IR_TX VD(5); // Declara o objeto VD, indicando o pino ao qual o transmissor IR está conectado void setup() ( VD.begin(); // Inicia o trabalho com o transmissor IR pinMode(6,INPUT); // Configure o pino 6 ao qual o botão como entrada pinMode(7,INPUT); // Configure o 7º pino, ao qual o botão está conectado, como entrada pinMode(8,INPUT); como entrada VD.protocol("AeQQV) ~zK]Kp^KJp[@@@@@@@Bp"); // Especifique o protocolo de transferência de dados do controle remoto ELENBERG) // Você pode obter a linha do protocolo por pressionando qualquer botão do controle remoto da TV // e chamando a função receptora de mesmo nome, sem parâmetros void loop())( if(digitalRead(4))(VD.send(0x417, true);) // envia um Sinal ON/OFF (com pacotes de repetições, os pacotes são repetidos após um intervalo de tempo especificado no protocolo) if(digitalRead(5) )(VD.send(0x425, true);) // envia o sinal VOL- (com repetição pacotes, os pacotes são repetidos após o intervalo de tempo especificado no protocolo) if(digitalRead(6))(VD.send(0x427);) // envia um sinal VOL+ (sem pacotes repetidos, o volume aumentará mais rápido, pois a função é chamado em um loop sem intervalos))

Este exemplo mostra como o transmissor pode simular completamente os sinais de outros controles remotos IR.

A string de protocolo resultante deve ser passada como parâmetro para a função protocol(), após a qual você pode enviar códigos de botão usando a função send(). Como resultado, os dispositivos responderão ao transmissor IR como se estivessem respondendo ao seu próprio controle remoto IR.

Descrição das principais funções da biblioteca:

Conectando a biblioteca:

#incluir //Conecte a biblioteca para trabalhar com o transmissor IR. iarduino_IR_TX VD(PIN_NO[,INVERSION]); // Declara um objeto VD, indicando o número do pino ao qual o transmissor IR está conectado.

// O segundo parâmetro, do tipo bool, pode indicar que os dados para o transmissor precisam ser invertidos.

  • Função começar();
  • Objetivo: inicialização do trabalho com o transmissor IR
  • Sintaxe: início();
  • Opções: Não.
  • Valores de retorno: Nenhum.
  • Nota: Chamado uma vez no código de configuração.
Exemplo:

VD.begin(); // Inicia o trabalho com o transmissor IR

  • Função enviar();
  • Finalidade: Transferência de dados.
  • Sintaxe: enviar(DADOS [, HOLD ]);
    • Parâmetros:
    • DADOS - código, como uint32_t, que precisa ser transferido;
  • Opções: Não.
  • Nota: Se a função for chamada sem o parâmetro HOLD, ou for igual a false, então a função, cada vez que for chamada, transmitirá o código especificado uma vez. Se a função for chamada com o parâmetro HOLD igual a true, então a função desfaz o botão e envia pacotes de nova tentativa (no intervalo especificado no protocolo) quando ele é pressionado.
  • Nota: Chamado uma vez no código de configuração.
VD.send(0xCCDDEEFF); // Envia o código 0xCCDDEEFF. Se a função for chamada constantemente, em loop, ela enviará esse código todas as vezes. VD.send(0xCCDDEEFF, verdadeiro); // Envia o código 0xCCDDEEFF. Se a função for chamada constantemente, em loop, ela enviará o código apenas na primeira vez e, em seguida, enviará pacotes repetidos de acordo com o protocolo de transferência de dados especificado.

Função protocolo();

  • Objetivo: Definir o protocolo de transferência de dados.
  • Sintaxe: protocolo(STRING);
  • Sintaxe: enviar(DADOS [, HOLD ]);
    • LINHA - composta por 25 caracteres de protocolo + caractere de fim de linha. Esta string pode ser obtida chamando a função de mesmo nome, sem parâmetros, para o receptor.
  • Valores de retorno: bool - a string contém dados de protocolo corretos ou não.
  • Nota: A função define o protocolo de transferência de dados, para que o transmissor IR possa simular os sinais dos controles remotos convencionais. Após chamar esta função, as transferências de dados utilizando a função send() serão realizadas utilizando o novo protocolo. O protocolo de transferência de dados padrão corresponde ao controle remoto “Car mp3”.
  • Nota: Chamado uma vez no código de configuração.
VD.protocol("AeQQV~zK]Kp^KJp[@@@@@@@Bp"); // Especifique o protocolo de transferência de dados do controle remoto ELENBERG.

// Agora o transmissor enviará os dados, codificando-os, de acordo com o protocolo especificado.

  • // Você pode obter uma string de protocolo pressionando qualquer botão no controle remoto da TV e chamando a função de mesmo nome para o receptor IR, sem parâmetros.
  • Variável de frequência:
  • Valor: Define a frequência portadora de transmissão de dados em kHz;
Tipo de dados: uint8_t;

Nota: Se não for atribuído um valor à variável, a transmissão será realizada na frequência especificada no protocolo. Se você especificar um valor 0, os dados serão transmitidos sem modulação.

  • VD.frequência=36; // Defina a frequência portadora para transmissão de dados em 36 kHz. VD.send(0xCCDDEEFF); // Envia dados com frequência portadora de 36 kHz. VD.send(0xABCDEF); // Envia dados com frequência portadora de 36 kHz.
  • ligar/desligar iluminação, aquecimento, ventilação, irrigação, etc.
  • abrir/fechar portas, persianas, janelas de sótão, respiradouros, etc.

Cada casa possui um controle remoto de TV ou outro controle remoto. Este dispositivo permite controlar qualquer dispositivo à distância, o que é muito conveniente. Não há necessidade de desperdiçar calorias preciosas e fazer movimentos desnecessários. Se você tiver algum dispositivo e quiser controlá-lo à distância, poderá controlá-lo remotamente. Se desejar, você pode fazer um controle remoto com as próprias mãos, mas não há necessidade disso e isso é outra história. Por que você precisa de controle remoto?! - é simples:

A preguiça é uma qualidade que nos obriga a fazer grandes esforços para reduzir os custos globais de energia.

Pela primeira vez, o controle remoto em ação foi mostrado ao mundo pelo inventor Nikola Tesla em 1898, em uma exposição no Madison Square Garden, ele apresentou um barco controlado por rádio denominado “teleautomático”. Hoje esta tecnologia se difundiu, apenas foram adicionados diferentes métodos de transmissão de comandos (canal de comunicação).

Os principais canais de comunicação incluem:

  • Canal de rádio
  • Ultrassônico
  • Infravermelho

Neste artigo falaremos sobre como controlar o dispositivo com um controle remoto infravermelho. A radiação infravermelha é a radiação eletromagnética que ocupa a região espectral entre a extremidade vermelha da luz visível e a radiação de microondas. A radiação infravermelha não é visível ao olho humano, mas pode ser vista com uma câmera ou câmera de vídeo. Muitas vezes é assim que eles verificam o funcionamento do controle remoto da TV em casa.

Era uma vez, no meu antigo emprego, peguei um controle remoto e um “olho mágico” (receptor IR) de um sistema de segurança que estava sendo cancelado, ficou ocioso por um longo tempo e finalmente consegui verificá-lo operação.

Depois de desmontar este receptor, vi algum truque neste “olho”: 4 receptores IR foram soldados juntos. Isso foi feito para receber ondas infravermelhas dos quatro lados. E é conveniente, você não precisa se limitar a um determinado ângulo de recepção.

Também esbocei um circuito semelhante com quatro receptores, caso precise. Usei receptores IR TSOP1836, mas você pode usar outros. Para garantir uma recepção de 360 ​​graus, você precisa selecionar receptores IR apropriados (com um amplo ângulo de recepção) e colocá-los o mais próximos possível um do outro. Não notei nenhum problema de recepção com meus receptores. Incluí também a placa de circuito impresso e a localização dos elementos no anexo.

Para processar comandos, naturalmente usarei o arduino uno. Posso usar um receptor IR;
TSOP34836 (tem alto alcance de recepção, mas é mais caro) ou TL1838. Você pode pegar qualquer controle remoto IR, até mesmo de uma TV. Bem, se você precisar de seu próprio controle remoto, poderá comprar um kit para Arduino.

Princípio de funcionamento:
Ao pressionar um botão do controle remoto, ele envia o código do botão em luz infravermelha, após o qual o receptor recebe esse código do botão e o envia para o atuador, que, dependendo do botão, realizará uma determinada ação.

Você também pode transmitir informações a uma curta distância usando ondas infravermelhas. Para transmitir seus comandos ou informações, você pode usar um segundo arduino com um transmissor IR. Mas a velocidade dessa transmissão é muito lenta. As vantagens do canal infravermelho incluem a insensibilidade à interferência eletromagnética.

Para receber sinais IR do Arduino, conectaremos o receptor IR da seguinte forma:

Observe que a localização das pernas do receptor pode variar.


O receptor possui 3 pernas, fonte de alimentação “+” e “-” (principalmente tensão 3,3-5V) e a perna de dados é o que transmite as informações para o dispositivo (no nosso caso, arduino). A tensão de alimentação para TSOP34836 é 2,7-5,5 volts. Usarei 5 volts da saída padrão do Arduino.

Bem, é claro que você precisa de firmware para Arduino. O algoritmo de funcionamento será o seguinte: ao pressionar o botão superior do controle remoto, o arduino liga o relé, e ao pressioná-lo novamente, ele o desliga. Usando este relé, você pode alimentar, por exemplo, a luz de fundo, mas não é necessário programar o pressionamento de um botão no relé, você pode enviar um comando para o computador ou realizar uma determinada operação no arduino, etc.
Para simplificar o trabalho, utilizaremos uma biblioteca pronta. Código de firmware:

#incluir int RECEIVE_PIN = 11;//contato do receptor int RELAY_PIN = 3;//contato de relé IRrecv irrecv(RECEIVE_PIN);//atribuir o pino do receptor decode_results results;//dados recebidos

configuração vazia() (
Serial.begin(9600);
irrecv.enableIRIn(); //liga o receptor
pinMode(RELAY_PIN, SAÍDA); //configura o relé para saída
digitalWrite(RELAY_PIN,ALTO); //define o valor alto
}

loop vazio() (
if (irrecv.decode(&results)) (//se os dados forem recebidos
Serial.print("0x");
Serial.println(results.value, HEX); // envia a mensagem recebida para o terminal
if ((results.value == 0x8FF40BF) ||(results.value == 0xD72040BF)) digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));//se o código do botão for 0x8FF40BF ou 0xD72040BF altera o estado do relé para o oposto
delay(200); // atraso do disparo duplo
irrecv.resume();// Obtém o próximo valor
}
}

Deixe-me explicar um pouco com o esboço:



if ((resultados.valor == 0x8FF40BF) ||(resultados.valor == 0xD72040BF))

O valor resultante é comparado com "0x8FF40BF" e "0xD72040BF" - estes são códigos de botão em notação hexadecimal. Dois significados apenas porque utilizo dois controles remotos com códigos únicos.



digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));

Procedimento padrão para gravação de pinos digitais, exceto "!digitalRead(RELAY_PIN)". Sinal "!" denota inversão, no nosso caso a inversão do estado da saída digital “RELAY_PIN”.



Serial.print("0x");
Serial.println(results.value, HEX); // envia a mensagem recebida para o terminal

Essas linhas enviam todos os códigos recebidos para o terminal. Em um programa funcional isso não é necessário, mas é necessário descobrir o código necessário para um botão específico. Ou seja, primeiro carregamos o sketch para o Arduino, vamos ao terminal e clicando no botão obteremos o código desejado.


Existem também vários exemplos diferentes na biblioteca IRremote que podem ser úteis.


No anexo do artigo:


  • esboço para arduino

  • PCB para 4 sensores

Recentemente precisei controlar o controle remoto da TV para um pequeno projeto em arduino. A ideia era controlar o ar condicionado através do arduino com sensor de temperatura. Meu ar condicionado vem com um controle remoto bastante conveniente, mas precisamos automatizá-lo para ligá-lo, ajustar a temperatura e desligá-lo. Como resultado de uma longa pesquisa, consegui encontrar uma solução para mim. Mais detalhes sobre isso abaixo.

Como é que isso funciona

Conectando Receptor infravermelho, nós direcionamos controle remoto para o receptor, grave o sinal e envie-o para Serial. (como esta é a primeira parte do artigo, não consideramos o envio de sinal. Falaremos sobre o envio na segunda parte).

O que precisamos

  • Arduíno(ou análogos, eu uso Tosduíno- 2 vezes mais barato, totalmente compatível com arduino normal)
  • LIDERADO ( LIDERADO)
  • Resistor de 220 kOhm
  • Receptor IR da série

Conexão

Receptor infravermelho

LIDERADO

Arduíno Tábua de ensaio Arduíno
pino número 11 resistor 220 kOhm GND (Terra)

Tecnologia IR

A maneira mais barata de controlar remotamente um dispositivo ao alcance visível usando radiação infravermelha. Quase todos os equipamentos de áudio e vídeo podem ser controlados desta forma. Graças à sua ampla disponibilidade, os componentes necessários são bastante baratos, tornando esta tecnologia ideal para nós que gostamos de usar o controle remoto IR em nossos próprios projetos.

A radiação infravermelha é, na verdade, luz normal com uma cor específica. Nós, humanos, não podemos ver essa cor porque seu comprimento de onda é de 950 nm, que está abaixo do espectro visível. Esse é um dos motivos pelos quais o IR é escolhido para necessidades de telemecânica, queremos utilizá-lo, mas não temos interesse em vê-lo. Embora não possamos ver a luz infravermelha emitida pelo controle remoto, isso não significa que não possamos torná-la visível.

Uma câmera de vídeo ou câmera digital “vê” a luz infravermelha, como você pode ver no vídeo abaixo. Até os celulares mais baratos possuem câmeras embutidas. Basta apontar o controle remoto para essa câmera, pressionar qualquer botão e você verá o LED piscando.

Uma série de receptores em miniatura para sistemas de controle remoto infravermelho. O diodo PIN e o pré-amplificador são montados em uma estrutura de chumbo e são projetados como Filtro infravermelho. O sinal de saída demodulado pode ser decodificado diretamente pelo microprocessador. - Este é um receptor padrão, suporta todos os principais códigos de transmissão.

Papel Frequência da portadora
30 kHz
33kHz
36kHz
36,7 kHz
38kHz
40 kHz
56kHz

IRremote.h

Baixar biblioteca IRremoto você pode no meu repositório no Github.com

Para instalar esta biblioteca, copie o conteúdo do arquivo para: arduino-1.x/libraries/IRremote Onde arduino-1.x é a pasta onde o Arduino IDE está instalado. Em seguida, o arquivo arduino-1.x/libraries/IRremote. /IRremote.cpp deve estar disponível e IRremote.h

Exemplo nº 1 - obtemos o código do botão do controle remoto

Este sketch irá ler o código do botão pressionado no controle remoto e enviar as informações deste botão para a porta serial para que possamos então utilizar este código.

#incluir int RECEIVE_PIN = 2; IRrecv irrecv(RECEIVE_PIN); resultados de decode_resultados; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); // Inicia o receptor ) void loop() ( if (irrecv.decode(&results)) ( Serial.print("0x"); Serial. println(resultados.valor, HEX); atraso(50); irrecv.resume();// Recebe o próximo valor ) )

Usarei esses códigos de botão em todos os exemplos a seguir:

Exemplo nº 2 - atribuindo um nome ao botão do controle remoto

Vamos enviar os nomes dos botões para a porta serial. (primeiro devemos pegar os códigos desses botões e atribuir nomes a eles, olhar o código, acho que tudo ficará claro aí).

#incluir int RECEIVE_PIN = 2; IRrecv irrecv(RECEIVE_PIN); resultados de decode_resultados; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); ) void loop() ( if (irrecv.decode(&results)) ( switch (resultados.valor) ( ​​case 0x77E1A0CB: Serial.println( "Centro"); case 0x77E160CB: Serial.println("Direita"); case 0x77E190CB: Serial.println("Esquerda"); 0x77E130CB: Serial.println("Down"); irrecv.resume();

Exemplo nº 3 - ligue o LED usando o botão do controle remoto

Agora vamos ensinar nosso Arduíno ligue o LED no PIN 11 através de um botão no controle remoto

#incluir LED interno = 11; estado interno = 0; // 0 = LED apagado enquanto 1 = LED aceso int RECEIVE_PIN = 2; IRrecv irrecv(RECEIVE_PIN); resultados de decode_resultados; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); pinMode(LED, OUTPUT); ) void loop() ( if ((irrecv.decode(&results)) && (results.value==0x77E1A0CB) ) ( if (state == 0) ( state = 1; digitalWrite(LED, HIGH); Serial.println("Centro - HIGH"); ) else ( state = 0; digitalWrite(LED, LOW); Serial.println( "Centro - BAIXO"); atraso(50);

Exemplo nº 4 - PWM com controle remoto

Agora vamos controlar o brilho do nosso LED (como ele está conectado na porta 11, que possui PWM, não deve haver problemas). Os botões para cima e para baixo no controle remoto serão usados ​​para controlar o brilho.

#incluir int RECEIVE_PIN = 2; brilho interno = 0; LED interno = 11; IRrecv irrecv(RECEIVE_PIN); resultados de decode_resultados; void setup() ( Serial.begin(9600); irrecv.enableIRIn(); ) void loop() ( if (irrecv.decode(&results)) ( switch (resultados.valor) ( ​​case 0x77E150CB: if(brilho< 255) { brightness+=15; Serial.println(brightness); } break; case 0x77E130CB: if(brightness >0) ( brilho-=15; Serial.println(brilho); ) break;

) analogWrite(LED, brilho);

irrecv.resume();

) )

Os receptores de radiação infravermelha são amplamente utilizados hoje em eletrodomésticos devido ao seu preço acessível, simplicidade e facilidade de uso. Esses dispositivos permitem controlar dispositivos por meio de um controle remoto e podem ser encontrados em quase todos os tipos de equipamentos. Apesar disso, o módulo Bluetooth está gradualmente ganhando cada vez mais popularidade.

O princípio de funcionamento de um receptor IR. Processando o sinal do controle remoto

O receptor IR no Arduino é capaz de receber e processar um sinal infravermelho na forma de pulsos de uma determinada duração e frequência. Utilizado na fabricação de sensor de obstáculos e telêmetro para Arduino. Normalmente, um receptor IR tem três pernas e consiste nos seguintes elementos: um fotodiodo PIN, um amplificador, um filtro passa-banda, um detector de amplitude, um filtro integrador e um transistor de saída.

Sob a influência da radiação infravermelha em um fotodiodo, que possui entre p E n regiões criaram uma região adicional de semicondutores ( eu-região), a corrente começa a fluir. O sinal vai para um amplificador e depois para um filtro passa-banda, que é sintonizado em uma frequência fixa: 30; 33; 36; 38; 40 e 56 quilohertz e protege o receptor contra interferências. A interferência pode ser causada por qualquer eletrodoméstico.

Para que o sinal do controle remoto seja recebido pelo receptor IR do Arduino, o controle remoto deve estar na mesma frequência em que o filtro no receptor IR está configurado. Portanto, nem todo controle remoto funcionará. Você deve selecionar um receptor IR e um transmissor IR com a mesma frequência. Após o filtro, o sinal segue para um detector de amplitude que integra o filtro e o transistor de saída.

Como conectar um receptor IR ao Arduino

Os invólucros dos receptores infravermelhos contêm um filtro óptico para proteger o dispositivo de campos eletromagnéticos externos; eles são feitos de um formato especial para focar a radiação recebida em um fotodiodo. Para conectar o receptor IR ao Arduino UNO, são utilizadas três pernas, que são conectadas a - GND, 5V e A0. Recomendamos usar 3,3 Volts para começar, para não queimar o sensor IR durante a configuração.

Para esta lição precisaremos dos seguintes detalhes:

  • Placa Arduino Uno / Arduino Nano / Arduino Mega;
  • placa de ensaio;
  • Receptor infravermelho;
  • controle remoto;
  • 1 LED e resistor de 220 Ohm;
  • fios macho-macho e macho-fêmea.


Diagrama de conexão do receptor IR à porta analógica do Arduino

Conecte o receptor IR de acordo com o diagrama mostrado acima e conecte os LEDs aos pinos 12 e 13. Antes de baixar o programa, você precisará instalar a biblioteca IRremote.h, caso ainda não esteja instalada. Esta biblioteca não pertence às bibliotecas padrão do ambiente de programação Arduino IDE. Você pode baixar a biblioteca IRremote.h e o esboço finalizado em um arquivo do Google Drive usando o link.

Esboço para receptor Arduino IR:

#incluir // conecta a biblioteca para o receptor IR IRrecv irrecv(A0); // indica o pino ao qual o receptor IR está conectado resultados de decode_resultados; void setup () // configuração do procedimento ( irrecv.enableIRIn (); //começa a receber um sinal infravermelho pinMode(13, SAÍDA); //pino 13 será a saída pinMode(12, SAÍDA); //pino 12 será a saída pinMode(A0, ENTRADA); // o pino A0 será a entrada (eng. “intput”) Serial.begin(9600); // conecta o monitor da porta) void loop () // loop de procedimento ( if (irrecv.decode (&results)) // se os dados chegaram, execute os comandos(Serial .println(resultados.valor); // envia os dados recebidos para a porta //liga e desliga os LEDs, dependendo do sinal recebido if (resultados.valor == 16754775) ( digitalWrite (13, HIGH); ) if (resultados.valor == 16769055) ( digitalWrite (13, LOW); ) if (resultados.valor == 16718055) ( digitalWrite (12, ALTO) if (resultados.valor == 16724175) (digitalWrite (12, BAIXO);) irrecv.resume(); //recebe o próximo sinal no receptor IR } }

Explicações para o código:

  1. A biblioteca IRremote.h contém um conjunto de comandos e permite simplificar o esboço;
  2. A instrução decode_results atribui os resultados do nome da variável aos sinais recebidos do controle remoto.

O sensor IR pode ser usado em muitos dispositivos no microcontrolador Arduino, incluindo o controle remoto de um servo drive no Arduino a partir de um receptor IR. Ao configurar, você deve ligar o monitor da porta IDE do Arduino e descobrir qual sinal é enviado por este ou aquele botão do controle remoto. Os códigos resultantes devem ser usados ​​no esboço após o sinal de igual duplo nas condições if().

Postagens sobre este tópico:


O módulo receptor IR em combinação com um controle remoto IR permitirá que você implemente facilmente o controle remoto da placa Arduino.

Nada mais é do que um receptor IR VS1838B com o chicote recomendado pelo fabricante instalado na placa.

Para trabalhar com este módulo pronto para uso, você precisa de um controle remoto com frequência de 38 kHz.

A vantagem desta placa é o conector push-in, que permite substituir o receptor IR por outro operando na frequência necessária para o seu projeto sem necessidade de solda.

Principais características técnicas:

Tensão de alimentação: 2,7 - 5,5V

Frequência de modulação: 38kHz

Faixa de temperatura: - 20 ... + 80°C

Interface: Digital

Conectando ao Arduino

O módulo está equipado com um conector de três pinos de 2,54 mm

: conecta-se ao pino GND

: conecta-se à saída de +5V

: conecta-se ao pino digital (D2 no exemplo)

Um exemplo de trabalho no ambiente Arduino

Para trabalhar com este módulo você precisa instalar a biblioteca IRRemote

Baixe, descompacte e coloque na pasta bibliotecas da pasta Arduino. Se o Arduino IDE estava aberto no momento da adição da biblioteca, reinicie o ambiente.

Lendo botões do controle remoto

Para ler as leituras do controle remoto, preencha o desenho abaixo. Ele enviará a codificação dos botões pressionados para a porta.

Como exemplo usaremos o controle remoto, como na foto, pois Este tipo de controle remoto está incluído no conjunto

Você pode ler sobre as diferenças na lógica operacional de vários controles remotos no artigo original de um membro de nossa comunidade sob o apelido

Código de exemplo:

#incluir intRECV_PIN = 2; IRrecv irrecv(RECV_PIN); //Cria um objeto para receber um sinal de uma porta específica resultados de decode_resultados; //Variável que armazena o resultado vazio configurar () { Serial //Começa a receber) vazio laço() ( if (irrecv.decode(&resultados)) //Ao receber um sinal... { Serial.println(resultados.valor); //...envia seu valor para a porta serial irrecv.resume();

) )

Você deverá ver o seguinte no monitor de porta:

Ao segurar cada botão por quase um segundo, obtemos cerca de 10 códigos. O primeiro é o código do botão. E depois disso, um código padrão começa a aparecer, informando que o botão está travado.

Controlando placa Arduino com controle remoto

Código de exemplo:

Vamos fazer com que o LED da placa Arduino (D13) acenda quando o primeiro botão for codificado e apague quando o segundo botão for codificado.// Testado no Arduino IDE 1.0.3 #incluir configurar () { Serial intRECV_PIN = 2; LED interno = 13; IRrecv irrecv(RECV_PIN); resultados de decode_resultados; vazio .begin(9600); irrecv.enableIRIn(); laço// Inicia o receptor Serial pinMode(LED, SAÍDA); ) vazio () ( if (irrecv.decode(&resultados)) (.println(resultados.valor); if (resultados.valor == 16769565)// Ao receber a codificação 1 (digitalWrite(LED, ALTO);//Acende o LED ) if (resultados.valor == 16761405)// Ao receber a codificação 2 (digitalWrite(LED, BAIXO); } }
visualizações