Tutorial - Hyperion (ambilight clone) na Raspberry PI (com OpenELEC)

Olá a todos,

O utilizador Karluz do nosso fórum deixou-nos um tutorial interessante para aqueles que procuram replicar o sistema ambilight da Philips de forma low-cost, utilizando o XBMC e a Raspberry PI. Apesar de inicialmente ser sua intenção utilizar o boblight, a baixa performance e alguns bugs que encontrou levaram-no a optar pelo hyperion como sistema. Parece que a opção deu frutos...
Deixamos abaixo o tutorial escrito pelo Karluz:

“O Ambilight (acrônimo de Ambient Lighting Technology) é uma tecnologia desenvolvida pela Philips para uso em televisões.
Permite projectar um brilho luminoso suave nas paredes ao redor da TV. A tonalidade desse brilho luminoso é automaticamente alterada de acordo com as cores e com o brilho da imagem.”
 (wikipedia)

No fundo, algo parecido com isto:



Passando á acção, material necessário (este foi o material que usei podendo ser alterado):

Para o XBMC:
• Raspberry Pi (44.22€)
• Cabo HDMI (3.63€)
• Cabo USB MicroB p/ alimentação (3.63€)
• Transformador USB 5v 2.5A (12.24€)
• Cartão de Memória 16Gb Class 10 (15.93€)
• Adaptador Wireless USB ou Cabo Ethernet (9.78€ ou 3.63€)
• Caixa para o Raspberry (9.78€ ou grátis se forem habilidosos :D )
(XBMC custou-me 89.43€ na Inmotion (fazer publicidade a custo zero :lol: ))

Para os Leds:

• Leds WS2801 q.b. (entre 11€ a 60€)
• Transformador 5v 2.5A p/ alimentação (12.24€) (o meu foi grátis porque usei um de um tablet que a minha filha danificou)
• 3 Cabos Jumper (tinha-os perdidos na mala de ferramentas)
• 4 Ligadores Electricos ou um ferro de soldar e um pouco de habilidade (também os tinha perdidos na mala de ferramentas)

(Leds 12mm RGB WS2801 custaram-me 11.84€ no ebay (25 leds))



É necessário ainda o acesso via SSH ao Raspberry.

Não vou pormenorizar as partes mais óbvias como a instalação do OpenElec e afins vou apenas focar-me no tema propriamente dito e é necessário conhecimento mínimo a nível de SSH.

Instalar o XBMC
Ligar todo o sistema de Raspberry Pi e amigos e instalar o OpenElec (no meu caso instalei o 12.2 Frodo), adicionar os addons TV Portuguesa e companhia, gentilmente fornecidos pel’a minha casa digital, fighnight e amigos. 
:D Mais uma vez obrigado a todos que fazem o nosso dia mais feliz :D ).
Colocarem o youtube ajudará para efeitos de teste dos leds.
Activarem SSH e Samba nas opções do OpenElec:
Enable SSH – ON
Disable SSH Password – OFF
Enable SAMBA – ON
Use Samba Password Authentication – OFF


Depois de tudo a funcionar passemos ao que nos trás aqui.

LEDS

HARDWARE:
Os LEDS devem ter 4 cabos:


Dois deles serão obviamente fáceis de ligar, 5v ligado ao “positivo” do transformador e o Ground ao “negativo”, deverá ser também ligado um dos cabos jumper ao Ground dos Leds para ligar ao Ground da GPIO do Raspberry Pi (pino 6 da GPIO do Rasp).
Os outros dois poderão ser ligados por tentativa erro ao Rasp, sendo que um deles liga ao pino 19 e outro ao pino 23 da GPIO do Rasp.
Conforme imagem:


SOFTWARE:
Ligar via SSH (eu utilizei o Putty):
Código:Selecionar todos
Login: root
Password: OpenElec


Executar 3 simples comandos para transferirem e instalarem o Hyperion:
Código:Selecionar todos
curl --get https://raw.github.com/tvdzwan/hyperion/master/bin/install_hyperion.sh > hyperion_install.sh

chmod +x hyperion_install.sh

./hyperion_install.sh


Em principio os leds já devem dar algum sinal de vida, experimentem reiniciar o Raspberry Pi e depois ensaiem com um qualquer vídeo e ou stream (liguem o transformador dos leds claro).
Exemplo: 

https://www.youtube.com/watch?v=sr_vL2anfXA

(este video é bom também para testarem o vosso "mapa" mais á frente)

Caso nada aconteça ou os primeiros leds da “fita” acendam de forma aleatória ou esquisita provavelmente terão alguma ligação mal feita ou algum mau contacto :? . 
Se os leds acenderem todos ou quase todos mas de forma não coincidente com o que se passa no ecrã é sinal que em princípio tudo está bem e falta apenas ajustar o “mapa dos leds” que faremos de seguida.

No explorador do Windows aceder a "\\IP_DO_RASPBERRY_PI\Configfiles".

