Spisu treści:

Maszyna algorytmów: 13 kroków (ze zdjęciami)
Maszyna algorytmów: 13 kroków (ze zdjęciami)

Wideo: Maszyna algorytmów: 13 kroków (ze zdjęciami)

Wideo: Maszyna algorytmów: 13 kroków (ze zdjęciami)
Wideo: [02] Schematy blokowe 2024, Lipiec
Anonim
Image
Image
Pasek LED: Wydrukuj maskę 3D
Pasek LED: Wydrukuj maskę 3D

Uczę informatyki na poziomie uniwersyteckim od 15 lat i chociaż moja wiedza jest bardziej związana z programowaniem, nadal spędzam dużo czasu na omawianiu standardowych algorytmów wyszukiwania i sortowania. Z punktu widzenia nauczania, centralną kwestią jest złożoność obliczeniowa: ile czasu zajmuje każdy algorytm przy danych wejściowych o określonej wielkości? Ale jest wiele niuansów. Na przykład, czy algorytmy mają różne czasy działania w zależności od określonych wartości wejściowych (w przeciwieństwie do rozmiaru)? W jakich przypadkach wybrałbyś jeden algorytm sortujący zamiast innego? Chociaż omawiamy te kwestie w sposób abstrakcyjny, zawsze przeszkadzało mi, że nie ma łatwego sposobu, aby zobaczyć, jak różne algorytmy działają w różnych warunkach.

Cele

Moim nadrzędnym celem w tym projekcie było stworzenie interaktywnego wyświetlacza dla uczniów, aby wizualizować i badać algorytmy. Ograniczyłem się do algorytmów, które działają na tablicach wartości (całkowitych), dzięki czemu do wizualizacji zawartości tablicy mogę użyć adresowalnej taśmy LED RGB. Tablica ma 100 elementów, a każda liczba całkowita jest odwzorowana na kolor w kolejności tęczy, dzięki czemu od razu widać, kiedy tablica jest sortowana, częściowo sortowana lub losowo. Oprócz wartości chciałem jednak uzyskać sposób na wizualizację aspektów kontrolnych algorytmu – na przykład, które elementy tablicy są obecnie porównywane lub zamieniane.

Cele szczegółowe to:

- Zapewnij różnorodne algorytmy wyszukiwania i sortowania

- Wizualizuj wartości w tablicy w sposób podkreślający postęp algorytmu

- Wizualizacja sterowania algorytmem; w szczególności rozważane elementy.

- Pozwól użytkownikom wybierać wzorce danych wejściowych, zamiast zawsze generować losowe wartości

- Pozwól użytkownikom kontrolować prędkość i wstrzymywać algorytm

- Zezwalaj użytkownikom na wymuszanie zachowania najlepszego, najgorszego przypadku, średniego przypadku (specyficzne dla algorytmu)

- Pokaż liczbę kroków w miarę postępu algorytmu

Wyobrażanie sobie

Z fizycznego punktu widzenia najbardziej interesującą częścią tego projektu jest wizualizacja tablicy. Zmagałem się z tym, jak pokazać dane i sterowanie oraz jak zbudować samo urządzenie wyświetlające. Moim celem było pokazanie wartości danych jako kolorowych kółek, a punktów kontrolnych jako kolorowych strzałek, które wskazują wartości danych. Po kilku eksperymentach zdecydowałem się na projekt z dwoma równoległymi paskami 100 diod LED RGB (WS2812) z okrągłą maską nad każdą diodą LED danych i trójkątną maską nad każdą kontrolną diodą LED. Zrobiłem model 3D maski z 10 parami kół i trójkątów, a następnie wydrukowałem w 3D 10 takich modułów, w sumie 100 kół i 100 trójkątów. Rozmiar i rozstaw mojej maski jest przystosowany do pasków z 100 diodami LED na metr. Pliki modeli 3D znajdują się w dalszej części tego opisu.

Elektronika i obudowa

Reszta urządzenia jest prosta z punktu widzenia elektroniki. Oprócz dwóch pasków LED jest kilka chwilowych przycisków, enkoder obrotowy (do regulacji prędkości) i 7-segmentowy wyświetlacz (do pokazywania kroków). Przy tak wielu przyciskach i kontrolkach zdecydowałem się na użycie mikrokontrolera ESP32, ponieważ odsłania on wiele pinów i ponieważ jest dość wydajny. Omówię strategię okablowania, ale jest ona dość podstawowa. Prawdopodobnie mógłbyś zrobić coś mądrego z rejestrami przesuwnymi, jeśli chcesz użyć mniejszej liczby pinów.

Obudowę do tego urządzenia można zbudować w wielu różnych formach. Początkowo wyobrażałem sobie to jako dużą prostokątną tablicę z paskiem LED u góry i siatką przycisków pośrodku. Forma, w jakiej się znalazłem, jest inspirowana czymś w rodzaju spojrzenia na technologię ery kosmicznej z lat 60-tych. Można go również zbudować z taśmami LED w orientacji pionowej. Możesz też znacznie powiększyć część LED - wypełnić całą ścianę - za pomocą oddzielnego panelu sterowania.

Oprogramowanie

Kod dla tego urządzenia jest dostępny bezpłatnie na GitHubie i zrobiłem co w mojej mocy, aby udokumentować, jak to działa i jak je skonfigurować. Jedyną zewnętrzną biblioteką, której potrzebujesz, jest FastLED do obsługi pasków WS2812.

Kieszonkowe dzieci

Elektronika

1 płyta rozwojowa ESP32 (np.

2 taśmy LED WS2812 lub podobne, gęstość 100 diod na metr (np.

1 trójkątny przycisk „start” (np.

12 chwilowych przycisków (np. https://amzn.com/B01N4D4750) - różne kształty, jeśli chcesz

1 opakowanie (20) wstępnie okablowanych złączy przycisków (np.

1 Paczka złączy JST (np.

1 Enkoder obrotowy (np.

1 pokrętło enkodera obrotowego (np.

1 Paczka złączy Dupont (np. https://amzn.com/B014YTPFT8) -- warto też zaopatrzyć się w narzędzie do zaciskania.

1 gniazdo baryłkowe (do zasilania) (np.

1 7-segmentowy wyświetlacz numeryczny TM1637 (np.

Sprzęt do lutowania i okablowania

Pliki modeli 3D

Na Thingiverse znajdziesz model 3D pary 10 modułów świetlnych:

www.thingiverse.com/thing:4178181

Będziesz musiał wydrukować ten model pięć razy, w sumie 10 modułów.

Oprogramowanie

github.com/samguyer/AlgorithmMachine

Załącznik

Śruby i wkręty do drewna, pleksi, stali nierdzewnej

Materiał dyfuzyjny. Moim ulubionym jest Lee Filters #216 w pełni biała dyfuzja, ale są też inne opcje. Nawet zwykły biały papier dobrze sobie radzi.

Krok 1: Algorytmy 101

Wiele osób uważa, że informatyka jest zasadniczo nauką o programowaniu. Ale prawdziwym sercem i duszą tej dziedziny są algorytmy: badanie systematycznych procedur rozwiązywania problemów i ich kosztów (zwykle, ile czasu one zajmują). Czołowe postacie w tej dziedzinie, takie jak Alan Turing, Alonzo Church i Edsger Dijkstra, myśleli o tych pomysłach, zanim komputery, jakie znamy, w ogóle istniały.

Kluczową cechą algorytmu do rozwiązania konkretnego problemu jest to, że jest on szczegółowy i precyzyjny, tak aby ktoś mógł go użyć do uzyskania rozwiązania bez zrozumienia, jak to w ogóle działa; po prostu postępuj zgodnie z instrukcjami w sposób mechaniczny, a otrzymasz właściwą odpowiedź. Możesz zobaczyć, jak to pomaga w programowaniu komputerów, ponieważ potrzebują tego poziomu szczegółowości. Komputer nie może uzupełniać brakujących szczegółów ani dokonywać osądów, tak jak człowiek.

Jak długo to zajmie?

Kiedy już mamy szczegółową procedurę, naturalnym pytaniem jest, ile czasu zajmie uzyskanie odpowiedzi? Nie możemy używać zwykłych jednostek czasu, ponieważ zależy to od tego, kto wykonuje pracę (porównaj, jak szybko dana osoba może coś obliczyć w porównaniu z superkomputerem). Dodatkowo zależy to od tego, ile danych posiadamy. Najwyraźniej przeszukanie listy obejmującej milion numerów telefonów zajmuje więcej czasu niż listę stu.

Aby opisać koszt algorytmu, najpierw wybieramy w procedurze jakąś operację, która reprezentuje jeden „krok” – zwykle coś prostego, jak porównywanie lub dodawanie dwóch liczb, co zajmuje określoną ilość czasu. Następnie wymyślamy formułę, która opisuje, ile kroków zajmie algorytm przy określonej liczbie elementów danych. Ze względów historycznych prawie zawsze liczbę elementów danych oznaczamy wielką literą N.

Na przykład przeglądanie listy N numerów telefonów zajmuje N kroków. Dwukrotne przejrzenie listy wykonuje kroki 2BA. Oba te algorytmy nazywane są algorytmami czasu liniowego – całkowita liczba kroków jest pewną wielokrotnością wielkości wejściowej. Inne algorytmy są kwadratowe (N do kwadratu) lub sześcienne (N do sześcianu) lub logarytmiczne (log N) lub ich kombinacja. Niektóre z najtrudniejszych problemów obliczeniowych wymagają algorytmów czasu wykładniczego (2^N).

Ok, i co?

Gdy liczba elementów danych N jest mała, nie ma to większego znaczenia. Na przykład, dla N=10, 10N jest tą nazwą jako N do kwadratu. Ale co z N=1000? lub N=1000000? Milion do kwadratu to całkiem spora liczba. Nawet na bardzo szybkim komputerze algorytm kwadratowy może zająć dużo czasu, jeśli dane wejściowe są wystarczająco duże. Algorytmy wykładnicze są znacznie bardziej kłopotliwe: dla N=50 ukończenie algorytmu wykładniczego zajęłoby dwa tygodnie, nawet na komputerze, w którym każdy krok trwa zaledwie jedną nanosekundę (1 miliardowa część sekundy). Auć!

Na drugim końcu skali mamy algorytmy czasu logarytmicznego, które są bardzo szybkie. Czas rejestrowania jest przeciwieństwem czasu wykładniczego: przy danym rozmiarze wejściowym N, liczba kroków jest wykładnikiem T we wzorze 2^T = N. Na przykład, jeśli nasz rozmiar wejściowy wynosi jeden miliard, algorytm czasu rejestrowania wymaga tylko 30 kroków, ponieważ 2^30 = 1 000 000 000. Jakie to słodkie?!??!

Możesz się zastanawiać, kogo obchodzą wielkości wejściowe milionów lub miliardów? Pomyśl o tym: ilu użytkowników jest na Facebooku? Ile stron internetowych jest indeksowanych przez Google? Ile par zasad znajduje się w ludzkim genomie? Ile pomiarów wchodzi w symulację pogody?

Krok 2: Algorytmy

Maszyna Algorytmów obecnie implementuje następujące algorytmy. Dwa z nich to algorytmy wyszukiwania (znajdź konkretną wartość na liście), pozostałe to algorytmy sortowania (uporządkuj wartości).

Wyszukiwanie liniowe

Przeszukuj listę wartości jedna po drugiej, zaczynając od początku. Wymaga czasu liniowego.

Wyszukiwanie binarne

Przeszukuj listę, wielokrotnie dzieląc ją na pół. Wymaga czasu rejestrowania, ale lista musi być posortowana, aby działała.

Sortowanie bąbelkowe

Sortuj listę i wielokrotnie wymieniając sąsiednie elementy, które nie są w porządku. Wymaga czasu kwadratowego.

Sortowanie przez wstawianie

Posortuj listę, umieszczając każdy element we właściwym miejscu na liście już posortowanych wartości. Wymaga czasu kwadratowego.

Szybkie sortowanie

Posortuj listę, wielokrotnie dzieląc ją na pół i przenosząc wszystkie wartości mniejsze niż mediana do pierwszej połowy i wszystkie wartości większe niż mediana do drugiej połowy. W praktyce nie możemy sprawnie znaleźć mediany, więc wartość dobieramy losowo. W rezultacie algorytm ten może być w najgorszym przypadku kwadratowy, ale zazwyczaj wymaga czasu N * logN.

Scal sortuj

Posortuj listę, dzieląc ją na pół, sortując dwie połowy oddzielnie (przy użyciu sortowania przez scalanie), a następnie łącząc je razem, przeplatając wartości. Zawsze wymaga czasu N * logN.

Sortowanie sterty

Sortuj listę, budując strukturę danych zwaną stertą, która pozwala znaleźć najmniejszą wartość w czasie rejestrowania. Zawsze wymaga czasu N * logN.

Sortowanie bitoniczne

Podobnie jak w przypadku sortowania scalającego i szybkiego sortowania, podziel listę na pół, posortuj połówki i połącz je ponownie. Algorytm ten wymaga czasu N * logN * logN, ale ma tę zaletę, że jest łatwy do zrównoleglenia.

Krok 3: Pasek LED: Wydrukuj maskę w 3D

Pasek LED: Wydrukuj maskę 3D
Pasek LED: Wydrukuj maskę 3D
Pasek LED: Wydrukuj maskę 3D
Pasek LED: Wydrukuj maskę 3D

Pierwszym krokiem w budowie listwy LED jest wydrukowanie w 3D maski, która nadaje lampom ich kształt. Każdy moduł obejmuje dziesięć elementów tablicy, 10 wartości (kół) i 10 wskaźników (trójkątów), więc w sumie potrzebujesz 10 modułów. Plik STL, który tutaj dostarczam, zawiera dwie instancje modułu, więc będziesz musiał wykonać pięć cykli drukowania. Nie mam najlepszej drukarki 3D, więc musiałem zrobić na nich ręczne czyszczenie za pomocą pilnika i papieru ściernego. Najważniejsze, żeby okrągłe i trójkątne otwory były czyste.

Na zdjęciach zobaczysz moją konfigurację testową: przykleiłem dwie taśmy LED i podłączyłem je do płytki stykowej z mikrokontrolerem. Ten krok nie jest konieczny, ale chciałem zobaczyć, jak to będzie wyglądało, zanim przystąpię do montażu obudowy. Ułożyłem moduły maski na dwóch paskach LED i wykonałem prosty szkic z losowymi kolorami. Dzięki paskowi materiału dyfuzyjnego kształty i kolory naprawdę się wyróżniają.

Krok 4: Alternatywy LED Bar

Alternatywy dla listew LED
Alternatywy dla listew LED
Alternatywy dla listew LED
Alternatywy dla listew LED
Alternatywy dla listew LED
Alternatywy dla listew LED

Kiedy zaczynałem ten projekt, eksperymentowałem z innymi sposobami tworzenia maski LED. Jeśli nie masz drukarki 3D, możesz rozważyć jedną z tych opcji. Będę szczery: tworzenie tych części to ogromny ból.

Do kółek kupiłem mosiężną rurkę 13/32, która ma prawie dokładnie 1cm średnicy. Pociąłem go na sto jednocentymetrowych segmentów, a następnie pomalowałem natryskowo na biało.

Do trójkątów użyłem grubej folii aluminiowej wyciętej z jednorazowej formy do pieczenia. Wykonałem trójkątną formę z drewna, a następnie owinąłem formę krótkimi paskami folii i okleiłem je taśmą. Ponownie, będziesz potrzebować setki takich rzeczy, więc zajmie to trochę czasu i cierpliwości.

Krok 5: Obudowa paska LED

Obudowa paska LED
Obudowa paska LED
Obudowa paska LED
Obudowa paska LED
Obudowa paska LED
Obudowa paska LED

Moja obudowa jest dość prosta: dwa paski drewna na bokach i dwa paski pleksi na górze i na dole. Wszystkie części mają około 102 cm długości (1 metr na diody LED plus trochę więcej, aby pomieścić okablowanie). Boki powinny być nieco wyższe niż 1 cm, aby zrobić miejsce na paski LED. Po wycięciu pasków umieściłem między nimi wydrukowane w 3D kawałki maski, aby zmierzyć szerokość pleksi. Wytnij dwa kawałki pleksi na szerokość i długość paska. Na koniec wytnij pasek materiału dyfuzyjnego, aby pasował do maski.

Do dyfuzji bardzo lubię filtry Lee nr 216 (pełna biała dyfuzja). Jest to cienka folia z tworzywa sztucznego, która zapewnia równomierną dyfuzję bez utraty dużej ilości światła. Ale to drogie rzeczy. Czasami można znaleźć mniejsze arkusze na sprzedaż w Internecie, ale cała rolka kosztuje około 125 USD. Inne opcje to biały papier lub inny rodzaj satyny lub matowego plastiku. Popularnym wyborem są cienkie plastikowe maty do cięcia.

Przed złożeniem listwy LED upewnij się, że masz odpowiednie złącza przylutowane do taśm LED. Wiele pasków ma wstępnie wlutowane wyprowadzenia, więc możesz ich po prostu użyć.

Montaż rozpocząłem od przykręcenia górnego kawałka pleksi do drewnianych boków (patrz zdjęcie). Następnie odwróciłem go i umieściłem pasek dyfuzyjny, a następnie 10 kawałków maski. Kiedy byłem zadowolony z rozstawu, przypiąłem je na miejscu kilkoma kropkami gorącego kleju.

Następnie połóż dwa paski LED obok siebie na maskach. Upewnij się, że diody LED są skierowane w dół i upewnij się, że każda dioda LED jest wyrównana z odpowiednim otworem w masce. Dodaj trochę gorącego kleju lub taśmy, aby utrzymać paski LED na miejscu. Na koniec przykręć tylny kawałek pleksi.

Uruchom wzorzec testowy. Dobra robota! Zrobiłeś najtrudniejszą część!

Krok 6: Panel sterowania

Panel sterowania
Panel sterowania
Panel sterowania
Panel sterowania
Panel sterowania
Panel sterowania
Panel sterowania
Panel sterowania

Panel sterowania to część, która daje największą swobodę twórczą. Musi tylko pomieścić wszystkie elementy sterujące i elektronikę wraz z paskiem LED. Najprostsza konstrukcja to prostokątne tablice: wywierć otwory pod przyciski i kontrolki oraz przymocuj listwę LED. Lubię łączyć drewno, pleksi i inne materiały, aby nadać styl steampunkowy/retro-modernistyczny. W tym przypadku wyciąłem kawałek wytrzymałej pleksi, aby trzymać przyciski wyboru głównego algorytmu i drewniany pręt, aby trzymać resztę elektroniki. Wywierciłem otwory, aby dopasować rozmiar do przycisków arkadowych. Okablowanie widać z tyłu, ale mi się podoba!

Wywierciłem też miejsce na 7-segmentowy wyświetlacz, enkoder obrotowy i część okablowania z tyłu. Wyciąłem na górze dado, aby przytrzymać pasek LED.

Krok 7: Szelki z guzikami

Uprząż z guzikami
Uprząż z guzikami
Uprząż z guzikami
Uprząż z guzikami
Uprząż z guzikami
Uprząż z guzikami

Okablowanie wielu przycisków może być prawdziwym bólem. Na szczęście ludzie tworzący automaty zręcznościowe wymyślili kilka standardowych złączy, których można użyć. Każdy kabel złącza przycisku ma dwa przewody, jeden dla VCC i jeden dla uziemienia. Jeden koniec ma złącza widełkowe, które pasują do wyprowadzeń z tyłu przycisku - podłącz uziemienie do przewodu „normalnie otwartego”, a VCC do przewodu „wspólnego”. W tej konfiguracji, gdy użytkownik naciśnie przycisk, obwód jest zakończony i mikrokontroler odczyta stan HIGH na odpowiednim pinie wejściowym.

Drugi koniec kabla ma złącze JST (małe białe coś). Fajne w tych złączach jest to, że wchodzą do gniazda tylko w jeden sposób, więc nie ma możliwości przypadkowego odwrócenia VCC i masy.

To, co zrobiłem, to zbudowałem małą wiązkę do tych złączy. Przylutowuję szereg gniazd JST do kawałka płytki prototypowej, a następnie prowadzę przewody z powrotem do złączy Dupont, które podłączam do mikrokontrolera. Czerwony przewód to linia VCC i łączy się ze wszystkimi gniazdami JST. Niebieskie przewody to te, które są oddzielne dla każdego przycisku.

Krok 8: Obrotowy enkoder

Enkoder obrotowy
Enkoder obrotowy

Enkoder obrotowy pozwala użytkownikowi kontrolować prędkość algorytmu. Używam modułu, który jest dostarczany jako płytka zaciskowa, która zawiera rezystory podciągające dla dwóch linii danych (żółte przewody). Ten też jest przyciskiem, ale nie używam tej funkcji. Pozostałe dwa przewody to VCC i uziemienie. Mam też ładne grube pokrętło.

To, co podoba mi się w enkoderze obrotowym, w przeciwieństwie do potencjometru, to to, że po prostu sygnalizuje obrót (zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara) do mikrokontrolera, więc łatwo jest zmienić sposób interpretacji wartości. Na przykład możesz nadać mu wrażenie przyspieszenia (jak mysz), gdy użytkownik kręci nim szybko.

Krok 9: 7-segmentowy wyświetlacz

Wyświetlacz 7-segmentowy
Wyświetlacz 7-segmentowy

Nie ma tu wiele do powiedzenia. Te rzeczy są wszędzie. Diody LED są sterowane przez chip o nazwie TM1637, który komunikuje się z mikrokontrolerem za pomocą prostego protokołu szeregowego. Korzystam z istniejącej biblioteki, która pozwala mi powiedzieć, jaki numer chcę pokazać, a ona zajmuje się resztą.

Z tyłu znajdują się cztery piny: VCC, masa i dwa przewody do protokołu szeregowego. Przylutowałem 4-pinowy kawałek nagłówka, który łączy się z odpowiednim złączem Dupont podłączonym do mikrokontrolera.

Krok 10: Główna płyta kontrolera

Główna płyta kontrolera
Główna płyta kontrolera
Główna płyta kontrolera
Główna płyta kontrolera
Główna płyta kontrolera
Główna płyta kontrolera

Na płycie głównej kontrolera znajduje się sam mikrokontroler i wszystkie złącza do elementów sterujących (przyciski, wyświetlacz, diody LED). Mikrokontroler to ESP32, który zapewnia dużą moc obliczeniową i pamięć oraz eksponuje mnóstwo pinów. Okablowanie jest dość standardowe, ale wskażę kilka ciekawych elementów.

UWAGA: Możesz chcieć spojrzeć na kod (https://github.com/samguyer/AlgorithmMachine) przed rozpoczęciem okablowania płyty głównej, aby konfiguracja pinów była zgodna z moją.

Przylutowałem gniazdo lufy do płyty w celu zasilania i podłączyłem dwa mocne miedziane przewody do szyn zasilających i uziemiających płyty. Powodem jest to, że pasek LED może pobierać dużo energii, jeśli jasność jest ustawiona na wysoką, a nie chcę ciągnąć całej tej mocy przez złącze USB w mikrokontrolerze.

Aby uprościć okablowanie przycisków, przylutowałem pasek męskiego do żeńskiego złącza kątowego wzdłuż całej strony mikrokontrolera (górna strona płytki, jak pokazano). Złącza Dupont z wtyczki wiązki przycisków bezpośrednio do tego nagłówka.

WAŻNE: zasilanie przycisków (czerwony przewód) należy podłączyć do linii zasilającej 3,3V na mikrokontrolerze. ESP32 to układ 3,3 V, więc do pinów danych należy podłączać tylko źródła 3,3 V.

Mikrokontroler pobiera zasilanie (lub wpycha zasilanie) do szyn (dolna strona płytki, jak pokazano) przez pin 5 V USB i masę. Wszystkie pozostałe czerwone/czarne przewody to VCC i uziemienie.

Dwa niebieskie przewody to linie danych dla taśm LED (WS2812s). Para żółto-zielona to linie danych dla enkodera obrotowego, a żółta para to połączenie szeregowe z wyświetlaczem 7-segmentowym.

Krok 11: Montaż

montaż
montaż
montaż
montaż
montaż
montaż
montaż
montaż

Ta seria fotografii przedstawia końcowy montaż i okablowanie. Przymocowałem również główną płytę kontrolera z tyłu u góry.

Zanim go włączyłem, wykonałem kilka testów, aby uniknąć przykrych niespodzianek. W szczególności, aby upewnić się, że nie mam żadnych złączy zasilania/masy do tyłu i żadnych zwarć. Ustaw swój multimetr na test ciągłości - wyda sygnał dźwiękowy, gdy pojawi się ścieżka elektryczna między dwoma przewodami. Podłącz jeden przewód do wspólnej linii VCC do przycisków. Następnie przymocuj drugi smycz do każdego sworznia uprzęży jeden po drugim. Multimetr powinien emitować sygnał dźwiękowy tylko po naciśnięciu przycisku. Jeśli usłyszysz inne sygnały dźwiękowe, oznacza to, że masz odwrócenie lub zwarcie. Znajdź go i napraw przed włączeniem zasilania!

Krok 12: Kod

Najpierw otwórz swoje Arduino IDE i upewnij się, że masz zainstalowaną bibliotekę FastLED.

Pobierz kod maszyny algorytmu z GitHub:

github.com/samguyer/AlgorithmMachine.git

Możesz sklonować go bezpośrednio do folderu Arduino lub skopiować ręcznie.

Przed przesłaniem upewnij się, że ustawienia pinów są zgodne z konfiguracją sprzętu. Umieściłem wszystkie ustawienia pinów na górze pliku.

Prześlij i ciesz się!

Krok 13: Jak używać

Maszyna algorytmów jest prosta w użyciu i prawie każda kombinacja przycisków jest w porządku!

Najpierw użyj przycisków danych, aby zainicjować wartości w tablicy. Istnieją trzy możliwości: (1) losowanie, (2) dodanie jednej losowej wartości i (3) odwrócenie tablicy. Zauważ, że wartości są trwałe, więc możesz najpierw je posortować, potem dodać trochę szumu, a następnie uruchomić inny algorytm sortowania lub wyszukiwania.

Wybierz algorytm wyszukiwania lub sortowania spośród innych opcji przycisków. Obecnie nie ma informacji zwrotnej po dokonaniu tego wyboru (coś do przyszłej pracy). Następnie naciśnij przycisk „odtwórz”.

Pokrętło kontroluje prędkość. Możesz także nacisnąć „odtwórz”, aby wstrzymać i wznowić algorytm.

Zatrzyma się automatycznie po zakończeniu. W dowolnym momencie możesz również nacisnąć inny przycisk algorytmu. Maszyna zatrzyma bieżący algorytm i zainicjuje nowy, ale zachowa dane dokładnie tak, jak zostawił poprzedni algorytm.

Konkurs STEM
Konkurs STEM
Konkurs STEM
Konkurs STEM

Główna nagroda w konkursie STEM

Zalecana: