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

Ալգորիթմի մեքենա. 13 քայլ (նկարներով)
Ալգորիթմի մեքենա. 13 քայլ (նկարներով)

Video: Ալգորիթմի մեքենա. 13 քայլ (նկարներով)

Video: Ալգորիթմի մեքենա. 13 քայլ (նկարներով)
Video: 10 ՄԵՔԵՆԱ ՈՐՈՆՔ ՈՒՂՂԱԿԻ ՉԵՆ ՓՉԱՆՈՒՄ║ԱՄԵՆԱԲԱՐՁՐ ՎԱԶՔ ՈՒՆԵՑՈՂ ՄԵՔԵՆԱՆ 2024, Հուլիսի
Anonim
Image
Image
LED բար. 3D տպել դիմակը
LED բար. 3D տպել դիմակը

Ես քոլեջի մակարդակով համակարգչային գիտություն եմ դասավանդում 15 տարի, և չնայած իմ մասնագիտությունն ավելի շատ ծրագրավորման կողմն է, ես դեռ բավականին ժամանակ եմ ծախսում որոնման և տեսակավորման ստանդարտ ալգորիթմների լուսաբանման վրա: Ուսուցման տեսանկյունից կենտրոնական խնդիրը հաշվողական բարդությունն է. Որքա՞ն ժամանակ է պահանջում յուրաքանչյուր ալգորիթմ ՝ հաշվի առնելով որոշակի չափի մուտքագրումը: Բայց կան բազմաթիվ նրբերանգներ: Օրինակ, արդյոք ալգորիթմները տարբեր գործարկման ժամանակ ունե՞ն ՝ կախված կոնկրետ մուտքային արժեքներից (ի տարբերություն չափի): Ո՞ր դեպքերում կընտրեիք տեսակավորման մեկ ալգորիթմ մյուսի փոխարեն: Չնայած մենք այս հարցերը վերացական ենք քննարկում, ինձ միշտ անհանգստացնում էր այն, որ չկար հեշտ միջոց ՝ տեսնելու, թե ինչպես են տարբեր ալգորիթմներ աշխատում տարբեր պայմաններում:

Գոլեր

Այս նախագծի իմ գերակա նպատակն էր ստեղծել ինտերակտիվ ցուցադրում ուսանողների համար ՝ պատկերելու և ուսումնասիրելու ալգորիթմները: Ես սահմանափակվեցի ալգորիթմներով, որոնք աշխատում են արժեքների զանգվածների վրա (ամբողջ թվեր), այնպես որ կարող եմ օգտագործել հասցեավորվող RGB LED ժապավեն `զանգվածի բովանդակությունը պատկերացնելու համար: Theանգվածն ունի 100 տարր, և յուրաքանչյուր ամբողջ թիվ քարտեզագրվում է ծիածանի կարգի գույնի վրա, այնպես որ անմիջապես ակնհայտ է դառնում, երբ զանգվածը տեսակավորվում է, մասամբ դասակարգվում կամ պատահականացվում: Ի հավելումն արժեքների, այնուամենայնիվ, ես ուզում էի միջոց գտնել ալգորիթմի կառավարման ասպեկտները, օրինակ `զանգվածի որ տարրերն են այժմ համեմատվում կամ փոխանակվում:

Հատուկ նպատակներն են.

- Տրամադրել որոնման և տեսակավորման տարբեր ալգորիթմներ

- Պատկերացրեք զանգվածի արժեքները այնպես, որ կարևորվի ալգորիթմի առաջընթացը

- Պատկերացնել ալգորիթմի հսկողությունը; մասնավորապես, դիտարկվող տարրերը:

- Թույլ տվեք օգտվողներին ընտրել մուտքային տվյալների օրինակները, այլ ոչ թե միշտ առաջացնել պատահական արժեքներ

- Թույլ տվեք օգտվողներին վերահսկել արագությունը և դադարեցնել ալգորիթմը

-Թույլ տվեք օգտվողներին պարտադրել լավագույն դեպքում, վատագույն դեպքում, միջին դեպքերի վարքագիծ (հատուկ ալգորիթմի համար)

- Ալգորիթմի ընթացքի ընթացքում ցույց տվեք քայլերի քանակը

Տեսողականացում

Ֆիզիկական դիզայնի տեսանկյունից այս նախագծի ամենահետաքրքիր մասը զանգվածի արտացոլումն է: Ես պայքարում էի, թե ինչպես ցուցադրել տվյալները և վերահսկողությունը և ինչպես ինքնուրույն կառուցել ցուցադրման սարքը: Իմ նպատակն էր ցույց տալ տվյալների արժեքները որպես գունավոր շրջանակներ և կառավարման կետերը `որպես գունավոր սլաքներ, որոնք մատնանշում են տվյալների արժեքները: Որոշ փորձարկումներից հետո ես հաստատվեցի 100 RGB LED- ների (WS2812) երկու զուգահեռ շերտերով դիզայնով ՝ յուրաքանչյուր տվյալների LED- ի վրա շրջանաձև դիմակով և յուրաքանչյուր կառավարման LED- ի վրա եռանկյուն դիմակով: Ես պատրաստեցի դիմակի 3D մոդել `10 զույգ շրջանակներով և եռանկյուններով, այնուհետև 3D- ով տպեցի այս մոդուլներից 10 -ը` ընդհանուր 100 շրջանակների և 100 եռանկյունների համար: Իմ դիմակի չափը և տարածությունը նախատեսված են մետրի համար 100 LED- ով շերտերի համար: 3D մոդելի ֆայլերը ներկայացված են այս նկարագրության մեջ ավելի ուշ:

Էլեկտրոնիկա և պարիսպ

Մնացած սարքը պարզ է ՝ էլեկտրոնիկայի տեսանկյունից: Բացի LED- ի երկու ժապավեններից, կան մի քանի վայրկյանական կոճակներ, պտտվող կոդավորիչ (արագության կառավարման համար) և 7 հատվածի էկրան (քայլերը ցույց տալու համար): Այսքան կոճակներով և հսկիչներով ես որոշեցի օգտագործել ESP32 միկրոկոնտրոլերը, քանի որ այն շատ քորոցներ է բացահայտում, և քանի որ այն բավականին հզոր է: Ես կանցնեմ էլեկտրագծերի ռազմավարությունը, բայց դա բավականին հիմնական է: Հավանաբար, դուք կարող եք խելացի բան անել հերթափոխի գրանցամատյաններով, եթե ցանկանում եք ավելի քիչ կապ օգտագործել:

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

Ծրագրային ապահովում

Այս սարքի ծածկագիրն ազատորեն հասանելի է GitHub- ում, և ես ամեն ինչ արել եմ ՝ փաստաթղթավորելու, թե ինչպես է այն աշխատում և ինչպես կարգավորել այն: Միակ արտաքին գրադարանը, որն անհրաժեշտ է, FastLED է WS2812 շերտերը քշելու համար:

Պարագաներ

Էլեկտրոնիկա

1 ESP32 զարգացման տախտակ (օրինակ ՝

2 WS2812 կամ նման LED շերտ, խտություն 100 LED մեկ մետրի համար (օրինակ ՝

1 եռանկյունու «մեկնարկ» կոճակ (օրինակ ՝

12 ակնթարթային կոճակներ (օրինակ ՝ https://amzn.com/B01N4D4750) - տարբեր ձևեր, եթե ցանկանում եք

1 փաթեթ (20) նախալարված կոճակների միակցիչներ (օրինակ ՝

1 փաթեթ JST միակցիչ (օրինակ ՝

1 Պտտվող կոդավորիչ (օրինակ ՝

1 գլխիկ պտտվող կոդավորիչի համար (օրինակ ՝

1 փաթեթ Dupont միակցիչներ (օրինակ ՝ https://amzn.com/B014YTPFT8) - արժե ձեռք բերել նաև ծալման գործիք:

1 տակառ (ուժի համար) (օրինակ ՝

1 TM1637 7 հատվածի թվային ցուցադրում (օրինակ ՝

Sոդման և էլեկտրագծերի հանդերձում

3D մոդելի ֆայլեր

Դուք կարող եք գտնել 3D մոդելը զույգ 10 լույսի մոդուլների համար Thingiverse- ում.

www.thingiverse.com/thing:4178181

Դուք պետք է տպեք այս մոդելը հինգ անգամ `ընդհանուր 10 մոդուլների համար:

Ծրագրային ապահովում

github.com/samguyer/AlgorithmMachine

Պարիսպ

Փայտ, պլեքսիգլաս, չժանգոտվող պողպատից պտուտակներ և պտուտակներ

Դիֆուզիոն նյութ: Իմ ամենասիրելին Lee Filters #216 լրիվ սպիտակ դիֆուզիոն է, բայց կան այլ տարբերակներ: Նույնիսկ պարզ սպիտակ թուղթը լավ աշխատանք է կատարում:

Քայլ 1: Ալգորիթմներ 101

Շատերը կարծում են, որ համակարգչային գիտությունն ըստ էության ծրագրավորման ուսումնասիրություն է: Բայց այս ոլորտի իրական սիրտն ու հոգին ալգորիթմներն են `խնդիրների լուծման համակարգված ընթացակարգերի և դրանց արժեքի ուսումնասիրությունը (սովորաբար, որքան են դրանք տևում): Ոլորտի կարևոր գործիչները, ինչպես Ալան Թյուրինգը, Ալոնզո Չերչին և Էդսգեր Դեյկստրան, մտածում էին այս գաղափարների մասին նախքան համակարգիչները, ինչպես մենք գիտենք, դրանք գոյություն ունեին:

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

Որքան ժամանակ դա կպահանջի?

Երբ մենք ունենանք մանրամասն ընթացակարգ, բնական հարցն այն է, թե որքան ժամանակ կպահանջվի պատասխանը ստանալու համար: Մենք չենք կարող ժամանակի սովորական միավորներ օգտագործել, քանի որ դա կախված է նրանից, թե ով է կատարում աշխատանքը (համեմատեք, թե որքան արագ մարդը կարող է ինչ -որ բան հաշվարկել ՝ ընդդեմ գերհամակարգչի): Բացի այդ, դա կախված է նրանից, թե որքան տվյալներ ունենք: Ակնհայտ է, որ միլիոն հեռախոսահամարների ցանկը փնտրելն ավելի երկար է տևում, քան հարյուրինը:

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

Օրինակ, N հեռախոսահամարների ցանկը դիտելը տանում է N քայլ: Twiceանկը երկու անգամ դիտելը տանում է 2N քայլ: Այս երկուսն էլ կոչվում են գծային ժամանակի ալգորիթմներ. Քայլերի ընդհանուր թիվը մուտքային չափի որոշ բազմապատիկ է: Այլ ալգորիթմներն են քառակուսի (N քառակուսի ժամանակ) կամ խորանարդ (N խորանարդ) կամ լոգարիթմական (տեղեկամատյան N) կամ դրանց մի քանի համադրություն: Որոշ ամենադժվար հաշվողական խնդիրներից պահանջվում է ժամանակի ցուցադրական ալգորիթմներ (2^N):

Լավ, ուրեմն ինչ?

Երբ N տարրերի թիվը փոքր է, դա մեծ նշանակություն չունի: Օրինակ, N = 10 -ի դեպքում 10N- ն այդ անունն է որպես N քառակուսի: Բայց ինչ վերաբերում է N = 1000 -ին: կամ N = 1000000? Միլիոն քառակուսին բավականին մեծ թիվ է: Նույնիսկ շատ արագ համակարգչի վրա քառակուսի ալգորիթմը կարող է երկար տևել, եթե մուտքը բավականաչափ մեծ է: N = 50 -ի համար երկրաչափական ալգորիթմին երկու շաբաթ կպահանջվի, եթե N = 50 -ը ավարտվի նույնիսկ համակարգչով, որտեղ յուրաքանչյուր քայլ ընդամենը մեկ նանոսեկունդ է (1 միլիարդերորդ վայրկյան): Օuհ

Սանդղակի մյուս ծայրում մենք ունենք լոգարիթմական ժամանակի ալգորիթմներ, որոնք շատ արագ են: Մուտքի ժամանակը հակառակն է ցուցիչ ժամանակի. Հաշվի առնելով մուտքի չափը N, քայլերի քանակը ցուցիչ T- ն է 2^T = N. բանաձևում: Օրինակ, եթե մեր մուտքի չափը մեկ միլիարդ է, ապա գրանցման ժամանակի ալգորիթմը պահանջում է ընդամենը 30 քայլեր, քանի որ 2^30 = 1, 000, 000, 000. Որքա՞ն քաղցր է դա:! ??!

Ձեզ կարող է հետաքրքրել, ո՞ւմ են հետաքրքրում միլիոնավոր կամ միլիարդավոր մուտքերի չափերը: Մտածեք դրա մասին. Քանի՞ օգտվող կա Facebook- ում: Քանի՞ վեբ էջ է ինդեքսավորվում Google- ի կողմից: Քանի՞ բազային զույգ կա մարդու գենոմում: Քանի՞ չափում է կատարվում եղանակային մոդելավորման մեջ:

Քայլ 2: Ալգորիթմներ

Ալգորիթմների մեքենան ներկայումս իրականացնում է հետևյալ ալգորիթմները: Դրանցից երկուսը որոնման ալգորիթմներ են (գտեք ցանկում որոշակի արժեք), մնացածը տեսակավորման ալգորիթմներ են (արժեքները կարգի բերեք):

Գծային որոնում

Սկզբից սկսած մեկ առ մեկ փնտրեք արժեքների ցանկը: Պահանջում է գծային ժամանակ:

Երկուական որոնում

Որոնեք ցուցակ ՝ բազմիցս կիսելով այն կիսով չափ: Պահանջում է գրանցման ժամանակ, սակայն ցանկը պետք է տեսակավորված լինի, որպեսզի այն աշխատի:

Փուչիկների տեսակավորում

Տեսակավորել ցանկը ՝ բազմիցս փոխանակելով հարևան տարրերը, որոնք կարգին չեն: Պահանջում է քառակուսի ժամանակ:

Տեղադրման տեսակավորում

Տեսակավորել ցանկը `յուրաքանչյուր տարր տեղադրելով իր համապատասխան տեղում արդեն դասավորված արժեքների ցանկում: Պահանջում է քառակուսի ժամանակ:

Արագընթաց

Տեսակավորեք ցուցակը ՝ ցանկը բազմիցս կիսելով կիսով չափ և միջինից պակաս բոլոր արժեքները տեղափոխելով առաջին կես, իսկ միջինից մեծ բոլոր արժեքները ՝ երկրորդ կես: Գործնականում մենք չենք կարող արդյունավետ գտնել միջինը, ուստի մենք պատահականորեն ընտրում ենք արժեքը: Արդյունքում, այս ալգորիթմը վատագույն դեպքում կարող է լինել քառակուսի, բայց սովորաբար պահանջում է N * logN ժամանակ:

Միավորել տեսակավորումը

Տեսակավորեք ցուցակը ՝ այն կիսելով կիսով չափ, երկու կեսերը առանձնացնելով առանձին (օգտագործելով միաձուլման տեսակավորումը), այնուհետև դրանք միաձուլելով ՝ արժեքները միահյուսելով: Միշտ պահանջում է N * logN ժամանակ:

Կույտ տեսակավորում

Տեսակավորել ցուցակը ՝ կառուցելով տվյալների կառուցվածք, որը կոչվում է կույտ, ինչը թույլ է տալիս գտնել գրանցման ժամանակի ամենափոքր արժեքը: Միշտ պահանջում է N * logN ժամանակ:

Բիտոնիկ տեսակավորում

Տեսակավորման և արագացման միաձուլման նման, ցուցակը կիսեք կիսով չափ, տեսակավորեք կեսերը և նորից միացրեք դրանք: Այս ալգորիթմը պահանջում է N * logN * logN ժամանակ, սակայն ունի առավելություն, որ հեշտ է զուգահեռել:

Քայլ 3. LED բար. 3D տպել դիմակը

LED բար. 3D տպել դիմակը
LED բար. 3D տպել դիմակը
LED բար. 3D տպել դիմակը
LED բար. 3D տպել դիմակը

LED բարը կառուցելու առաջին քայլը դիմակի 3D տպումն է, որը լույսերին տալիս է իրենց ձևը: Յուրաքանչյուր մոդուլ ընդգրկում է զանգվածի տասը տարր, 10 արժեք (շրջան) և 10 ցուցիչ (եռանկյուն), այնպես որ ձեզ ընդհանրապես անհրաժեշտ կլինի 10 մոդուլ: STL ֆայլը, որը ես տրամադրում եմ այստեղ, պարունակում է մոդուլի երկու օրինակ, ուստի ձեզ հարկավոր է կատարել տպման հինգ ցիկլ: Ես չունեմ ամենալավ 3D տպիչը, ուստի ես ստիպված էի դրանք ձեռքով մաքրել ՝ օգտագործելով ֆայլ և հղկաթուղթ: Ամենակարեւորն այն է, որ շրջանաձեւ եւ եռանկյունաձեւ անցքերը մաքուր լինեն:

Լուսանկարներում դուք կտեսնեք իմ փորձարկման կարգավորումը. Ես երկու LED ժապավենները կպցրի ներքև և դրանք միակցեցի միկրոկոնտրոլերով հացահատիկի վրա: Այս քայլը պարտադիր չէ, բայց ես ուզում էի տեսնել, թե ինչ տեսք կունենա այն, մինչև որ սկսեմ պարիսպի հավաքումը: Երկու LED շերտի վրա շարեցի դիմակի մոդուլները և պատահական գույներով պարզ ուրվագիծ արեցի: Դիֆուզիոն նյութի շերտով ձևերն ու գույներն իսկապես հայտնվում են:

Քայլ 4: LED բարերի այլընտրանքներ

LED բարերի այլընտրանքներ
LED բարերի այլընտրանքներ
LED բարերի այլընտրանքներ
LED բարերի այլընտրանքներ
LED բարերի այլընտրանքներ
LED բարերի այլընտրանքներ

Երբ ես առաջին անգամ սկսեցի այս նախագիծը, ես փորձարկեցի LED դիմակ պատրաստելու այլ եղանակներ: Եթե դուք չունեք 3D տպիչ, կարող եք դիտարկել այս տարբերակներից մեկը: Անկեղծ կլինեմ. Ահագին ցավ է այս հատվածները պատրաստելը:

Շրջանակների համար ես գնեցի 13/32 փողային խողովակ, որը գրեթե ուղիղ 1 սմ տրամագծով: Ես այն կտրեցի հարյուր 1 սմ հատվածների, այնուհետև սփրեյով ներկեցի դրանք սպիտակ:

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

Քայլ 5: LED բարերի պարիսպ

LED բար պատյան
LED բար պատյան
LED բար պատյան
LED բար պատյան
LED բար պատյան
LED բար պատյան

Իմ պարիսպը բավականին պարզ է. Փայտի երկու շերտ կողքերի համար և երկու շերտ պլեքսիգլաս `վերևի և ներքևի մասերի համար: Բոլոր մասերի երկարությունը մոտ 102 սմ է (1 մետր LED- ների համար, գումարած մի փոքր ավելին `էլեկտրագծերի տեղադրման համար): Կողքերը պետք է մի փոքր բարձր լինեն 1 սմ -ից, որպեսզի տեղ ունենան LED շերտերի համար: Շերտերը կտրելուց հետո ես նրանց միջև դրեցի 3D տպված դիմակի կտորներ `պլեքսիգլասի լայնությունը չափելու համար: Կտրեք պլեքսիգլասի երկու կտոր ձողի լայնությամբ և երկարությամբ: Ի վերջո, կտրեք դիֆուզիոն նյութի մի շերտ, որը տեղավորվում է դիմակի վրա:

Դիֆուզիայի համար ես իսկապես սիրում եմ Lee Filters #216 (ամբողջական սպիտակ դիֆուզիոն): Այն բարակ պլաստիկ թերթ է, որը տալիս է նույնիսկ դիֆուզիոն ՝ առանց շատ լույս կորցնելու: Բայց դա թանկարժեք իրեր են: Երբեմն առցանց վաճառքի համար կարող եք գտնել ավելի փոքր սավաններ, բայց մի ամբողջ գլանափաթեթը ձեզ մոտ $ 125 հետ կբերի: Որոշ այլ տարբերակներ են `սպիտակ թուղթ կամ ցանկացած այլ տեսակի ատլասե կամ ցրտահարված պլաստիկ: Հանրաճանաչ ընտրությունը բարակ պլաստիկ կտրող գորգերն են:

Նախքան LED բարը հավաքելը, համոզվեք, որ ունեք համապատասխան միակցիչներ, որոնք զոդված են LED շերտերին: Շատ շերտեր գալիս են նախապես զոդված կապանքներով, այնպես որ կարող եք դրանք պարզապես օգտագործել:

Ես հավաքը սկսեցի ՝ պլեքսիգլասի վերին կտորը փայտե կողքերով պտուտակելով (տես լուսանկարը): Հետո այն շրջեցի և տեղադրեցի դիֆուզիոն շերտը, որին հաջորդեցին դիմակի 10 կտորները: Երբ ես գոհ էի տարածությունից, ես դրանք ամրացրեցի մի քանի կետ տաք սոսինձով:

Հաջորդը, երկու LED շերտերը կողք կողքի դրեք դիմակների վերևում: Համոզվեք, որ LED- ները ուղղված են դեպի ներքև և համոզվեք, որ յուրաքանչյուր LED գծված է դիմակի համապատասխան անցքով: Ավելացրեք տաք սոսինձ կամ ժապավեն ՝ LED շերտերն իրենց տեղում պահելու համար: Ի վերջո, պտուտակավորեք պլեքսիգլասի հետևի կտորը:

Գործարկեք փորձարկման օրինակ: Հաճելի աշխատանք: Դուք արել եք ամենադժվար մասը:

Քայլ 6: Կառավարման վահանակ

Կառավարման վահանակ
Կառավարման վահանակ
Կառավարման վահանակ
Կառավարման վահանակ
Կառավարման վահանակ
Կառավարման վահանակ
Կառավարման վահանակ
Կառավարման վահանակ

Կառավարման վահանակը այն մասն է, որն ապահովում է առավել ստեղծագործական ազատություն: Այն պարզապես պետք է պահի բոլոր հսկիչներն ու էլեկտրոնիկան ՝ LED սանդղակի հետ միասին: Ամենապարզ դիզայնը ուղղանկյուն տախտակներ են. Կոճակների և կառավարման վահանակների համար անցքեր պատրաստեք և ամրացրեք LED բարը: Ես սիրում եմ համատեղել փայտը, պլեքսիգլասը և այլ նյութեր `մի տեսակ steampunk / retro-modern տեսք հաղորդելու համար: Այս դեպքում ես կտրեցի ծանր պլեքսիգլասի մի կտոր ՝ հիմնական ալգորիթմի ընտրության կոճակները պահելու համար, և փայտե ձող ՝ մնացած էլեկտրոնիկայի համար: Ես անցքեր եմ բացել, որպեսզի համապատասխանեն արկադային կոճակների չափին: Էլեկտրագծերը հետևում են, բայց ինձ դուր է գալիս:

Ես նաև տարածություն եմ բացել 7 հատվածի ցուցադրման, պտտվող կոդավորիչի և հետևի մի քանի էլեկտրագծերի համար: Ես կտրեցի մի դադո վերևում ՝ LED բարը պահելու համար:

Քայլ 7: Կոճակի ամրացում

Button Harness
Button Harness
Button Harness
Button Harness
Button Harness
Button Harness

Շատ կոճակներ լարերը կարող են իսկական ցավ պատճառել: Բարեբախտաբար, արկադային մեքենաներ պատրաստող մարդիկ եկել են մի քանի ստանդարտ միակցիչների, որոնք կարող եք օգտագործել: Յուրաքանչյուր կոճակի միակցիչ մալուխ ունի երկու լար `մեկը VCC- ի և մեկը` գետնի համար: Մի ծայրն ունի բահի միակցիչներ, որոնք տեղավորվում են կոճակի հետևի տողերում `ամրացնելով գետինը« սովորաբար բաց »կապարին, իսկ VCC- ն` «ընդհանուր» հաղորդալարին: Այս կազմաձևում, երբ օգտվողը սեղմում է կոճակը, միացումն ավարտված է, և միկրոկոնտրոլերը համապատասխան մուտքի քորոցի վրա կկարդա HIGH:

Մալուխի մյուս ծայրն ունի JST միակցիչ (փոքրիկ սպիտակ իրը): Այս միակցիչների մեջ հաճելի է այն, որ նրանք միայն մի կերպ են մտնում պահարանի մեջ, այնպես որ պատահականորեն VCC- ն և գետնին հակադարձելու միջոց չկա:

Այն, ինչ ես արեցի, մի փոքր զրահ կառուցելն էր այս միակցիչների համար: Ես JST- ի մի շարք տարաներ կպցրեցի նախատախտակի մի կտորի վրա, այնուհետև լարերը հետ ուղարկեցի Dupont միակցիչներին, որոնք միացնելու եմ միկրոկոնտրոլերի վրա: Կարմիր մետաղալարը VCC գիծ է, և այն միանում է JST- ի բոլոր պահարաններին: Կապույտ լարերն այն կոճակների համար առանձին են:

Քայլ 8: Պտտվող կոդավորիչ

Պտտվող կոդավորիչ
Պտտվող կոդավորիչ

Պտտվող ծածկագրիչը թույլ է տալիս օգտվողին վերահսկել ալգորիթմի արագությունը: Ես օգտագործում եմ մոդուլ, որը գալիս է որպես ճեղքման տախտակ, որը ներառում է երկու տվյալների տողերի համար քաշվող դիմադրիչներ (դեղին լարեր): Այս մեկը նույնպես պատահաբար կոճակ է, բայց ես չեմ օգտագործում այդ հնարավորությունը: Մյուս երկու լարերը VCC են և հող: Ես նաև մի գեղեցիկ ճարպ բռնիչ ստացա:

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

Քայլ 9: 7 հատվածի ցուցադրում

7 հատվածի ցուցադրում
7 հատվածի ցուցադրում

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

Հետեւի մասում կա չորս կապում `VCC, հող եւ երկու լար` սերիական արձանագրության համար: Ես զոդեցի 4 պինանի վերնագրի կտոր, որը միանում է միկրոկոնտրոլերին միացված համապատասխան Dupont միակցիչին:

Քայլ 10: Հիմնական վերահսկիչ խորհուրդ

Հիմնական վերահսկիչ խորհուրդ
Հիմնական վերահսկիչ խորհուրդ
Հիմնական վերահսկիչ խորհուրդ
Հիմնական վերահսկիչ խորհուրդ
Հիմնական վերահսկիչ խորհուրդ
Հիմնական վերահսկիչ խորհուրդ

Հիմնական կառավարման վահանակում տեղակայված է միկրոկառավարիչը և կառավարման միացման բոլոր միակցիչները (կոճակներ, էկրան, լուսադիոդներ): Միկրոկոնտրոլերը ESP32 է, որն ապահովում է մեծ հաշվողական հզորություն և հիշողություն և բացահայտում է բազմաթիվ կապում: Էլեկտրագծերը բավականին ստանդարտ են, բայց ես նշեմ մի քանի հետաքրքիր բիթ:

EԱՆՈԹՈ:ԹՅՈՆ. Հնարավոր է, որ նախքան հիմնական տախտակի լարերը միացնելը, նայեք ծածկագրին (https://github.com/samguyer/AlgorithmMachine), որպեսզի ձեր կապի կոնֆիգուրացիան համապատասխանի իմին:

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

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

ԿԱՐԵՎՈՐ. Կոճակների (կարմիր մետաղալարերի) հոսանքը պետք է միացված լինի միկրոկառավարիչի 3.3V հոսանքի գծին: ESP32- ը 3.3 Վ չիպ է, այնպես որ տվյալների պիներին պետք է կցվեն միայն 3.3 Վ աղբյուրներ:

Միկրոկոնտրոլերը ուժը (կամ ուժը մղում է) դեպի ռելսեր (տախտակի ստորին կողմը, ինչպես ցույց է տրված) 5V USB կապի և գետնի միջոցով: Մնացած բոլոր կարմիր/սև լարերը VCC են և հիմնավորված:

Երկու կապույտ լարերը LED գծերի (WS2812s) տվյալների գծերն են:Դեղին/կանաչ զույգը պտտվող կոդավորիչի տվյալների տողերն են, իսկ դեղին զույգը ՝ 7 հատվածի ցուցադրման սերիական կապը:

Քայլ 11: Հավաքում

Ժողով
Ժողով
Ժողով
Ժողով
Ժողով
Ժողով
Ժողով
Ժողով

Այս լուսանկարների շարքը ցույց է տալիս վերջնական հավաքումն ու էլեկտրագծերը: Ես նաև կցեցի հիմնական վերահսկիչի տախտակը հետևի մասում ՝ վերևում:

Նախքան այն միացնելը, ես մի քանի ստուգում կատարեցի, որպեսզի խուսափեմ տհաճ անակնկալներից: Մասնավորապես, համոզվելու համար, որ ես չունեմ հոսանքի/հողակցման միակցիչներ հետընթաց, և ոչ մի կարճ միացում: Ձեր բազմիմետրը սահմանեք շարունակականության ստուգման համար, այն ազդանշան կհնչի, երբ երկու հոսանքի միջև էլեկտրական ուղի լինի: Կոճակներին ամրացրեք մեկ ուղեցույց դեպի ընդհանուր VCC տող: Այնուհետև մյուս կապարը ամրացրեք ամրագոտու յուրաքանչյուր քորոցին մեկ առ մեկ: Մուլտիմետրը պետք է ազդանշան հնչի միայն կոճակը սեղմելիս: Եթե դուք ստանում եք որևէ այլ ազդանշան, դա նշանակում է, որ դուք ունեք հակադարձում կամ կարճ: Հետևեք դրան և շտկեք այն նախքան հոսանքը միացնելը:

Քայլ 12: Կոդ

Նախ, բացեք ձեր Arduino IDE- ն և համոզվեք, որ տեղադրված է FastLED գրադարանը:

Ներբեռնեք Ալգորիթմ մեքենայի կոդը GitHub- ից.

github.com/samguyer/AlgorithmMachine.git

Կարող եք այն ուղղակիորեն կլոնավորել ձեր Arduino թղթապանակում կամ ձեռքով պատճենել:

Նախքան այն վերբեռնելը, համոզվեք, որ քորոցի կարգավորումները համապատասխանում են ձեր ապարատային կազմաձևին: Ես տեղադրել եմ բոլոր կապի կարգավորումները ֆայլի վերևում:

Վերբեռնեք և վայելեք:

Քայլ 13: Ինչպես օգտագործել

Ալգորիթմ մեքենան պարզ է օգտագործման համար և կոճակների գրեթե ցանկացած համադրություն լավ է:

Նախ, օգտագործեք տվյալների կոճակները `զանգվածի արժեքները սկզբնավորելու համար: Երեք տարբերակ կա. (1) պատահականացնել, (2) ավելացնել մեկ պատահական արժեք և (3) հակադարձել զանգվածը: Նկատի ունեցեք, որ արժեքները մշտական են, այնպես որ կարող եք անել այնպիսի բաներ, ինչպիսիք են դրանք նախ տեսակավորելը, այնուհետև ավելացնել որոշ աղմուկ, այնուհետև գործարկել տեսակավորման կամ որոնման այլ ալգորիթմ:

Ընտրեք որոնման կամ տեսակավորման ալգորիթմ կոճակի մյուս տարբերակներից: Ներկայումս, այս ընտրությունը կատարելիս հետադարձ կապ չկա (ինչ -որ բան ապագա աշխատանքի համար): Այնուհետև կտտացրեք «խաղալ» կոճակին:

Կոճակը վերահսկում է արագությունը: Կարող եք նաև հարվածել «խաղալ» ՝ ալգորիթմը դադարեցնելու և դադարեցնելու համար:

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

STEM մրցույթ
STEM մրցույթ
STEM մրցույթ
STEM մրցույթ

Գլխավոր մրցանակ STEM մրցույթում

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