Obsah:

Drevené diaľkové ovládanie Bluetooth pre vlak Lego Duplo: 3 kroky (s obrázkami)
Drevené diaľkové ovládanie Bluetooth pre vlak Lego Duplo: 3 kroky (s obrázkami)

Video: Drevené diaľkové ovládanie Bluetooth pre vlak Lego Duplo: 3 kroky (s obrázkami)

Video: Drevené diaľkové ovládanie Bluetooth pre vlak Lego Duplo: 3 kroky (s obrázkami)
Video: FULL BUILD | Rebuilding A DESTROYED Porsche 911 Turbo! 2024, November
Anonim
Drevené diaľkové ovládanie Bluetooth pre vlak Lego Duplo
Drevené diaľkové ovládanie Bluetooth pre vlak Lego Duplo
Drevené diaľkové ovládanie Bluetooth pre vlak Lego Duplo
Drevené diaľkové ovládanie Bluetooth pre vlak Lego Duplo

Moje deti milovali tento malý vláčik Lego Duplo, obzvlášť moja najmladšia, ktorá sa snaží komunikovať slovami, a tak som jej chcel postaviť niečo, čo by jej pomohlo hrať s vlakom nezávisle od dospelých alebo telefónov/tabletov. Niečo, čo by vlaku dodalo ďalší rozmer a dodalo mu extra hernú hodnotu

Súprava Lego už má niekoľko spôsobov, ako ovládať vlak, môžete ho posunúť dopredu, aby ste ho začali, a podržať ho, aby ste ho zastavili, môžete ho ovládať pomocou farebných značiek, ktoré idú po trati, takže keď po nej vlak prejde, spustí rôzne akcie, tj. zvuky vpred, vzad, prehrávanie rozsvietia svetlá. Môžete si tiež stiahnuť aplikáciu pre svoj telefón alebo tablet, ktorá sa dá pripojiť k vlaku prostredníctvom bluetooth.

Tu je kompletný prehľad vlaku

Potom, čo som lovil na internete, zistil som, že je tam dosť málo rôznych ľudí, ktorí mali pripravený písaný kód na ovládanie vlaku. Uzol „Poweredup“napísaný nathan.kellenicki (https://nathan.kellenicki.com/node-poweredup/) vyzeral ako perfektný začiatok. Bol napísaný pomocou jazyka Javascript, s ktorým som nebol čiastočne oboznámený, ale myslel som si, že ak mohol nájsť mikročip založený na jave, to by bol dobrý začiatok.

Potom, čo som znova lovil na internete, som našiel systém espruino, ktorý je podobný ardiunu, ale je založený na javascripte. Kód espriuno je možné načítať do mircochipu MDBT42Q s integrovaným rozhraním bluetooth. Myslel som si, že keby som doň mohol načítať „zapnutý“modul, bol by som v polovici cesty, ale toto nebolo jednoduché a modul obsiahnutý v mnohých knižniciach bol veľký na načítanie do MDBT42Q, takže sa zdá, že musím nájsť jednoduchšie riešenie …

Krok 1: Kód

Kód
Kód

Esprinuo

Pre tých, ktorí nepoznajú platformu Espruino https://www.espruino.com (a ja som to nevedel), je to veľmi podobné Arduinu, Existuje niekoľko hlavných rozdielov, ktoré boli napísané pre javascript, skôr c, Je to mierne novšie aby teda neexistovali príklady, podpora prostredníctvom fór je skvelá a veľmi nápomocná.

Javascript stretnúť vlak

Prvou prekážkou bolo pripojenie k vlaku cez bluetooth. To je možné vykonať pomocou triedy NRF, ktorá sa dodáva s kódom espruino.

NRF.connect je možné použiť na spojenie s vlakom, avšak na to, aby ste najskôr zistili adresu samotného vlaku, môžete tieto informácie získať pomocou NRF.findDevices

Akonáhle to urobíte, potom pošlete vlaku dve hodnoty na podanie ruky s vlakom, pre môj vlak to bolo „00001623-1212-efde-1623-785feabcd123“a za ním „00001624-1212-efde-1623-785feabcd123“to bude rovnaké pre všetky súpravy parných vlakov, ale ostatné verzie, tj. nákladná súprava, sa môžu líšiť

Akonáhle to máte, môžete vlak pripojiť pomocou nasledujúcej funkcie. Môžete povedať, kedy sa vlak spojí, ako bude blikať, svetlomety budú modré

NRF.connect ("e0: 7d: ea: 0c: 03: 29"). Potom (funkcia (g) {

console.log ("Začínam s pripájaním2"); gatt = g; vrátiť gatt.getPrimaryService ("00001623-1212-efde-1623-785feabcd123"); }). potom (funkcia (služba) {vrátiť službu.getCharacteristic ("00001624-1212-efde-1623-785feabcd123");})). potom (funkcia (charakteristika) {Character_store = charakteristika; vrátiť charakteristiku.readValue ();}).potom (hodnota => {console.log (hodnota);}). potom (funkcia () {console.log ("Train Connected"); connected = 1;

Zábavné veci

Teraz, keď ste pripojení k vlaku, je čas na všetky zábavné veci, ako napríklad jeho pohyb vpred, vydávanie zvukov a zapínanie a vypínanie svetla. Je to jednoduchá práca odoslať vlaku predbežnú hodnotu, po ktorej nasleduje skutočný príkaz, tj

funkcia play_horn () {

console.log ("message =", Characteristic_store); 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);}); }

