Índice:

Controle remoto Bluetooth de madeira para trem Lego Duplo: 3 etapas (com fotos)
Controle remoto Bluetooth de madeira para trem Lego Duplo: 3 etapas (com fotos)
Anonim
Controle remoto Bluetooth de madeira para trem Lego Duplo
Controle remoto Bluetooth de madeira para trem Lego Duplo
Controle remoto Bluetooth de madeira para trem Lego Duplo
Controle remoto Bluetooth de madeira para trem Lego Duplo

Meus filhos adoraram esse pequeno trem de Lego Duplo, especialmente minha caçula, que luta para se comunicar com palavras, então eu queria construir para ela algo que a ajudasse a brincar com o trem independentemente de adultos ou telefones / tablets. Algo que acrescentaria uma dimensão extra ao trem e lhe desse um valor extra de jogo

O conjunto de Lego já tem poucas maneiras de controlar o trem, você pode empurrá-lo para frente para iniciar e segurá-lo para pará-lo, você pode controlá-lo usando etiquetas coloridas que vão na pista para que quando o trem passar por cima ele desencadeie ações diferentes, ou seja, avançar, retroceder, reproduzir sons, acender as luzes. Você também pode baixar um aplicativo para o seu telefone ou tablet que pode se conectar ao trem via bluetooth.

Aqui está uma revisão completa do trem

Depois de pesquisar na Internet, descobri que havia muito poucas pessoas diferentes que já haviam escrito códigos prontos para controlar o trem. O nó 'Poweredup' escrito por nathan.kellenicki (https://nathan.kellenicki.com/node-poweredup/) parecia um início perfeito, foi escrito usando Javascript, com o qual eu não estava parcialmente familiarizado, mas pensei se eu poderia encontrar um microchip baseado em java, isso seria um bom começo.

Mais uma vez, depois de vasculhar a internet novamente, encontrei o sistema espruino, que é semelhante ao ardiuno, mas baseado em javascript. O código espriuno pode ser carregado em um mircochip MDBT42Q que tenha bluetooth incorporado. Eu pensei que se eu pudesse carregar o módulo "ligado" nele, eu estaria no meio do caminho, no entanto, este não era o caso, pois o módulo continha muitas bibliotecas muito grandes para carregar no MDBT42Q, então parece que tenho que encontre uma solução mais simples….

Etapa 1: O Código

O código
O código

Esprinuo

Para aqueles que não conhecem a plataforma Espruino https://www.espruino.com (e eu não conhecia) é muito semelhante ao Arduino, há algumas diferenças principais, um escrito para javascript ao invés de c, parece um pouco mais recente portanto, não há exemplos, no entanto, o suporte através dos fóruns é ótimo e muito útil.

Javascript encontre o trem

O primeiro obstáculo foi conectar-se ao trem via bluetooth. Isso pode ser feito usando a classe NRF fornecida com o código espruino.

NRF.connect pode ser usado para se conectar ao trem. No entanto, sua primeira necessidade de encontrar o endereço do próprio trem, você pode usar NRF.findDevices para obter essas informações

Depois de fazer isso, você precisa enviar o valor dois do trem para o handshake com o trem, para o meu trem foi "00001623-1212-efde-1623-785feabcd123" seguido por "00001624-1212-efde-1623-785feabcd123" Eu acredito este será o mesmo para todos os conjuntos de trens a vapor, mas as outras versões, ou seja, o conjunto de carga pode ser diferente

Depois de ter isso, você pode conectar o trem usando a função a seguir, você pode dizer quando o trem foi conectado, pois ele piscará seus faróis azuis

NRF.connect ("e0: 7d: ea: 0c: 03: 29"). Then (função (g) {

console.log ("Iniciando a conexão2"); gatt = g; return gatt.getPrimaryService ("00001623-1212-efde-1623-785feabcd123"); }). then (function (service) {return service.getCharacteristic ("00001624-1212-efde-1623-785feabcd123");}). then (function (feature) {Characteristic_store = Character; return Character.readValue ();}).then (value => {console.log (value);}). then (function () {console.log ("Train Connected"); connected = 1;

As coisas divertidas

Agora que você está conectado ao trem, é hora de todas as coisas divertidas, como movê-lo para frente, fazer som e ligar e desligar a luz. É simples enviar ao trem um valor de preparação, seguido pelo comando real, ou seja, function play_horn () {

console.log ("mensagem =", Characteristic_store); const prepval = novo Uint8Array ([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = new Uint8Array ([0x08, 0x00, 0x81, 0x01, 0x11, 0x51, 0x01, 0x09]); Characteristic_store.writeValue (prepval).then (_ => {Characteristic_store.writeValue (sendvalue);}); }

Você pode ter que pesquisar um pouco para encontrar outro comando além dos que usei

Botões e alavancas

O lado físico do controle remoto é muito simples: quatro botões (para tocar sons, ligar e desligar as luzes) e um potenciômetro que é conectado à alavanca para que você possa controlar a velocidade e a direção do trem

O botão não precisa puxar o resistor, em vez disso, você pode fazer isso no código, ou seja, pinMode (D15, 'input_pulldown');

Você pode conectar o potenciômetro a uma das entradas e, em seguida, ler o sinal analógico usando o seguinte comando

var leitura = analogRead (D31);

A outra diferença do arduino é que o esprunio não tem configuração e loop. Então, em vez disso, coloco todos os comandos / gatilhos separados em funções e, em seguida, configuro setInterval que faz um loop a cada 100 milissegundos, ouvindo o botão e executando a função necessária quando o botão é pressionado.

if (digitalRead (D15) == 1) {play_horn (); }

Acionar a alavanca era um pouco mais complicado, pois queria ser capaz de ajustar incrementalmente a velocidade, então primeiro tive que enviar o valor analógico para funcionar

var leitura = analogRead (D31);

train_direction (leitura * 1024);

Então, na função train_direction, quebrei o comando em 6 incrementos diferentes com base no valor do pote

Todo o caminho para cima, diz ao trem para ir a toda velocidade à frente

No meio do caminho, diz ao trem para avançar a 50% da velocidade

Meio, diz ao trem para parar

No meio do caminho, diz ao trem para voltar a 50% da velocidade

Todo o caminho para baixo, diz ao trem para ir a toda velocidade em marcha à ré

ie

function train_direction (dir_val) {

//console.log("message = ", Characteristic_store); const prepval = novo Uint8Array ([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = new Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0x00]); if (dir_val> 300 && dir_val 400 && dir_val 500) {const sendvalue = new Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0x64]); } if (dir_val 200) {const sendvalue = new Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0xe2]); } if (dir_val 100) {const sendvalue = new Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0xce]); } if (dir_val {Characteristic_store.writeValue (sendvalue);}); }

O código completo pode ser encontrado no link abaixo

Etapa 2: a fiação

A fiação
A fiação
A fiação
A fiação

A fiação era a parte mais simples

Consistia apenas em 4 botões conectados a D15, D16, D17 e D18 sem qualquer resistência pull up, pois isso era feito no código e 1 resistor de 10k conectado a D31

Ainda estou trabalhando na fonte de alimentação, mas atualmente toda a energia vem de um breakout micro usb e isso pode ser conectado diretamente a um banco de energia ou a uma porta USB

Etapa 3: a construção

The Build
The Build
The Build
The Build
The Build
The Build
The Build
The Build

O controle remoto é feito principalmente de folhas de madeira compensada A4 de 3 mm, 6 mm ou 9 mm. Elas foram cortadas na minha máquina CNC, no entanto, usando o modelo fornecido, eu usaria, embora não fosse impossível fazer à mão

Espero que o modelo e as fotos forneçam tudo que você precisa para refazer, no entanto, há algumas notas que podem ajudar

A montagem Push Button de 3mm é para furar o botão, a lacuna irá posicionar o botão no lugar correto, mas nós permitimos que você acesse a perna na parte traseira para que possa soldar ao microchip, no reverso você também pode montar o MDBT42Q usando um pouco de cola. Na frente, você precisará adicionar espuma para que os botões saltem um pouco ao pressioná-los, você também pode usar molas

Os botões de 9 mm precisarão da tinta, gravação ou outra coisa do logotipo para mostrar qual botão faz o quê

A alavanca / alça precisará ser colocada em camadas, usei um pino de 6 mm para ajudar a alinhá-los em todas as posições corretas

Recomendado: