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:
#incluirTransmissão de dados com pacotes de repetição:
#incluirTransferência de dados indicando o protocolo:
#incluirEste 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// 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.
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.
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.
// 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;
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
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
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
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
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
) 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:
#incluirExplicações para o código:
- A biblioteca IRremote.h contém um conjunto de comandos e permite simplificar o esboço;
- 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) )
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