Ok, a ideia aqui é juntar o melhor do Lego, ao melhor da electrónica e do software.
Ok ok já há várias tentativas, mas eu explico no que este projecto é diferente.
Todos os dispositivos funcionam à semelhança de device drivers. No fundo cada módulo é um device e tem um conjunto de instruções típicas que fazem parte da "API nativa" tais como colocar em power saving, fazer wakeup, mas também terá instruções genéricas ao seu tipo à semelhança dos devices nos computadores, tais como no módulo de movimento, avançar x cm, parar, virar x graus, etc, que seja 2 rodas dc, steppers, omnidirecionais, 2 pernas ou 6 pernas.. estas instruções terão que ser cumpridas e pode-se trocar de 2 rodas para 6 pernas sem alterar qualquer software e ele continua a funcionar, contudo como qualquer device, existem instruções específicas (as típicas que vem com drivers) para permitir optimizar para aquele device.
Assim uma pessoa pode ter 2~3 módulos, e quando precisar de mudar parte, não tem que fazer muitas alterações no código dos restantes módulos. Na prática só tem que alterar o main, e só tem que o alterar se utilizar instruções que não sejam do set genérico.
Vantagens? Tenho um robot XPTO e preciso de adicionar-lhe mais capacidade de processamento, tiro a main board que era baseada em AVR, e meto uma em dsPIC, ou uma ARM, mas não preciso trocar 1 linha de código no módulo de movimento, ou no módulo sensorial, ou até no de comunicações.
Pretendo adicionar um PC, altero o código do main para em vez de ser ele a tomar decisões, passa a ser ume interpretador entre porta serial (USB) e bus dos devices.
Escolhemos o protocolo I2C por permitir facilmente expansão, por ser compatível com todos os micros e ter uma boa relação de flexibilidade com robustez e velocidade de comunicação.
Inicialmente será Master-Slaves, mas com a possibilidade de evoluir para Multi-Master no futuro.
O BUS teria que ser simples, flexível, expansível, fácil de utilizar, e com uma interface que todos podemos encontrar.
Foi então escolhido (mas volto a afirmar.. estamos numa fase de desenvolvimento da ideia e tudo pode vir a ser alterado, por isso usem o vosso espírito crítico e avisem se acharem que algo deve de ser mudado).
VCC a 3,3V (pois toda a industria tende para 3,3V, e baixa os consumos energéticos)
BUS I2C será a 3,3V e os pullups serão só nas boards principais (apenas 1 board principal por montagem) e são de 2KOhm!
RAW é tensão directa das baterias (não regulada) permitindo módulos de alto consumo como motores, braços mecânicos ou módulos GSM/GPS beber directo da fonte com os seus reguladores. Se for preciso 5V também se pode beber daqui e colocar o respectivo regulador.
INT não estará em uso numa fase inicial, mas fica como pin de interrupções para ser utilizado futuramente se uma board necessitar de lançar interrupções à mainboard. (exemplo: Placa de movimento detecta que não tem mais chão à sua frente, ou placa de sensores detecta um obstáculo em rota de colisão)
Assim os 6 pins serão um socket de extensão como o do Arduino permitindo assim fácil acesso à ficha, e expansão tanto para cima como para baixo.