collapse

* Links de Robótica

* Posts Recentes

Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]


Amplificador audio por beirao
[12 de Novembro de 2017, 23:43]


Power_OK Enermax por edeweld
[12 de Novembro de 2017, 17:15]


Driver motor por beirao
[11 de Novembro de 2017, 17:40]


Preciso de uma fonte de corrente constante ? por samc
[09 de Novembro de 2017, 14:18]


Pressoestato 0-10V por artur36
[07 de Novembro de 2017, 23:22]


Ideias para construir um quadrúpede simples por Njay
[07 de Novembro de 2017, 18:39]

Autor Tópico: Tutorial Como fazer um comando de TV com Arduino + IR  (Lida 34330 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Tutorial Como fazer um comando de TV com Arduino + IR
« 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)


Vamos precisar de:

Podem ainda ver o tutorial de como Construir um Sensor de próximidade de Infravermelhos por 0€ 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.


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).


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.


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€, 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:


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).


« Última modificação: 08 de Dezembro de 2009, 12:22 por tr3s »
Tr3s
Daniel Gonçalves

Offline Pauleta

  • Mini Robot
  • *
  • Mensagens: 174
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #1 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.
Cumprimentos,
Tiago Oliveira

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.727
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #2 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

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #3 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!  :)
Tr3s
Daniel Gonçalves

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.627
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #4 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...

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.235
    • Tiago Rodrigues
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #5 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))

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #6 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:
  • Panasonic - Imaginem o Sony completamente invertido (muito mais longo);
  • Daewoo - Também muito parecido ao da Sony;
  • JVC - É praticamente o código da Daewoo (apenas mudam os timings).
Tr3s
Daniel Gonçalves

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #7 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. .
Tr3s
Daniel Gonçalves

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #8 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

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #9 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 :)

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.727
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #10 em: 08 de Dezembro de 2009, 15:34 »
Assim uma placa com um attiny smd e uns emissores smd, assim muito muito pequeno :D

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.300
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #11 em: 08 de Dezembro de 2009, 20:46 »
nada a dizer.. este homem é um senhor.. :D  mt bom tutu, sr daniel, mt bom!

Offline Fifas

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 2.060
  • El RoboSapiens
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #12 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

Offline Tyran

  • Mini Robot
  • *
  • Mensagens: 293
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #13 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

Offline Fifas

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 2.060
  • El RoboSapiens
Re: Tutorial Como fazer um comando de TV com Arduino + IR
« Responder #14 em: 09 de Dezembro de 2009, 17:52 »
o pior é que o comando tá sempre a dar o berro :D