Mündəricat:

Alqoritm Maşını: 13 Addım (Şəkillərlə birlikdə)
Alqoritm Maşını: 13 Addım (Şəkillərlə birlikdə)

Video: Alqoritm Maşını: 13 Addım (Şəkillərlə birlikdə)

Video: Alqoritm Maşını: 13 Addım (Şəkillərlə birlikdə)
Video: Ən çətin məntiq testi.😉 Kim tapsa 1-ci yer. Yalnız 1 nəfər.❗❗ 2024, Iyul
Anonim
Image
Image
LED Çubuğu: Maskanı 3D çap edin
LED Çubuğu: Maskanı 3D çap edin

Mən 15 ildir universitet səviyyəsində kompüter elmlərindən dərs deyirəm və təcrübəm daha çox proqramlaşdırma tərəfində olsa da, hələ də axtarış və çeşidləmə üçün standart alqoritmləri əhatə etmək üçün çox vaxt sərf edirəm. Tədris nöqteyi nəzərindən əsas məsələ hesablama mürəkkəbliyidir: hər bir alqoritm müəyyən bir ölçü daxil edildikdə nə qədər vaxt tələb edir? Ancaq çoxsaylı nüanslar var. Məsələn, alqoritmlərin xüsusi giriş dəyərlərindən (ölçüdən fərqli olaraq) fərqli işləmə vaxtları varmı? Hansı hallarda bir sıralama alqoritmini digərindən üstün tutardınız? Bu mövzuları mücərrəd şəkildə müzakirə etsək də, fərqli alqoritmlərin müxtəlif şərtlərdə necə işlədiyini görməyin asan bir yolu olmadığını həmişə məni narahat edirdi.

Məqsədlər

Bu layihə üçün əsas məqsədim tələbələrə alqoritmləri görselleştirmek və araşdırmaq üçün interaktiv bir ekran yaratmaq idi. Dəyərlər (tam ədədlər) üzərində işləyən alqoritmlərlə məhdudlaşdım, buna görə də serialın məzmununu görüntüləmək üçün ünvanlı bir RGB LED şeridi istifadə edə bilərəm. Array 100 elementdən ibarətdir və hər tam ədəd göy qurşağı sırası ilə bir rəngə uyğunlaşdırılır, belə ki, massivin sıralanması, qismən sıralanması və ya təsadüfi seçilməsi dərhal aydın olur. Dəyərlərə əlavə olaraq, alqoritmin idarəetmə aspektlərini, məsələn, hazırda hansı elementlərin müqayisə edildiyini və ya dəyişdirildiyini görselleştirmenin bir yolunu istədim.

Xüsusi məqsədlər bunlardır:

- Müxtəlif axtarış və çeşidləmə alqoritmləri təqdim edin

- Alqoritmin gedişatını vurğulayacaq şəkildə serialdakı dəyərləri görüntüləyin

- Alqoritm nəzarətini görselleştirin; xüsusən də nəzərə alınan elementlər.

- İstifadəçilərə hər zaman təsadüfi dəyərlər yaratmaq əvəzinə giriş məlumatlarının nümunələrini seçməsinə icazə verin

- İstifadəçilərə sürəti idarə etməyə və alqoritmi dayandırmağa icazə verin

-İstifadəçilərə ən yaxşı, ən pis, orta vəziyyət davranışını məcbur etməyə icazə verin (alqoritmə xas)

- Alqoritm irəlilədikcə addımların sayını göstərin

Vizualizasiya

Fiziki dizayn baxımından bu layihənin ən maraqlı hissəsi serialın görselleştirilməsidir. Məlumat və idarəetməni necə göstərəcəyim və ekran cihazının özünü necə quracağımla mübarizə apardım. Məqsədim, məlumat dəyərlərini rəngli dairələr və idarəetmə nöqtələrini məlumat dəyərlərinə işarə edən rəngli oxlar kimi göstərmək idi. Bir az təcrübədən sonra hər bir məlumat LEDinin üzərində dairəvi maska və hər bir nəzarət LEDinin üzərində üçbucaqlı bir maska olan 100 RGB LED (WS2812) iki paralel şeridi olan bir dizayn üzərində dayandım. 10 cüt dairə və üçbucaqdan ibarət 3 ölçülü bir maska modeli hazırladım və sonra bu modullardan 10 -u cəmi 100 dairə və 100 üçbucaq üçün 3D çap etdim. Maskamın ölçüsü və aralığı metr başına 100 LED olan zolaqlar üçün nəzərdə tutulmuşdur. 3D model faylları bu təsvirdə daha sonra verilmişdir.

Elektronika və korpus

Cihazın qalan hissəsi elektronika baxımından sadədir. İki LED şeridinə əlavə olaraq, bir dəstə ani düymə, fırlanan bir kodlayıcı (sürəti idarə etmək üçün) və 7 seqmentli ekran (addımları göstərmək üçün) var. Çox sayda düymə və idarəetmə vasitəsi ilə bir çox sancaq açdığı və kifayət qədər güclü olduğu üçün bir ESP32 mikro nəzarətçisindən istifadə etməyi seçdim. Kablolama strategiyasına keçəcəyəm, amma olduqca sadədir. Daha az sancaq istifadə etmək istəyirsinizsə, ehtimal ki, shift qeydləri ilə ağıllı bir şey edə bilərsiniz.

Bu cihaz üçün bir çox fərqli formada korpus qura bilərsiniz. Əvvəlcə yuxarıda LED şeridi olan böyük bir düzbucaqlı lövhə və ortada düymələr şəbəkəsi kimi təsəvvür edirdim. Sona çatdığım forma, 1960-cı illərin kosmos dövrü texnologiyasına bir növ baxışından ilham aldı. Şaquli istiqamətdə LED şeritləri ilə də qura bilərsiniz. Və ya LED hissəsini daha da genişləndirin - bütün divarı ayrı bir idarəetmə paneli ilə doldurun.

Proqram təminatı

Bu cihazın kodu GitHub -da sərbəst şəkildə mövcuddur və bunun necə işlədiyini və necə konfiqurasiya olunacağını sənədləşdirmək üçün əlimdən gələni etmişəm. Lazım olan yeganə xarici kitabxana, WS2812 zolaqlarını idarə etmək üçün FastLED -dir.

Təchizat

Elektronika

1 ESP32 inkişaf lövhəsi (məsələn, 2 WS2812 və ya oxşar LED şeridi, metr başına sıxlıq 100 LED (məsələn, 1 Üçbucaqlı "başlat" düyməsi (məsələn, 12 anlıq düymələr (məsələn, https://amzn.com/B01N4D4750) - istəsəniz fərqli formalar

1 Paket (20) əvvəlcədən qurulmuş düymə bağlayıcıları (məsələn, 1 paket JST bağlayıcıları (məsələn, 1 Rotary kodlayıcı (məsələn, Döner kodlayıcı üçün 1 düymə (məsələn, 1 Paket Dupont bağlayıcıları (məsələn, https://amzn.com/B014YTPFT8) - sıxma alətini də almağa dəyər.

1 Barrel jakı (güc üçün) (məsələn, 1 TM1637 7 seqmentli rəqəmsal ekran (məsələn, Lehim və naqillər

3D model faylları

Thingiverse-də bir cüt 10 işıq modulu üçün 3D modeli tapa bilərsiniz:

www.thingiverse.com/thing:4178181

Bu modeli cəmi 10 modul üçün beş dəfə çap etməlisiniz.

Proqram təminatı

github.com/samguyer/AlgorithmMachine

Mühafizə

Taxta, pleksiglas, paslanmayan polad boltlar və vintlər

Diffuziya materialı. Ən çox sevdiyim Lee Filters #216 tam ağ yayılmasıdır, amma başqa variantlar da var. Düz ağ kağız da yaxşı bir iş görür.

Addım 1: Alqoritmlər 101

Bir çox insan kompüter elminin mahiyyətcə proqramlaşdırma öyrəndiyini düşünür. Ancaq bu sahənin əsl ürəyi və alqoritmi: problemlərin həlli üçün sistematik prosedurların və onların qiymətinin öyrənilməsi (adətən, nə qədər çəkdikləri). Alan Turing, Alonzo Church və Edsger Dijkstra kimi sahədəki əsas simalar, bu fikirləri kompüterlərdən əvvəl bildiyimiz kimi düşünürdülər.

Xüsusi bir problemi həll etmək üçün bir alqoritmin əsas xüsusiyyəti, detallı və dəqiq olmasıdır ki, kimsə bunun necə işlədiyini başa düşmədən bir həll əldə etmək üçün istifadə edə bilsin; Sadəcə mexaniki şəkildə addımları izləyin və doğru cavabı alacaqsınız. Bunun proqramlaşdırma kompüterlərinə necə kömək etdiyini görə bilərsiniz, çünki bu səviyyəli detala ehtiyac duyurlar. Kompüter, bir adamın edə biləcəyi kimi əskik detalları doldura və ya mühakimə yürütə bilməz.

Nə qədər çəkəcək?

Ətraflı bir prosedura sahib olduqdan sonra təbii bir sual budur ki, cavabı almaq üçün nə qədər vaxt lazımdır? Adi vaxt vahidlərindən istifadə edə bilmərik, çünki bu işi kimin yerinə yetirdiyindən asılıdır (bir insanın super kompüterlə müqayisədə bir şeyi nə qədər tez hesablaya biləcəyini müqayisə edin). Bundan əlavə, nə qədər məlumatımız olduğuna bağlıdır. Aydındır ki, bir milyon telefon nömrəsinin siyahısını axtarmaq yüzdən çoxdur.

Bir alqoritmin dəyərini təsvir etmək üçün əvvəlcə bir "addımı" təmsil edən prosedurdan bir əməliyyat seçirik - ümumiyyətlə iki ədədin müqayisəsi və ya əlavə edilməsi kimi sadə bir işin görülməsi üçün müəyyən bir vaxt lazımdır. Sonra bir neçə məlumat elementi alqoritminin neçə addım atacağını izah edən bir düsturla qarşılaşırıq. Tarixi səbəblərə görə demək olar ki, həmişə böyük hərf N olan məlumat elementlərinin sayını ifadə edirik.

Məsələn, N telefon nömrələrinin siyahısına baxmaq N addımlar atır. Siyahıya iki dəfə baxmaq 2N addımlar atır. Bunların hər ikisinə xətti vaxt alqoritmi deyilir - ümumi addımların sayı giriş ölçüsünün bir neçə qatını təşkil edir. Digər alqoritmlər kvadratik (N kvadrat zaman) və ya kub (N kublu) və ya logarifmik (log N) və ya bunların birləşməsidir. Ən çətin hesablama problemlərindən bəziləri eksponensial vaxt alqoritmləri tələb edir (2^N).

Tamam, bəs nə?

Məlumat elementlərinin sayı az olduqda çox da önəmli deyil. Məsələn, N = 10 üçün 10N, N kvadratının adıdır. Bəs N = 1000? yoxsa N = 1000000? Bir milyon kvadrat olduqca böyük bir rəqəmdir. Çox sürətli bir kompüterdə belə, giriş kifayət qədər böyük olarsa, kvadratik bir alqoritm uzun müddət çəkə bilər. Eksponensial alqoritmlər daha çox əziyyət çəkir: N = 50 üçün hər bir addımı yalnız bir nanosaniyə (saniyənin 1 milyardda biri) olan bir kompüterdə belə, eksponensial alqoritm başa çatması iki həftə çəkəcəkdir. Vay!

Ölçünün digər ucunda çox sürətli logarifmik vaxt alqoritmlərimiz var. Giriş vaxtı eksponensial zamanın əksidir: N giriş ölçüsü verildikdə, addımların sayı 2^T = N düsturundakı T göstəricisidir. Məsələn, əgər giriş ölçümüz bir milyarddırsa, onda log vaxt alqoritmi yalnız 30 tələb edir. addımlar, 2^30 = 1, 000, 000, 000 -dən bəri. Bu necə şirindir?! ??!

Milyonlarla və ya milyardlarla giriş ölçüsünü kim maraqlandırır? Fikir verin: Facebookda neçə istifadəçi var? Google tərəfindən neçə veb səhifəsi indekslənir? İnsan genomunda neçə əsas cüt var? Hava simulyasiyasına neçə ölçü düşür?

Addım 2: Alqoritmlər

Alqoritm Maşını hazırda aşağıdakı alqoritmləri həyata keçirir. Onlardan ikisi axtarış alqoritmləridir (siyahıda müəyyən bir dəyər tapın), qalanları sıralama alqoritmləridir (dəyərləri qaydasına salın).

Xətti axtarış

Əvvəldən başlayaraq dəyərlərin siyahısını bir -bir axtarın. Xətti vaxt tələb olunur.

İkili axtarış

Siyahını dəfələrlə yarıya bölməklə axtarın. Günlük vaxtı tələb olunur, ancaq işləmək üçün siyahı sıralanmalıdır.

Baloncuk çeşidi

Sırası olmayan bir neçə dəfə qonşu elementləri dəyişdirən siyahını sıralayın. Kvadratik vaxt tələb olunur.

Daxil etmə çeşidi

Artıq sıralanmış dəyərlər siyahısında hər bir elementi öz yerinə uyğun olaraq yerləşdirərək siyahını sıralayın. Kvadratik vaxt tələb olunur.

Quicksort

Siyahını dəfələrlə yarıya bölməklə medianadan daha az olan bütün dəyərləri birinci yarıya və ortadan daha böyük olan bütün dəyərləri ikinci yarıya köçürərək siyahını sıralayın. Təcrübədə medianı səmərəli tapa bilmirik, buna görə təsadüfi bir dəyər seçirik. Nəticədə bu alqoritm ən pis halda kvadratik ola bilər, lakin adətən N * logN vaxtını tələb edir.

Sıralamanı birləşdirin

Siyahını yarıya bölməklə, iki yarısını ayrı -ayrılıqda sıralamaqla (birləşmə sıralamasından istifadə etməklə) və sonra dəyərləri bir -birindən ayıraraq onları birləşdirməklə. Həmişə N * logN vaxtını tələb edir.

Yığın çeşidi

Günlük müddətində ən kiçik dəyəri tapmağa imkan verən bir yığın adlı bir məlumat quruluşu quraraq siyahını sıralayın. Həmişə N * logN vaxtını tələb edir.

Bitonik növ

Sıralama və seçmə növünü birləşdirmək kimi, siyahını yarıya bölün, yarısını sıralayın və yenidən birləşdirin. Bu alqoritm N * logN * logN vaxtını tələb edir, lakin onun paralelləşdirilməsinin asan olması üstünlüyünə malikdir.

Addım 3: LED Çubuğu: Maskanı 3D Çap et

LED Çubuğu: Maskanı 3D çap edin
LED Çubuğu: Maskanı 3D çap edin
LED Çubuğu: Maskanı 3D çap edin
LED Çubuğu: Maskanı 3D çap edin

LED çubuğunu qurmağın ilk addımı, işıqlara forma verən maskanı 3D çap etməkdir. Hər bir modul dizinin on elementini, 10 dəyərini (dairələrini) və 10 göstəricisini (üçbucağını) əhatə edir, buna görə də ümumilikdə 10 modula ehtiyacınız olacaq. Burada təqdim etdiyim STL faylında iki modul nümunəsi var, buna görə də beş çap dövrü etməlisiniz. Ən yaxşı 3D printerim yoxdur, buna görə də bir fayl və zımpara istifadə edərək əllə təmizləməli oldum. Ən əsası dairəvi və üçbucaqlı deliklərin təmiz olmasıdır.

Fotoşəkillərdə mənim test quruluşumu görəcəksiniz: İki LED şeridini aşağı bantladım və mikrokontrolörlü çörək taxtasına bağladım. Bu addım lazım deyil, amma korpusu yığmağa başlamazdan əvvəl necə görünəcəyini görmək istədim. İki LED şeridində maska modullarını düzdüm və təsadüfi rənglərlə sadə bir eskiz çəkdim. Difüzyon materialının bir zolağı ilə şəkillər və rənglər həqiqətən pop edir.

Addım 4: LED Bar Alternativləri

LED Bar Alternativləri
LED Bar Alternativləri
LED Bar Alternativləri
LED Bar Alternativləri
LED Bar Alternativləri
LED Bar Alternativləri

Bu layihəyə ilk dəfə başladığımda LED maska hazırlamağın başqa yollarını sınadım. 3D printeriniz yoxdursa, bu variantlardan birini nəzərdən keçirə bilərsiniz. Düzünü deyim: bu hissələri düzəltmək böyük bir əziyyətdir.

Dairələr üçün, təxminən 1 sm diametrli 13/32 pirinç boru aldım. Yüz 1smlik seqmentlərə kəsdim və sonra ağ rəngə boyadım.

Üçbucaqlar üçün birdəfəlik çörək qabından kəsilmiş ağır alüminium folqa istifadə etdim. Ağacdan üçbucaqlı bir forma düzəltdim, sonra formanın ətrafına qısa folqa zolaqları büküb bantladım. Yenə də yüz şeyə ehtiyacınız olacaq, buna görə bir az vaxt və səbr lazımdır.

Addım 5: LED Çərçivə Paneli

LED Bar Qutusu
LED Bar Qutusu
LED Bar Qutusu
LED Bar Qutusu
LED Bar Qutusu
LED Bar Qutusu

Kassam olduqca sadədir: yanları üçün iki taxta zolaq və üst və alt üçün iki zolaqlı pleksiglas. Bütün hissələr təxminən 102 sm uzunluğundadır (LEDlər üçün 1 metr, üstəgəl naqilləri yerləşdirmək üçün bir az əlavə). LED şeritləri üçün yer açmaq üçün tərəflər 1 sm -dən bir qədər hündür olmalıdır. Şeritləri kəsdikdən sonra pleksiglas üçün eni ölçmək üçün aralarında 3D çaplı maska parçalarını sıxdım. Çubuğun eni və uzunluğundan iki ədəd pleksiglas kəsin. Nəhayət, maskanın üzərinə oturacaq şəkildə diffuziya materialının bir zolağını kəsin.

Diffuziya üçün Lee Filters #216 -nı çox sevirəm (tam ağ yayılma). Çox işıq itirmədən hətta diffuziya verən nazik bir plastik təbəqədir. Amma bahalı maldır. Bəzən İnternetdə satış üçün daha kiçik çarşaflar tapa bilərsiniz, ancaq bütün bir rulon sizi təxminən 125 dollar geri qoyacaq. Bəzi digər variantlar ağ kağız və ya hər hansı bir saten və ya buzlu plastikdir. Populyar seçim nazik plastik kəsmə paspaslardır.

LED çubuğunu yığmadan əvvəl, LED şeridlərinə lehimlənmiş uyğun bağlayıcıların olduğundan əmin olun. Bir çox zolaqlar əvvəlcədən lehimlənmiş tellərlə gəlir, buna görə də onlardan istifadə edə bilərsiniz.

Pleksiglasın üst hissəsini taxta tərəflərə vidalayaraq montaja başladım (şəkilə bax). Sonra çevirdim və diffuziya zolağını, sonra 10 maska parçasını qoydum. Aralıqdan məmnun olduqdan sonra onları bir neçə nöqtə isti yapışqan ilə qoydum.

Sonra, maskaların üstünə iki LED şeridi yan -yana qoyun. LED -lərin aşağıya baxdığından və hər bir LED -in maskadakı uyğun çuxurla üst -üstə düşdüyündən əmin olun. LED şeridlərini yerində saxlamaq üçün bir az isti yapışqan və ya lent əlavə edin. Nəhayət, pleksiglasın arxa hissəsini vidalayın.

Test nümunəsi işlədin. Gözəl iş! Ən çətin hissəni etdin!

Addım 6: İdarəetmə Paneli

İdarə paneli
İdarə paneli
İdarə paneli
İdarə paneli
İdarə paneli
İdarə paneli
İdarə paneli
İdarə paneli

İdarəetmə paneli ən yaradıcı azadlıq verən hissədir. Yalnız LED çubuğu ilə birlikdə bütün idarəetmələri və elektronikanı tutmaq lazımdır. Ən sadə dizayn düzbucaqlı lövhələrdir: düymələr və idarəetmə üçün deliklər qazın və LED çubuğunu bağlayın. Bir növ steampunk / retro-modern görünüş vermək üçün taxta, pleksiglas və digər materialları birləşdirməyi sevirəm. Bu vəziyyətdə, əsas alqoritm seçim düymələrini tutmaq üçün bir parça ağır pleksiglas və elektronikanın qalan hissəsini tutmaq üçün taxta bir çubuq kəsdim. Arcade düymələrinin ölçüsünə uyğun deliklər qazdım. Kabel arxada görünür, amma bəyəndim!

7 seqmentli ekran, fırlanan kodlayıcı və arxadakı bəzi naqillər üçün də yer açdım. LED çubuğunu tutmaq üçün yuxarıdan bir dado kəsdim.

Addım 7: Düymə Qoşqu

Düymə Qoşqu
Düymə Qoşqu
Düymə Qoşqu
Düymə Qoşqu
Düymə Qoşqu
Düymə Qoşqu

Bir çox düyməni bağlamaq əsl ağrı ola bilər. Xoşbəxtlikdən, arcade maşınları istehsal edən insanlar, istifadə edə biləcəyiniz bəzi standart bağlayıcılar hazırladılar. Hər bir düymə bağlayıcı kabeli iki telə malikdir, biri VCC üçün, biri də torpaq üçün. Bir ucunda düymənin arxasındakı uclara uyğun olan kürək bağlayıcıları var - zəmini "normal olaraq açıq" ucuna, VCC -ni isə "ümumi" ucuna bağlayın. Bu konfiqurasiyada, istifadəçi düyməni basdıqda, dövrə tamamlanır və mikro nəzarətçi müvafiq giriş pinində YÜKSƏ oxuyacaq.

Kabelin digər ucunda JST konnektoru var (kiçik ağ şey). Bu bağlayıcıların gözəl tərəfi odur ki, onlar yalnız bir şəkildə qaba daxil olurlar, buna görə də təsadüfən VCC və zəmini geri çevirmək üçün heç bir yol yoxdur.

Etdiyim şey, bu bağlayıcılar üçün kiçik bir qoşqu qurmaqdır. Bir sıra JST qablarını bir protoboard üzərinə lehimləyirəm və sonra telləri mikro nəzarətçiyə qoşacağım Dupont bağlayıcılarına bağlayıram. Qırmızı tel VCC xəttidir və bütün JST yuvalarına qoşulur. Mavi tellər hər düymə üçün ayrıdır.

Addım 8: Rotary Encoder

Rotary Encoder
Rotary Encoder

Döner kodlayıcı istifadəçiyə alqoritmin sürətini idarə etməyə imkan verir. İki məlumat xətti (sarı tellər) üçün çəkmə rezistorları olan bir qırılma lövhəsi olaraq gələn bir moduldan istifadə edirəm. Bu da bir düymədir, amma bu xüsusiyyəti istifadə etmirəm. Digər iki tel VCC və torpaqdır. Gözəl bir yağ düyməsi də aldım.

Potensialiometrdən fərqli olaraq, fırlanan bir kodlayıcıdan bəyəndiyim şey, sadəcə mikrokontrolörün fırlanmasını (saat yönünün əksinə saat yönünün əksinə) siqnal etməsidir, buna görə dəyərin necə şərh olunacağını dəyişdirmək asandır. Məsələn, istifadəçi sürətlə fırlandıqda ona (siçan kimi) bir sürət hissi verə bilərsiniz.

Addım 9: 7 seqmentli ekran

7 seqmentli ekran
7 seqmentli ekran

Burada çox söz yoxdur. Bu şeylər hər yerdə var. LED -lər sadə bir protokol vasitəsilə mikro nəzarətçi ilə əlaqə quran TM1637 adlı bir çip tərəfindən idarə olunur. Hansı nömrəni göstərmək istədiyimi söyləməyimə imkan verən mövcud bir kitabxanadan istifadə edirəm, qalanını da.

Arxada dörd sancaq var: VCC, topraklama və serial protokolu üçün iki tel. Mikro nəzarətçiyə bağlanan müvafiq Dupont bağlayıcısına qoşulan 4 pinli bir başlığı lehimlədim.

Addım 10: Əsas Nəzarət Kartı

Əsas Nəzarət Lövhəsi
Əsas Nəzarət Lövhəsi
Əsas Nəzarət Lövhəsi
Əsas Nəzarət Lövhəsi
Əsas Nəzarət Lövhəsi
Əsas Nəzarət Lövhəsi

Əsas idarəetmə lövhəsində mikrokontrolörün özü və idarəetmə elementlərinin bütün konnektorları (düymələr, ekran, LEDlər) var. Mikro nəzarətçi, çoxlu hesablama gücü və yaddaş təmin edən və çoxlu sancaqlar açan bir ESP32 -dir. Kablolama olduqca standartdır, amma bir neçə maraqlı hissəni qeyd edəcəyəm.

QEYD: Ana lövhəni bağlamağa başlamazdan əvvəl kodunuza (https://github.com/samguyer/AlgorithmMachine) baxmaq istəyə bilərsiniz ki, pin konfiqurasiyanız mənimki ilə uyğun olsun.

Güc üçün lövhəyə lövhə lehimlədim və lövhənin gücünə və yer raylarına iki bükülü mis tel bağladım. Səbəb, parlaqlığın yüksək olduğu təqdirdə LED çubuğunun çox güc çəkə bilməsidir və bu gücün hamısını mikrokontrolördəki USB konnektoru ilə çəkmək istəmirəm.

Düymə naqillərini asanlaşdırmaq üçün, mikrokontrolörün bütün tərəfində (göstərildiyi kimi lövhənin yuxarı tərəfində) kişidən qadına düz bucaqlı başlıqdan lehim etdim. Düymə qoşqusundakı Dupont bağlayıcıları birbaşa bu başlığa bağlanır.

ƏHƏMİYYƏTLİ: düymələrin gücü (qırmızı tel) mikrokontrolördəki 3.3V elektrik xəttinə qoşulmalıdır. ESP32 bir 3.3V çipidir, buna görə də məlumat pinlərinə yalnız 3.3V mənbələri bağlanmalıdır.

Mikro nəzarətçi, 5V USB pimi və torpaq vasitəsilə raylara (lövhənin aşağı tərəfi) enerji çəkir (və ya gücü itələyir). Digər qırmızı/qara tellərin hamısı VCC və torpaqdır.

İki mavi tel, LED şeritləri üçün məlumat xətləridir (WS2812s). Sarı/yaşıl cüt, fırlanan enkoder üçün məlumat xətləri, sarı cüt isə 7 seqmentli ekrana seriya bağlantısıdır.

Addım 11: Quraşdırma

Məclis
Məclis
Məclis
Məclis
Məclis
Məclis
Məclis
Məclis

Bu fotoşəkillər seriyası son montaj və naqilləri göstərir. Əsas nəzarətçi lövhəsini yuxarıdakı arxaya da bağladım.

Gücləndirmədən əvvəl xoşagəlməz sürprizlərin qarşısını almaq üçün bir neçə yoxlama apardım. Xüsusilə, geriyə heç bir güc/torpaq bağlayıcısı olmadığından və qısa dövrə olmadığından əmin olmaq üçün. Davamlılığı yoxlamaq üçün multimetrinizi təyin edin - iki aparat arasında elektrik yolu olduqda səs siqnalı verəcək. Düymələrə ümumi bir VCC xəttinə bir ip bağlayın. Sonra digər ucunu qoşqu hər pininə bir -bir bağlayın. Multimetr yalnız düyməni basdığınız zaman siqnal verməlidir. Başqa hər hansı bir səs siqnalı alsanız, geri dönüş və ya qısalma deməkdir. Gücü açmadan əvvəl izləyin və düzəldin!

Addım 12: Kod

Əvvəlcə Arduino IDE -ni açın və FastLED kitabxanasının quraşdırıldığından əmin olun.

Algoritm Maşın kodunu GitHub -dan yükləyin:

github.com/samguyer/AlgorithmMachine.git

Ya birbaşa Arduino qovluğuna kopyalaya və ya əl ilə kopyalaya bilərsiniz.

Yükləməzdən əvvəl, pin parametrlərinin hardware konfiqurasiyasına uyğun olduğundan əmin olun. Bütün pin parametrlərini faylın üstünə qoydum.

Yükləyin və zövq alın!

Addım 13: İstifadə qaydası

Alqoritm Maşının istifadəsi sadədir və demək olar ki, hər hansı bir düymə birləşməsi yaxşıdır!

Birincisi, serialdakı dəyərləri başlatmaq üçün məlumat düymələrindən istifadə edin. Üç seçim var: (1) təsadüfi, (2) bir təsadüfi dəyər əlavə edin və (3) sıra əksinə. Dəyərlərin davamlı olduğunu unutmayın, buna görə əvvəlcə onları sıralamaq, sonra səs -küy əlavə etmək, sonra fərqli bir çeşidləmə və ya axtarış alqoritmi işlətmək kimi şeylər edə bilərsiniz.

Digər düymə seçimlərindən axtarış və ya çeşidləmə alqoritmi seçin. Hal -hazırda bu seçimi edərkən heç bir əks əlaqə yoxdur (gələcək iş üçün bir şey). Sonra "oynat" düyməsini vurun.

Düymə sürəti idarə edir. Alqoritmi dayandırmaq və dayandırmaq üçün "oynamaq" düyməsini vura bilərsiniz.

Tamamlandıqda avtomatik olaraq dayanacaq. İstənilən vaxt başqa bir alqoritm düyməsini vura bilərsiniz. Maşın cari alqoritmi dayandıracaq və yenisini işə salacaq, ancaq məlumatları əvvəlki alqoritmin buraxdığı kimi saxlayacaq.

STEM Müsabiqəsi
STEM Müsabiqəsi
STEM Müsabiqəsi
STEM Müsabiqəsi

STEM yarışmasında böyük mükafat

Tövsiyə: