Sadržaj:

Drveni Bluetooth daljinski upravljač za Lego Duplo vlak: 3 koraka (sa slikama)
Drveni Bluetooth daljinski upravljač za Lego Duplo vlak: 3 koraka (sa slikama)

Video: Drveni Bluetooth daljinski upravljač za Lego Duplo vlak: 3 koraka (sa slikama)

Video: Drveni Bluetooth daljinski upravljač za Lego Duplo vlak: 3 koraka (sa slikama)
Video: 🟡 POCO X5 PRO - САМЫЙ ДЕТАЛЬНЫЙ ОБЗОР и ТЕСТЫ 2024, Studeni
Anonim
Drveni Bluetooth daljinski upravljač za Lego Duplo vlak
Drveni Bluetooth daljinski upravljač za Lego Duplo vlak
Drveni Bluetooth daljinski upravljač za Lego Duplo vlak
Drveni Bluetooth daljinski upravljač za Lego Duplo vlak

Moja su djeca voljela ovaj mali Lego Duplo vlak, posebno moj najmlađi koji se bori da komunicira riječima pa sam joj želio izgraditi nešto što će joj pomoći da se igra s vlakom neovisno o odraslima ili telefonima/tabletima. Nešto što bi vlaku dodalo dodatnu dimenziju i dalo mu dodatnu igračku vrijednost

Lego set već ima nekoliko načina za upravljanje vlakom, možete ga gurnuti naprijed za pokretanje i držati za zaustavljanje, možete ga kontrolirati pomoću oznaka u boji koje idu na prugu, pa kad vlak prijeđe preko njega pokreće različite radnje, tj. naprijed, natrag, zvukovi reprodukcije uključuju svjetla. Također možete preuzeti aplikaciju za svoj telefon ili tablet koja se može povezati s vlakom putem Bluetootha.

Evo potpunog pregleda vlaka