Možno budete musieť trochu prekopať, aby ste našli iný príkaz, ako som použil

Gombíky a páčky

Fyzická stránka diaľkového ovládača je veľmi jednoduchá, štyri tlačidlá (na prehrávanie zvukov, zapínanie a vypínanie svetiel) a jeden potenciometer pripojený k páke, pomocou ktorého môžete ovládať rýchlosť a smer vlaku.

Tlačidlo nepotrebuje vyťahovací odpor, namiesto toho to môžete urobiť v kóde, tj

pinMode (D15, 'input_pulldown');

Potenciometer môžete pripojiť k jednému zo vstupov a potom ho prečítať pomocou analógového signálu pomocou nasledujúceho príkazu

var reading = analogRead (D31);

Ďalším rozdielom pre arduino je, že esprunio nemá nastavenie a slučku. Namiesto toho umiestnim všetky oddelené príkazy/spúšťače do funkcií a potom nastavím setInterval, ktorý sa opakuje každých 100 milisekúnd, počúvaním tlačidla a spustením požadovanej funkcie po stlačení tlačidla.

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

Ovládanie páčky bolo trochu komplikovanejšie, pretože som chcel, aby bolo možné postupne upravovať rýchlosť, takže najskôr som musel poslať analógovú hodnotu, aby fungovala

var reading = analogRead (D31);

vlak_smer (čítanie * 1024);

Potom som vo funkcii train_direction rozložil príkaz na 6 rôznych prírastkov na základe hodnoty potu

Celú cestu hore hovorí vlaku, aby išiel naplno

V polovici cesty hovorí vlaku, aby išiel dopredu 50% rýchlosťou

Uprostred, hovorí vlaku, aby zastavil

V polovici cesty povie vlaku, aby išiel späť 50% rýchlosťou

Celú cestu dole hovorí vlaku, aby išiel plnou rýchlosťou dozadu

tj

funkcia vlak_smer (dir_val) {

//console.log("message = ", Character_store); 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 sendvalueue = new Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0x64]); } if (dir_val 200) {const sendvalueue = new Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0xe2]); } if (dir_val 100) {const sendvalueue = new Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0xce]); } if (dir_val {Characteristic_store.writeValue (sendvalue);}); }

Celý kód môžete stiahnuť z nižšie uvedeného odkazu

Krok 2: Zapojenie

The Wiring
The Wiring
The Wiring
The Wiring

Zapojenie bolo najjednoduchšou súčasťou

Skladal sa iba zo 4 tlačidiel pripojených k D15, D16, D17 a D18 bez akéhokoľvek pull up rezistora, ako sa to robilo v kóde, a 1 10k rezistora pripojeného k D31.

Stále pracujem na napájaní, ale v súčasnej dobe všetka energia pochádza z mikro USB zásuvky a môže byť pripojená priamo k power banke alebo USB portu.

Krok 3: Zostavenie

Budova
Budova
Budova
Budova
Budova
Budova
Budova
Budova

Diaľkové ovládanie je väčšinou z preglejky formátu 3 mm, 6 mm alebo 9 mm, ktoré boli narezané na mojom CNC stroji, ale s použitím poskytnutej šablóny, aj keď by to nebolo možné robiť ručne

Dúfam, že šablóna a fotografie vám poskytnú všetko, čo potrebujete na prerobenie, existuje však niekoľko poznámok, ktoré by mohli pomôcť

3 mm držiak na tlačidlo je na nalepenie tlačidla, medzera umiestni tlačidlo na správne miesto, ale umožňujeme vám prístup k nohe na zadnej strane, aby ste sa mohli spájkovať s mikročipom, a naopak môžete tiež namontovať MDBT42Q pomocou nejakého lepidla. Na prednú stranu budete musieť pridať takú penu, aby tlačidlá trochu poskakovali, keď ich stlačíte, mohli by ste použiť aj pružiny

9 mm tlačidlá budú potrebovať buď logo, gravírovanie, alebo niečo iné, aby sa ukázalo, aké tlačidlo robí čo

Páčku/držadlo bude potrebné navrstviť. Na vyrovnanie vo všetkých správnych polohách som použil 6 mm hmoždinku.

Odporúča: