Índice:
- Etapa 1: Breve Visão Geral do Circuito
- Etapa 2: Breve Visão Geral do Software
- Etapa 3: Conteúdo do pacote I2C
- Etapa 4: Adquirir códigos de controle remoto (ui32Data)
- Etapa 5: Como testar seu dispositivo I2C Slave
- Etapa 6: Reduzindo seu design
- Etapa 7: Conclusão
- Etapa 8: Referências usadas
Vídeo: Controle remoto infravermelho I2C com o Arduino: 8 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
Preâmbulo Este instrutivo detalha como criar um controlador remoto universal usando I2C para a interface.
Que estranho você diz, usando um dispositivo escravo I2C?
Sim, um dispositivo escravo I2C.
Isso ocorre porque o tempo preciso de pacotes IR é bastante exigente e um Arduino típico terá dificuldades se já estiver realizando muitas outras tarefas ao mesmo tempo. É melhor distribuir a carga de computação atribuindo atividades intensivas de temporização a processadores dedicados sempre que possível (melhor ainda fazê-lo em hardware). Dado que I2C é um método de comunicação robusto e bem documentado entre ICs, eu escolhi isso como a interface.
Introdução
Conforme mencionado acima, este manual descreve como controlar aparelhos domésticos, como TV, DVD player e satélite, etc., usando a biblioteca IRremote no Arduino.
Ele conclui com um exemplo de projeto transformando o Arduino em um módulo de controle remoto escravo I2C (foto 1 acima) com circuito de teste de protótipo (foto 2 acima) e segue detalhando como reduzir seu projeto aos componentes mínimos necessários para que possa ser incorporado em outro design. No meu caso, eu uso este dispositivo embutido em um dispositivo de controle remoto IoT Universal baseado em um ESP8266-12E.
Quais peças eu preciso?
Para construir o circuito descrito na Etapa 1 (Transmissor IV), você precisará das seguintes peças;
- 2 resistores de 10K
- 1 resistor 390R desligado
- 1 resistor 33R desligado
- 1 resistor 3K8 desligado
- 1 LED vermelho apagado
- 1 LED apagado IR TSAL6400
- 1 transistor BC337 desligado
- 1 capacitor de 220uF
- 1 fora do Arduino Uno
Para construir o circuito descrito na Etapa 4 (Receptor IR), você precisará das seguintes peças;
- 1 resistor de 10K desligado
- 1 fora do TSOP38328
- 1 capacitor de 220uF
- 1 fora do Arduino Uno
Para construir o circuito descrito na Etapa 5 (circuito de teste escravo), você precisará das seguintes peças;
- 4 resistores de 10K
- 2 resistor 390R desligado
- 1 resistor 33R desligado
- 1 resistor 3K8 desligado
- 2 LED vermelho apagado
- 1 LED apagado IR TSAL6400
- 1 transistor BC337 desligado
- 1 capacitor de 220uF
- 2 botões SPST desligados
- 2 fora do Arduino Unos
Para construir o circuito descrito na Etapa 6 (desenho reduzido), você precisará das seguintes peças;
- 3 resistores de 10K desligados
- 1 resistor 270R desligado
- 1 resistor 15R desligado
- 4 resistores 1K desligados
- 1 LED vermelho apagado
- 1 LED apagado IR TSAL6400 ou TSAL5300
- 1 transistor BC337 desligado
- 1 fora do capacitor 220uF eletrolítico a 6,3v
- 1 fora do capacitor 1000uF eletrolítico @ 6,3v
- 2 capacitores desligados de 0,1uF
- 2 capacitores de 22pF desligados
- 1 desligado Xtal de 16 MHz
- 1 fora do ATMega328P-PU
Nota: Você também precisará de um dispositivo FTDI para programar o ATMega328P
Quais habilidades eu preciso?
- Domínio mínimo de eletrônica,
- Conhecimento do Arduino e seu IDE,
- Um pouco de paciência,
- Alguma compreensão do I2C seria útil (veja aqui alguns detalhes genéricos da I2C / Wire Library).
Assuntos abordados
- Breve visão geral do circuito,
- Breve visão geral do software,
- Conteúdo do pacote I2C,
- Aquisição de códigos de controle remoto (ui32Data),
- Como testar seu dispositivo I2C Slave,
- Reduzindo seu design,
- Conclusão,
- Referências usadas.
Isenção de responsabilidade
Como sempre, você usa essas instruções por sua própria conta e risco e elas não são suportadas.
Etapa 1: Breve Visão Geral do Circuito
O objetivo do circuito é transmitir códigos de controle remoto IR. Seu design é bastante direto e simples.
Quando o transistor Q1 um NPN BC337 é ligado através de um lógico do Arduino PWM O / P D3 para o resistor R5, a corrente passa pelos Leds 1 e 2. Limitada apenas pelos resistores R3 e R4 respectivamente. Q1 é usado para aumentar a corrente que passa pelo diodo IR (IF Max = 100mA) para o que o Arduino O / P é capaz de fornecer ~ 40mA @ + 5v.
O capacitor C1 a 220uF eletrolítico fornece alguma estabilização evitando uma queda do trilho de alimentação pela energia consumida pelos Leds 1 e 2.
Os resistores R1 e R2 são pull ups I2C.
Etapa 2: Breve Visão Geral do Software
Preâmbulo
Para compilar com êxito este código-fonte, você precisará da seguinte biblioteca extra;
IRremote.h
- Por: z3t0
- Objetivo: Biblioteca remota de infravermelho para Arduino: enviar e receber sinais infravermelhos com vários protocolos
- De:
Visão geral do código
Conforme mostrado na figura 1 acima, na inicialização, o código configura a E / S do microcontrolador e, em seguida, consulta o status do sinalizador de software interno 'bFreshDataFlag'. Quando este sinalizador é definido, o controlador afirma sua linha 'Ocupado' (enviando dados do pino D4 baixo) e passa para o estado 'eBUSY' lendo sequencialmente os comandos de pressão do botão mantidos em uDataArray e enviando os dados modulados por IV para o LED IV em um seqüência de transmissão.
Uma vez que os dados mantidos em uDataArray tenham sido totalmente enviados, o estado 'eIDLE' é retomado e a linha 'Ocupado' é desabilitada (enviando dados com o pino D4 alto). O dispositivo agora está pronto para receber mais pressionamentos de botão, marcando o fim da sequência de transmissão.
Recepção de dados de pressionamento de botão IR
Quando os dados são enviados para o controle remoto infravermelho via I2C, ele dispara uma interrupção e a chamada de função receiveEvent () é disparada de forma assíncrona.
Uma vez disparados, os dados I2C recebidos são gravados sequencialmente no buffer 'uDataArray '.
Durante a recepção de dados, se um fim de sequência for sinalizado pelo mestre (bFreshData! = 0x00) o 'bFreshDataFlag' é definido, sinalizando assim o início da sequência de transmissão.
As imagens 2 a 3 fornecem um exemplo de uma seqüência típica de pacotes.
Nota: código-fonte completo disponível aqui
Etapa 3: Conteúdo do pacote I2C
O formato do pacote de controle enviado para o escravo através de I2C é dado acima na figura 1 o significado de cada campo é dado abaixo
Significado dos campos do pacote de controle
byte bEncoding;
-
Codificação de controle remoto IR,
- RC6 (Céu) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
A representação hexadecimal do fluxo de dados IV binário 4 bytes de dados (longo sem sinal), LSByte… MSByte
byte bNumberOfBitsInTheData;
Número de bits nos dados (máximo de 32). Faixa = 1… 32
byte bPulseTrainRepeats;
Quantas repetições deste trem de pulso. Faixa = 1… 255. Normalmente 2 a 4 repetições. Você pode querer estender isso para comandos liga / desliga, pois o dispositivo receptor às vezes requer algumas repetições extras de trem de pulso para receber um sinal de ligar
byte bDelayBetweenPulseTrainRepeats;
Atraso entre as repetições deste trem de pulso. Faixa = 1… 255mS. Normalmente 22mS… 124mS
byte bButtonRepeats;
Simula o pressionamento repetido do mesmo botão (mas não suporta o código modificado como um controle remoto da Apple, apenas repete o código do botão). Faixa = 1… 256. Padrão = 1
uint16_t ui16DelayBetweenButtonRepeats;
Atraso entre as repetições do botão (int sem sinal). 2 bytes no total de LSByte… MSByte. Faixa = 1… 65535 ms. Padrão = 0mS
byte bFreshData;
-
Dados recentes. Um valor diferente de zero. Escrito por último, aciona a sequência IR TX. Faixa 0x00… 0xFF
- Mais pacotes de controle por vir = 0
- Este é o pacote de controle final = valor não zero 1, 2,… 255
Observe o uso da diretiva do compilador '_packed_'. Isso é para garantir que os dados sejam pacote, byte a byte, na memória, independentemente do sistema de destino usado (Uno, Due, ESP8266 etc.). Isso significa que a união entre registerAllocationType e dataArrayType precisa apenas de um clock out / clock em bytes de um pacote de controle, tornando o software TX / RX simples.
Etapa 4: Adquirir códigos de controle remoto (ui32Data)
Existem três maneiras de adquirir um respectivo código-chave do controle remoto;
- Via contagem de bits com um osciloscópio,
- Procure em um site,
- Decodifique-o direto do fluxo de dados no software.
Via contagem de bits com um escopo
Este não é um método eficiente, pois leva algum tempo e potencialmente requer mais de uma tentativa, mas pode ser altamente preciso. Também é útil na validação visual de códigos obtidos pelos métodos 2 e 3, também na determinação de quaisquer peculiaridades de um controle remoto. A título de exemplo, ao manter pressionado um botão em um controle remoto Apple IR. O controle remoto emitirá inicialmente uma sequência de comando e, em seguida, seguirá com uma sequência compactada repetida de 0xF….
Procure em um site
O banco de dados de código do controle remoto no site do Linux Infrared Remote Control é uma boa fonte.
A desvantagem, entretanto, é que você pode ter que tentar alguns códigos até encontrar um que funcione para você. Você também pode ter que interpretar algumas das representações dos códigos para convertê-los em sua forma hexadecimal equivalente.
Decodifique-o direto do fluxo de dados
Usando o circuito na figura 1 acima em conjunto com o exemplo da biblioteca IRremote 'IRrecvDumpV2.ino', é possível decodificar o fluxo de dados direto do controle remoto. A Figura 2 mostra um controle remoto de TV Samsung decodificado para um pressionamento de botão liga / desliga na janela do terminal IDE do Arduino.
Receptor / transmissor combinado
As imagens 3 e 4 acima mostram uma solução que permite a recepção e a transmissão de comandos IR para facilitar a prototipagem.
Para decodificar os pressionamentos de botão do controle remoto IR, você precisará atualizar o Arduino com o exemplo 'IRrecvDumpV2.ino' que vem com a biblioteca IRremote.
Também funciona bem para transmissão se comandos IR. Um led vermelho é incluído como uma indicação visual de que o dispositivo está em ação.
Etapa 5: Como testar seu dispositivo I2C Slave
Usando o código-fonte aqui, e o circuito descrito acima na figura 1, programe o Arduino 'Master' com 'IR_Remote_Sim_Test.ino' e o Arduino 'Slave' com 'IR_Remote_Sim.ino'.
Supondo que você tenha uma TV Sony Bravia, caixa Sky HD e um Sony BT SoundBar, pressione o botão 1 e sua TV mudará para BBC1 (canal 101). Pressione o botão 2 e sua barra de som será silenciada. Pressione novamente e o som será reativado.
Durante a execução da sequência de transmissão IR, o LED3 acenderá indicando que o escravo está ocupado e o LED1 piscará em linha com o processo de transmissão IR.
Claro, se você não tiver o mesmo sistema de entretenimento configurado como acima, você pode reprogramar o escravo com 'IRrecvDumpV2.ino', decodificar seus comandos remotos de interesse e programá-los em 'IR_Remote_Sim_Test.ino' para o seu determinado cenário.
A Figura 2 mostra a visão geral do software de teste de nível de sistema entre Mestre e Escravo.
Etapa 6: Reduzindo seu design
Ok, supondo que você seguiu esta instrução, confiar em dois Arduinos para controlar seus dispositivos domésticos não é o uso mais eficiente de seu estoque de Arduino. Conseqüentemente, se você construir o circuito mostrado na imagem acima e seguir as instruções aqui para programar o ATMega328P com 'IR_Remote_Sim.ino', você será capaz de reduzir todo o sistema aos componentes mínimos. Isso permitirá que você incorpore seu projeto em algum outro sistema.
Etapa 7: Conclusão
A solução é estável e funciona bem, já está embutida em outro sistema há algumas semanas sem problemas.
Escolhi o Arduino Uno R3 porque queria um dispositivo que tivesse RAM suficiente para que eu pudesse ter um buffer de botão de profundidade razoável. Eu me conformei com um tamanho de buffer de 20 pacotes (MAX_SEQUENCES).
O escudo Hybrid TX / RX que fiz também foi muito útil ao decodificar controles remotos Sony e Sky. Embora eu tenha que confessar que usei meu osciloscópio digital de vez em quando para verificar se o comando IR decodificado pelo software era o mesmo que vinha do IR recebido (TSOP38328).
A única coisa que eu teria feito de forma diferente seria usar o circuito de acionamento de corrente constante para o led IR, como mostrado acima na foto 2.
Outro ponto a ser observado é que nem todos os transmissores IR são modulados com 38KHz, o TSOP38328 é otimizado para 38KHz.
Etapa 8: Referências usadas
IRRemote.h
- Por: z3t0
- Objetivo: Biblioteca remota de infravermelho para Arduino: enviar e receber sinais infravermelhos com vários protocolos
- De:
Biblioteca IR Remote
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
Sensor receptor IR (infravermelho) - TSOP38238 (equivalente)
https://cdn-shop.adafruit.com/datasheets/tsop382.pdf
Para evitar o preenchimento da estrutura de dados para limites de palavras
- https://github.com/esp8266/Arduino/issues/1825
- https://github.com/tuanpmt/esp_bridge/blob/master/modules/include/cmd.h#L15
- https://stackoverflow.com/questions/11770451/what-is-the-meaning-of-attribute-packed-aligned4
Boa fonte de detalhes remotos IR
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
Banco de dados de IR Remotes
- https://www.lirc.org/
- https://lirc-remotes.sourceforge.net/remotes-table.html
Folha de Dados BC337
https://www.onsemi.com/pub/Collateral/BC337-D. PDF
Folha de Dados 1N4148
https://www.vishay.com/docs/81857/1n4148.pdf
Recomendado:
Como adicionar um controle remoto infravermelho a um sistema de alto-falantes: 5 etapas (com imagens)
Como adicionar um controle remoto infravermelho a um sistema de alto-falantes: Neste projeto, mostrarei como criei um circuito adicional para meu sistema de alto-falantes para controlá-lo sem fio com um controle remoto infravermelho caseiro. Vamos começar
O controle remoto da TV se torna um controle remoto de RF -- NRF24L01 + Tutorial: 5 etapas (com imagens)
O controle remoto da TV se torna um controle remoto RF || NRF24L01 + Tutorial: Neste projeto vou mostrar como usei o popular IC nRF24L01 + RF para ajustar o brilho de uma faixa de LED sem fio por meio de três botões inúteis de um controle remoto de TV. Vamos começar
Controle remoto universal da TV - Ardiuino, infravermelho: 5 etapas
Controle remoto universal de TV - Ardiuino, infravermelho: Olá! Neste instrutível, mostrarei como construir e programar seu próprio controle remoto universal que funcionará com a maioria das coisas que utilizam um controle remoto infravermelho e que também " ouvir " e decodificar um sinal infravermelho enviado por vários outros
Kit de controle remoto comum transformado em controle remoto de brinquedo RC de quatro canais: 4 etapas
Kit de controle remoto comum transformado em controle remoto de brinquedo RC de quatro canais:改造 方法 非常 简单。 只需 准备 一些 瓦楞纸 板, 然后 按照 视频 教程 完成 这个 电子 项目 并 为 您 服务。 玩具 车船 提供 远程 无线 控制。
Controle seus aparelhos elétricos com seu controle remoto de TV (ir remoto) com display de temperatura e umidade: 9 etapas
Controle seus aparelhos elétricos com o controle remoto da TV (ir remoto) com visor de temperatura e umidade: oi, sou Abhay e é meu primeiro blog no Instructables e hoje vou mostrar como controlar seus aparelhos elétricos com o controle remoto da TV construindo este projeto simples. obrigado ao atl lab pelo apoio e fornecimento do material