Nakon lova po internetu, otkrio sam da je bilo dosta različitih ljudi koji su imali sve spremne pisane kodove za kontrolu vlaka. Čvor 'Poweredup' koji je napisao nathan.kellenicki (https://nathan.kellenicki.com/node-poweredup/) izgledao je kao savršeno započeto, napisano je korištenjem Javascripta s kojim nisam bio djelomično upoznat, ali pomislio sam mogao pronaći mikročip temeljen na javi, ovo bi bio dobar početak.

Opet sam nakon lova po internetu ponovno pronašao sustav espruino, sličan ardiunu, ali baza oko javascripta. Kôd espriuno mogao se učitati na MDBT42Q mirkočip koji je imao ugrađen bluetooth. Mislio sam da bih, ako bih mu mogao učitati "napajani" modul, bio na pola puta, međutim ovo jednostavno nije bio slučaj jer je modul sadržavao mnoge biblioteke prevelike za učitavanje na MDBT42Q, pa se čini da moram pronaći jednostavnije rješenje …

Korak 1: Kôd

Kod
Kod

Esprinuo

Za one koji ne poznaju platformu Espruino https://www.espruino.com (a ja nisam) je li vrlo sličan Arduinu, postoji nekoliko glavnih razlika, jedna je napisana za javascript, radije c, čini se nešto novijim pa da ne postoje primjeri, međutim, podrška putem foruma je velika i od velike pomoći.

Javascript upoznajte vlak

Prva prepreka bila je povezivanje s vlakom putem Bluetootha. To se može učiniti pomoću klase NRF koja se isporučuje u kodu espruino.

NRF.connect se može koristiti za povezivanje s vlakom, međutim vaša prva potreba da pronađete adresu samog vlaka, možete koristiti NRF.findDevices za dobivanje ovih podataka

Nakon što ste to učinili, morate vlaku poslati dvije vrijednosti u rukovanje s vlakom, za moj vlak ovo je bilo "00001623-1212-efde-1623-785feabcd123", a zatim "00001624-1212-efde-1623-785feabcd123" vjerujem to će biti isto za sve postavljene parne vlakove, ali ostale verzije, tj. komplet tereta mogu biti različite

Nakon što to učinite, možete spojiti vlak pomoću sljedeće funkcije, možete li reći kada se vlak spojio jer će treptati svjetla će plavo

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

console.log ("Pokretanje povezivanja2"); gatt = g; return gatt.getPrimaryService ("00001623-1212-efde-1623-785feabcd123"); }). then (function (service) {return service.getCharacteristic ("00001624-1212-efde-1623-785feabcd123");}). then (function (character) {Characteristic_store = karakteristika; return karakteristika.readValue ();}).then (value => {console.log (value);}). then (function () {console.log ("Vlak je povezan"); connected = 1;

Zabavne stvari

Sada kada ste se povezali s vlakom, vrijeme je za sve zabavne stvari, poput kretanja naprijed, stvaranja zvuka i paljenja i gašenja svjetla. To je jednostavan posao slanja vlaku pripremne vrijednosti, nakon čega slijedi stvarna naredba, tj

funkcija play_horn () {

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

Možda ćete morati malo kopati okolo kako biste pronašli drugu naredbu osim onih koje sam koristio

Gumbi i poluge

Fizička strana daljinskog upravljača je vrlo ravna prema naprijed s četiri gumba (za reprodukciju zvukova, paljenje i gašenje svjetla) i jednim potenciometrom koji je spojen na polugu tako da možete kontrolirati brzinu i smjer vlaka

Gumb ne treba podizati otpornik, već to možete učiniti u kodu, tj

pinMode (D15, 'input_pulldown');

Potenciometar možete spojiti na jedan od ulaza i zatim pročitati analogni signal pomoću sljedeće naredbe

var čitanje = analogRead (D31);

Druga razlika u odnosu na arduino je ta što esprunio nema postavku i petlju. Stoga umjesto toga stavljam sve zasebne naredbe/okidače u funkcije, a zatim postavljam setInterval koji se ponavlja svakih 100 milisekundi, slušajući gumb, a zatim pokreće traženu funkciju kada je gumb pritisnut.

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

Rad s polugom bio je malo kompliciraniji jer sam htio imati mogućnost postupnog podešavanja brzine pa sam prvo morao poslati analognu vrijednost u funkciju

var čitanje = analogRead (D31);

smjer_smjera (čitanje * 1024);

Zatim sam u funkciji train_direction razbio naredbu na 6 različitih koraka na temelju vrijednosti pot

Skroz gore, govori vlaku da ide punom brzinom naprijed

Na pola puta govori vlaku da ide naprijed brzinom od 50%

Sredina, govori vlaku da stane

Na pola puta dolje, govori vlaku da ide unatrag brzinom od 50%

Do kraja, govori vlaku da ide punom brzinom unatrag

tj

funkcija train_direction (dir_val) {

//console.log("message = ", Characteristic_store); const prepval = novi Uint8Array ([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = novi Uint8Array ([0x08, 0x00, 0x81, 0x00, 0x01, 0x51, 0x00, 0x00]); if (dir_val> 300 && dir_val 400 && dir_val 500) {const sendvalue = novi 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);}); }

Cijeli kôd možete pronaći na donjoj poveznici

Korak 2: Ožičenje

Ožičenje
Ožičenje
Ožičenje
Ožičenje

Ožičenje je bio najjednostavniji dio

Sastojao se samo od 4 tipke spojene na D15, D16, D17 i D18 bez ikakvog otpornika za podizanje, kao što je to učinjeno u kodu i 1 10k otpornika spojenog na D31

Još uvijek radim na napajanju, ali trenutno sva energija dolazi iz mikro usb proboja i to bi ih moglo spojiti izravno na banku napajanja ili USB priključak

Korak 3: Izgradnja

Izgradnja
Izgradnja
Izgradnja
Izgradnja
Izgradnja
Izgradnja
Izgradnja
Izgradnja

Daljinski upravljač uglavnom je izrađen od A4 listova šperploče A4 formata 3 mm, 6 mm ili 9 mm, koji su izrezani na CNC stroju, međutim koristeći predložak pod uvjetom da bih to učinio ručno

Nadam se da će vam predložak i fotografije dati sve što vam je potrebno za prepravljanje, međutim postoji nekoliko napomena koje bi mogle pomoći

Nosač s gumbom od 3 mm služi za lijepljenje gumba, otvor će postaviti gumb na pravo mjesto, ali dopuštamo vam pristup nozi sa stražnje strane tako da možete lemiti na mikročip, na poleđini možete montirati i MDBT42Q koristeći malo ljepila. S prednje strane morate dodati toliko pjene kako bi gumbi malo poskakivali kada ih pritisnete, također biste mogli upotrijebiti opruge

Gumbi od 9 mm trebaju logotip ili boju, gravuru ili nešto drugo da bi pokazali što gumb radi

Poluga/ručka morat će biti slojevita, upotrijebio sam mozgalicu od 6 mm kako bih ih poravnao u svim ispravnim položajima

Preporučeni: