Բովանդակություն:

Փայտե Bluetooth հեռակառավարիչ Lego Duplo գնացքի համար. 3 քայլ (նկարներով)
Փայտե Bluetooth հեռակառավարիչ Lego Duplo գնացքի համար. 3 քայլ (նկարներով)
Anonim
Փայտե Bluetooth հեռակառավարիչ Lego Duplo գնացքի համար
Փայտե Bluetooth հեռակառավարիչ Lego Duplo գնացքի համար
Փայտե Bluetooth հեռակառավարիչ Lego Duplo գնացքի համար
Փայտե Bluetooth հեռակառավարիչ Lego Duplo գնացքի համար

Իմ երեխաները սիրում էին Լեգո Դուպլոյի այս փոքրիկ գնացքը, հատկապես իմ ամենափոքրը, ով պայքարում է իրեն բառերով հաղորդակցելու համար, ուստի ես ուզում էի նրան կառուցել մի բան, որը կօգնի նրան խաղալ գնացքի հետ անկախ մեծահասակներից կամ հեռախոսներից/պլանշետներից: Մի բան, որը գնացքին լրացուցիչ հարթություն կհաղորդեր և դրան լրացուցիչ խաղային արժեք կտար

Լեգոյի հավաքածուն արդեն ունի գնացքը կառավարելու մի քանի միջոց, կարող եք առաջ մղել այն սկսելու և պահելու համար, որպեսզի այն կանգնեցնեք, կարող եք կառավարել այն ՝ օգտագործելով գծանշաններով անցնող գունային պիտակներ, այնպես որ, երբ գնացքը դրա վրայով անցնում է, առաջացնում է տարբեր գործողություններ, այսինքն. առաջ, հակառակ, նվագել հնչյունները միացնում են լույսերը: Կարող եք նաև ներբեռնել ձեր հեռախոսի կամ պլանշետի ծրագիր, որը կարող է միանալ գնացքին Bluetooth- ի միջոցով:

Ահա գնացքի ամբողջական ակնարկը

Ինտերնետում որսալուց հետո ես գտա, որ շատ քիչ տարբեր մարդիկ էին, որոնք ունեին բոլոր պատրաստ գրված կոդը `գնացքը կառավարելու համար: «Poweredup» հանգույցը, որը գրել է nathan.kellenicki- ն (https://nathan.kellenicki.com/node-poweredup/), կարծես կատարյալ սկիզբ էր, գրված էր Javascript- ի միջոցով, որին մասամբ ծանոթ չէի, բայց մտածում էի, եթե կարող էր գտնել Java- ի վրա հիմնված միկրոչիպ, սա լավ սկիզբ կլիներ:

Կրկին ինտերնետում որսալուց հետո նորից գտա էսպրուինո համակարգը, սա նման է ardiuno- ի, բայց javascript- ի շուրջ: Espriuno ծածկագիրը կարող է բեռնվել MDBT42Q mircochip- ի վրա, որն ուներ bluetooth ներդիր: Մտածեցի, որ եթե կարողանամ «սնուցված» մոդուլը ներբեռնել դրան, ես կես ճանապարհ կլինեի այնտեղ, սակայն այս պարզը այն դեպքը չէր, երբ շատ գրադարաններում տեղադրված մեծ մոդուլը ՝ MDBT42Q- ում բեռնվելու համար, այնպես որ, թվում է, ես պետք է գտնել ավելի պարզ լուծում…

Քայլ 1: Կոդ

Օրենսգիրքը
Օրենսգիրքը

Էսպրինուո

Նրանց համար, ովքեր չգիտեն Espruino պլատֆորմը https://www.espruino.com (և ես դա չէի), արդյո՞ք դա շատ նման է Arduino- ին, մի քանի հիմնական տարբերություն կա, որը գրել է javascript- ի համար ավելի շուտ c, Այն իրեն ավելի փոքր է զգում: այնպես որ գուցե օրինակներ չլինեն, սակայն ֆորումների միջոցով աջակցությունը մեծ է և շատ օգտակար:

Javascript- ը հանդիպեք գնացքին

Առաջին խոչընդոտը գնացքին միանալն էր bluetooth- ի միջոցով: Դա կարելի է անել `օգտագործելով NRF դասը, որն ուղարկում է espruino ծածկագիրը:

NRF.connect- ը կարող է օգտագործվել գնացքին միանալու համար, սակայն գնացքի հասցեն գտնելու առաջին անհրաժեշտությունը կարող եք օգտագործել NRF.findDevices- ը ՝ այս տեղեկությունները ստանալու համար:

Երբ դա անեք, դուք պետք է գնացքին ուղարկեք գնացքի հետ ձեռքսեղմման երկու արժեք, քանի որ իմ գնացքը սա էր «00001623-1212-efde-1623-785feabcd123», որին հաջորդում էր «00001624-1212-efde-1623-785feabcd123»: սա նույնը կլինի գոլորշու գնացքների համար

Սա ունենալուց հետո կարող եք միացնել գնացքը ՝ օգտագործելով հետևյալ գործառույթը, կարո՞ղ եք ասել, թե երբ է գնացքը միանում, քանի որ այն լուսարձակում է կապույտ լուսարձակները

NRF.connect ("e0: 7d: ea: 0c: 03: 29"): ապա (գործառույթ (g) {

console.log («Սկսում է կապը 2»); gatt = g; վերադարձ gatt.getPrimaryService ("00001623-1212-efde-1623-785feabcd123"); }). ապա (ֆունկցիա (ծառայություն) {return service.getCharacteristic ("00001624-1212-efde-1623-785feabcd123");}).).then (value => {console.log (value);}). ապա (function () {console.log ("Train Connected"); կապված = 1;

Funվարճալի իրեր

Այժմ, երբ միացել եք գնացքին, ժամանակն է բոլոր զվարճալի իրերի համար, ինչպիսիք են այն առաջ շարժելը, ձայնը հնչեցնելը և լույսը միացնելն ու անջատելը: Գնացքին նախապատրաստական արժեք ուղարկելու պարզ գործ է, որին հաջորդում է իրական հրամանը, այսինքն

գործառույթ play_horn () {

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

Հնարավոր է, որ ստիպված լինեք մի փոքր փորփրել ՝ այլ հրամաններ գտնելու համար, քան ես օգտագործել եմ

Կոճակներ և լծակներ

Հեռակառավարման ֆիզիկական կողմը շատ ուղիղ առաջ է ՝ չորս կոճակ (հնչյուններ նվագարկելու, լույսերը միացնելու և անջատելու համար) և մեկ պոտենցիոմետր, որը միացված է լծակին, որպեսզի կարողանաք վերահսկել գնացքի արագությունն ու ուղղությունը

Կոճակը կարիք չունի ձգվող դիմադրության, փոխարենը կարող եք դա անել ծածկագրով, այսինքն

pinMode (D15, 'input_pulldown');

Կարող եք պոտենցիոմետրը միացնել մուտքերից մեկին, այնուհետև կարդալ այն անալոգային ազդանշանը ՝ օգտագործելով հետևյալ հրամանը

var ընթերցում = analogRead (D31);

Արդուինոյի մյուս տարբերությունն այն է, որ esprunio- ն կարգավորում և հանգույց չունի: Այսպիսով, փոխարենը ես տեղադրում եմ բոլոր առանձին հրամանները/գործարկիչները գործառույթների մեջ, այնուհետև տեղադրում եմ setInterval- ը, որն անցնում է յուրաքանչյուր 100 միլիվայրկյանում, լսելով կոճակը, այնուհետև գործարկում անհրաժեշտ գործառույթը, երբ կոճակը սեղմված է:

եթե (digitalRead (D15) == 1) {play_horn (); }

Գործողությունը

var ընթերցում = analogRead (D31);

գնացքի ուղղություն (կարդալ * 1024);

Հետո train_direction գործառույթում ես կոտրեցի հրամանը 6 տարբեր աստիճանի ՝ ելնելով կաթսայի արժեքից

Մինչև վերև գնացքը ասում է, որ ամբողջ արագությամբ առաջ գնա

Կես ճանապարհ վեր, գնացքին ասում է, որ 50% արագությամբ առաջ գնա

Միջին, ասում է գնացքին կանգ առնել

Կեսից ներքև, ասում է գնացքին հետ գնալ 50% արագությամբ

Ամբողջ ճանապարհով գնացքը ասում է, որ ամբողջ արագությամբ հետընթաց կատարի

այսինքն

ֆունկցիա train_direction (dir_val) {

//console.log("message = ", Բնութագրական_ խանութ); const prepval = նոր Uint8Array ([0x0a, 0x00, 0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01]); const sendvalue = նոր 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 value);}); }

Ամբողջական ծածկագիրը կարող է տրված լինել ստորև բերված հղման համար

Քայլ 2: Հաղորդալարերի տեղադրում

Հաղորդալարերը
Հաղորդալարերը
Հաղորդալարերը
Հաղորդալարերը

Էլեկտրամոնտաժը ամենապարզ մասն էր

Այն ընդամենը բաղկացած էր 4 կոճակից, որը միացված էր D15, D16, D17 և D18- ին ՝ առանց ցանկացած ձգվող դիմադրության, քանի որ դա արվում էր ծածկագրում և D31- ին միացված 1 10k դիմադրիչ

Ես դեռ աշխատում եմ էներգիայի մատակարարման վրա, բայց ներկայումս ամբողջ էներգիան գալիս է միկրո USB- ի ճեղքումից, և դա կարող է դրանք ուղղակիորեն միացվել հոսանքի բանկին կամ USB պորտին

Քայլ 3: Կառուցեք

Կառուցել
Կառուցել
Կառուցել
Կառուցել
Կառուցել
Կառուցել
Կառուցել
Կառուցել

Հեռակառավարիչը հիմնականում դուրս է գալիս 3 մմ, 6 մմ կամ 9 մմ նրբատախտակի A4 թերթերից, դրանք կտրվում էին իմ CNC մեքենայի վրա, սակայն, օգտագործելով այն ձևանմուշը, որը ես կցանկանայի, չնայած դա անհնար չէր լինի ձեռքով անել:

Հուսով եմ, որ կաղապարը և լուսանկարները կտան ձեզ այն ամենը, ինչ անհրաժեշտ է վերակառուցման համար, սակայն կան մի քանի նշումներ, որոնք կարող են օգնել

3 մմ կոճակ կոճակը տեղադրելու համար սեղմման կոճակը կպցնելու համար է, բացը կտեղադրի կոճակը ճիշտ տեղում, սակայն մենք թույլ ենք տալիս մուտք գործել ոտքը հետևի մասում, որպեսզի կարողանաք միակցել միկրոչիպին, իսկ հետևի մասում կարող եք նաև տեղադրել MDBT42Q օգտագործելով որոշ սոսինձ: Առջևում ձեզ հարկավոր է այնքան փրփուր ավելացնել, որպեսզի կոճակները մի փոքր ցատկեն, երբ դրանք սեղմում եք ներքև, կարող եք նաև օգտագործել աղբյուրներ

9 մմ կոճակներին անհրաժեշտ կլինի լոգոյի ներկ, փորագրություն կամ այլ բան, որը ցույց կտա, թե ինչ կոճակ է անում

Լծակը/բռնակը պետք է շերտավորվի, ես օգտագործեցի 6 մմ տրամագիծ ՝ դրանք բոլոր ճիշտ դիրքերում հավասարեցնելու համար:

Խորհուրդ ենք տալիս: