Taula de continguts:

Comandament Bluetooth de fusta per al tren Lego Duplo: 3 passos (amb imatges)
Comandament Bluetooth de fusta per al tren Lego Duplo: 3 passos (amb imatges)

Vídeo: Comandament Bluetooth de fusta per al tren Lego Duplo: 3 passos (amb imatges)

Vídeo: Comandament Bluetooth de fusta per al tren Lego Duplo: 3 passos (amb imatges)
Vídeo: Boxe de calculator Microlab SOLO 2 MK-2, recenzie. Selectați Difuzoare pentru computer. 2024, Desembre
Anonim
Comandament Bluetooth de fusta per al tren Lego Duplo
Comandament Bluetooth de fusta per al tren Lego Duplo
Comandament Bluetooth de fusta per al tren Lego Duplo
Comandament Bluetooth de fusta per al tren Lego Duplo

Als meus fills els encantava aquest petit tren Lego Duplo, especialment el més petit que lluita per comunicar-se amb paraules, així que volia construir-li alguna cosa que l’ajudés a jugar amb el tren independentment dels adults o dels telèfons / tauletes. Una cosa que afegiria una dimensió addicional al tren i li donaria un valor de joc addicional

El joc de Lego ja té poques maneres de controlar el tren, podeu empènyer-lo cap endavant per iniciar-lo i mantenir-lo premut per aturar-lo, podeu controlar-lo mitjançant etiquetes de colors que van a la via, de manera que quan el tren el passa per sobre, desencadena diferents accions, és a dir, endavant, enrere, reproduir sons encén els llums. També podeu descarregar una aplicació per al vostre telèfon o tauleta que es pugui connectar al tren mitjançant bluetooth.

Aquí una revisió completa del tren

Després de caçar per internet, vaig trobar que hi havia força persones diferents que tenien tot el codi escrit per controlar el tren. El node "Poweredup" escrit per nathan.kellenicki (https://nathan.kellenicki.com/node-poweredup/) semblava un inici perfecte, va ser escrit amb Javascript, que no coneixia parcialment, però pensava si podria trobar un microxip basat en Java, seria un bon començament.

Una vegada més, després de buscar a Internet, vaig trobar de nou el sistema espruino, que és similar a l'ardiuno, però es basa al voltant de javascript. Es podria carregar el codi espriuno en un xip mirc MDBT42Q que tenia Bluetooth incrustat. Vaig pensar que si podia carregar-hi el mòdul "encès" estaria a la meitat del camí, tot i que no era el cas que el mòdul contenia a moltes biblioteques de grans dimensions per carregar-lo al MDBT42Q, així que sembla que he de trobar una solució més senzilla …

Pas 1: el codi

El codi
El codi

Esprinuo

Per a aquells que no coneixen la plataforma Espruino https://www.espruino.com (i jo no), és molt similar a l'Arduino, hi ha algunes diferències principals que va escriure per a javascript més aviat c, se sent lleugerament més recent així que no hi hagi exemples, però, el suport a través dels fòrums és fantàstic i molt útil.

Javascript coneix el tren

El primer obstacle va ser connectar-se al tren mitjançant bluetooth. Això es pot fer mitjançant la classe NRF que s'inclou al codi espruino.

NRF.connect es pot utilitzar per connectar-se al tren, però per primera vegada haureu de trobar l'adreça del mateix tren, podeu utilitzar NRF.findDevices per obtenir aquesta informació.

Un cop fet això, haureu d'enviar al tren dos valors per apretar de mans amb el tren, per al meu tren era "00001623-1212-efde-1623-785feabcd123" seguit de "00001624-1212-efde-1623-785feabcd123" Crec això serà el mateix per a tots els trens de vapor establerts, però les altres versions, és a dir, el conjunt de càrrega, poden ser diferents

Un cop tingueu això, podeu connectar el tren mitjançant la funció següent: es pot saber quan el tren es connecta, ja que parpellejarà els fars de color blau

NRF.connect ("e0: 7d: ea: 0c: 03: 29"). Llavors (funció (g) {

console.log ("Començant a connectar2"); gatt = g; retornar gatt.getPrimaryService ("00001623-1212-efde-1623-785feabcd123"); }). then (function (service) {return service.getCharacteristic ("00001624-1212-efde-1623-785feabcd123");}). then (function (caractéristique) {Característica_botiga = característica; return característica.readValue ();}).then (value => {console.log (value);}). then (function () {console.log ("Train Connected"); connected = 1;

Les coses divertides

Ara us heu connectat al tren, és hora de fer tot allò divertit, com avançar-lo, fer so i encendre i apagar la llum. És una tasca senzilla d'enviar al tren un valor de preparació, seguit de l'ordre real, és a dir

funció play_horn () {

console.log ("missatge =", botiga_característica); const prepval = new 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);}); }

És possible que hagueu de fer una mica d’exploració per trobar altres ordres que no pas les que he utilitzat

Botons i palanques

El costat físic del comandament és molt senzill: quatre botons (per reproduir sons, encendre i apagar els llums) i un potenciòmetre connectat a la palanca perquè pugueu controlar la velocitat i la direcció del tren

El botó no necessita resistència cap amunt sinó que podeu fer-ho en codi, és a dir

pinMode (D15, 'input_pulldown');

Podeu connectar el potenciòmetre a una de les entrades i després llegir-lo amb el següent senyal analògic

lectura var = analogRead (D31);

L'altra diferència de l'arduino és que l'esprunio no té cap configuració ni bucle. Així que, en lloc d'això, col·loco totes les ordres / activadors separats en funcions i, a continuació, configuro setInterval que repeteix bucles cada 100 mil·lisegons, escoltant el botó i, a continuació, executeu la funció requerida quan s'hagi premut el botó.

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

Accionar la palanca va ser una mica més complicat, ja que volia poder ajustar la velocitat de manera incremental, així que primer vaig haver d’enviar el valor analògic a la funció

lectura var = analogRead (D31);

direcció_tren (lectura * 1024);

A continuació, a la funció train_direction he desglossat l'ordre en 6 increments diferents segons el valor del pot

Tot el camí amunt indica al tren que vagi a tota velocitat

A mitja pujada, indica al tren que vagi endavant a un 50% de velocitat

Middle, diu al tren que s’aturi

A mitja baixada, indica al tren que vagi enrere a una velocitat del 50%

Tot el camí avall, indica al tren que marxi a tota velocitat a la inversa

és a dir

funció train_direction (dir_val) {

//console.log("message = ", botiga_característica); const prepval = new 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 {Value_store.writeValue (sendvalue);}); }

El codi complet es pot trobar a l’enllaç següent

Pas 2: el cablejat

El cablejat
El cablejat
El cablejat
El cablejat

El cablejat era la part més senzilla

Simplement consistia en 4 polsadors connectats a D15, D16, D17 i D18 sense cap resistència de tracció, ja que es feia al codi i 1 resistència de 10 k connectada a D31

Encara estic treballant en la font d'alimentació, però actualment tota la potència prové d'un micro USB i això podria connectar-se directament a un banc d'alimentació o un port USB

Pas 3: la construcció

El Build
El Build
El Build
El Build
El Build
El Build
El Build
El Build

El comandament es troba principalment en fulls de fusta contraxapada de 3 mm, 6 mm o 9 mm. Es van tallar a la meva màquina CNC, però utilitzant la plantilla, sempre que no seria impossible fer-ho a mà

Espero que la plantilla i les fotos us donin tot el que necessiteu refer però hi ha poques notes que us poden ajudar

El muntatge del polsador de 3 mm serveix per prémer el polsador, la bretxa posicionarà el botó al lloc correcte, però us permetem accedir a la cama de la part posterior perquè pugueu soldar al microxip; al revers també podeu muntar el MDBT42Q utilitzant una mica de cola. A la part frontal, haureu d'afegir escuma perquè els botons facin un petit rebot quan els premeu, també podríeu utilitzar molles

Els botons de 9 mm necessitaran pintura, gravat o una altra cosa del logotip per mostrar quin botó fa què

La palanca / maneta haurà de ser capes cap amunt, he utilitzat un tac de 6 mm per ajudar-los a alinear-los en totes les posicions correctes

Recomanat: