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

Lego Mini Memory Game: 5 քայլ (նկարներով)
Lego Mini Memory Game: 5 քայլ (նկարներով)

Video: Lego Mini Memory Game: 5 քայլ (նկարներով)

Video: Lego Mini Memory Game: 5 քայլ (նկարներով)
Video: ☑ CUBOT KingKong 5 Pro - ОБЗОР В ДЕТАЛЯХ 2024, Հուլիսի
Anonim
Image
Image
Lego Mini Հիշողության խաղ
Lego Mini Հիշողության խաղ

Մեկ տարի առաջ, ես գրեցի Instructable- ը Lego Mini Cooper- ում մի փունջ LED- ների տեղադրման մասին: Նորամուծությունը, ինչպիսին որ կար, այն էր, որ LED- ները կարող էին կառավարվել սմարթֆոնով (կամ այդ դեպքում որևէ վեբ դիտարկիչի միջոցով):

Ինչպես ես ջանասիրաբար նկարագրեցի այդ Instructable- ում, այն ժամանակվա ջանքերի մեծ մասը վերաբերում էր Mini- ին էլեկտրալարեր անցկացնելուն `առանց ամբողջը քանդվելու: Ինչ -որ չափով զարմացա, որ Mini- ն հետագայում փրկվեց Կոնեկտիկուտից Տորոնտո ճանապարհորդությունից և այդ ժամանակվանից աշխատում է, քիչ թե շատ:

«Եթե այն չկոտրվեր, նա շտկեց այն մինչև այն», լավագույն դեպքում կլինի իմ էպատաժը, այնպես որ, երբ Mini- ն Սուրբ Christmasննդյան տուն վերադարձավ, Lego Mini 2.0 -ի ժամանակն էր: Ի վերջո, եթե Tesla- ն կարողանա ծրագրային ապահովման թարմացումներն իր մեքենաներին մղել, ապա որքանո՞վ դա կարող է դժվար լինել:

Ես ունեի մի քանի գաղափար.

  • Բարելավեք բավականին անհարմար ինտերֆեյսը
  • Ավելացրու եղջյուր:
  • Բարելավել «ավտոմատ լույսեր» գործառույթը; և, ամենակարևորը
  • Ավելացրեք խաղային գործառույթ (նույնիսկ ես հասկացա, որ ձեր հեռախոսով Mini- ի լույսերը միացնելու և անջատելու նորույթը վաղ թե ուշ կփչանա)

Խաղի գործառույթը ամենամեծ խնդիրն էր, ոչ միայն այն պատճառով, որ ինձ համար անմիջապես ակնհայտ չէր, թե ինչպիսի խաղ կարող է լինել: Mini- ն չափազանց փխրուն է խաղը վարելու համար (բացառությամբ, հավանաբար, enենգայի ճնշող տարբերակի): Մեկ այլ խոչընդոտ այն էր, որ ես կյանքում խաղ չեմ ծրագրել:

Մեկ տարվա անպտուղ խորհրդածումից հետո ես պատահաբար հանդիպեցի Հեքսթերի մասին նախագծին, որի ընթացքում Arduino Uno- ն օգտագործվում է 1970 -ականների Սիմոն անունով հիշողության խաղալիք խաղալու համար: Մի խոսքով, Simon սարքը նվագեց լույսերի հաջորդականություն, որոնք այնուհետև նվագարկիչը պետք է հիշեր և նվագարկեր ՝ սեղմելով կոճակները: Յուրաքանչյուր հաջող փուլից հետո հաջորդականությունը մեծանում էր:

Չնայած անհրաժեշտ խաղողի բերքահավաքին, ես իրականում երբեք չէի լսել այս խաղի մասին, և պետք է ասեմ, որ զարմանալի է այն, ինչ անցյալում անցավ զվարճանքի համար: Նույնիսկ ավելի զարմանալի է, որ Simon խաղը դեռ վաճառքում է և հիացական գնահատականներ է հավաքում Amazon- ում: Ակնհայտ է, որ սա պետք է լիներ իմ նպատակներին հարմարվելու գլխավոր թեկնածուն: Ի վերջո, Mini- ն արդեն լույսեր ուներ, ուստի ինձ մնում էր միայն հեռացնել ֆիզիկական կոճակները և օգտվողի մուտքը տրամադրել սմարթֆոնի միջոցով: Theրագրային ապահովման կողմից, հետևաբար, թվում էր, որ սա պարզապես մեծ մասամբ կտրված և կպցնել-աշխատանք է լինելու:

Բայց նախ, ես պետք է որոշ փոքր փոփոխություններ կատարեի սարքավորման մեջ:

Քայլ 1: Բաղադրիչներ, գործիքներ և ռեսուրսներ

Բաղադրիչներ, գործիքներ և ռեսուրսներ
Բաղադրիչներ, գործիքներ և ռեսուրսներ

Եթե դուք կրկնօրինակում եք այս նախագիծը Lego Mini- ով, ձեզ հարկավոր կլինեն իմ ավելի վաղ Instructable- ում նշված բոլոր իրերը: Միակ լրացուցիչ բանը, որ ձեզ հարկավոր կլինի, պասիվ ազդանշանն է, որն օգտագործվում է եղջյուրի համար և խաղի ընթացքում մի շարք անհանգստացնող ձայներ արձակելու համար (որոնք կարող են անջատվել):

Ինչպես պարզ կդառնա ծրագրակազմը քննարկելիս, խաղի համար Lego Mini օգտագործելու իրական կարիք չկա: Դուք կարող եք օգտագործել մեկ այլ Lego հավաքածու, կամ իսկապես մի փունջ լուսադիոդային տախտակ, որը կցված է ցանկացած ESP8266 զարգացման տախտակին: Որոշ ռելեներ կարող եք օգտագործել նույնիսկ ձեր տան սենյակի լուսավորությունը: Երեխանե՛ր, նախևառաջ հարցրեք ձեր ծնողներին այդ մասին:

Նմանապես, սկզբնական ծրագրի համար թվարկվածներից բացի լրացուցիչ գործիքներ կամ ռեսուրսներ պետք չեն:

Եթե դուք այն մի քանի մարդկանցից եք, ովքեր կարդում են նախագծի բնօրինակը, կիմանաք, որ Lego Mini- ն ի սկզբանե գնվել է որպես նվեր իմ մեծացած դստերը, ով ունի գրեթե նույնական «իսկական» Mini կամ գրեթե նույնական: կարող է տրվել, որ դա նոր Mini է, այլ ոչ թե «Classic»: Որևէ նշանակալից լրացուցիչ բաղադրիչների բացակայությունը այս նոր նախագիծն առավել գրավիչ դարձրեց, քանի որ այն ինձ հնարավորություն կտար արդյունավետ կերպով նորից նվեր տալ Lego Mini 2.0-ը որպես ամանորյա նոր նվեր ՝ առանց որևէ դրամ ծախսելու: Հանճարեղ!

Քայլ 2: Սարքավորման փոփոխում

Սարքաշարի փոփոխում
Սարքաշարի փոփոխում

Նախնական նախագիծը ուներ անհատականորեն վերահսկվող RGB ներքին լուսադիոդային լուսադիոդներ: Սրանք NodeMCU- ի վրա երեք կապում էին սպառվում, որոնք ես օգտագործում էի որպես զարգացման տախտակ: Lego Mini- ի սեփականատիրոջ հետ դիսկրետ խորհրդակցությունից հետո պարզվեց, որ RGB LED- ները թերօգտագործվող գործառույթ էին: Սա կարևոր հետախուզություն էր, որովհետև ինձ անհրաժեշտ էր բզզոցի/եղջյուրի համար քորոց ազատել:

Վերոնշյալ սխեմայի սխեման բուն նախագծից է: Այս նախագծի համար անհրաժեշտ միակ փոփոխությունն այն էր, որ հեռացնեին RGB LED- ները և օգտագործեին երեք ազատված կապում հետևյալ կերպ.

  • D1 ազդանշանային ազդանշանի համար (որը նույնպես միացված է անմիջապես 5VDC սնուցման աղբյուրին)
  • D7 սպիտակ ինտերիերի LED- ի համար
  • D8 այն լուսավորող գունավոր LEDS- ներից մեկի համար, որը ես անվանել եմ «դիսկոտեկ» լույս

Բզզոցն ինքնին կոկիկ կերպով խցկվում է շարժիչի խցիկի տակ, այնպես որ լարերը հետ վերադարձնելը դեպի NodeMCU արագընթաց էր:

Քայլ 3: Թարմացնել GUI- ը

GUI- ի թարմացում
GUI- ի թարմացում
GUI- ի թարմացում
GUI- ի թարմացում
GUI- ի թարմացում
GUI- ի թարմացում

GUI- ի թարմացման առաջին քայլը չորս առանձին վեբ էջերի ստեղծումն էր.

  • «Splash screen», որը գործարկվում է ձեր սմարթֆոնի անհատական պատկերակի միջոցով և հղումներ դեպի այլ էջեր
  • «Վերահսկում» էջը, որը, լավ, վերահսկում է լույսերը (և այժմ, իհարկե, եղջյուրը)
  • «Խաղ» էջը
  • Կարգավորման էջ, որը պարունակում է կազմաձևման ընտրանքներ, ինչպիսիք են ՝

    • Ձայնը միացնելը և անջատելը
    • Timeամային գոտու սահմանում (Mini- ն ժամանակ է ստանում ինտերնետից, որպեսզի կարողանա ժամին իր լույսերը միացնել համապատասխան ժամին)
    • Կարգավորումը, երբ «ավտոմատ լույսերը» միացնեն և անջատեն լուսարձակները ՝ ելնելով շրջակա լույսի մակարդակից
    • Բարձր միավորի և բարձր միավորի անվան վերականգնում (պահվում է EEPROM- ում)

Այս կերպ գործառույթները առանձնացնելը շատ ավելի նման ծրագրերի փորձ է ստեղծում: Մի քանի էջ սպասարկելու NodeMCU- ն այս ծրագրի մարտահրավերներից մեկն էր: Մի քանի տարբեր մոտեցումներ փորձելուց հետո ես հանդիպեցի այն կոդը, որը տեսնում եք Arduino- ի հիմնական ուրվագծի 232 -ից 236 -րդ տողերում: Սա հիանալի է աշխատում. Պարզապես ստեղծեք ձեր ինդեքսի ֆայլը, այնուհետև անվանեք հաջորդ էջերի էջ 1, էջ 2 և այլն: այս չափը:

Հաջորդը, ես ստիպված էի աշխատել CSS- ի և Javascript- ի հետ `այնպիսի բան պատրաստելու համար, որը կարծես թե պատկանում էր Lego Mini- ին: Քանի որ ես ոչ մի բանի մասին ոչ մի բանի մասին չգիտեմ, այստեղ շատ գուգլներ էին կատարվում, նախքան այն, ինչից գոհ էի: Ես սկսեցի անամոթաբար CSP ոճով լեգո աղյուսի պատճենումը CodePen- ում այստեղ: Ես նաև ուզում էի հեռանալ կոճակները տեքստով պիտակավորելուց և վերջացնել Icons8- ի պարզ գրաֆիկայի օգտագործմամբ, որոնք կատարյալ էին իմ նպատակների համար: Մնացածը տեղում ընկավ տեղում: Էջերը բավականին լավ են մատուցվում այն բոլոր iPhone- ներում, որոնցում ես դրանք փորձարկել եմ: Հուսով եմ, որ նույնը վերաբերում է նաև Android հեռախոսներին (լավ է թվում աշխատասեղանի Chrome դիտարկիչում):

Քայլ 4: Խաղի կոդը

Խաղի կոդը
Խաղի կոդը

NodeMCU սերվերի և սմարթֆոնների զննարկչի միջև հաղորդակցությունը կայքերի վեբ կայքերի միջոցով է: Օգտագործողի կողմից կոճակը սեղմելուց հետո դիտարկիչը տեքստային նիշ է ուղարկում NodeMCU- ին, որը համապատասխանում է Mini- ի մեկ կամ մի քանի լուսարձակին: Լրացուցիչ նիշեր են ուղարկվում ՝ խաղի հոսքը վերահսկելու համար: Arduino ծածկագիրն այնուհետև գործողություններ է կատարում ՝ հիմնվելով ստացված կերպարի վրա: Վեբ -տուփի հաղորդակցությունը կարող է կարգավորել միայն երկուական և տեքստային նիշեր, այնպես որ որոշակի փոփոխություններ են անհրաժեշտ ամբողջ թվերի համար (օրինակ ՝ ժամային գոտի):

Ինչպես նշեցի, ես ի սկզբանե կանխատեսել էի, որ կապակցված Hackster նախագծի ծածկագիրը կօգտագործեի հիմնական խաղի գործառույթների համար: Այն, ինչ ես ակնկալում էի, որ տեղի կունենա, այն է, որ խաղացողը կոճակը սեղմելուց հետո լուսավորվի համապատասխան LED- ը, և ծածկագիրը թվայնացնեն: Կարդացեք բոլոր LED- ները `տեսնելու, թե արդյոք ճիշտը լուսավորված է (Hackster նախագիծը ստուգում է կոճակի ֆիզիկական մուտքերը, բայց դա նույն գաղափարն է): Սա ինչ -որ կերպ աշխատեց, բայց ինձ համար դեռ անհասկանալի պատճառներով, ոչ կատարյալ: Theամանակի մոտ 10% -ը Mini- ն ասում էր, որ սխալ կոճակը սեղմված է, երբ, ըստ էության, ճիշտ էր: Ամեն ինչ կարգին թվաց ՝ հիմնվելով այն բանի վրա, ինչ ես տեսնում էի սերիական մոնիտորում և զննարկիչի վահանակում, այնպես որ ես գաղափար չունեմ, թե ինչու դա չաշխատեց:

Սխալների ստուգում մտցնելուց շատ անհաջողություններից հետո ես հրաժարվեցի LED- ի վիճակները կարդալու ամբողջ գաղափարից և ստեղծեցի «պատասխան» զանգված, որը ստուգում է, թե արդյոք ստացված Websocket տեքստը համապատասխանում է «հաջորդականության» զանգվածում պահված ճիշտ քորոցին: նվագում է հիշելու թեթև հաջորդականությունը: Թվում է, թե սա 100% հուսալի է, նույնիսկ եթե իմ կիրառած ձևը մի փոքր թուլամորթ է: Այս մեթոդը մշակելուց հետո ես պատահեցի դրան, ինչը հետաքրքիր ուսումնասիրություն է որոշ թվային կողպեքների աշխատանքի եղանակի և խաղի մեջ օգտագործվող մոտեցման նմանությամբ:

Կոճակների մուտքագրման ժամանակը այժմ մշակվում է Javascript- ով ՝ դիտարկիչի կողմից (կոճակի մուտքերի միջև թույլ եմ տալիս շատ առատաձեռն 10 վայրկյան), և խաղի ընթացքն այժմ ամբողջությամբ վերահսկվում է խաղացողի կողմից, այլ ոչ թե կոդավորված: Displayուցադրումը ներառում է պատուհաններ, որոնք ցույց են տալիս հաջորդ կոճակը սեղմելու համար մնացած ժամանակը և խաղացողի կողմից հաջորդականությունը ճիշտ ներկայացնելուց առաջ մնացած մուտքերի քանակը:

Բարձր գնահատականը պահվում է EEPROM- ում (կամ այն, ինչ EEPROM- ի դեպքում անցնում է ESP8266 աշխարհում): Այս արժեքները կարող են վերականգնվել Set-up էջի միջոցով (վստահ եմ, որ դրա համար կարող են լինել օրինական պատճառներ):

Այս ամենով հանդերձ, ես նորից օգտագործեցի Hackster խաղային ծածկագրի արժանապատիվ մի կտոր, ինչը շատ արագացրեց գործը:

Քայլ 5: Մնացած օրենսգիրքը

Մնացած օրենսգիրքը
Մնացած օրենսգիրքը

Համեմատած Hackster նախագծի կոդի հետ, իմ Arduino էսքիզը հսկայական տեսք ունի, նույնիսկ առանց տվյալների ֆայլերում առկա բոլոր HTML- ի, CSS- ի և Javascript- ի: Բայց էսքիզների հիմնական մասը մի շարք գործառույթներ են, որոնք վերաբերում են հիմնական գործողություններին, ինչպիսիք են սերվերի ստեղծումը և կառավարումը, NTP ժամանակի ստացումը, mDNS- ը, ապահովումը օդային թարմացմամբ, WiFi- ի կառավարումը, SPIFFS ֆայլերի կառավարումը և այլն:

Javascript- ը HTML ֆայլերում առաջին հերթին նախատեսված է վեբ տուփի հաղորդագրությունների (ստացված և ուղարկված) մշակման և GUI- ի ինտերակտիվության բարձրացման համար:

Ինչպես նշեցի, ես ցանկանում էի բարելավել «ավտոմատ լույսեր» գործառույթի գործառույթը, որն օգտագործում է լույսից կախված դիմադրություն NodeMCU- ի միակ անալոգային քորոցի վրա `շրջապատի լույսը հայտնաբերելու և Mini- ի լույսերը միացված մակարդակի վրա (երբ խաղային ռեժիմում չէ) միացնելու համար:, իհարկե). Թեև սա անլուրջ նախագծի անլուրջ հատկություն է, ինձ անհանգստացրեց, որ սկզբնական նախագծում ես կոդով կոդավորված էի միացման շեմը, և որ օգտագործողը ոչ մի կերպ չէր կարող տեսնել, թե ինչպես է գերակշռող լույսի մակարդակը կապված այդ շեմի հետ: Այժմ լուսային մակարդակի ընթերցումը ուղարկվում է Կարգավորման էջ յուրաքանչյուր հինգ վայրկյանը մեկ, և այդ էջում ցուցադրվում են միացման և անջատման ընթացիկ շեմերը (որոնք կարող է կազմաձևվել օգտվողի կողմից): Այսպիսով, աշխատանքը կատարվեց այդ մեկի վրա:

Օ,, գրեթե մոռացել եմ: Կոդն այստեղ GitHub- ում է: Ներբեռնելուց հետո ամբողջ փաթեթը դրեք նոր թղթապանակի մեջ, վերբեռնեք Arduino էսքիզը, այնուհետև տվյալների թղթապանակի բովանդակությունը SPIFFS- ում:

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