E abrir/editar o ficheiro “hyperion.config.json”. Podem abrir com o bloco de notas mas um editor mais especializado é aconselhado, eu utilizei o sublime2 (http://www.sublimetext.com/2).
Confirmem que nos Paths está o seguinte:
Código:Selecionar todos
   "effects" :
   {
      "paths" :
      [
         "/storage/hyperion/effects"
      ]
   },


(Caso não esteja deverá ser alterado)
E agora o “mapa” propriamente dito. A parte mais complicada mas vão ver que não é nada de outro mundo…
A sintaxe (forma de escrever) é a seguinte:
Código:Selecionar todos
      {
         "index" : 0,
         "hscan" : { "minimum" : 0.0000, "maximum" : 0.0900 },
         "vscan" : { "minimum" : 0.8750, "maximum" : 1.0000 }
      },

A primeira linha: “index” é o numero do led (sendo que o primeiro led da fita é o numero zero)
A segunda linha: “hscan” é onde se define a range horizontal que é atribuída ao led
A terceira linha: “vscan” é onde se define a range vertical que é atribuída ao led

Mas afinal o que é isso de hscan e vscan?
São os campos onde se define que parte da tv é atribuída ao led em causa. Cada um destes campos é composto por dois valores, um valor mínimo e um valor máximo e esses valores vão de 0.000 a 1.000. 
Temos que saber ainda que o ponto 0 horizontal é o no lado esquerdo e o 1 no lado direito e no vertical o ponto 0 é em cima e o 1 em baixo. 

Como calcular os mínimos e máximos?
Basta dividir em espaços iguais. 
Se eu tenho os leds dispostos em 7 + 11 + 7, isto é, 7 leds do lado esquerdo, 11 leds do lado de cima e outros 7 leds do lado direito, defini que cada espaço vertical terá um tamanho de 12.5%. 12.5 * 7 = 87.5 e o primeiro led de cima encarregar-se-á dos restantes 12.5%.
E cada espaço vertical terá um tamanho de cerca de 9% (claro que 9 x 11 dá 99 mas depois damos um jeito ou utilizamos mais casas decimais)
Posto isto, vamos ver o caso do meu “led 0” que está no canto inferior esquerdo da tv. Ele estará encarregue de replicar a cor (ou a media de cor ou o que seja… o algoritmo do hyperion é que trata disso logo não se preocupem) que está nos primeiros 12,5% horizontais e nos 9% verticais. Vamos então definir os mínimos e máximos para este led:
Mínimo horizontal = 0% logo o valor é 0.0000
Máximo horizontal = 9% logo o valor é 0.0900 

Agora para os verticais é preciso ter em conta o que falamos á pouco de que o ponto 0 vertical começar em cima e em baixo ser 1.
Mínimo vertical = 0% logo o valor é 0.8750 ( 1 – 0.125)
Máximo vertical = 12.5% logo o valor é 1.000

Então fica:
Código:Selecionar todos
         "index" : 0,
         "hscan" : { "minimum" : 0.0000, "maximum" : 0.0900 },
         "vscan" : { "minimum" : 0.8750, "maximum" : 1.0000 }

O primeiro led já está então, faltam os outros… 
Se não estiverem para perder tempo a fazer contas podem fazer uma rápida busca no Mr. Google e procurar por “Boblight.conf Generator” e arranjam logo forma de ter as coordenadas mas atenção que o Boblight funciona de 0 a 100 e não de 0 a 1. Basta dividir os valores por 100 e já está.
ATENÇÃO QUE A SINTAXE NÃO É IGUAL. Logo serve apenas para copiarem as coordenadas e não o código todo.

O “hyperion.config.json” vem já com 50 leds definidos, se tiverem menos basta apagar o que estiver a mais, se tiverem mais toca a acrescentar.

Chegamos á parte em que importa falar na quantidade de leds.
Eu estou a utilizar uma TV 32” e neste momento tenho 25 leds dispostos de forma 7+11+7, isto é, 7 leds do lado esquerdo, 11 leds do lado de cima e outros 7 leds do lado direito e posso dizer que estou bastante satisfeito. Como tenho a televisão em cima de um móvel não me é muito importante colocar leds na zona de baixo da TV. De qualquer das formas vou comprar mais leds apenas para dar uma melhor qualidade de imagem. É como que um aumentar a resolução.
Quanto maior a televisão maior deverá ser a quantidade de leds e cada pessoa deverá estudar a melhor maneira e disposição dos leds, só para terem uma ideia eu coloquei os meus leds em intervalos de cerca de 50~60mm entre cada um... Os leds devem ser colocados o mais próximo possível do ponto a que se referem e não ultrapassarem os limites da tv(não precisam que eu vos diga isso).

Fixar os leds.
Existem muitas formas de fixar os leds, fita-cola, com estruturas metálicas, etc etc. 
Para mim fiz uma estrutura metálica que apertei com uns parafusos aos pontos de fixação da TV mas se não tiverem essa facilidade basta porem a imaginação a funcionar e dar uso á caixa de cartão que está a ocupar espaço desnecessário aí em casa.


Espero que com este tutorial vos possa ajudar e/ou incentivar… afinal foi este projecto que me levou a comprar um Raspberry Pi!
http://www.youtube.com/watch?v=DN8Z1lg4c-A
http://www.youtube.com/watch?v=r4Bsk-OonwY

Cumprimentos


Agradecemos ao Karluz pelo desenvolvimento do tutorial! Óptimo trabalho!

3 comentários:

  1. Já havia visto alguns projetos desse tipo, simplesmente fantástico.

    ResponderEliminar
  2. Acho uma ideia Fantástica. deixo aqui uma sugestão.
    Fonte de alimentação 5V 5A no e-bay fica por EUR 5.81 com portes grátis e se quiserem sacrificar um cabo micro usb tambem pode alimentar o RPI.

    http://www.ebay.com/itm/AC-100V-240V-DC-5V-5A-Adjust-Universal-Regulated-Switching-Power-Supply-25W-New/350944322084?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D222003%26algo%3DSIC.FIT%26ao%3D1%26asc%3D20131003132420%26meid%3D5884449599454480130%26pid%3D100005%26prg%3D20131003132420%26rk%3D3%26rkt%3D6%26sd%3D231178027591&rt=nc

    ResponderEliminar
  3. GALERA NÃO TERIAM UMA OPÇÃO DE CONTROLAR O AMBILIGHT PELO PC, USANDO A PORTA PARALELA OU SERIAL PARA ESSE CONTROLE?

    ResponderEliminar