[IR] Um comando que os comande a todos

Para os mais especializados em mecânica e electrónica em LEGO.
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4558
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

[IR] Um comando que os comande a todos

Mensagem por CyberX »

Os que tiverem participado nas BRInCKA's mais recentes talvez conheçam o 2949LEGO DUPLO RC Dozer, costumo levar os dois exemplares que comprei por uma pechincha numas férias no Algarve e que faz as delicias dos mais pequenos na mesa DUPLO ou na Technic:

Imagem

Descobri que este conjunto utiliza o mesmo protocolo de infra-vermelhos utilizado nos comboios RC, no Bionicle Manas, no RC Nitro Flash e no MINDSTORMS Spybotics. Foi o primeiro protocolo RC por IR que a LEGO implementou mas teve pouco sucesso e foi pouco depois substituído pelo Power Functions IR que ainda hoje existe (como no 42065 Tracked Racer).

Bom, enquanto tentava recuperar o MINDSTORMS Spybotics descobri como snifar o protocolo com um Arduino, consegui replicar os sinais com um Arduino e com um Raspberry Pi e finalmente consegui entender o formato e convertê-lo para o formato LIRC (usado em Linux para gerir os comandos IR).

Como anteriormente já conseguia controlar PF IR a partit de um PC (ou EV3) fundi ambos os protocolos e consigo agora controlar TODOS os dispositivos IR da LEGO:



Ironia das ironias, o DUPLO RC Dozer é o único que não reage bem aos meus comandos, tem uma tendência irritante para empancar ao fim de uns poucos comandos. Pode ser que consiga melhorar a coisa mais tarde.

Oportunamente experimentarei o método com um RC Nitro Flash e com um RC Train.

Muitos mais detalhes no blog, código no GitHub:
http://ofalcao.pt/blog/2017/decoding-ol ... d-protocol
https://github.com/JorgePe/ir-spybotics

Não posso esquecer os devidos agradecimentos ao código aberto de:
- Conor Cary
- Diomidis Spinellis
Última edição por CyberX em 12 nov 2017, 18:56, editado 1 vez no total.
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
Conchas
Direcção
Direcção
Mensagens: 16131
Registado: 26 jan 2007, 15:20
Localização: Feijó (Almada) / Sesimbra
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por Conchas »

Isto tem um nome...
Muito tempo livre!!!.... ;D ;D

:clapping: :clapping: :clapping:
FCorreia

#EUusoOmeuLUGBULKnosEVENTOSdaPLUG

We are working to build a better :plug:
LEGO Fan, a lifelong experience - Play Well (Leg Godt)

Sanjoanense :brincka: 2026, 3-5 de Outubro
Avatar do Utilizador
AVCampos
Sócio
Sócio
Mensagens: 13812
Registado: 27 fev 2007, 19:26
Localização: Barreiro
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por AVCampos »

Xalente! :clapping: Protocolos IV por protocolos IV, fica só a faltar o RCX/Scout e tens aí o verdadeiro "to rule them all". 8)

[quote="Conchas"]
Isto tem um nome...
Muito tempo livre!!!.... ;D ;D[/quote]
Cheira-me que queres impingir mais um "voluntariado" de hacatão de Java... :D
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4558
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por CyberX »

O que queres tu dizer com fica a faltar?  >:D
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4558
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por CyberX »

[quote="AVCampos"]
Cheira-me que queres impingir mais um "voluntariado" de hacatão de Java... :D
[/quote]

Ontem (ou foi já hoje?) t ambém me cheirou.
Eu agora hacatões só python ou quando muito Arduino C
(embora para gerar os timings PF tenha corrido hoje um programa java... mais uma vez uma dor até perceber como raio se corria aquilo)
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
AVCampos
Sócio
Sócio
Mensagens: 13812
Registado: 27 fev 2007, 19:26
Localização: Barreiro
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por AVCampos »

[quote="CyberX"]
O que queres tu dizer com fica a faltar?  >:D
[/quote]
Bem, não mencionaste esse protocolo na mensagem inicial... :angel:

[quote="CyberX"]
Eu agora hacatões só python ou quando muito Arduino C[/quote]
Eu estou interessado em aprender Python para EV3 mas não seria justo cair de pára-quedas num hacatão sem ter tido a pachorra de ler sobre isso nem praticar alguma coisa. :-[
Avatar do Utilizador
Conchas
Direcção
Direcção
Mensagens: 16131
Registado: 26 jan 2007, 15:20
Localização: Feijó (Almada) / Sesimbra
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por Conchas »

[quote="CyberX"]
Ontem (ou foi já hoje?) t ambém me cheirou.
[/quote]

Por falar nisso... Não te esqueças de me enviar as tuas notas sobe a instalação/configuração do ambiente com o Eclipse, sff.
FCorreia

#EUusoOmeuLUGBULKnosEVENTOSdaPLUG

We are working to build a better :plug:
LEGO Fan, a lifelong experience - Play Well (Leg Godt)

Sanjoanense :brincka: 2026, 3-5 de Outubro
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4558
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por CyberX »

[quote="Conchas"]
[quote="CyberX"]
Ontem (ou foi já hoje?) t ambém me cheirou.
[/quote]

Por falar nisso... Não te esqueças de me enviar as tuas notas sobe a instalação/configuração do ambiente com o Eclipse, sff.
[/quote]

By your command:

Código: Selecionar todos

leJOS - 5 de Abri l  2017
=========================
Eclipse:
download + extract  "eclipse-java-neon-3-linux-gtk-x86_64.tar.gz" (168.1 MB)
duplo click "eclipse"

default Workspace: /home/jxpereira/workspace
mas deixei checked "Use this as the default and do not ask again"

"Welcome screen"

plugin:
Help > Install New Software > Add
Name: leJOS EV3
Location: http://www.lejos.org/tools/eclipse/plugin/ev3/

check "leJOS EV3 Support" (inclui apenas o plugin, "0.9.1.201511161011")

Next
Review, Next
Review Licenses, I accept..., Finish

Warning: "... unsigned content..." OK

Restart Eclipse? yes

Window > Preferences > leJOS EV3

EV3_HOME: /home/jxpereira/Downloads/LEGO/LeJOS/leJOS_EV3_0.9.1-beta
x Run Tools in separate JVM
x Run program after upload


New Project (LeJOS EV3 Project)
Project Name: Plugin Test
Finish

seguir https://sourceforge.net/p/lejos/wiki/Developing%20with%20leJOS/

não pesco nada mas passei um programa main que gera lixo [7 meses depois acho que no ecran do EV3] :

// Inicio
package plugin_test;

import lejos.hardware.lcd.LCD;
import lejos.utility.Delay;

public class test {
	public static void main (String[] args) {
		// TODO Auto-generated method stub
		LCD.drawString("I hate Java but I am stubborn!", 0, 4);
		Delay.msDelay(5000);
	}
}
// Fim

diz "unsupported major.minor version" ??

tive de forçar Java 1.7
"You need to tell Eclipse to compile Java 7 compatible byte code. Go to Windows -> Preferences -> Java -> Compiler and set "Compiler compliance level" to 1.7."
Basicamente instala o Eclipse, adiciona o plugin do LeJOS e vai a "Windows -> Preferences -> Java -> Compiler" e muda "Compiler compliance level" para  "1.7."

Isto do Compliance Level 1.7 porque o Java que terás enfiado na imagem do cartão microSD é 1.7, no meu caso foi
"ejre-7u60-b19-ejre-7u60-fcs-b19-linux-arm-sflt-headless-07_may_2014.tar.gz"

A partir daqui foi mesmo só problemas com o Java em si e não com o Eclipse.
Última edição por CyberX em 13 nov 2017, 07:31, editado 1 vez no total.
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
Conchas
Direcção
Direcção
Mensagens: 16131
Registado: 26 jan 2007, 15:20
Localização: Feijó (Almada) / Sesimbra
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por Conchas »

:fixe:
FCorreia

#EUusoOmeuLUGBULKnosEVENTOSdaPLUG

We are working to build a better :plug:
LEGO Fan, a lifelong experience - Play Well (Leg Godt)

Sanjoanense :brincka: 2026, 3-5 de Outubro
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4558
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por CyberX »

[member=85]AVCampos[/member] Por acaso já capturei os sinais do Comando IR do RCX/Scout e consigo replicá-los, mas por enquanto só com o Arduino.

Como eu quero o LIRC (por razões que hei-de explicar daqui a uns dias) preciso de entender os resultados, talvez me possas ajudar mais rapidamente que o Google.

Um botão do comando RCX gera 100 "toggles". Assumindo que 1 bit dura 417 us consigo converter o "A Forward" para uma sequência de 221 bits. É muito bit para o LIRC, não que seja impossível mas é muita coisa, 92.158 milisegundos para enviar um simples comando.

O comando em si, de acordo com a teoria, tem «apenas» 11 bytes:
55 FF 00 D2 2D 00 FF 08 F7 DA 25
(header + mensagem = D2 00 08 + chksum = DA, sendo que tanto para a mensagem como para o chksum cada byte é seguido do seu complemento)

Juntando um start bit, um odd parity bit e um stop bit a cada byte dá 121 bits, ligeiramente mais de metade do que eu apanho.

A minha pergunta é:
Tens ideia se o commando RCX envia a mesma mensagem mais que uma vez?
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
AVCampos
Sócio
Sócio
Mensagens: 13812
Registado: 27 fev 2007, 19:26
Localização: Barreiro
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por AVCampos »

Queres dizer se envia um comando de "start" quando se prime o botão e "stop" quando se larga? Tenho idea de que transmite continuamente enquanto o botão está premido.

Em todo o caso, nunca mais consegui encontrar o meu comando, portanto não consigo confirmar. :'(
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4558
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por CyberX »

Essa era uma hipótese (o comando dos Manas e dos RC Nitro Flash faz mais ou menos isso).
Outra hipótese era simplesmente enviar várias vezes o comando só porque alguém na LEGO achou que sim.

Consegui identificar o header no meio de tanto bit e efectivamente tenho dois headers em cada uma das minhas capturas.
Pelos vistos o sketch de Arduino que eu estou a usar pára a captura no byte #100 e por isso a segunda mensagem está incompleta (e desconheço se virão mais mensagens depois desta mas também não é importante).

Cortei o resultado da captura no início do segundo header e testei, funciona.
Assim tenho 6 comandos:

A Fwd com 58 toggles
A Rev com 54
B Fwd com 52
B Rev com 58
C Fwd com 54
C Rev com 54

Mastigando isto entre folha de cálculo e python dá só para o primeiro comando, "A Fwd":
- tem 121 bits como previsto
- em binário:

Código: Selecionar todos

0101010101101111111111000000000110010010111101011010011000000000110111111111100001000001011101111010010110110101010010001
- em hexadecimal:

Código: Selecionar todos

0xaadff80325eb4c01bff082ef4b6a91
Se não me tiver enganado em nada é só meter isto no ficheiro de configuração do LIRC com mais meia dúzia de parâmetros.

To be continued...
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4558
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por CyberX »

[member=85]AVCampos[/member] case closed, agora é mesmo universal.



O formato tipico do LIRC não prevê comandos com mais que 64 bits e como o RCX e o Scout usam 121 não deu para usar duma ponta à outra o mesmo método que usei para o outro protocolo.
Felizmente o LIRC prevê um modo "raw codes" para comandos mais tagarelas como certos aparelhos de ar condicionado e lá consegui safar-me com um workaround na parte final.

Amanhã publico o método e o código.

Próximo passo: reforçar o meu transmissor LIRC ou arranjar um mais abrangente (o meu tem um alcance de cerca de 3 metros mas os LEDs têm uma abertura de apenas +/- 10º, tenho de colocar mais LEDs para abrir o leque e isso obriga-me a aumentar a potência).
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
AVCampos
Sócio
Sócio
Mensagens: 13812
Registado: 27 fev 2007, 19:26
Localização: Barreiro
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por AVCampos »

[quote="CyberX"]
os LEDs têm uma abertura de apenas +/- 10º, tenho de colocar mais LEDs para abrir o leque e isso obriga-me a aumentar a potência).
[/quote]
Podes lixar o topo aos LEDs para não fazer tanto efeito de lente, mas naturalmente a luz vai sair mais espalhada e portanto pode ser preciso à mesma mais LEDs.
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4558
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: [IR] Um comando que os comande a todos

Mensagem por CyberX »

Conforme tinha dito, a explicação de como utilizar o LIRC com o RCX ou o Scout:

http://ofalcao.pt/blog/2017/decoding-rc ... d-protocol

no final do artigo tenho os links para 3 ficheiros de configuração que permitem utilizar o LIRC para controlar:
  • LEGO OLD IR
  • LEGO PF
  • LEGO RCX
Mais tarde hei-de acrescentar outros ficheiros de configuração (o PF por exemplo, é tudo-ou-nada, não é o ideal para controlar comboios PF, para isso preciso PWM).

O ficheiro para LEGO RCX ainda não está completo, só permite controlar motores, falta-me adicionar os comandos para execução de programas e som. Um dia destes, quando tiver oportunidade, agora tenho outra coisa em mãos.

Antes que venham dizer que "ah e tal não é completamente universal, falta o EV3", testei com meu EV3 a correr o programa de origem que permite o comando por IR e funciona tb (o comando IR do EV3 é um comando PF disfarçado por isso basta enviar comandos PF).
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Responder