Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Barna mine elsket dette lille Lego Duplo -toget, spesielt min yngste som sliter med å kommunisere seg selv med ord, så jeg ville bygge henne noe som ville hjelpe henne å leke med toget uavhengig av voksne eller telefoner/nettbrett. Noe som ville tilføre toget en ekstra dimensjon og gi den ekstra spillverdi
Lego -settet har allerede få måter å kontrollere toget på, du kan skyve det fremover for å starte og holde det for å stoppe det, du kan kontrollere det ved hjelp av fargemerker som går på sporet, så når toget passerer det over det utløser forskjellige handlinger dvs. forover, bakover, spillelyder slår på lysene. Du kan også laste ned en app for telefonen eller nettbrettet som kan kobles til toget via bluetooth.
Her en fullstendig gjennomgang av toget
Etter å ha jaktet rundt på internett fant jeg ut at det var ganske få forskjellige mennesker som hadde klar kode for å kontrollere toget. 'Poweredup'-noden skrevet av nathan.kellenicki (https://nathan.kellenicki.com/node-poweredup/) så ut som en perfekt start. Den ble skrevet ved hjelp av Javascript som jeg ikke var delvis kjent med, men tenkte om jeg kunne finne java -basert mikrochip, ville dette være en god start.
Igjen etter å ha jaktet rundt på internett igjen fant jeg espruino -systemet, dette ligner på ardiuno, men basen rundt javascript. Espriuno -koden kan lastes på en MDBT42Q mircochip som har innebygd bluetooth. Jeg trodde at hvis jeg kunne laste den "oppstartede" modulen til den, ville jeg være halvveis der, men dette enkle var ikke tilfellet, og modulen inneholdt for mange store biblioteker for å laste på MDBT42Q, så det ser ut til at jeg må finn en enklere løsning ….
Trinn 1: Koden
Esprinuo
For de som ikke kjenner Espruino -plattformen https://www.espruino.com (og det gjorde jeg ikke) er den veldig lik Arduinoen. Det er noen få hovedforskjeller den skrev for javascript heller c, Det føles litt nyere så det er eksempler, men støtten via forumene er stor og veldig nyttig.
Javascript møter toget
Den første hindringen var å koble til toget via bluetooth. Dette kan gjøres ved hjelp av NRF -klassen som leveres med i espruino -koden.
NRF.connect kan brukes til å koble til toget, men ditt første behov for å finne adressen til selve toget, du kan bruke NRF.findDevices for å få denne informasjonen
Når du har gjort dette må du sende toget to verdi for håndtrykk med toget, for toget mitt var dette "00001623-1212-efde-1623-785feabcd123" etterfulgt av "00001624-1212-efde-1623-785feabcd123" tror jeg dette vil være det samme for alle damptogene, men de andre versjonene, dvs. lastesettet, kan være annerledes
Når du har dette kan du koble til toget ved hjelp av funksjonen som følgende. Kan du fortelle når toget har forbindelse, da det vil blinke, lyktene blå
NRF.connect ("e0: 7d: ea: 0c: 03: 29"). Deretter (funksjon (g) {
console.log ("Starter tilkobling2"); gatt = g; retur gatt.getPrimaryService ("00001623-1212-efde-1623-785feabcd123"); }). deretter (funksjon (service) {retur service.getCharacteristic ("00001624-1212-efde-1623-785feabcd123");}). deretter (funksjon (karakter) {Characteristic_store = karakteristisk; returkarakteristikk.readValue ();}).then (verdi => {console.log (verdi);}). deretter (function () {console.log ("Train Connected"); tilkoblet = 1;
De morsomme greiene
Nå som du koblet til toget, er det på tide med alt det morsomme som å flytte det fremover, lage lyd og slå lyset av og på. Det er en enkel jobb å sende toget en prep -verdi, etterfulgt av den faktiske kommandoen dvs.
funksjon play_horn () {
console.log ("melding =", Characteristic_store); const prepval = ny Uint8Array ([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = ny Uint8Array ([0x08, 0x00, 0x81, 0x01, 0x11, 0x51, 0x01, 0x09]); Characteristic_store.writeValue (prepval).then (_ => {Characteristic_store.writeValue (sendvalue);}); }
Du må kanskje grave litt rundt for å finne en annen kommando enn de jeg brukte
Knapper og spaker
Den fysiske siden av fjernkontrollen er veldig rett frem fire knapper (for å spille lyder, slå lysene på og av) og ett potensiometer som er koblet til spaken, slik at du kan kontrollere hastigheten og retningen på toget
Knappen trenger ikke trekke opp motstand i stedet kan du gjøre dette i kode, dvs.
pinMode (D15, 'input_pulldown');
Du kan koble potensiometeret til en av inngangene og deretter lese det analoge signalet ved å bruke følgende kommando
var lesing = analogRead (D31);
Den andre forskjellen til arduinoen er at esprunio ikke har et oppsett og loop. Så i stedet plasserer jeg alle separate kommandoer/utløsere i funksjoner og setter deretter opp setInterval som sløyfer hvert 100 millisekund, lytter til knappen og kjører deretter den nødvendige funksjonen når knappen har blitt trykket.
if (digitalRead (D15) == 1) {play_horn (); }
Handlingen av spaken var litt mer komplisert da jeg ønsket å kunne justere hastigheten trinnvis, så først måtte jeg sende den analoge verdien for å fungere
var lesing = analogRead (D31);
train_direction (lesing * 1024);
Så i train_direction -funksjonen brøt jeg ned kommandoen til 6 forskjellige trinn basert på pot -verdien
Helt opp, forteller toget å gå full fart fremover
Halvveis opp, forteller toget å gå fremover med 50% hastighet
Midt, forteller toget å stoppe
Halvveis ned, forteller toget å gå bakover med 50% hastighet
Helt ned, forteller toget å gå full fart i revers
dvs
funksjon train_direction (dir_val) {
//console.log("message = ", Characteristic_store); const prepval = ny Uint8Array ([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = ny 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);}); }
Hele koden kan være nede for lenken nedenfor
Trinn 2: Kabling
Ledningen var den enkleste delen
Den besto bare av 4 trykknapper som er koblet til D15, D16, D17 og D18 uten noen trekkmotstand, siden dette ble gjort i koden og 1 10k motstand koblet til D31
Jeg jobber fortsatt med strømforsyningen, men for øyeblikket kommer all strøm fra et mikro -usb -utbrudd, og dette kan kobles direkte til en strømbank eller en USB -port
Trinn 3: Bygget
Fjernkontrollen er stort sett av 3 mm, 6 mm eller 9 mm A4 -ark med kryssfiner. De ble kuttet på CNC -maskinen min, men ved å bruke malen forutsatt at jeg ville tro om det ikke ville være umulig å gjøre for hånd
Jeg håper at malen og bildene gir deg alt du trenger for å lage på nytt, men det er få notater som kan hjelpe
3 mm trykknappfeste er for å holde trykknappen på, gapet plasserer knappen på riktig sted, men vi gir deg tilgang til beinet på baksiden slik at du kan lodde til mikrochippen, på baksiden kan du også montere MDBT42Q bruker litt lim. På forsiden må du legge til så skum, slik at det gir knappene et lite sprett når du trykker dem ned, du kan også bruke fjærer
9 mm knapper trenger logoen enten maling, gravering eller noe annet som viser hvilken knapp som gjør hva
Spaken/håndtaket må legges i lag, jeg brukte en 6 mm plugg for å hjelpe dem med å justere dem i alle riktige posisjoner