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:
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.
Xalente! Protocolos IV por protocolos IV, fica só a faltar o RCX/Scout e tens aí o verdadeiro "to rule them all".
[quote="Conchas"]
Isto tem um nome...
Muito tempo livre!!!.... [/quote]
Cheira-me que queres impingir mais um "voluntariado" de hacatão de Java...
Re: [IR] Um comando que os comande a todos
Enviado: 12 nov 2017, 22:20
por CyberX
O que queres tu dizer com fica a faltar?
Re: [IR] Um comando que os comande a todos
Enviado: 12 nov 2017, 22:25
por CyberX
[quote="AVCampos"]
Cheira-me que queres impingir mais um "voluntariado" de hacatão de Java...
[/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)
Re: [IR] Um comando que os comande a todos
Enviado: 12 nov 2017, 23:01
por AVCampos
[quote="CyberX"]
O que queres tu dizer com fica a faltar?
[/quote]
Bem, não mencionaste esse protocolo na mensagem inicial...
[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.
Re: [IR] Um comando que os comande a todos
Enviado: 12 nov 2017, 23:53
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.
Re: [IR] Um comando que os comande a todos
Enviado: 13 nov 2017, 07:26
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]
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.
Re: [IR] Um comando que os comande a todos
Enviado: 13 nov 2017, 07:36
por Conchas
Re: [IR] Um comando que os comande a todos
Enviado: 13 nov 2017, 12:05
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?
Re: [IR] Um comando que os comande a todos
Enviado: 13 nov 2017, 13:14
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.
Re: [IR] Um comando que os comande a todos
Enviado: 13 nov 2017, 13:39
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:
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...
Re: [IR] Um comando que os comande a todos
Enviado: 13 nov 2017, 23:48
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).
Re: [IR] Um comando que os comande a todos
Enviado: 14 nov 2017, 07:39
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.
Re: [IR] Um comando que os comande a todos
Enviado: 20 nov 2017, 15:58
por CyberX
Conforme tinha dito, a explicação de como utilizar o LIRC com o RCX ou o Scout:
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).