Turinys:

Algoritmo mašina: 13 žingsnių (su nuotraukomis)
Algoritmo mašina: 13 žingsnių (su nuotraukomis)

Video: Algoritmo mašina: 13 žingsnių (su nuotraukomis)

Video: Algoritmo mašina: 13 žingsnių (su nuotraukomis)
Video: MOKSLO ŽIRNIAI - Kaip užvesti lengvojo automobilio variklį naudojant akumuliatoriaus įkrovimo laidus 2024, Liepa
Anonim
Image
Image
LED juosta: 3D spausdinkite kaukę
LED juosta: 3D spausdinkite kaukę

Aš 15 metų dėstau informatiką kolegijos lygmeniu ir, nors mano patirtis daugiau susijusi su programavimu, vis tiek praleidžiu gana daug laiko, apimdama standartinius paieškos ir rūšiavimo algoritmus. Mokymo požiūriu pagrindinė problema yra skaičiavimo sudėtingumas: kiek laiko reikia kiekvienam algoritmui, atsižvelgiant į tam tikro dydžio įvestį? Tačiau yra daugybė niuansų. Pavyzdžiui, ar algoritmai turi skirtingą veikimo laiką, priklausomai nuo konkrečių įvesties verčių (priešingai nei dydis)? Kokiais atvejais pasirinktumėte vieną rūšiavimo algoritmą, o ne kitą? Nors mes aptariame šiuos klausimus abstrakčiai, mane visada apmaudavo tai, kad nebuvo lengvo būdo pamatyti, kaip skirtingi algoritmai veikia įvairiomis sąlygomis.

Tikslai

Mano pagrindinis šio projekto tikslas buvo sukurti interaktyvų ekraną, skirtą mokiniams vizualizuoti ir tyrinėti algoritmus. Apsiribojau algoritmais, kurie veikia su reikšmių masyvais (sveikais skaičiais), todėl galiu naudoti adresuojamą RGB LED juostą, kad vizualizuotų masyvo turinį. Masyvas turi 100 elementų, ir kiekvienas sveikasis skaičius priskiriamas vaivorykštės tvarka tam tikrai spalvai, kad būtų iškart akivaizdu, kai masyvas surūšiuotas, iš dalies surūšiuotas ar atsitiktinai parinktas. Tačiau be verčių norėjau, kaip būtų galima vizualizuoti algoritmo valdymo aspektus, pavyzdžiui, kurie masyvo elementai šiuo metu yra lyginami ar keičiami.

Konkretūs tikslai yra šie:

- Pateikite įvairius paieškos ir rūšiavimo algoritmus

- Vizualizuokite masyvo vertes taip, kad būtų parodyta algoritmo eiga

- vizualizuoti algoritmo valdymą; visų pirma svarstomi elementai.

- Leiskite vartotojams pasirinkti įvesties duomenų modelius, o ne visada generuoti atsitiktines vertes

- Leiskite vartotojams valdyti greitį ir pristabdyti algoritmą

-Leiskite vartotojams priversti elgtis geriausiu, blogiausiu ir vidutiniu atveju (atsižvelgiant į algoritmą)

- Rodykite žingsnių skaičių, kai algoritmas tęsiasi

Vizualizacija

Fizinio dizaino požiūriu įdomiausia šio projekto dalis yra masyvo vizualizacija. Aš kovojau, kaip parodyti duomenis ir valdymą, ir kaip sukurti patį ekrano įrenginį. Mano tikslas buvo parodyti duomenų reikšmes kaip spalvotus apskritimus, o valdymo taškus - kaip spalvotas rodykles, nukreiptas į duomenų reikšmes. Po tam tikrų eksperimentų aš nusprendžiau dizainą su dviem lygiagrečiomis juostelėmis iš 100 RGB šviesos diodų (WS2812) su apvalia kauke virš kiekvieno duomenų šviesos diodo ir trikampio formos kauke virš kiekvieno valdymo šviesos diodo. Aš sukūriau 3D kaukės modelį su 10 porų apskritimų ir trikampių, o tada 3D atspausdinau 10 šių modulių, iš viso 100 apskritimų ir 100 trikampių. Mano kaukės dydis ir tarpai yra skirti juostelėms su 100 šviesos diodų metrui. 3D modelio failai pateikiami vėliau šiame aprašyme.

Elektronika ir korpusas

Likusi prietaiso dalis yra paprasta elektronikos požiūriu. Be dviejų šviesos diodų juostų, yra daugybė momentinių mygtukų, rotacinis kodavimo įrenginys (greičio valdymui) ir 7 segmentų ekranas (žingsniams rodyti). Turėdamas tiek daug mygtukų ir valdiklių, pasirinkau naudoti ESP32 mikrovaldiklį, nes jis atskleidžia daug kaiščių ir yra gana galingas. Aš peržiūrėsiu laidų strategiją, bet tai gana paprasta. Jei norite naudoti mažiau kaiščių, tikriausiai galėtumėte nuveikti ką nors protingo naudodami pamainų registrus.

Šio įrenginio korpusą galite sukurti įvairiomis formomis. Iš pradžių ją įsivaizdavau kaip didelę stačiakampę plokštę, kurios viršuje yra LED juostelė, o viduryje - mygtukų tinklelis. Formą, kurią baigiau, įkvėpė savotiškas 1960-ųjų požiūris į kosminio amžiaus technologijas. Taip pat galite jį pastatyti naudodami LED juostas vertikaliai. Arba padidinkite LED dalį - užpildykite visą sieną - atskiru valdymo skydeliu.

Programinė įranga

Šio įrenginio kodas yra laisvai prieinamas „GitHub“, ir aš padariau viską, kad dokumentuojau, kaip jis veikia ir kaip jį sukonfigūruoti. Vienintelė jums reikalinga išorinė biblioteka yra „FastLED“, kad būtų galima valdyti WS2812 juosteles.

Prekės

Elektronika

1 ESP32 kūrimo lenta (pvz., 2 WS2812 arba panašios šviesos diodų juostos, tankis 100 šviesos diodų vienam metrui (pvz., 1 trikampio „pradžios“mygtukas (pvz., 12 momentinių mygtukų (pvz., Https://amzn.com/B01N4D4750) - jei norite, skirtingų formų

1 pakuotėje (20) iš anksto prijungtų mygtukų jungčių (pvz., 1 pakuotės JST jungtys (pvz., 1 rotacinis kodavimo įrenginys (pvz., 1 Sukamojo kodavimo rankenėlė (pvz., 1 Pack Dupont jungtys (pvz., Https://amzn.com/B014YTPFT8) - verta įsigyti ir gofravimo įrankį.

1 statinės lizdas (galiai) (pvz., 1 TM1637 7 segmentų skaitmeninis ekranas (pvz., Litavimo ir laidų pavara

3D modelio failai

3D modelį, skirtą 10 šviesų modulių porai, rasite „Thingiverse“:

www.thingiverse.com/thing:4178181

Šį modelį turėsite spausdinti penkis kartus, iš viso 10 modulių.

Programinė įranga

github.com/samguyer/AlgorithmMachine

Korpusas

Mediena, organinis stiklas, nerūdijančio plieno varžtai ir varžtai

Difuzinė medžiaga. Mano mėgstamiausias yra „Lee Filters #216“baltos spalvos difuzija, tačiau yra ir kitų variantų. Net paprastas baltas popierius atlieka gerą darbą.

1 žingsnis: algoritmai 101

Daugelis žmonių mano, kad informatika iš esmės yra programavimo studija. Tačiau tikroji šios srities širdis ir siela yra algoritmai: sistemingų problemų sprendimo procedūrų tyrimas ir jų kaina (paprastai tai, kiek laiko jie užtrunka). Pagrindiniai šios srities veikėjai, tokie kaip Alanas Turingas, Alonzo Church ir Edsgeris Dijkstra, galvojo apie šias idėjas dar prieš kompiuterius, kaip mes žinome.

Pagrindinis algoritmo bruožas, padedantis išspręsti tam tikrą problemą, yra tas, kad jis yra išsamus ir tikslus, kad kažkas galėtų jį panaudoti, kad gautų sprendimą, nesuprasdamas, kaip jis apskritai veikia; tiesiog atlikite mechaninius veiksmus ir gausite teisingą atsakymą. Galite pamatyti, kaip tai padeda programuojant kompiuterius, nes jiems reikia tokio išsamumo. Kompiuteris negali užpildyti trūkstamų detalių ar priimti sprendimų taip, kaip gali žmogus.

Kiek tai užtruks?

Kai turėsime išsamią procedūrą, natūralus klausimas yra, kiek laiko užtruks, kol gausime atsakymą? Mes negalime naudoti įprastų laiko vienetų, nes tai priklauso nuo to, kas atlieka darbą (palyginkite, kaip greitai žmogus gali ką nors apskaičiuoti, palyginti su superkompiuteriu). Be to, tai priklauso nuo to, kiek duomenų turime. Akivaizdu, kad milijono telefono numerių sąrašo paieška užtrunka ilgiau nei šimto sąrašas.

Norėdami apibūdinti algoritmo kainą, pirmiausia pasirenkame tam tikrą operacijos procedūrą, kuri reiškia vieną „žingsnį“- paprastai kažką paprasto, pvz., Dviejų skaičių palyginimą ar pridėjimą, kuriam atlikti reikia tam tikro laiko. Tada mes sugalvojame formulę, apibūdinančią, kiek veiksmų algoritmas atliks, atsižvelgiant į tam tikrą duomenų elementų skaičių. Dėl istorinių priežasčių beveik visada žymime duomenų elementų skaičių su didžiosiomis raidėmis N.

Pavyzdžiui, peržiūrint N telefono numerių sąrašą reikia atlikti N žingsnių. Du kartus peržiūrint sąrašą reikia atlikti 2 žingsnius. Abu jie vadinami linijinio laiko algoritmais - bendras žingsnių skaičius yra įvesties dydžio kartotinis. Kiti algoritmai yra kvadratiniai (laikas N kvadratu) arba kubiniai (N kubiniai) arba logaritminiai (log N) arba kai kurie jų deriniai. Kai kurioms sudėtingiausioms skaičiavimo problemoms reikia eksponentinio laiko algoritmų (2^N).

Gerai, tai ką?

Kai duomenų elementų skaičius N yra mažas, tai nesvarbu. Pavyzdžiui, jei N = 10, 10N yra tas pavadinimas, išreikštas kvadratu N. Bet kaip su N = 1000? arba N = 1000000? Milijonas kvadrato yra gana didelis skaičius. Net ir labai greitu kompiuteriu kvadratinis algoritmas gali užtrukti ilgai, jei įvestis yra pakankamai didelė. Eksponentiniai algoritmai yra daug vargingesni: jei N = 50, eksponentinis algoritmas užtruks dvi savaites net kompiuteryje, kuriame kiekvienas žingsnis yra tik viena nanosekundė (1 milijardoji sekundės dalis). Oho!

Kitame skalės gale turime logaritminius laiko algoritmus, kurie yra labai greiti. Prisijungimo laikas yra priešingas eksponentiniam laikui: atsižvelgiant į įvesties dydį N, žingsnių skaičius yra eksponentas T formulėje 2^T = N. Pavyzdžiui, jei mūsų įvesties dydis yra vienas milijardas, žurnalo laiko algoritmui reikia tik 30 žingsnių, nes 2^30 = 1, 000, 000, 000. Kaip tai miela?! ??!

Jums gali būti įdomu, kam rūpi milijonų ar milijardų įvesties dydžiai? Pagalvokite: kiek vartotojų yra „Facebook“? Kiek tinklalapių indeksuoja „Google“? Kiek bazinių porų yra žmogaus genome? Kiek matavimų patenka į orų modeliavimą?

2 žingsnis: algoritmai

Algoritmų mašina šiuo metu įgyvendina šiuos algoritmus. Du iš jų yra paieškos algoritmai (suraskite tam tikrą vertę sąraše), kiti - rūšiavimo algoritmai (sutvarkykite reikšmes).

Linijinė paieška

Ieškokite vertybių sąrašo po vieną, pradedant nuo pradžios. Reikia linijinio laiko.

Dvejetainė paieška

Ieškokite sąrašo, pakartotinai padalydami jį į pusę. Reikia žurnalo laiko, tačiau sąrašas turi būti surūšiuotas, kad jis veiktų.

Rūšiuoti burbulus

Rūšiuokite sąrašą, kuriame daug kartų keičiasi kaimyniniai elementai, kurie nėra tvarkingi. Reikia kvadratinio laiko.

Įterpimo rūšiavimas

Rūšiuokite sąrašą, sudėdami kiekvieną elementą į tinkamą vietą jau surūšiuotų verčių sąraše. Reikia kvadratinio laiko.

„Quicksort“

Rūšiuokite sąrašą, pakartotinai padalydami sąrašą per pusę ir perkeldami visas reikšmes, mažesnes už vidurkį, į pirmąją pusę, o visas reikšmes, didesnes už vidutinę, į antrąją pusę. Praktiškai mes negalime efektyviai rasti medianos, todėl mes pasirenkame vertę atsitiktinai. Dėl to šis algoritmas blogiausiu atveju gali būti kvadratinis, bet paprastai reikalauja N * logN laiko.

Sujungti rūšiuoti

Rūšiuokite sąrašą, padalindami jį per pusę, surūšiuodami abi puses atskirai (naudodami sujungimo rūšiavimą), o tada sujungdami jas, sudėdami reikšmes. Visada reikia N * logN laiko.

Rūšiuoti krūvą

Rūšiuokite sąrašą, sukurdami duomenų struktūrą, vadinamą krūva, kuri leidžia rasti mažiausią žurnalo laiko vertę. Visada reikia N * logN laiko.

Bitoninė rūšis

Panašiai kaip sujungimo rūšiavimas ir greitasis rūšiavimas, padalinkite sąrašą per pusę, surūšiuokite puses ir sujunkite jas iš naujo. Šis algoritmas reikalauja N * logN * logN laiko, tačiau turi pranašumą, kad jį lengva sulyginti.

3 žingsnis: LED juosta: 3D spausdinkite kaukę

LED juosta: 3D spausdinkite kaukę
LED juosta: 3D spausdinkite kaukę
LED juosta: 3D spausdinkite kaukę
LED juosta: 3D spausdinkite kaukę

Pirmasis žingsnis kuriant LED juostą yra 3D spausdinti kaukę, kuri suteikia žibintams formą. Kiekvienas modulis apima dešimt masyvo elementų, 10 reikšmių (apskritimų) ir 10 rodiklių (trikampių), taigi jums iš viso reikės 10 modulių. Čia pateiktame STL faile yra du modulio egzemplioriai, todėl turėsite atlikti penkis spausdinimo ciklus. Aš neturiu geriausio 3D spausdintuvo, todėl turėjau juos rankiniu būdu išvalyti naudodami failą ir švitrinį popierių. Svarbiausia, kad apskritos ir trikampės skylės būtų švarios.

Nuotraukose matysite mano bandymo sąranką: priklijavau dvi šviesos diodų juosteles ir prijungiau jas prie duonos lentos su mikrovaldikliu. Šis žingsnis nėra būtinas, tačiau norėjau pamatyti, kaip jis atrodys, prieš pradėdamas surinkti korpusą. Išdėstiau kaukių modulius ant dviejų šviesos diodų juostų ir nubrėžiau paprastą eskizą su atsitiktinėmis spalvomis. Su difuzinės medžiagos juostele formos ir spalvos tikrai išryškėja.

4 žingsnis: LED juostos alternatyvos

LED juostos alternatyvos
LED juostos alternatyvos
LED juostos alternatyvos
LED juostos alternatyvos
LED juostos alternatyvos
LED juostos alternatyvos

Kai pirmą kartą pradėjau šį projektą, eksperimentavau su kitais LED kaukės gamybos būdais. Jei neturite 3D spausdintuvo, galite apsvarstyti vieną iš šių parinkčių. Pasakysiu nuoširdžiai: gaminti šias dalis yra didžiulis skausmas.

Apskritimams nusipirkau 13/32 žalvario vamzdelį, kurio skersmuo beveik tiksliai 1 cm. Supjausčiau jį į šimtą 1 cm ilgio segmentų, o paskui purškiau baltai.

Trikampiams naudojau sunkią aliuminio foliją, supjaustytą iš vienkartinės kepimo formos. Aš padariau trikampę formą iš medžio, tada apvyniojau trumpas folijos juosteles aplink formą ir užklijavau juostele. Vėlgi, jums reikės šimto šių dalykų, todėl reikia šiek tiek laiko ir kantrybės.

5 žingsnis: LED juostos gaubtas

LED juostos gaubtas
LED juostos gaubtas
LED juostos gaubtas
LED juostos gaubtas
LED juostos gaubtas
LED juostos gaubtas

Mano gaubtas yra gana paprastas: dvi medžio juostelės šonams ir dvi organinio stiklo juostos viršuje ir apačioje. Visos dalys yra apie 102 cm ilgio (1 metras šviesos diodams, taip pat šiek tiek papildomai, kad tilptų laidai). Šonai turi būti šiek tiek aukštesni nei 1 cm, kad būtų vietos LED juostoms. Nupjovęs juosteles, tarp jų uždėjau 3D spausdintas kaukės dalis, kad galėčiau išmatuoti organinio stiklo plotį. Iškirpkite du plexiglass gabalus juostos pločio ir ilgio. Galiausiai nupjaukite difuzinės medžiagos juostelę, kad ji tilptų ant kaukės.

Dėl sklaidos man labai patinka Lee filtrai #216 (visiškai balta difuzija). Tai plonas plastikinis lakštas, kuris skleidžia tolygiai, neprarasdamas daug šviesos. Bet tai brangus dalykas. Kartais parduodamų mažesnių lakštų galite rasti internete, tačiau visas ritinys jums grąžins apie 125 USD. Kai kurios kitos galimybės yra baltas popierius arba bet koks kitas satino ar matinio plastiko tipas. Populiarus pasirinkimas yra ploni plastikiniai pjovimo kilimėliai.

Prieš surinkdami šviesos diodų juostą, įsitikinkite, kad prie LED juostų yra prilituotos atitinkamos jungtys. Daugelyje juostelių yra iš anksto lituoti laidai, todėl galite juos tiesiog naudoti.

Aš pradėjau surinkimą, prisukdamas viršutinį organinio stiklo gabalą ant medinių pusių (žr. Nuotrauką). Tada apverčiau ir įdėjau difuzinę juostelę, po to - 10 kaukės dalių. Kai buvau patenkintas atstumais, aš juos pritvirtinau keliais karštų klijų taškais.

Tada padėkite dvi šviesos diodų juostas viena šalia kitos ant kaukių. Įsitikinkite, kad šviesos diodai nukreipti žemyn, ir įsitikinkite, kad kiekvienas šviesos diodas sutampa su atitinkama kauke esančia skylute. Įdėkite šiek tiek karštų klijų ar juostos, kad LED juostelės būtų laikomos. Galiausiai užsukite galinį organinio stiklo gabalą.

Paleiskite bandymo modelį. Gerai padirbėjai! Jūs padarėte sunkiausią dalį!

6 žingsnis: Valdymo skydas

Kontrolės skydelis
Kontrolės skydelis
Kontrolės skydelis
Kontrolės skydelis
Kontrolės skydelis
Kontrolės skydelis
Kontrolės skydelis
Kontrolės skydelis

Valdymo skydas yra ta dalis, kuri suteikia didžiausią kūrybinę laisvę. Jame tereikia laikyti visus valdiklius ir elektroniką kartu su LED juosta. Paprasčiausias dizainas yra stačiakampio formos lentos: gręžkite skyles mygtukams ir valdikliams ir pritvirtinkite LED juostą. Man patinka derinti medieną, organinį stiklą ir kitas medžiagas, kad gautumėte savotišką „steampunk“/ retro-modernų vaizdą. Šiuo atveju aš iškirpau didelio našumo organinio stiklo gabalėlį, kad galėčiau laikyti pagrindinius algoritmo pasirinkimo mygtukus, ir medinę juostą, skirtą likusiai elektronikai. Aš gręžiau skyles, kad atitiktų arkadinių mygtukų dydį. Elektros instaliacija rodoma gale, bet man tai patinka!

Taip pat išgręžiau vietą 7 segmentų ekranui, rotaciniam kodavimo įrenginiui ir kai kuriems laidams gale. Viršuje supjaustiau dado, kad laikytų LED juostą.

7 žingsnis: sagų diržai

Mygtukų pakinktai
Mygtukų pakinktai
Mygtukų pakinktai
Mygtukų pakinktai
Mygtukų pakinktai
Mygtukų pakinktai

Daugelio mygtukų prijungimas gali būti tikras skausmas. Laimei, žmonės, gaminantys arkadines mašinas, sugalvojo keletą standartinių jungčių, kurias galite naudoti. Kiekvienas mygtuko jungties kabelis turi du laidus: vieną VCC ir vieną įžeminimui. Viename gale yra kastuvinės jungtys, kurios priglunda prie laidų, esančių mygtuko gale - pritvirtinkite žemę prie „įprastai atidaryto“laido, o VCC - prie „bendro“laido. Esant šiai konfigūracijai, vartotojui paspaudus mygtuką, grandinė baigiama ir mikrovaldiklis atitinkamame įvesties kaištyje nuskaito AUKŠTĄ.

Kitame kabelio gale yra JST jungtis (mažas baltas daiktas). Šias jungtis malonu tai, kad jos tik vienaip patenka į lizdą, todėl nėra galimybės atsitiktinai pakeisti VCC ir įžeminti.

Ką aš padariau, sukūriau nedidelį šių jungčių pakinktą. Aš lituosiu JST talpyklų seriją ant protobooto gabalo, o po to laidus grįšiu prie „Dupont“jungčių, kurias prijungsiu prie mikrovaldiklio. Raudona viela yra VCC linija ir jungiasi prie visų JST lizdų. Mėlyni laidai yra atskiri kiekvienam mygtukui.

8 žingsnis: rotacinis kodavimo įrenginys

Rotacinis kodavimo įrenginys
Rotacinis kodavimo įrenginys

Sukamasis kodavimo įrenginys leidžia vartotojui valdyti algoritmo greitį. Aš naudoju modulį, kuris yra kaip pertraukimo plokštė, kurioje yra dviejų duomenų linijų (geltoni laidai) traukiamieji rezistoriai. Šis taip pat yra mygtukas, bet aš nenaudoju šios funkcijos. Kiti du laidai yra VCC ir įžeminimas. Aš taip pat gavau gražią riebalų rankenėlę.

Man patinka rotacinis kodavimo įrenginys, priešingai nei potenciometras, tai, kad jis tik signalizuoja sukimąsi (pagal laikrodžio rodyklę ir prieš laikrodžio rodyklę) mikrovaldikliui, todėl nesunku pakeisti vertę. Pvz., Galite suteikti jam pagreičio jausmą (kaip pelė), kai vartotojas greitai jį sukasi.

9 veiksmas: 7 segmentų ekranas

7 segmentų ekranas
7 segmentų ekranas

Čia nėra daug ką pasakyti. Šių dalykų yra visur. Šviesos diodus valdo lustas TM1637, kuris bendrauja su mikrovaldikliu per paprastą nuoseklųjį protokolą. Aš naudoju esamą biblioteką, kuri leidžia man pasakyti, kokį numerį noriu parodyti, o visa kita daro.

Galinėje pusėje yra keturi kaiščiai: VCC, įžeminimas ir du laidai nuosekliajam protokolui. Lituodavau 4 kontaktų antraštę, kuri jungiama prie atitinkamos „Dupont“jungties, prijungtos prie mikrovaldiklio.

10 veiksmas: pagrindinė valdiklio lenta

Pagrindinė valdytojų taryba
Pagrindinė valdytojų taryba
Pagrindinė valdytojų taryba
Pagrindinė valdytojų taryba
Pagrindinė valdytojų taryba
Pagrindinė valdytojų taryba

Pagrindinėje valdiklio plokštėje yra pats mikrovaldiklis ir visos jungtys prie valdiklių (mygtukai, ekranas, šviesos diodai). Mikrovaldiklis yra ESP32, kuris suteikia daug skaičiavimo galios ir atminties bei atskleidžia daugybę kaiščių. Laidai yra gana standartiniai, tačiau atkreipiu dėmesį į keletą įdomių detalių.

PASTABA: prieš pradėdami jungti pagrindinę plokštę, galbūt norėsite pažvelgti į kodą (https://github.com/samguyer/AlgorithmMachine), kad jūsų kaiščio konfigūracija atitiktų mano.

Prie plokštės lituodavau statinės lizdą, kad galia būtų prijungta, ir prijungiau du riebius varinius laidus prie plokštės maitinimo ir įžeminimo bėgių. Priežastis ta, kad LED juosta gali suvartoti daug energijos, jei yra nustatytas didelis ryškumas, ir aš nenoriu ištraukti visos šios galios per mikrovaldiklio USB jungtį.

Kad supaprastintumėte mygtukų sujungimą, aš per visą mikrokontrolerio pusę (viršutinė plokštės pusė, kaip parodyta), lituodavau juostelę iš vyro į moterį stačiakampio antraštės. Dupont jungtys iš mygtukų diržų kištuko tiesiai į šią antraštę.

SVARBU: mygtukų maitinimas (raudonas laidas) turi būti prijungtas prie 3,3 V maitinimo linijos, esančios mikrovaldiklyje. ESP32 yra 3,3 V lustas, todėl prie duomenų kaiščių kada nors turėtų būti prijungti tik 3,3 V šaltiniai.

Mikrovaldiklis per 5V USB kaištį ir įžemina energiją (arba stumia energiją) į bėgius (apatinę plokštės pusę, kaip parodyta). Visi kiti raudoni/juodi laidai yra VCC ir įžeminti.

Du mėlyni laidai yra LED juostų (WS2812s) duomenų linijos. Geltona/žalia pora yra rotacinio kodavimo įrenginio duomenų linijos, o geltona-serijinis ryšys su 7 segmentų ekranu.

11 žingsnis: Surinkimas

Surinkimas
Surinkimas
Surinkimas
Surinkimas
Surinkimas
Surinkimas
Surinkimas
Surinkimas

Ši nuotraukų serija rodo galutinį surinkimą ir laidus. Aš taip pat pritvirtinau pagrindinę valdiklio plokštę prie nugaros viršuje.

Prieš įjungdamas, atlikiau keletą patikrinimų, kad išvengčiau nemalonių netikėtumų. Visų pirma, norėdamas įsitikinti, kad neturėjau jokių maitinimo/įžeminimo jungčių atgal ir nėra trumpojo jungimo. Nustatykite multimetrą, kad patikrintumėte tęstinumą - jis pypsės, kai tarp dviejų laidų bus elektros kelias. Pritvirtinkite vieną laidą prie bendros VCC linijos prie mygtukų. Tada po vieną prie kiekvieno diržo kaiščio pritvirtinkite kitą laidą. Multimetras turėtų pyptelėti tik paspaudus mygtuką. Jei girdite kitus pyptelėjimus, tai reiškia, kad turite apverstą arba trumpą. Prieš įjungdami maitinimą, susekite ir pataisykite!

12 žingsnis: kodas

Pirmiausia atidarykite „Arduino IDE“ir įsitikinkite, kad įdiegta „FastLED“biblioteka.

Atsisiųskite algoritmo mašinos kodą iš „GitHub“:

github.com/samguyer/AlgorithmMachine.git

Galite jį klonuoti tiesiai į „Arduino“aplanką arba nukopijuoti ranka.

Prieš įkeldami, įsitikinkite, kad kaiščio nustatymai atitinka jūsų aparatūros konfigūraciją. Visus kaiščio nustatymus įdėjau failo viršuje.

Įkelkite ir mėgaukitės!

13 žingsnis: kaip naudoti

Algoritmo mašiną paprasta naudoti ir beveik bet koks mygtukų derinys yra tinkamas!

Pirmiausia naudokite duomenų mygtukus, norėdami inicijuoti masyvo reikšmes. Yra trys pasirinkimai: (1) atsitiktinis, (2) pridėti vieną atsitiktinę vertę ir (3) pakeisti masyvą. Atminkite, kad vertės yra nuolatinės, todėl pirmiausia galite rūšiuoti, tada pridėti triukšmo, tada paleisti kitą rūšiavimo ar paieškos algoritmą.

Iš kitų mygtukų pasirinkimo pasirinkite paieškos ar rūšiavimo algoritmą. Šiuo metu grįžtamojo ryšio nėra, kai pasirenkate šį dalyką (kažkas būsimam darbui). Tada paspauskite mygtuką „žaisti“.

Rankenėlė valdo greitį. Taip pat galite paspausti „žaisti“, kad pristabdytumėte ir pristabdytumėte algoritmą.

Kai jis bus baigtas, jis automatiškai sustos. Taip pat bet kuriuo metu galite paspausti kitą algoritmo mygtuką. Mašina sustabdys dabartinį algoritmą ir inicijuos naują, tačiau išsaugos duomenis tiksliai tokius, kokius paliko ankstesnis algoritmas.

STEM konkursas
STEM konkursas
STEM konkursas
STEM konkursas

Pagrindinis prizas STEM konkurse

Rekomenduojamas: