domingo, 8 de dezembro de 2013

Controlando a TV com Notebook

Continuando minhas experiências com infravermelho, após capturar e anotar os códigos enviados como demonstrados no tópico Decodificando Controles Remotos, resolvi verificar se realmente funcionaria o envio de sinais seguindo os mesmos padrões.

Lembre-se que o Módulo de Controle Secundário do projeto de automação que estou fazendo é responsável por ligar/desligar TVs, logo essa tarefa de hoje é muito importante para este módulo.

Enviei alguns comandos utilizando um led emissor infravermelho comum, que veio no kit infravermelho citado no tópico Material Necessário.

O resultado foi positivo no quesito PRECISÃO DO CÓDIGO, porém insatisfatório no quesito QUALIDADE DO SINAL. Em alguns momentos foi preciso enviar o mesmo comando várias vezes para que ele funcionasse, mas este ponto negativo já era esperado,  daí o motivo de eu ter colocado na lista de compras um led emissor infravermelho multiângulo, que é composto de 4 leds IR enviando o mesmo sinal, ao mesmo tempo, em várias direções.
Esse led chegará em breve e darei o feedback sobre os resultados com ele, mas por enquanto tenho que me contentar com o led comum.

O desenvolvimento do transmissor deu-se da seguinte forma:

MATERIAL
  • Placa Arduíno Uno R3
  • Cabo USB
  • Led infravermelho comum
  • Resistor 220 ohms
  • Fios jumpers
Esquema de montagem do transmissor IR na protoboard




































Talvez eu não precisasse montar a protoboard utilizando o Fritzing por se tratar de um circuito fácil de montar, mas para não perder o costume, prefiro manter o hábito de primeiro desenhar para depois montar de verdade.

O circuito montado ficou assim:

Protoboard montada com o led emissor infravermelho

























Para fazer o envio do sinal infravermelho utilizando os métodos IRRemote, você precisa ligar o pólo positivo do led ao pino 3 da placa Arduíno. Perceba que não existe referência ao pino 3 no código, está implícito.

A codificação, como em todos os outros exemplos mostrados, foi muito simples, a biblioteca IRRemote trata dos pequenos detalhes, tudo o que precisei enviar foi o código hexadecimal da tecla que simulei pressionar (e o tamanho em bits desse comando) através do método sendNEC (existe outros métodos para o mesmo fim, que varia de acordo com cada protocolo: sendSony, sendNEC, etc.).

Considerando que obtive os seguintes códigos do controle de minha TV à cabo:
  • Liga/Desliga: E17A48B7 
  • Sobe Canal:   E17A08F7 
  • Desce Canal:  E17A58A7
 Ficou o sketch da seguinte forma:

 
#include <IRremote.h>

IRsend irsend;

void setup() {
  Serial.begin(9600);
}

void loop() {
  char comando = Serial.read();
  if (comando == 'L')
      ligaDesliga();
  else if (comando == 'S')
      sobeCanal();
  else if (comando == 'D')
      desceCanal();
}


//Envia o comando LIGA com 32 bits utilizando protocolo NEC
void ligaDesliga() {
  for (int i = 0; i < 3; i++) {
    irsend.sendNEC(0xE17A48B7, 32);
  }
}

//Envia o comando SOBE CANAL com 32 bits utilizando protolo NEC

void sobeCanal() {
  for (int i = 0; i < 3; i++) {
    irsend.sendNEC(0xE17A08F7, 32);
  }
}
//Envia o comando DESCE CANAL com 32 bits utilizando protocolo NEC
void desceCanal() {
  for (int i = 0; i < 3; i++) {
    irsend.sendNEC(0xE17A58A7, 32);
  }
}



Fiz um vídeo demonstrando os resultados, não repare a falta de qualidade, mas estava difícil filmar tudo com um celular em uma mão e o computador em outra.

Ao teclar a letra "S" eu mandava subir o canal, a tecla "D" para descer e a tecla "L" para ligar/desligar.


 

Com isso terminei todos os experimentos referente ao controle de equipamentos por meio de luz infravermelha, o que implica que para o Módulo de Controle Secundário ficar completo, precisarei apenas acrescentar um receptor RF-433Mhz, assunto esse que abordarei em breve.

Andei trocando idéias com o Jalf, amigo e ex-colega de universidade (UFCG - Campina Grande - PB) e ele me passou várias informações e sugestões que podem melhorar meu projeto, tais como interruptor touchscreen feito em casa, módulos RF com maior alcance, dentre outras, que irei tratar na minha próxima postagem (valeu Jalf !!!).

Então, inté, te "vejo" em breve !


Receba grátis todos os códigos-fontes se inscrevendo em nosso canal


13 comentários:

  1. Massa. Continua ai!
    Só aguardando chegar meu material para começar um blog também :)

    ResponderExcluir
  2. Olá. Ótimo post!
    pretendo fazer um, mas com 3 leds IRs, de quantos ohms teria que ser o resistor neste caso?

    ResponderExcluir
    Respostas
    1. Olá Danilo, muito obrigado pelo feedback. Não entendi bem como é que você pretende fazer. Vai utilizá-los em série ? No meu caso usei um resistor de 220ohms para um único led. Depois de testado, comprei um módulo de leds IR multi ângulo que já vem com 4 leds enviando o mesmo sinal com uma única conexão ao Arduíno e já vem embutido nesse módulo todos os resistores necessários, daí ficou bem mais simples a solução. Você pode utilizar essa calculadora para saber a resistência caso queira utilizá-los em série: http://www.robotizando.com.br/calculadora_leds.php

      Excluir
    2. Mas a alcance do emissor IR multi ângulo foi melhor?

      Estou com esse problema no meu projeto. Achei alguns circuitos usando um BD139 pra aumentar a potência do sinal, mas me falta testá-lo.

      Excluir
    3. UPDATE:

      peguei um LED de controle remoto antigo, usei o circuito com o BD139 e consegui acionar a TV a uma distância de 4m.

      O circuito que usei foi basicamente esse:
      https://learn.adafruit.com/using-an-infrared-library/sending-ir-codes

      A diferença é que usei uma fonte externa no lugar de Vcc (bateria de 9V) com um resistor de 15ohm em série com o LED IR e o transistor era um BD139 - muito mais potente que o necessário, mas estava baratinho =D.

      Excluir
    4. Adriano, muito bom. Percebi que utilizando os sensores comuns não dá bons resultados devido o pequeno alcançe.

      Excluir
  3. Olá, Helio! Parabéns pelo blog
    Tbm estou desenvolvendo um projeto com módulo e controle RF, mas sou iniciante na área, e estou tendo mt dificuldade com a programação. Vc poderia me ajudar nessa parte? Seja simplesmente disponibilizando a programação utilizada nesse seu projeto?
    Obrigada desde já.
    Fico no aguardo.
    Sucesso

    ResponderExcluir
    Respostas
    1. Olá Mariane, muito obrigado pela visita ao site. Desculpe a demora em responder, ando meio atarefado demais prá variar. Sobre o código, eu disponibilizei no final de cada artigo um link para vocês terem acesso aos códigos. Em breve estarei mostrando todos eles mais evoluidos em um novo blog que divulgarei aqui. Mas enquanto isso, veja no final dessa postagem, há um link instruindo como baixar os códigos.

      Excluir
  4. Meu Led IR nao acende, n sai sinal do pino '3'. como o arduino sabe que é no pino 3 que tem de mandar o sinal ?

    ResponderExcluir
  5. Perfeito. sabe de algum tutorial que eu consiga mudar os canais pelo computador ou notebook atravez de uma pagina html e um shield ethernet ?

    ResponderExcluir
    Respostas
    1. Olá Marcelo. Eu não cheguei a ver nenhum tutorial que tenha chegado a esse nível de detalhe mas no blog que já venho tentando abrir e que espero que demore mais um ano, eu pretendo abrir mais informações a esse respeito. Agora um bom começo são os próprios exemplos que estão disponíveis na IDE do Arduíno que trata sobre shield ethernet. Se eu não me engano tem um exemplo bem simples de Liga/Desliga, você pode interpretá-lo como sobe e desce canal e acrescentar mais uma caixa de texto com um botão ao lado que signifique um salto direto para o canal desejado, basta que você entenda o básico de HTML.

      Excluir
  6. Muito legal. Estou desenvolvendo um projeto similar a esse, em meio a um TCC de pós-graduação e também na escola em que leciono informática. Mesmo agora em 2019, me ajudou bastante. Obrigado!

    ResponderExcluir