Kazalo:

Leseni daljinski upravljalnik Bluetooth za vlak Lego Duplo: 3 koraki (s slikami)
Leseni daljinski upravljalnik Bluetooth za vlak Lego Duplo: 3 koraki (s slikami)

Video: Leseni daljinski upravljalnik Bluetooth za vlak Lego Duplo: 3 koraki (s slikami)

Video: Leseni daljinski upravljalnik Bluetooth za vlak Lego Duplo: 3 koraki (s slikami)
Video: CS50 2013 - Week 9, continued 2024, November
Anonim
Leseni daljinski upravljalnik Bluetooth za vlak Lego Duplo
Leseni daljinski upravljalnik Bluetooth za vlak Lego Duplo
Leseni daljinski upravljalnik Bluetooth za vlak Lego Duplo
Leseni daljinski upravljalnik Bluetooth za vlak Lego Duplo

Moji otroci so ljubili ta mali vlak Lego Duplo, še posebej moj najmlajši, ki se težko sporazumeva z besedami, zato sem ji želel zgraditi nekaj, kar bi ji pomagalo igrati z vlakom neodvisno od odraslih ali telefonov/tablic. Nekaj, kar bi vlaku dodalo dodatno dimenzijo in mu dalo dodatno igralno vrednost

Komplet Lego že ima malo načinov za nadzor vlaka, ga lahko potisnete naprej, da ga zaženete, in ga zadržite, da ga ustavite, lahko ga upravljate z barvnimi oznakami, ki gredo na progo, tako da, ko ga vlak prečka, sproži različna dejanja, tj. naprej, nazaj, predvajajte zvoke, prižgite luči. Prav tako lahko naložite aplikacijo za telefon ali tablični računalnik, ki se lahko poveže z vlakom prek Bluetootha.

Tukaj je popoln pregled vlaka

Po iskanju po internetu sem ugotovil, da je bilo kar nekaj različnih ljudi, ki so imeli pripravljeno napisano kodo za nadzor vlaka. Vozlišče 'Poweredup', ki ga je napisal nathan.kellenicki (https://nathan.kellenicki.com/node-poweredup/), je bilo videti kot popoln začetek, napisano je bilo s pomočjo Javascripta, ki ga nisem bil delno seznanjen, vendar sem pomislil, če če bi našli mikročip na osnovi jave, bi bil to dober začetek.

Po ponovnem iskanju po internetu sem spet našel sistem espruino, ki je podoben ardiunu, vendar temelji okoli javascripta. Kodo espriuno lahko naložite na mirkočip MDBT42Q, ki ima vgrajen bluetooth. Mislil sem, da če bi lahko naložil "napajan" modul, bi bil na polovici poti, vendar to preprosto ni bilo, če je modul vseboval številne knjižnice, ki so bile velike za nalaganje na MDBT42Q, zato se zdi, da moram poiščite enostavnejšo rešitev …

1. korak: Koda

Kodeks
Kodeks

Esprinuo

Za tiste, ki ne poznate platforme Espruino https://www.espruino.com (in je nisem), je zelo podoben Arduinu, Obstaja nekaj glavnih razlik, ena je napisana za javascript raje c, zdi se nekoliko novejša tako da ni primerov, vendar je podpora prek forumov velika in zelo koristna.

Javascript izpolnjujejo vlak

Prva ovira je bila povezava z vlakom prek bluetootha. To je mogoče storiti z uporabo razreda NRF, ki je priložen kodi espruino.

NRF.connect se lahko uporablja za povezavo z vlakom, vendar morate najprej najti naslov samega vlaka. Če želite dobiti te podatke, lahko uporabite NRF.findDevices.

Ko to storite, morate vlaku poslati dve vrednosti v rokovanje z vlakom, za moj vlak je bilo to "00001623-1212-efde-1623-785feabcd123", čemur sledi "00001624-1212-efde-1623-785feabcd123" Verjamem to bo enako za vse komplete parnih vlakov, druge verzije, to je komplet tovora, pa bodo morda drugačne

Ko to imate, lahko vlak povežete z naslednjo funkcijo. Ali lahko ugotovite, kdaj se je vlak povezal, saj bo utripal, žarometi bodo modri

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

console.log ("Začetek povezovanja2"); 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 character.readValue ();}). then (value => {console.log (value);}). then (function () {console.log ("Train Connected"); connected = 1;

Zabavne stvari

Zdaj, ko ste povezani z vlakom, je čas za vse zabavne stvari, kot je premikanje naprej, zvok in vklop in izklop luči. Preprosta naloga je, da vlaku pošljete pripravljalno vrednost, ki ji sledi dejanski ukaz, tj

funkcija play_horn () {

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

Morda boste morali malo pobrskati, da poiščete drug ukaz, razen tistih, ki sem jih uporabil

Gumbi in ročice

Fizična stran daljinskega upravljalnika so naravnost štirje gumbi (za predvajanje zvokov, vklop in izklop luči) in en potenciometer, ki je povezan z ročico, tako da lahko nadzorujete hitrost in smer vlaka

Gumbu ni treba potegniti upora, to lahko storite v kodi, tj

pinMode (D15, 'input_pulldown');

Potenciometer lahko priključite na enega od vhodov in nato z naslednjim ukazom preberete analogni signal

var odčitavanje = analogRead (D31);

Druga razlika do arduina je, da esprunio nima nastavitve in zanke. Namesto tega namestim vse ločene ukaze/sprožilce v funkcije in nato nastavim setInterval, ki se ponovi vsakih 100 milisekund, posluša gumb in nato po pritisku na gumb zažene zahtevano funkcijo.

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

Upravljanje ročice je bilo nekoliko bolj zapleteno, saj sem želel postopoma prilagajati hitrost, zato sem najprej moral poslati analogno vrednost v funkcijo

var odčitavanje = analogRead (D31);

smer vlaka (branje * 1024);

Nato sem v funkciji train_direction ukaz razčlenil na 6 različnih korakov glede na vrednost pota

Vso pot gor pove vlaku, naj gre s polno hitrostjo naprej

Na polovici poti pove vlaku, naj gre naprej s 50 -odstotno hitrostjo

V sredini, vlaku pove, naj se ustavi

Na polovici poti pove vlaku, naj se vrne s hitrostjo 50%

Vse do konca vlaku pove, naj se vrne s polno hitrostjo

tj

funkcija train_direction (dir_val) {

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

Celotno kodo lahko najdete na spodnji povezavi

2. korak: Ožičenje

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

Ožičenje je bilo najpreprostejši del

Sestavljen je bil samo iz 4 gumbov, priključenih na D15, D16, D17 in D18 brez vlečnega upora, kot je bilo to storjeno v kodi, in 1 10k upor, priključen na D31

Še vedno delam na napajalniku, vendar trenutno vsa moč prihaja iz izhoda mikro usb in to bi lahko bili priključeni neposredno na banko napajanja ali vrata USB

3. korak: Zgradba

Zgradba
Zgradba
Zgradba
Zgradba
Zgradba
Zgradba
Zgradba
Zgradba

Daljinski upravljalnik je večinoma iz vezanih listov vezanega lesa A4 velikosti 3 mm, 6 mm ali 9 mm, ki so jih rezali na svojem CNC stroju, vendar z uporabo predloge, če bi to storil ročno

Upam, da vam bosta predloga in fotografije dali vse, kar potrebujete za predelavo, vendar obstaja nekaj opomb, ki bi lahko pomagale

3 mm držalo za potisni gumb je namenjeno pritrditvi gumba, reža bo gumb postavila na pravo mesto, vendar vam omogočamo dostop do noge na hrbtu, da ga lahko spajkate na mikročip, na hrbtni strani pa lahko namestite tudi MDBT42Q z uporabo lepila. Na sprednji strani boste morali dodati tako peno, da bodo gumbi rahlo odskočili, ko jih pritisnete navzdol, lahko uporabite tudi vzmeti

9 -milimetrski gumbi bodo potrebovali barvo logotipa, gravuro ali kaj drugega, da pokažejo, kaj gumb počne

Ročico/ročaj bo treba položiti navzgor, uporabil sem 6 mm moznik, ki jim je pomagal poravnati v vseh pravilnih položajih

Priporočena: