Lego շարժիչների անլար կառավարում Steam Controller-ով

Lego շարժիչների անլար կառավարում Steam Controller-ով

Երբ ես երիտասարդ էի, ես միշտ ցանկացել էի ունենալ Lego տեխնո հավաքածուներ, որոնցով հիանալի իրեր պատրաստելու համար: Ինքնավար տանկեր՝ պտտվող պտուտահաստոցներով, որոնք կրակում են լեգո աղյուսներով: Բայց հետո ես այդպիսի հավաքածու չունեի:

Եվ նույնիսկ սովորական Lego աղյուսներ չկային: Ես միայն ընկեր ունեի, ում եղբայրն ուներ այս թանկարժեք խաղալիքները:

Իսկ հիմա ես այդ տարիքի որդի ունեմ։ Եվ նա տանկեր է կառուցում, որոնք ... հիմարաբար առաջ են տանում, մինչև բախվեն պատին 🙂

Եվ հիմա, ժամանակն է ESP32-ի և զոդման երկաթի կախարդանքի համար. եկեք հավաքենք նրանց համար ճիշտ հեռակառավարման վահանակը:

Չէ, իհարկե գիտեմ նման հեռակառավարիչների գոյության մասին։ Բայց նրանցից ոչ մեկն ինձ լիովին չի սազում։ Դրանք կամ ինֆրակարմիր են, 80-ականների տեխնոլոգիայով, կամ չափազանց մեծ են: Կամ թանկարժեքները: Եվ ամենակարևորը, ես չեմ կարողանա որդուս ասել դրանցից որևէ մեկի մասին. «Ես դա հատուկ քեզ համար եմ արել»:

Այսպիսով, եկեք ստեղծենք նոր, կատարելագործված հեռակառավարման վահանակ՝ բոլորին կառավարելու համար:

Lego շարժիչների անլար կառավարում Steam Controller-ով

Բաղադրությունը:

  • ESP32-WROOM-32D | WiFi, BLE և I/O պրոցեսոր - բավական է երկուսը կառավարելու համար շարժիչներ и LED.
  • DRV8833 | կրկնակի H-կամուրջ՝ շարժիչների համար բավարար հզորությամբ:
  • TPS62162 | իջեցրեք լարումը մինչև 17 Վ, ինչպես նաև զվարճանքի համար WSON-8 2x2 մմ պատյանը զոդելիս
  • CP2104 | ESP32 ծրագրավորման համար
  • Միակցիչներ շարժիչների և դիոդների միացման համար. Կտրեք լարերը և կպցրեք դրանք ներքևի մասում, իսկ վերևում կպցրեք Lego միակցիչը:

Այս ամենը կտեղադրվի բավականին փոքր տախտակի վրա. ահա դրա տեսքը EasyEDA խմբագրիչում.

Lego շարժիչների անլար կառավարում Steam Controller-ով

Լարը, որը երևում է վերնագրի լուսանկարում, անհրաժեշտ է ոչ թե որոշ սխալներ շտկելու, այլ USB-ից էներգիա մատակարարելու համար։ Հնարավոր է, որ դա բավարար չէ շարժիչի համար, բայց, ցավոք, Չինաստանից կոնտակտներ ինձ դեռ չեն հասել: Հետեւաբար, ես նախ ստուգում եմ LED- ների աշխատանքը: Լուսանկարում գեղեցկության համար ես պարզապես շարժիչից միակցիչը դրեցի տախտակի վրա:

Իմ տախտակի 1.1 տարբերակը (ի տարբերություն EasyEDA-ի 1.2 տարբերակի) չուներ LED-ներ, այնպես որ ես երկու հակազուգահեռ դիոդ զոդեցի ելքին, որպեսզի կարողանայի տեսնել, թե ինչ է կատարվում: Եթե ​​ուշադիր նայեք, տեսահոլովակը ցույց է տալիս 0603 զույգ դիոդների այլընտրանքային միացումը՝ ցույց տալով առաջ/հետ շարժումը:

Ինչ վերաբերում է հեռակառավարմանը, ապա սկզբում ես պարզապես ուզում էի հավաքել լրացուցիչ տախտակ կոճակներով և ևս մեկ ESP32՝ դասական հեռակառավարման վահանակ:

Այնուամենայնիվ, հետո հիշեցի, որ Steam Controller-ներն ունեն Bluetooth ցածր էներգիայի (BLE) ռեժիմ: Ես որոշեցի զբաղվել այս հարցով, և մի քանի ժամ անց սովորեցի, թե ինչպես ստանալ փաթեթներ վերահսկիչից:

Դա անելու համար պարզապես պետք է փնտրել HID սարք, որն իրեն անվանում է SteamController և միանալ դրան: Եվ հետո օգտագործեք ոչ փաստաթղթավորված ծառայություն Valve-ից և մի քանիսը չփաստաթղթավորված հրամաններ, որը թույլ է տալիս փաթեթների փոխանցումը:

Lego շարժիչների անլար կառավարում Steam Controller-ով

Ես հանդիպեցի նաև չփաստաթղթավորված հաշվետվության ձևաչափի, որը ես ձեռքով վերլուծեցի:

Lego շարժիչների անլար կառավարում Steam Controller-ով

Մոտ մեկ ժամ անց դրոշների և արժեքների իմաստը պարզ դարձավ ինձ համար, և ես կարողացա թարթել LED-ն՝ օգտագործելով Steam կարգավորիչը և ESP32-ը: ¯_(ツ)_/¯

Ֆայլեր

v1.0: «փորձնական մոտեցում»
- առաջին տարբերակը, որի համար ես ընտրեցի սխալ լարման կարգավորիչը: TPS62291-ը միայն լարումը վերցնում է մինչև 6 Վ, ես զուգահեռ մի քանի նախագծեր էի մշակում և մոռացել էի, որ սարքը պետք է աշխատի 9 Վ-ով:

v1.1: "բավական լավ"
- այս տարբերակը տեսանելի է տեսանյութերում, և ամեն ինչ աշխատում է

v1.2: «վերջնական»
- ավելացրեց ցուցիչի LED-ները ելքին և օպտիմիզացրեց տախտակի չափն ու դասավորությունը

Հետևյալ կարճ տեսանյութը ցույց է տալիս միացման փուլը (միացումից 1-3 վայրկյան հետո) և շարժիչի ելքերի կառավարումը: Lego-ի միակցիչը դեռ միացված չէ: Այն կգնա մյուս միակցիչների կողքին գտնվող դատարկ տարածությունը, որը նշված է սպիտակ ուղղանկյունով:

Իմ որդին այժմ պարբերաբար օգտագործում է այս կարգավորիչը՝ իր հավաքած մեքենաները կառավարելու համար:

Սթրես թեստի ժամանակ ես հանդիպեցի միայն մեկ խնդրի. կարծում էի, որ շարժիչի վարորդի «արագ քայքայման» ռեժիմը [արագ քայքայումը] լավագույնս կաշխատի, բայց դրա պատճառով մի քանի վայրկյան աշխատելուց հետո շարժիչի արագությունը շատ իջավ։ . Այսպիսով, ես փոխեցի կոդը այնպես, որ այն օգտագործի «դանդաղ քայքայումը» [դանդաղ քայքայումը]:

Lego շարժիչների անլար կառավարում Steam Controller-ով

Թեև ես վստահ չեմ, թե ինչպես է աշխատում DRV-ն և ինչու է շարժիչը սկզբում արագ պտտվում, իսկ հետո 10 վայրկյան հետո սկսում է աստիճանաբար դանդաղել: Միգուցե MOSFET-ները տաքանում են, և նրանց դիմադրությունը չափազանց բարձրանում է:

Հուսով եմ, որ Arduino-ն առանց ջանքերի օգտագործելու այս օրինակը ոգեշնչում է այլ մարդկանց և թույլ է տալիս նրանց երեխաներին ծանոթացնել էլեկտրոնիկայի հետ:

Source: www.habr.com

Добавить комментарий