LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: tr3s em 08 de Dezembro de 2009, 04:44

Título: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: tr3s em 08 de Dezembro de 2009, 04:44
Olá a todos!

Pois é, depois de muito tempo na escuridão... Finalmente estou de volta!  :D :D

Hoje trago-vos um projecto óptimo para deixarem os vossos familiares boquiabertos este Natal!
Ora bem, vou-vos mostrar como podem usar o vosso Arduino para controlarem a vossa Televisão, DVD, Box, portátil, enfim tudo o que seja controlado por um comando de Infra-Vermelhos! 8)

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi240.photobucket.com%2Falbums%2Fff159%2Fsuper-mascarada%2Fintro.jpg&hash=2086e77de3f29af9495204e6d1a147b0cbc24516)

Vamos precisar de:

Podem ainda ver o tutorial de como Construir um Sensor de próximidade de Infravermelhos por 0€ (http://lusorobotica.com/index.php/topic,527.0.html) para verem como é feita a ligação do sensor IR.

Uma breve introdução:
Enquanto estudava e arquitecturava como irá ser feita a comunicação entre os LRSwarmBots, decidi começar a fazer testes. Comecei então a estudar os vários códigos existentes para Infra-Vermelhos. Os mais utilizados hoje em dia são o Sony e o Philips RC5.
O código da Sony é um código bastante fácil de entender. Muito resumidamente consiste num conjunto de 12 bits onde um bit 1 tem um "espaço" a LOW durante 600 microsegundos e um periodo a HIGH durante 1200 microsegundos. O espaço mínimo entre dois códigos sony é de 40 milisegundos e cada mensagem dura 45 milisegundos. A frequência da portadora é 40Khz.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi240.photobucket.com%2Falbums%2Fff159%2Fsuper-mascarada%2FSonyIR-1.png&hash=779cddcf22b0e7138b87e4113689ca7ceb0a484f)

Para este código IR seria muito simples fazer programar algo de modo a receber e enviar mensagens, tanto que projectos para fazer receptores de códigos Sony é o que não falta para aí. Mas atenção é so receptores, não entendendo bem porquê mas as pessoas fogem a sete pés quando vêm que têm de modular sinais... De qualquer maneira, se quiserem fazer algo com estes códigos e precisarem de ajuda é só perguntar!  :)

Tendo em mente que queria fazer algo para os LRSwarmBots decidi escolher os códigos da Philips, RC5. Os motivos foram, cada bit tem a mesma duração, contém mais informação, zonas definidas para endereço e para comando, usa uma portadora numa frequência mais "simpática" (36Khz), é o mais usado mundialmente e não há praticamente nada feito em Arduino com estes códigos, nada como um bom desafio!

O código IR RC5 da Philips consiste em 14 bits por mensagem. Os 2 primeiros bits são StartBits, servem para o receptor regular o Gain (Automatic Gain Control), o bit seguinte é um indicador de Status e serve para o aparelho receptor saber se a tecla está a ser continuamente pressionada ou se simplesmente foi pressionada uma vez. Se a tecla ficar pressionada por algum tempo o bit passa a 0, se a tecla for apenas pressionada rapidamente o bit é 1. Os 5 bits seguintes são bits de endereçamento e desta forma é possível controlar a TV e não ligar o vídeo :p! As TVs por norma têm o endereço 0, os VCR têm o endereço 5 e por aí fora! Os 6 bits restantes são o comando a ser transmitido, desta forma temos 2048 instruções possíveis (32 endereços com 64 comandos cada). Neste código todos os bits têm a mesma duração (1778 microsegundos) e é por isto que quase ninguém faz alguma coisa com o Arduino e este código, não dá para usar a bela funçao pulseIn() :P! No código RC5 um 0 é representado por uma transição descendente e um 1 é representado por uma transição ascendente. A duração de cada mensagem é de 24,889  milisegundos e a distância mínima entre mensagens é de 88,889ms (50x a duração de bit, ou BitTimes).

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi240.photobucket.com%2Falbums%2Fff159%2Fsuper-mascarada%2FRC5-1.png&hash=8c644837f421ff73cb9bf58b78fd2351d8c593f0)

A teoria para receber estes sinais é simples. Resumidamente é esperar que o sensor detecte o primeiro StartBit da mensagem e ler os 13 bits restantes. Agora para enviar os códigos a história já é outra. Não é só enviar os bits pela mesma ordem que os recebemos fazendo digitalWrite(High e Low). É necessário modular o sinal numa portadora a 36Khz.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi240.photobucket.com%2Falbums%2Fff159%2Fsuper-mascarada%2Fportadora-1.png&hash=486780419f85257d1dbe460cb1430d6362a17792)

Esta foi a solução que os engenheiros da Philips encontraram para evitar o ruído existente por todo lado, até mesmo aquele que os nossos corpos libertam. Ao colocar o sinal nesta frequência, o receptor vai só olhar para esta frequência e ignorar tudo aquilo que não esteja neste ritmo.
Como fazê-lo?
Uma maneira simples é como fiz:
Sabemos que se tivermos de enviar HIGH durante um segundo temos de fazer o LED piscar 36000 vezes. Cada bit dura 1778 microsegundos e um segundo tem 1000000 (milhão) de microsegundos, então o LED terá de piscar 64 vezes se quisermos enviar HIGH durante 1778 microsegundos. 1778*36000/1000000.

Sabendo que cada bit está 50% do tempo a LOW e 50% a HIGH só queremos que o LED pisque 32 vezes em 889 microsegundos! 1778/2 --- 64/2

Simples hein!?  ;)

Sendo assim, 32x em 889 uSegundos dá que cada ciclo LED ON/OFF tem de durar aprox. 28 uSegundos. 889/32
E para acabar, o LED terá de estar 14 uSegundos a HIGH e outros 14 uSegundos a LOW. 28/2

No código irão perceber que não uso os 14 microsegundos directamente, isto deve-se ao facto da função DigitalWrite da biblioteca Arduino demorar aproximadamente 4 microsegundos e sendo assim, quando colocamos um LED a HIGH ou a LOW já gastámos 4 uSeg., portanto já só podemos esperar 10 uSeg. .

Agora, já sabemos ler mensagens RC5 com o nosso Arduino e já sabemos como modulá-las e fazer o LED piscar esse sinal... Portanto... agora é só fazer código, as ligações e apontar o nosso Arduino para a TV!

Como eu sei que muitos de vocês querem o código já feito :P eu vou fazer o favor de colocar aqui um código muito muito simples que faz isto tudo que acabei de explicar. Basicamente o que o programa faz é aprender o código de um comando e quando carregam no botão ele faz um LED piscar a mensagem que aprendeu. Mais simples, apontem o comando da vossa TV para o receptor, carreguem no botão para mudar de canal por exemplo, apontem o Arduino para a vossa TV e carreguem no botão do Arduino, et voilá a vossa TV acabou de mudar de canal!

Para este exemplo, liguei o sensor IR como no tópico Construir um Sensor de próximidade de Infravermelhos por 0€ (http://lusorobotica.com/index.php/topic,527.0.html), liguei um LED IR no pino 13 aproveitando o GND ao lado e um botão no Pin 3 (não é necessário explicar este pois não? :P).

Fica aqui um vídeo que fiz onde mostro o meu Arduino a fazer isto mesmo:

Arduino as IR Remote (http://www.youtube.com/watch?v=8K6Xq6fOR48#)

Sendo isto trabalho de investigação para os LRSwarmBots é óbvio que numa aplicação mais a sério nunca iria usar as funções da biblioteca Arduino pois tornaria todo o projecto ineficiente. Por isso, recomendo que se quiserem usar este raciocínio evitem usar funções como digitalWrite e usem antes sintaxe específica AVR (evitam ter de andar a ver quanto tempo dura a funçao digitalWrite :P).


Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: Pauleta em 08 de Dezembro de 2009, 09:30
Muitos parabéns, é um tutorial muito interessante. Está aqui informação muito boa para quem quer começar a desenvolver aplicações deste tipo em robots e controlos remotos.
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: metRo_ em 08 de Dezembro de 2009, 11:18
Estou a fazer o mesmo para a disciplina de microcontroladores na faculdade, tenho que controlar uma persiana :p
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: tr3s em 08 de Dezembro de 2009, 11:40
Obrigado Pauleta! :D

Estou a fazer o mesmo para a disciplina de microcontroladores na faculdade, tenho que controlar uma persiana :p

Eehehe! Grande coincidência M3Tr0_ (hahahha), não sabia!  :)
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: amando96 em 08 de Dezembro de 2009, 11:48
altamente, há uns tempos tentei fazer isto, resultava, mas nem sempre...
por acaso agora queria fazer um comando wireless, mas os modulos RF foram uma dor de cabeça, e em vez de gastar um balurdio em xbees, poderia usar IV :P  que alcance tem? eu estou a pensar em usar a meia esfera que as lanternas tem, para reflectir a luz para a frente, e várias leds IV, em principio indoor...
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: TigPT em 08 de Dezembro de 2009, 11:49
Muito bom tr3s, gostei de ver a tua documentação.

Agora é fazer um protocolo de comunicação simples utilizando a vantagem dos endereços. Muito curioso a Philips ter colocado endereços no protocolo IR. Só conhecia o da Sony.

(A trabalhar assim, qualquer dia apresentas-me a conta... estou para ver  8))
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: tr3s em 08 de Dezembro de 2009, 12:05
Eehhe obrigado a todos :D

Mais uma nota, há mais códigos IR. Deixo alguns como exemplo:
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: tr3s em 08 de Dezembro de 2009, 12:25
altamente, há uns tempos tentei fazer isto, resultava, mas nem sempre...
por acaso agora queria fazer um comando wireless, mas os modulos RF foram uma dor de cabeça, e em vez de gastar um balurdio em xbees, poderia usar IV :P  que alcance tem? eu estou a pensar em usar a meia esfera que as lanternas tem, para reflectir a luz para a frente, e várias leds IV, em principio indoor...

O alcance... A1qui em minha casa a 5 metros funcionava bem. Mas o Alcance é relativo, depende de vários factores, ruído externo, brilho dos leds, etc. .
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: microbyte em 08 de Dezembro de 2009, 14:25
Bom... Muito bem. Grande tutorial.

Confesso que ainda não o li na totalidade, mas vou ler certamente. ;) Obrigado mais uma vez pela partilha de informação tão preciosa.  ;D
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: Tyran em 08 de Dezembro de 2009, 14:58
Hehe muito fixe :)

Agora é fazer uma plaquita pequena para ires para o café e mudares de canal quando tiver a jogar o benfica :)
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: metRo_ em 08 de Dezembro de 2009, 15:34
Assim uma placa com um attiny smd e uns emissores smd, assim muito muito pequeno :D
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: ricardo-reis em 08 de Dezembro de 2009, 20:46
nada a dizer.. este homem é um senhor.. :D  mt bom tutu, sr daniel, mt bom!
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: Fifas em 09 de Dezembro de 2009, 15:35
muito bom tr3s! :) gostei mesmo :D

Agora era só conseguires meter isso a controlar a Powerbox da tvcabo já que nao consigo controla-la com nenhum comando universal...nem com o telemovel que tem tudo e mais alguma coisa :D
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: Tyran em 09 de Dezembro de 2009, 17:15
Deve ter um protocolo feito por eles :P assim quem quer mudar de canal tem de comprar os comandos deles lol
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: Fifas em 09 de Dezembro de 2009, 17:52
o pior é que o comando tá sempre a dar o berro :D
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: Raul em 07 de Janeiro de 2010, 01:46
Tr3s usaste o transistor ( BC547 ) no teu projecto?

cumprimentos
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: tr3s em 07 de Janeiro de 2010, 11:24
Aqui não usei, liguei o pino directamente no pino 13 que já tem uma resistência por causa do led da placa ;)
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: microbyte em 07 de Janeiro de 2010, 13:16
Aqui não usei, liguei o pino directamente no pino 13 que já tem uma resistência por causa do led da placa ;)

Estás a usar que versão do Arduino?

EDIT:
Já vi pelo vídeo que estás a usar a Duemilanove:
Espanta-te: http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf (http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf)

Não tem resistência no Pin13, só tem para o LED que está na placa.

Não te preocupes que até há bem pouco tempo também tinha a mesma ideia...
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: Capeleiro em 07 de Janeiro de 2010, 21:53

Espanta-te: http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf (http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf)

Não tem resistência no Pin13, só tem para o LED que está na placa.

Não te preocupes que até há bem pouco tempo também tinha a mesma ideia...
Há algum tempo estive a pensar nisto... O pin 13 do Arduino é como qualquer pino, não tem resistência, mas em nenhum deles é preciso uma resistência porque em princípio qualquer LED aguenta com 40mA de corrente máxima (é claro que não é aconselhável, mas aguenta...).
Então nesse caso toda a nossa preocupação com resistências e cálculos para os LEDs não queimarem foi, sem querer exagerar muito, "em vão"... lol  ;D
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: oxytech em 07 de Janeiro de 2010, 21:59

Espanta-te: http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf (http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf)

Não tem resistência no Pin13, só tem para o LED que está na placa.

Não te preocupes que até há bem pouco tempo também tinha a mesma ideia...
Há algum tempo estive a pensar nisto... O pin 13 do Arduino é como qualquer pino, não tem resistência, mas em nenhum deles é preciso uma resistência porque em princípio qualquer LED aguenta com 40mA de corrente máxima (é claro que não é aconselhável, mas aguenta...).
Então nesse caso toda a nossa preocupação com resistências e cálculos para os LEDs não queimarem foi, sem querer exagerar muito, "em vão"... lol  ;D

o led tem em serie uma resistência de 1k ohm

cumps
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: Capeleiro em 07 de Janeiro de 2010, 22:03
Sim, mas esse é o LED que já vem embutido no Arduino, os outros leds que se ligam a esse pino estão ligados directamente ao ATMega.
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: tr3s em 07 de Janeiro de 2010, 23:24
Eehhehe pois é, têm razão! Estava convencidissimo que a resistência estava entre o ATmega e o pino da board e só depois o LED!
                         
|                           \/ LED
|13 - ___WW____|_____[] (Pino da board)
|

Isto é, julgava que tínhamos o pino do AVR, de seguida uma resistência e depois teríamos o Pino da Placa em paralelo com o LED da Placa!

Obrigado por repararem! :D :D
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: NooBot em 19 de Janeiro de 2010, 21:44
Boas, n e possivel com esse comando controlar o smalluino :P ?

era bastante engraçado
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: tr3s em 19 de Janeiro de 2010, 23:21
Boas, n e possivel com esse comando controlar o smalluino :P ?

era bastante engraçado

É, claro que é! :D ;D ;D
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: NooBot em 20 de Janeiro de 2010, 08:01
eh lá! mas assim seria dois arduinos cerca de 50€  :o

vou amealhando ;D depois compro xD
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: ricardo-reis em 20 de Janeiro de 2010, 12:15
não necessáriamente.. podes definir 'funções' pró robot que sejam activadas pelo comando da tua televisão.. :)
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: metRo_ em 20 de Janeiro de 2010, 13:38
Ou então um Arduino e um breaduino (http://loja.lusorobotica.com/arduino/31-breaduino-essential-kit.html).  :)
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: NooBot em 20 de Janeiro de 2010, 14:23
ent e ricardo como faço isso?

desculpa a minha "noobidade" mas d facto sou newbie neste campo :S
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: NooBot em 20 de Janeiro de 2010, 14:27
Ou então um Arduino e um breaduino (http://loja.lusorobotica.com/arduino/31-breaduino-essential-kit.html).  :)

metro kuanto custa as breadboards? sabes alguma loja aki em Loures de electronica? tou farto de procurar na net e nada, otra coisa se alguem saber o k vende a loja ExabYte pff digame ;)

cumps ;)
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: ricardo-reis em 20 de Janeiro de 2010, 14:34
ent e ricardo como faço isso?

se leres o inicio deste topico com atenção és capaz de descobrir por ti mesmo.. ;)
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: Capeleiro em 20 de Janeiro de 2010, 14:50
Há uma forma mais fácil que só usa um Arduino.
Se se aproveitar a electrónica do carrinho desmontado basta ligar os fios de cada motor ao Arduino.
Assim: o comando envia os sinais para a placa principal do carro telecomandado, para a frente por exemplo, este supostamente iria fazer o motor trabalhar, mas o que está ligado em vez dele é o Arduino. Este só precisa de fazer a leitura das duas saídas do motor: quando temos 0 e 1 (por exemplo) significa "frente", quando temos 1 e 0 temos trás e 0 0 significa parado.
Espero ter-me feito entender...  ??? ;)
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: NooBot em 20 de Janeiro de 2010, 14:57
boas, sim o suficiente ;D

obg ricardo vou ja ver n li com mta atençao n :S

cumps ;)
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: TigPT em 21 de Janeiro de 2010, 12:59
otra coisa se alguem saber o k vende a loja ExabYte pff digame ;)
http://www.exabyte.pt/catalogo/ (http://www.exabyte.pt/catalogo/)
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: NooBot em 21 de Janeiro de 2010, 16:10
obg TigPT por acaso já vi, infelizmente nada de electrónica :S
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: marceloxlo em 24 de Fevereiro de 2010, 23:35
eu tava a tentar fazer esse projecto com um receptor infravermelhos ( DILBPW50 da philhips) que so tem dois pinos. Alguem sabe se é possivel? Não tou a conseguir por isto a funcionar  ???
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: Stigma em 21 de Janeiro de 2011, 23:56
Muito bom este tutorial.
Estive para aqui a testar o sensor, mas para o msm botao obtenho valores que estao sempre a variar. Nao sei se a frequencia do comando tem alguma coisa a ver. Esta pergunta pode ser um bocado "noobish", mas o comando tambem tem que suportar a modulaçao RC5?
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: microbyte em 22 de Janeiro de 2011, 13:28
Respondendo à tua questão, para leres, tens de saber que protocolo está a ser emitido.
Se estás a tentar ler usando o protocolo RC5, pelo problema que expões, não é esse o protocolo que o comando está a usar.
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: pmj_pedro em 08 de Fevereiro de 2011, 03:12
Estava a fazer um despertador, e queria utilizar um comando de tv para controlar o arduino, mas só encontrei este receptor no ebay de frequencia 36.7Khz http://cgi.ebay.com/2-x-IR-Receiver-Module-36-7-kHz-KSM-2012-/260510459597?pt=LH_DefaultDomain_0&hash=item3ca7a226cd (http://cgi.ebay.com/2-x-IR-Receiver-Module-36-7-kHz-KSM-2012-/260510459597?pt=LH_DefaultDomain_0&hash=item3ca7a226cd)
funciona na mesma com um comando philips?
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: beirao em 08 de Março de 2011, 16:23
Esses receptores encontras em muito lado.

Sonigate: http://www.sonigate.com/pt/product/show_details/27988/Receptor-Infravermelhos-36KHz-TSOP1736 (http://www.sonigate.com/pt/product/show_details/27988/Receptor-Infravermelhos-36KHz-TSOP1736)
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: beirao em 20 de Julho de 2011, 19:39
Desculpem desenterrar este tópico, mas gostava de ter uma opinião vossa: será possível ler um byte enviado por um comando sem uC ? imaginando que tenho uma aplicação em que tenho vários dispositivos independentes, e cada um é activo por um comando IR. Terei de usar um uC em cada dispositivo? (eu acho que sim, mas não sei se alguém conhece alguma maneira de o fazer por hardware...)

Obrigado!
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: Kcidade em 21 de Abril de 2012, 13:35
Boas,
Alguem sabe-me dizer porque que a libraria IRemote nao funciona no software 1.0?
Título: Re: Tutorial Como fazer um comando de TV com Arduino + IR
Enviado por: dio123 em 24 de Setembro de 2012, 18:56
Boa tarde,

Tenho a box tdt satélite samsung, depois de ter comprado 3 comandos universais nenhum funciona com a box.

Então peguei o led e receptor IR e exprimentei a biblioteca IRremote usei o exemplo e gravar e depois executa.
Então o lcd  o formato  NEC a box não usa nenhum especifico é utilizado RAW.

Usando o raw não tenho espaço para 4 teclas.  O que se pode fazer neste caso.