Satura rādītājs:

Algoritmu mašīna: 13 soļi (ar attēliem)
Algoritmu mašīna: 13 soļi (ar attēliem)

Video: Algoritmu mašīna: 13 soļi (ar attēliem)

Video: Algoritmu mašīna: 13 soļi (ar attēliem)
Video: BERMUDU DIVSTŪRIS x APVEDCEĻŠ - Brāl' Ar Dzīvi Nekaulē 2024, Jūlijs
Anonim
Image
Image
LED josla: 3D drukājiet masku
LED josla: 3D drukājiet masku

Es 15 gadus mācīju datorzinātnes koledžas līmenī, un, lai gan mana pieredze ir vairāk saistīta ar programmēšanu, es joprojām pavadu diezgan daudz laika, aptverot standarta algoritmus meklēšanai un šķirošanai. No mācīšanas viedokļa galvenais jautājums ir skaitļošanas sarežģītība: cik daudz laika prasa katrs algoritms, ņemot vērā konkrēta lieluma ievadi? Bet ir daudz nianšu. Piemēram, vai algoritmiem ir atšķirīgs izpildlaiks atkarībā no konkrētajām ievades vērtībām (atšķirībā no lieluma)? Kādos gadījumos jūs izvēlētos vienu šķirošanas algoritmu pār citu? Lai gan mēs šos jautājumus apspriežam abstrakti, tas mani vienmēr apbēdināja, ka nebija vienkārša veida, kā redzēt, kā dažādi algoritmi darbojas dažādos apstākļos.

Mērķi

Mans šī projekta galvenais mērķis bija izveidot interaktīvu displeju, lai studenti varētu vizualizēt un izpētīt algoritmus. Es aprobežojos ar algoritmiem, kas darbojas ar vērtību masīviem (veseliem skaitļiem), tāpēc es varu izmantot adresējamu RGB LED sloksni, lai vizualizētu masīva saturu. Masīvam ir 100 elementi, un katrs vesels skaitlis tiek kartēts kādā krāsā varavīksnes secībā, lai tas būtu uzreiz redzams, kad masīvs ir sakārtots, daļēji sakārtots vai nejaušināts. Tomēr papildus vērtībām es vēlējos vizualizēt algoritma vadības aspektus, piemēram, to, kuri masīva elementi pašlaik tiek salīdzināti vai mainīti.

Konkrētie mērķi ir:

- Nodrošiniet dažādus meklēšanas un šķirošanas algoritmus

- Vizualizējiet masīva vērtības tā, lai izceltu algoritma progresu

- vizualizēt algoritma vadību; jo īpaši izskatāmie elementi.

- Ļaujiet lietotājiem izvēlēties ievades datu modeļus, nevis vienmēr ģenerēt izlases vērtības

- Ļaujiet lietotājiem kontrolēt ātrumu un apturēt algoritmu

-Ļaujiet lietotājiem piespiest labāko, sliktāko un vidējo gadījumu uzvedību (specifisks algoritmam)

- Parādiet soļu skaitu, turpinot algoritmu

Vizualizācija

No fiziskā dizaina viedokļa šī projekta interesantākā daļa ir masīva vizualizācija. Es cīnījos ar to, kā parādīt datus un vadību, un kā izveidot pašu displeja ierīci. Mans mērķis bija parādīt datu vērtības kā krāsainus apļus un kontroles punktus kā krāsainas bultiņas, kas norāda uz datu vērtībām. Pēc dažiem eksperimentiem es pieņēmu dizainu ar divām paralēlām 100 RGB gaismas diodēm (WS2812) ar apļveida masku virs katras datu gaismas diodes un trīsstūrveida maskas virs katras vadības gaismas diodes. Es izveidoju maskas 3D modeli ar 10 apļu un trīsstūru pāriem, un pēc tam 3D izdrukāju 10 no šiem moduļiem kopā 100 apļiem un 100 trīsstūriem. Manas maskas izmērs un atstarpes ir paredzētas sloksnēm ar 100 gaismas diodēm uz metru. 3D modeļa faili ir sniegti vēlāk šajā aprakstā.

Elektronika un korpuss

Pārējā ierīce ir vienkārša no elektronikas viedokļa. Papildus divām LED sloksnēm ir virkne īslaicīgu pogu, rotējošs kodētājs (ātruma kontrolei) un 7 segmentu displejs (soļu rādīšanai). Ar tik daudzām pogām un vadības ierīcēm es izvēlējos izmantot ESP32 mikrokontrolleru, jo tas atklāj daudz tapu un tāpēc, ka tas ir diezgan spēcīgs. Es apskatīšu elektroinstalācijas stratēģiju, bet tā ir diezgan vienkārša. Jūs, iespējams, varētu darīt kaut ko gudru ar maiņu reģistriem, ja vēlaties izmantot mazāk tapas.

Šīs ierīces korpusu var veidot dažādās formās. Sākotnēji es to iztēlojos kā lielu taisnstūra dēli ar LED sloksni augšpusē un pogu pogu režģi vidū. Veidlapa, ar kuru es nonācu, ir iedvesmota no sava veida 1960. gadu skatījuma uz kosmosa laikmeta tehnoloģijām. Varat to izveidot arī ar LED sloksnēm vertikālā orientācijā. Vai arī padariet LED daļu daudz lielāku - aizpildiet visu sienu - ar atsevišķu vadības paneli.

Programmatūra

Šīs ierīces kods ir brīvi pieejams vietnē GitHub, un es esmu darījis visu iespējamo, lai dokumentētu, kā tā darbojas un kā to konfigurēt. Vienīgā ārējā bibliotēka, kas jums nepieciešama, ir FastLED, lai vadītu WS2812 sloksnes.

Piegādes

Elektronika

1 ESP32 izstrādes panelis (piemēram, 2 WS2812 vai līdzīgas LED sloksnes, blīvums 100 LED uz metru (piemēram, 1 trīsstūra poga "Sākt" (piemēram, 12 īslaicīgas pogas (piemēram, https://amzn.com/B01N4D4750) - dažādas formas, ja vēlaties

1 iepakojumā (20) iepriekš pieslēgti pogu savienotāji (piemēram, 1 iepakojuma JST savienotāji (piemēram, 1 Rotējošais kodētājs (piemēram, 1 poga rotējošajam kodētājam (piemēram, 1 Pack Dupont savienotāji (piemēram, https://amzn.com/B014YTPFT8) - ir vērts iegādāties arī gofrēšanas rīku.

1 mucas ligzda (jaudai) (piemēram, 1 TM1637 7 segmentu ciparu displejs (piemēram, Lodēšanas un elektroinstalācijas rīki

3D modeļa faili

3D modeli 10 gaismas moduļu pāriem varat atrast vietnē Thingiverse:

www.thingiverse.com/thing:4178181

Šis modelis būs jāizdrukā piecas reizes, kopā 10 moduļiem.

Programmatūra

github.com/samguyer/AlgorithmMachine

Korpuss

Koks, plexiglass, nerūsējošā tērauda skrūves un skrūves

Difūzijas materiāls. Mans mīļākais ir Lī filtri #216 pilnā baltā difūzija, taču ir arī citas iespējas. Pat vienkāršs balts papīrs dara labu darbu.

1. darbība: algoritmi 101

Daudzi cilvēki domā, ka datorzinātne būtībā ir programmēšanas pētījums. Bet šīs jomas patiesā sirds un dvēsele ir algoritmi: sistemātisku problēmu risināšanas procedūru izpēte un to izmaksas (parasti, cik ilgi tās prasa). Svarīgākās personas šajā jomā, piemēram, Alans Tjūrings, Alonzo Baznīca un Edžers Dijkstra, domāja par šīm idejām, pirms datori, kādi mēs zinām, pat eksistēja.

Galvenā algoritma iezīme konkrētas problēmas risināšanai ir tā, ka tas ir detalizēts un precīzs, lai kāds varētu to izmantot, lai rastu risinājumu, nesaprotot, kā tas vispār darbojas; vienkārši izpildiet mehāniskās darbības, un jūs saņemsiet pareizo atbildi. Jūs varat redzēt, kā tas palīdz programmēt datorus, jo tiem ir vajadzīgs šāds detalizācijas līmenis. Dators nevar aizpildīt trūkstošās detaļas vai spriest, kā to var izdarīt cilvēks.

Cik ilgu laiku tas aizņems?

Kad mums ir detalizēta procedūra, dabisks jautājums ir, cik ilgs laiks būs vajadzīgs, lai saņemtu atbildi? Mēs nevaram izmantot parastās laika vienības, jo tas ir atkarīgs no tā, kurš veic darbu (salīdziniet, cik ātri cilvēks varētu kaut ko aprēķināt, salīdzinot ar superdatoru). Turklāt tas ir atkarīgs no tā, cik daudz datu mums ir. Skaidrs, ka miljonu tālruņu numuru meklēšana prasa vairāk laika nekā simts.

Lai aprakstītu algoritma izmaksas, vispirms procedūrā izvēlamies kādu darbību, kas apzīmē vienu "soli" - parasti kaut ko vienkāršu, piemēram, divu skaitļu salīdzināšanu vai pievienošanu, kas prasa noteiktu laiku. Tad mēs izstrādājam formulu, kas apraksta, cik soļu algoritms veiks, ņemot vērā noteiktu datu vienību skaitu. Vēsturisku iemeslu dēļ mēs gandrīz vienmēr apzīmējam datu vienību skaitu ar lielo burtu N.

Piemēram, lai apskatītu N tālruņu numuru sarakstu, ir jāveic N darbība. Divreiz apskatot sarakstu, tiek veikti 2N soļi. Abus šos sauc par lineārā laika algoritmiem - kopējais soļu skaits ir daži ievades lieluma reizinājumi. Citi algoritmi ir kvadrātiski (laiks N kvadrātā) vai kubiski (N kubi) vai logaritmiski (log N) vai kāda no tiem. Dažām vissarežģītākajām skaitļošanas problēmām nepieciešami eksponenciāli laika algoritmi (2^N).

Labi, ko tad?

Ja datu vienību skaits N ir mazs, tam nav lielas nozīmes. Piemēram, ja N = 10, 10N ir šis nosaukums kā N kvadrātā. Bet kā ar N = 1000? vai N = 1000000? Miljons kvadrātā ir diezgan liels skaitlis. Pat ļoti ātrā datorā kvadrātiskais algoritms var aizņemt ilgu laiku, ja ievade ir pietiekami liela. Eksponenciālie algoritmi ir daudz apgrūtinošāki: ja N = 50, eksponenciāla algoritma pabeigšana prasītu divas nedēļas pat datorā, kur katrs solis ir tikai viena nanosekunde (1 miljardā sekundes daļa). Ak!

Skalas otrā galā ir logaritmiski laika algoritmi, kas ir ļoti ātri. Žurnāla laiks ir pretējs eksponenciālajam laikam: ņemot vērā ievades lielumu N, soļu skaits ir eksponents T formulā 2^T = N. Piemēram, ja mūsu ievades lielums ir viens miljards, tad žurnāla laika algoritmam ir nepieciešami tikai 30 soļi, jo 2^30 = 1, 000, 000, 000. Cik tas ir jauki?! ??!

Jums varētu rasties jautājums, kam rūp miljonu vai miljardu ievades lielums? Padomājiet par to: cik lietotāju ir Facebook? Cik tīmekļa lapas Google indeksē? Cik bāzes pāru ir cilvēka genomā? Cik mērījumu iet laika simulācijā?

2. solis: algoritmi

Algoritmu mašīna pašlaik īsteno šādus algoritmus. Divi no tiem ir meklēšanas algoritmi (atrodiet sarakstā noteiktu vērtību), pārējie ir šķirošanas algoritmi (sakārtojiet vērtības).

Lineāra meklēšana

Meklējiet vērtību sarakstu pa vienam, sākot no sākuma. Nepieciešams lineārs laiks.

Binārā meklēšana

Meklējiet sarakstu, atkārtoti sadalot to uz pusēm. Nepieciešams žurnāla laiks, taču saraksts ir jāsakārto, lai tas darbotos.

Burbuļu kārtošana

Kārtojiet sarakstu, atkārtoti apmainot blakus esošos elementus, kas nav kārtībā. Nepieciešams kvadrātiskais laiks.

Ievietošanas kārtošana

Kārtojiet sarakstu, ievietojot katru elementu pareizajā vietā jau sakārtoto vērtību sarakstā. Nepieciešams kvadrātiskais laiks.

Ātrsortēšana

Kārtojiet sarakstu, atkārtoti sadalot sarakstu uz pusēm un pārvietojot visas vērtības, kas ir mazākas par vidējo, uz pirmo pusi, un visas vērtības, kas ir lielākas par vidējo, uz otro pusi. Praksē mēs nevaram efektīvi atrast mediānu, tāpēc mēs izvēlamies vērtību nejauši. Rezultātā šis algoritms sliktākajā gadījumā var būt kvadrātveida, bet parasti tas prasa N * logN laiku.

Apvienot kārtošanu

Kārtojiet sarakstu, sadalot to uz pusēm, kārtojot abas puses atsevišķi (izmantojot sapludināšanas kārtošanu) un pēc tam apvienojot tās, saliekot vērtības. Vienmēr nepieciešams N * logN laiks.

Kaudze kārtot

Kārtojiet sarakstu, izveidojot datu struktūru, ko sauc par kaudzi, kas ļauj atrast mazāko vērtību žurnāla laikā. Vienmēr nepieciešams N * logN laiks.

Bitoniskā kārtošana

Līdzīgi kā apvienot kārtošanu un ātro šķirošanu, sadaliet sarakstu uz pusēm, kārtojiet pusītes un apvienojiet tās. Šim algoritmam ir nepieciešams N * logN * logN laiks, taču tā priekšrocība ir tā, ka to ir viegli paralizēt.

3. darbība: LED josla: 3D drukājiet masku

LED josla: 3D drukājiet masku
LED josla: 3D drukājiet masku
LED josla: 3D drukājiet masku
LED josla: 3D drukājiet masku

Pirmais solis, veidojot LED joslu, ir 3D drukāt masku, kas piešķir gaismām formu. Katrs modulis aptver desmit masīva elementus, 10 vērtības (apļus) un 10 indikatorus (trīsstūri), tāpēc jums kopumā būs nepieciešami 10 moduļi. Šeit piedāvātajā STL failā ir divi moduļa gadījumi, tāpēc jums būs jāveic pieci drukāšanas cikli. Man nav labākais 3D printeris, tāpēc man bija jāveic manuāla tīrīšana, izmantojot failu un smilšpapīru. Vissvarīgākais ir tas, ka apļveida un trīsstūrveida caurumi ir tīri.

Fotogrāfijās redzēsit manu testa iestatījumu: es pielīmēju abas LED sloksnes un piestiprināju tās pie maizes dēļa ar mikrokontrolleri. Šis solis nav nepieciešams, bet es gribēju redzēt, kā tas izskatīsies, pirms sāku salikt korpusu. Es izkārtoju maskas moduļus uz divām LED sloksnēm un izpildīju vienkāršu skici ar nejaušām krāsām. Izmantojot difūzijas materiāla sloksni, formas un krāsas patiešām izceļas.

4. solis: LED joslu alternatīvas

LED joslu alternatīvas
LED joslu alternatīvas
LED joslu alternatīvas
LED joslu alternatīvas
LED joslu alternatīvas
LED joslu alternatīvas

Kad es pirmo reizi uzsāku šo projektu, es eksperimentēju ar citiem LED maskas izgatavošanas veidiem. Ja jums nav 3D printera, varat apsvērt vienu no šīm iespējām. Teikšu godīgi: šo daļu izgatavošana ir milzīga sāpe.

Apļiem es nopirku 13/32 misiņa cauruli, kuras diametrs ir gandrīz precīzi 1 cm. Es to sagriezu simts 1 cm gabalos un pēc tam tos izsmidzināju ar baltu krāsu.

Trijstūriem es izmantoju smagu alumīnija foliju, kas sagriezta no vienreizējās lietošanas cepešpannas. Es no koka izveidoju trīsstūrveida formu, pēc tam ietinu formai īsas folijas sloksnes un aplīmēju. Atkal jums vajadzēs simts šo lietu, tāpēc tas prasa zināmu laiku un pacietību.

5. solis: LED joslas korpuss

LED joslu korpuss
LED joslu korpuss
LED joslu korpuss
LED joslu korpuss
LED joslu korpuss
LED joslu korpuss

Mans korpuss ir diezgan vienkāršs: divas koka sloksnes sāniem un divas organiskā stikla sloksnes augšai un apakšai. Visas detaļas ir aptuveni 102 cm garas (1 metrs gaismas diodēm, kā arī nedaudz papildu elektroinstalācijai). Sāniem jābūt nedaudz augstākiem par 1 cm, lai būtu vieta LED sloksnēm. Pēc sloksņu sagriešanas es starp tām ievietoju 3D drukātos maskas gabalus, lai izmērītu plexiglass platumu. Izgrieziet divus plexiglass gabalus stieņa platumā un garumā. Visbeidzot, izgrieziet difūzijas materiāla sloksni, lai tā ietilptu virs maskas.

Izkliedēšanai man ļoti patīk Lee filtri #216 (pilna balta difūzija). Tā ir plāna plastmasas loksne, kas nodrošina vienmērīgu izkliedi, nezaudējot daudz gaismas. Bet tā ir dārga lieta. Dažreiz jūs varat atrast mazākas loksnes pārdošanai tiešsaistē, bet viss rullis atmaksās aptuveni 125 USD. Dažas citas iespējas ir balts papīrs vai cita veida satīns vai matēta plastmasa. Populāra izvēle ir plāni plastmasas griešanas paklāji.

Pirms LED stieņa salikšanas pārliecinieties, vai pie LED sloksnēm ir pielodēti atbilstoši savienotāji. Daudzām sloksnēm ir iepriekš pielodēti vadi, tāpēc varat tos vienkārši izmantot.

Es sāku montāžu, pieskrūvējot plexiglass augšējo gabalu uz koka malām (skat. Fotoattēlu). Tad es to apgāzu un ievietoju difūzijas sloksni, kam sekoja 10 maskas gabali. Kad es biju apmierināts ar atstarpēm, es tos piestiprināju ar dažiem karstas līmes punktiem.

Pēc tam novietojiet divas LED sloksnes blakus maskām. Pārliecinieties, vai gaismas diodes ir vērstas uz leju, un pārliecinieties, ka katra gaismas diode ir vienā līnijā ar atbilstošo maskas caurumu. Pievienojiet karstu līmi vai lenti, lai noturētu LED sloksnes. Visbeidzot, pieskrūvējiet organiskā stikla aizmugurējo daļu.

Izpildiet testa modeli. Jauks darbs! Jūs esat paveicis visgrūtāko daļu!

6. darbība: vadības panelis

Vadības panelis
Vadības panelis
Vadības panelis
Vadības panelis
Vadības panelis
Vadības panelis
Vadības panelis
Vadības panelis

Vadības panelis ir daļa no radošākās brīvības. Tam vienkārši jāuztur visas vadības ierīces un elektronika kopā ar LED joslu. Vienkāršākais dizains ir taisnstūrveida dēļi: urbiet pogas pogām un vadības ierīcēm un piestipriniet LED joslu. Man patīk apvienot koku, organisko stiklu un citus materiālus, lai radītu sava veida steampunk / retro-modernu izskatu. Šajā gadījumā es izgriezu lieljaudas plexiglass gabalu, lai turētu galvenās algoritma izvēles pogas, un koka stieni, lai turētu pārējo elektroniku. Es urbju caurumus, lai tie atbilstu arkādes pogu lielumam. Elektroinstalācija ir redzama aizmugurē, bet man patīk!

Es arī izurbju vietu 7 segmentu displejam, rotācijas kodētājam un dažiem vadiem aizmugurē. Es nogriezu dado augšpusē, lai turētu LED joslu.

7. solis: pogu pogas

Pogu iejūgs
Pogu iejūgs
Pogu iejūgs
Pogu iejūgs
Pogu iejūgs
Pogu iejūgs

Daudzu pogu pieslēgšana var sagādāt patiesas sāpes. Par laimi, cilvēki, kas ražo arkādes mašīnas, ir izstrādājuši dažus standarta savienotājus, kurus varat izmantot. Katram pogas savienotāja kabelim ir divi vadi, viens VCC un otrs zemēšanai. Vienā galā ir lāpstiņas savienotāji, kas atbilst vadiem pogas aizmugurē - piestipriniet zemi pie "parasti atvērtā" vada, bet VCC - uz "parasto" vadu. Šajā konfigurācijā, kad lietotājs nospiež pogu, ķēde ir pabeigta, un mikrokontrolleris uz atbilstošās ievades tapas nolasīs HIGH.

Kabeļa otrā galā ir JST savienotājs (mazā baltā lieta). Jauki par šiem savienotājiem ir tas, ka tie tikai vienā veidā nonāk tvertnē, tāpēc nav iespējams nejauši mainīt VCC un zemi.

Tas, ko es darīju, bija izveidot nelielu instalāciju šiem savienotājiem. Es pielodēju virkni JST trauku uz protoborda gabala un pēc tam vadu atpakaļ Dupont savienotājos, kurus pievienoju mikrokontrolleram. Sarkanais vads ir VCC līnija, un tas savienojas ar visām JST tvertnēm. Zilie vadi ir tie, kas katrai pogai ir atsevišķi.

8. solis: rotācijas kodētājs

Rotācijas kodētājs
Rotācijas kodētājs

Rotējošais kodētājs ļauj lietotājam kontrolēt algoritma ātrumu. Es izmantoju moduli, kas tiek piegādāts kā sadalīšanas dēlis, kas ietver divu datu līniju (dzelteno vadu) pievilkšanas rezistorus. Arī šī ir poga, bet es šo funkciju neizmantoju. Pārējie divi vadi ir VCC un zemējums. Es arī saņēmu jauku tauku kloķi.

Man patīk rotējošais kodētājs, atšķirībā no potenciometra, tas, ka tas mikrokontrolleram tikai signalizē par rotāciju (pulksteņrādītāja virzienā un pretēji pulksteņrādītāja virzienam), tāpēc ir viegli mainīt vērtības interpretāciju. Piemēram, varat tam piešķirt paātrinājuma sajūtu (piemēram, peli), kad lietotājs to ātri pagriež.

9. darbība: 7 segmentu displejs

7 segmentu displejs
7 segmentu displejs

Šeit nav daudz ko teikt. Šīs lietas ir visur. Gaismas diodes kontrolē mikroshēma ar nosaukumu TM1637, kas sazinās ar mikrokontrolleru, izmantojot vienkāršu sērijas protokolu. Es izmantoju esošu bibliotēku, kas ļauj man pateikt, kādu numuru es vēlos parādīt, un tā dara pārējo.

Aizmugurē ir četras tapas: VCC, zemējums un divi vadi seriālajam protokolam. Es lodēju 4 kontaktu galvenes gabalu, kas savienojas ar atbilstošo Dupont savienotāju, kas savienots ar mikrokontrolleri.

10. solis: galvenā kontrollera valde

Galvenā kontrolieru padome
Galvenā kontrolieru padome
Galvenā kontrolieru padome
Galvenā kontrolieru padome
Galvenā kontrolieru padome
Galvenā kontrolieru padome

Galvenajā kontrollera panelī atrodas pats mikrokontrolleris un visi vadības ierīču savienotāji (pogas, displejs, gaismas diodes). Mikrokontrolleris ir ESP32, kas nodrošina lielu skaitļošanas jaudu un atmiņu, kā arī atklāj daudz tapu. Elektroinstalācija ir diezgan standarta, taču es norādīšu dažus interesantus elementus.

PIEZĪME. Iespējams, vēlēsities pirms galvenās plates pieslēgšanas apskatīt kodu (https://github.com/samguyer/AlgorithmMachine), lai jūsu pin konfigurācija atbilstu manai.

Es pielodēju mucas domkratu uz dēļa, lai iegūtu jaudu, un savienoju divus garenus vara vadus pie plāksnes strāvas un zemes sliedēm. Iemesls ir tāds, ka LED josla var patērēt daudz enerģijas, ja ir iestatīts augsts spilgtums, un es nevēlos visu šo jaudu izvilkt caur mikrokontrollera USB savienotāju.

Lai vienkāršotu pogas vadu savienošanu, es pielīmēju taisnā leņķa galvenes sloksni no vīrieša uz sievieti visā mikrokontrollera pusē (tāfeles augšējā pusē, kā parādīts attēlā). Dupont savienotāji no pogas siksnas kontaktdakšas tieši šajā galvenē.

SVARĪGI: pogu strāvas padevei (sarkanais vads) jāpievieno 3,3 V strāvas vads mikrokontrollerī. ESP32 ir 3,3 V mikroshēma, tāpēc datu tapām jebkad jāpievieno tikai 3,3 V avoti.

Mikrokontrolleris caur 5V USB tapu un zemi piesūc strāvas (vai piespiež) sliedēm (tāfeles apakšējā puse, kā parādīts attēlā). Visi pārējie sarkanie/melnie vadi ir VCC un iezemēti.

Abi zilie vadi ir LED sloksņu (WS2812) datu līnijas. Dzeltenais/zaļais pāris ir rotācijas kodētāja datu līnijas, un dzeltenais pāris ir sērijas savienojums ar 7 segmentu displeju.

11. solis: montāža

Montāža
Montāža
Montāža
Montāža
Montāža
Montāža
Montāža
Montāža

Šī fotogrāfiju sērija parāda galīgo montāžu un elektroinstalāciju. Es arī pievienoju galveno kontrollera paneli aizmugurē augšpusē.

Pirms ieslēgšanas es veicu dažas pārbaudes, lai izvairītos no nepatīkamiem pārsteigumiem. Jo īpaši, lai pārliecinātos, ka man nav strāvas/zemes savienotāju atpakaļgaitā un nav īssavienojumu. Iestatiet multimetru, lai pārbaudītu nepārtrauktību - tas pīkstēs, kad starp abiem vadiem būs elektrisks ceļš. Piestipriniet vienu vadu pie kopējās VCC līnijas pie pogām. Pēc tam pievienojiet otru vadu pie katras zirglietas tapas pa vienam. Multimetram vajadzētu pīkstēt tikai tad, kad nospiežat pogu. Ja saņemat citus pīkstienus, tas nozīmē, ka jums ir apgriezts signāls vai īss. Izsekojiet to un salabojiet to, pirms ieslēdzat strāvu!

12. darbība: kods

Vispirms atveriet savu Arduino IDE un pārliecinieties, vai jums ir instalēta FastLED bibliotēka.

Lejupielādējiet algoritma mašīnas kodu no GitHub:

github.com/samguyer/AlgorithmMachine.git

Jūs varat to klonēt tieši savā Arduino mapē vai kopēt ar roku.

Pirms augšupielādes pārliecinieties, vai tapas iestatījumi atbilst jūsu aparatūras konfigurācijai. Esmu ievietojis visus tapas iestatījumus faila augšdaļā.

Augšupielādējiet un izbaudiet!

13. darbība. Kā lietot

Algoritmu mašīna ir vienkārši lietojama, un gandrīz jebkura pogu kombinācija ir kārtībā!

Vispirms izmantojiet datu pogas, lai inicializētu masīva vērtības. Ir trīs iespējas: (1) randomizēt, (2) pievienot vienu nejaušu vērtību un (3) mainīt masīvu. Ņemiet vērā, ka vērtības ir noturīgas, tāpēc varat vispirms kārtot tās, pēc tam pievienot troksni un pēc tam palaist citu šķirošanas vai meklēšanas algoritmu.

No citām pogu izvēlēm izvēlieties meklēšanas vai šķirošanas algoritmu. Pašlaik, izdarot šo izvēli, nav atgriezeniskās saites (kaut kas turpmākajam darbam). Pēc tam nospiediet pogu "atskaņot".

Poga kontrolē ātrumu. Varat arī nospiest "atskaņot", lai apturētu un pārtrauktu algoritma darbību.

Kad tas ir izdarīts, tas automātiski apstāsies. Jebkurā laikā varat arī nospiest citu algoritma pogu. Iekārta apturēs pašreizējo algoritmu un inicializēs jauno, bet saglabās datus tieši tā, kā iepriekšējais algoritms to atstāja.

STEM konkurss
STEM konkurss
STEM konkurss
STEM konkurss

Galvenā balva STEM konkursā

Ieteicams: