Daftar Isi:

Mesin Algoritma: 13 Langkah (dengan Gambar)
Mesin Algoritma: 13 Langkah (dengan Gambar)

Video: Mesin Algoritma: 13 Langkah (dengan Gambar)

Video: Mesin Algoritma: 13 Langkah (dengan Gambar)
Video: Algoritma - Pengertian Algortima & Contoh Sehari-hari 2024, November
Anonim
Image
Image
Bilah LED: Cetak Topeng 3D
Bilah LED: Cetak Topeng 3D

Saya telah mengajar ilmu komputer di tingkat perguruan tinggi selama 15 tahun, dan meskipun keahlian saya lebih pada sisi pemrograman, saya masih menghabiskan cukup banyak waktu untuk membahas algoritma standar untuk pencarian dan pengurutan. Dari sudut pandang pengajaran, masalah utamanya adalah kompleksitas komputasi: berapa banyak waktu yang dibutuhkan setiap algoritma, dengan input dengan ukuran tertentu? Tapi ada banyak nuansa. Misalnya, apakah algoritme memiliki runtime yang berbeda tergantung pada nilai input tertentu (berlawanan dengan ukurannya)? Dalam kasus apa Anda akan memilih satu algoritma pengurutan daripada yang lain? Meskipun kami membahas masalah ini secara abstrak, selalu mengganggu saya bahwa tidak ada cara mudah untuk melihat bagaimana algoritma yang berbeda bekerja dalam berbagai kondisi.

Sasaran

Tujuan menyeluruh saya untuk proyek ini adalah membuat tampilan interaktif bagi siswa untuk memvisualisasikan dan menjelajahi algoritme. Saya membatasi diri pada algoritme yang bekerja pada array nilai (bilangan bulat), jadi saya dapat menggunakan strip LED RGB yang dapat dialamatkan untuk memvisualisasikan konten array. Array memiliki 100 elemen, dan setiap bilangan bulat dipetakan ke warna dalam urutan pelangi, sehingga segera terlihat ketika array diurutkan, diurutkan sebagian, atau diacak. Selain nilai, saya ingin cara untuk memvisualisasikan aspek kontrol dari algoritme -- misalnya, elemen array mana yang saat ini sedang dibandingkan atau ditukar.

Tujuan spesifiknya adalah:

- Menyediakan berbagai algoritma pencarian dan pengurutan

- Visualisasikan nilai-nilai dalam array dengan cara yang menyoroti kemajuan algoritma

- Visualisasikan kontrol algoritma; khususnya unsur-unsur yang dipertimbangkan.

- Izinkan pengguna untuk memilih pola data input daripada selalu menghasilkan nilai acak

- Izinkan pengguna untuk mengontrol kecepatan dan menjeda algoritme

- Izinkan pengguna untuk memaksakan perilaku kasus terbaik, kasus terburuk, kasus rata-rata (khusus algoritma)

- Tunjukkan jumlah langkah saat algoritma berjalan

Visualisasi

Dari sudut pandang desain fisik, bagian paling menarik dari proyek ini adalah visualisasi array. Saya kesulitan dengan cara menampilkan data dan kontrol, dan cara membuat perangkat tampilan itu sendiri. Tujuan saya adalah untuk menunjukkan nilai data sebagai lingkaran berwarna dan titik kontrol sebagai panah berwarna yang menunjuk pada nilai data. Setelah beberapa eksperimen, saya menetapkan desain dengan dua strip paralel 100 LED RGB (WS2812) dengan topeng melingkar di atas setiap LED data dan topeng segitiga di atas setiap LED kontrol. Saya membuat model topeng 3D dengan 10 pasang lingkaran dan segitiga, dan kemudian mencetak 10 modul ini secara 3D dengan total 100 lingkaran dan 100 segitiga. Ukuran dan jarak topeng saya dirancang untuk strip dengan 100 LED per meter. File model 3D disediakan kemudian dalam deskripsi ini.

Elektronik dan kandang

Perangkat lainnya sangat mudah, dari sudut pandang elektronik. Selain dua strip LED, ada banyak tombol sesaat, encoder putar (untuk kontrol kecepatan), dan tampilan 7 segmen (untuk menunjukkan langkah). Dengan begitu banyak tombol dan kontrol saya memilih untuk menggunakan mikrokontroler ESP32 karena memperlihatkan banyak pin dan karena cukup kuat. Saya akan membahas strategi pengkabelan, tetapi ini cukup mendasar. Anda mungkin bisa melakukan sesuatu yang cerdas dengan register geser jika Anda ingin menggunakan lebih sedikit pin.

Anda dapat membuat enklosur untuk perangkat ini dalam berbagai bentuk. Awalnya saya membayangkannya sebagai papan persegi panjang besar dengan strip LED di bagian atas, dan kisi-kisi tombol di tengah. Bentuk yang saya dapatkan terinspirasi oleh semacam pandangan tahun 1960-an tentang teknologi ruang angkasa. Anda juga dapat membuatnya dengan strip LED dalam orientasi vertikal. Atau buat bagian LED jauh lebih besar -- isi seluruh dinding -- dengan panel kontrol terpisah.

Perangkat lunak

Kode untuk perangkat ini tersedia gratis di GitHub, dan saya telah melakukan yang terbaik untuk mendokumentasikan cara kerjanya dan cara mengkonfigurasinya. Satu-satunya perpustakaan eksternal yang Anda butuhkan adalah FastLED untuk menggerakkan strip WS2812.

Perlengkapan

Elektronik

1 papan pengembangan ESP32 (mis., 2 WS2812 atau strip LED serupa, kepadatan 100 LED per meter (mis., 1 Tombol "mulai" segitiga (mis., 12 Tombol sesaat (mis., https://amzn.com/B01N4D4750) -- bentuk yang berbeda jika Anda mau

1 Paket (20) konektor tombol prakabel (mis., 1 Paket konektor JST (mis., 1 Rotary encoder (mis., 1 Knob untuk rotary encoder (mis., 1 Pack konektor Dupont (mis., https://amzn.com/B014YTPFT8) -- ada baiknya juga mendapatkan alat crimping.

1 Soket barel (untuk daya) (mis., 1 TM1637 7-segmen tampilan numerik (mis., Perlengkapan solder dan kabel

File model 3D

Anda dapat menemukan model 3D untuk sepasang modul 10-cahaya di Thingiverse:

www.thingiverse.com/thing:4178181

Anda perlu mencetak model ini lima kali untuk total 10 modul.

Perangkat lunak

github.com/samguyer/AlgorithmMachine

Lampiran

Kayu, plexiglass, baut dan sekrup stainless steel

Bahan difusi. Favorit saya adalah Lee Filters #216 full white difusi, tapi ada pilihan lain. Bahkan kertas putih biasa melakukan pekerjaan dengan baik.

Langkah 1: Algoritma 101

Banyak orang berpikir bahwa ilmu komputer pada dasarnya adalah studi tentang pemrograman. Tapi hati dan jiwa sebenarnya dari bidang ini adalah algoritma: studi tentang prosedur sistematis untuk memecahkan masalah dan biayanya (biasanya, berapa lama waktu yang dibutuhkan). Tokoh-tokoh mani di lapangan, seperti Alan Turing, Gereja Alonzo, dan Edsger Dijkstra, memikirkan ide-ide ini sebelum komputer seperti yang kita kenal bahkan ada.

Fitur kunci dari suatu algoritma untuk memecahkan masalah tertentu adalah bahwa hal itu rinci dan tepat, sehingga seseorang dapat menggunakannya untuk mendapatkan solusi tanpa memahami cara kerjanya sama sekali; cukup ikuti langkah-langkahnya secara mekanis dan Anda akan mendapatkan jawaban yang benar. Anda dapat melihat bagaimana ini membantu pemrograman komputer, karena mereka membutuhkan tingkat detail ini. Komputer tidak dapat mengisi detail yang hilang atau membuat penilaian, seperti yang bisa dilakukan seseorang.

Itu akan makan waktu berapa lama?

Setelah kami memiliki prosedur terperinci, pertanyaan alami adalah berapa lama waktu yang dibutuhkan untuk mendapatkan jawabannya? Kami tidak dapat menggunakan satuan waktu biasa, karena itu tergantung pada siapa yang melakukan pekerjaan (bandingkan seberapa cepat seseorang dapat menghitung sesuatu versus superkomputer). Selain itu, itu tergantung pada seberapa banyak data yang kita miliki. Jelas, dibutuhkan waktu lebih lama untuk mencari daftar satu juta nomor telepon daripada daftar seratus.

Untuk menggambarkan biaya suatu algoritme, pertama-tama kita memilih beberapa operasi dalam prosedur yang mewakili satu "langkah" -- biasanya sesuatu yang sederhana, seperti membandingkan atau menambahkan dua angka, yang membutuhkan waktu yang tetap untuk melakukannya. Kemudian kami menemukan rumus yang menjelaskan berapa banyak langkah yang akan diambil oleh algoritme jika diberikan sejumlah item data. Untuk alasan historis, kami hampir selalu menunjukkan jumlah item data dengan huruf kapital N.

Misalnya, melihat daftar N nomor telepon membutuhkan N langkah. Melihat daftar dua kali membutuhkan 2N langkah. Keduanya disebut algoritma waktu linier -- jumlah total langkah adalah beberapa kelipatan dari ukuran input. Algoritme lain adalah kuadrat (N kuadrat waktu) atau kubik (N pangkat tiga) atau logaritmik (log N) atau kombinasi dari semuanya. Beberapa masalah komputasi yang paling sulit memerlukan algoritma waktu eksponensial (2^N).

Oke, jadi apa?

Ketika jumlah item data N kecil, itu tidak masalah. Misalnya, untuk N=10, 10N adalah nama tersebut sebagai N kuadrat. Tapi bagaimana dengan N=1000? atau N=1000000? Satu juta kuadrat adalah angka yang cukup besar. Bahkan pada komputer yang sangat cepat, algoritma kuadrat dapat memakan waktu lama jika inputnya cukup besar. Algoritme eksponensial jauh lebih merepotkan: untuk N=50, algoritme eksponensial akan membutuhkan waktu dua minggu untuk diselesaikan bahkan pada komputer yang setiap langkahnya hanya satu nanodetik (1 miliar detik). Aduh!

Di ujung lain skala kami memiliki algoritma waktu logaritmik, yang sangat cepat. Waktu log adalah kebalikan dari waktu eksponensial: dengan ukuran input N, jumlah langkah adalah eksponen T dalam rumus 2^T = N. Misalnya, jika ukuran input kita adalah satu miliar, maka algoritma waktu log hanya membutuhkan 30 langkah, karena 2^30 = 1, 000, 000, 000. Betapa manisnya itu?!??!

Anda mungkin bertanya-tanya, siapa yang peduli dengan ukuran input jutaan atau miliaran? Pikirkan tentang ini: berapa banyak pengguna di Facebook? Berapa banyak halaman web yang diindeks oleh Google? Berapa banyak pasangan basa yang ada dalam genom manusia? Berapa banyak pengukuran yang dimasukkan ke dalam simulasi cuaca?

Langkah 2: Algoritma

Mesin Algoritma saat ini mengimplementasikan algoritma berikut. Dua di antaranya adalah algoritma pencarian (menemukan nilai tertentu dalam daftar), sisanya adalah algoritma pengurutan (mengurutkan nilai).

Pencarian linier

Cari melalui daftar nilai satu per satu mulai dari awal. Membutuhkan waktu linier.

Pencarian biner

Cari daftar dengan berulang kali membaginya menjadi dua. Memerlukan waktu log, tetapi daftar harus diurutkan agar berfungsi.

Sortir gelembung

Urutkan daftar berulang kali bertukar elemen tetangga yang tidak berurutan. Memerlukan waktu kuadrat.

Jenis penyisipan

Urutkan daftar dengan menempatkan setiap elemen di tempat yang tepat dalam daftar nilai yang sudah diurutkan. Memerlukan waktu kuadrat.

sortir cepat

Urutkan daftar dengan berulang kali membagi daftar menjadi dua dan memindahkan semua nilai yang lebih kecil dari median ke paruh pertama, dan semua nilai yang lebih besar dari median ke paruh kedua. Dalam praktiknya, kami tidak dapat menemukan median secara efisien, jadi kami memilih nilai secara acak. Akibatnya algoritma ini dapat berbentuk kuadrat dalam kasus terburuk, tetapi biasanya membutuhkan waktu N * logN.

Gabungkan sort

Sortir daftar dengan membaginya menjadi dua, urutkan dua bagian secara terpisah (menggunakan merge sort), lalu gabungkan keduanya dengan menyisipkan nilai. Selalu membutuhkan waktu N * logN.

Sortir tumpukan

Urutkan daftar dengan membangun struktur data yang disebut heap, yang memungkinkan Anda menemukan nilai terkecil dalam waktu log. Selalu membutuhkan waktu N * logN.

Jenis bitonik

Mirip dengan menggabungkan sortir dan quicksort, membagi daftar menjadi dua, mengurutkan setengahnya, dan menggabungkannya kembali. Algoritma ini membutuhkan waktu N * logN * logN, tetapi memiliki kelebihan yaitu mudah untuk diparalelkan.

Langkah 3: Bilah LED: Cetak Topeng 3D

Bilah LED: Cetak Topeng 3D
Bilah LED: Cetak Topeng 3D
Bilah LED: Cetak Topeng 3D
Bilah LED: Cetak Topeng 3D

Langkah pertama dalam membangun bilah LED adalah mencetak topeng 3D yang memberi bentuk pada lampu. Setiap modul mencakup sepuluh elemen larik, 10 nilai (lingkaran) dan 10 indikator (segitiga), jadi Anda memerlukan 10 modul sekaligus. File STL yang saya sediakan di sini berisi dua contoh modul, jadi Anda harus melakukan lima siklus cetak. Saya tidak memiliki printer 3D terbaik, jadi saya harus melakukan pembersihan manual menggunakan file dan amplas. Yang terpenting lubang lingkaran dan segitiganya bersih.

Dalam foto, Anda akan melihat pengaturan pengujian saya: Saya menempelkan dua strip LED ke bawah dan menghubungkannya ke papan tempat memotong roti dengan mikrokontroler. Langkah ini tidak perlu, tetapi saya ingin melihat bagaimana tampilannya sebelum saya mulai merakit enklosur. Saya meletakkan modul topeng pada dua strip LED dan membuat sketsa sederhana dengan warna acak. Dengan strip bahan difusi, bentuk dan warnanya benar-benar menonjol.

Langkah 4: Alternatif Bilah LED

Alternatif Bilah LED
Alternatif Bilah LED
Alternatif Bilah LED
Alternatif Bilah LED
Alternatif Bilah LED
Alternatif Bilah LED

Ketika saya pertama kali memulai proyek ini, saya bereksperimen dengan cara lain untuk membuat topeng LED. Jika Anda tidak memiliki printer 3D, Anda dapat mempertimbangkan salah satu opsi ini. Saya akan jujur: sangat sulit untuk membuat bagian-bagian ini.

Untuk lingkaran, saya membeli tabung kuningan 13/32, yang diameternya hampir persis 1cm. Saya memotongnya menjadi 100 bagian 1cm dan kemudian menyemprotkannya dengan cat putih.

Untuk segitiga, saya menggunakan aluminium foil berat yang dipotong dari loyang sekali pakai. Saya membuat bentuk segitiga dari kayu, lalu melilitkan potongan pendek foil di sekitar formulir dan menempelkannya. Sekali lagi, Anda akan membutuhkan seratus hal ini, jadi butuh waktu dan kesabaran.

Langkah 5: Kandang LED Bar

Kandang Bilah LED
Kandang Bilah LED
Kandang Bilah LED
Kandang Bilah LED
Kandang Bilah LED
Kandang Bilah LED

Kandang saya cukup sederhana: dua strip kayu untuk sisi dan dua strip kaca plexiglass untuk bagian atas dan bawah. Semua bagian memiliki panjang sekitar 102cm (1 meter untuk LED, ditambah sedikit tambahan untuk mengakomodasi kabel). Sisi-sisinya harus sedikit lebih tinggi dari 1cm untuk memberi ruang bagi strip LED. Setelah memotong strip, saya mengapit potongan topeng yang dicetak 3D di antara mereka untuk mengukur lebar kaca plexiglass. Potong dua potong kaca plexiglass dengan lebar dan panjang batang. Terakhir, potong strip bahan difusi agar pas di atas topeng.

Untuk difusi saya sangat suka Lee Filters #216 (difusi putih penuh). Ini adalah lembaran plastik tipis yang memberikan difusi merata tanpa kehilangan banyak cahaya. Tapi itu barang mahal. Kadang-kadang Anda dapat menemukan lembaran yang lebih kecil untuk dijual secara online, tetapi seluruh gulungan akan membuat Anda kembali sekitar $125. Beberapa pilihan lain adalah kertas putih atau jenis lain dari satin atau plastik buram. Pilihan yang populer adalah alas potong plastik tipis.

Sebelum Anda merakit bilah LED, pastikan Anda memiliki konektor yang sesuai yang disolder ke strip LED. Banyak strip datang dengan lead yang sudah disolder, jadi Anda bisa menggunakannya.

Saya memulai perakitan dengan memasang bagian atas kaca plexiglass ke sisi kayu (lihat foto). Kemudian saya membaliknya dan meletakkan strip difusi, diikuti oleh 10 lembar topeng. Setelah saya puas dengan jaraknya, saya menyematkannya dengan beberapa titik lem panas.

Selanjutnya, letakkan dua strip LED berdampingan di atas topeng. Pastikan LED menghadap ke bawah dan pastikan setiap LED sejajar dengan lubang yang sesuai di topeng. Tambahkan lem atau selotip panas untuk menahan strip LED di tempatnya. Terakhir, kencangkan bagian belakang kaca plexiglass.

Jalankan pola pengujian. Pekerjaan yang baik! Anda telah melakukan bagian tersulit!

Langkah 6: Panel Kontrol

Panel kendali
Panel kendali
Panel kendali
Panel kendali
Panel kendali
Panel kendali
Panel kendali
Panel kendali

Panel kontrol adalah bagian yang memberikan kebebasan paling kreatif. Itu hanya perlu menahan semua kontrol dan elektronik, bersama dengan bilah LED. Desain paling sederhana adalah papan persegi panjang: bor lubang untuk tombol dan kontrol, dan pasang bilah LED. Saya suka mengombinasikan kayu, kaca plexiglass, dan material lainnya untuk memberikan semacam tampilan steampunk / retro-modern. Dalam hal ini, saya memotong sepotong kaca plexiglass tugas berat untuk menahan tombol pilihan algoritme utama, dan batang kayu untuk menahan sisa elektronik. Saya mengebor lubang agar sesuai dengan ukuran tombol arcade. Kabelnya terlihat di bagian belakang, tapi saya menyukainya!

Saya juga mengebor ruang untuk tampilan 7-segmen, encoder putar, dan beberapa kabel di bagian belakang. Saya memotong dado di bagian atas untuk menahan bilah LED.

Langkah 7: Tombol Harness

Tombol Harness
Tombol Harness
Tombol Harness
Tombol Harness
Tombol Harness
Tombol Harness

Menghubungkan banyak tombol bisa sangat merepotkan. Untungnya, pembuat mesin arcade telah menemukan beberapa konektor standar yang dapat Anda gunakan. Setiap kabel konektor tombol memiliki dua kabel, satu untuk VCC dan satu untuk ground. Salah satu ujungnya memiliki konektor sekop yang sesuai dengan kabel di bagian belakang tombol -- pasang ground ke kabel "biasanya terbuka", dan VCC ke kabel "umum". Dalam konfigurasi ini, ketika pengguna menekan tombol, rangkaian selesai dan mikrokontroler akan membaca HIGH pada pin input yang sesuai.

Ujung kabel yang lain memiliki konektor JST (benda putih kecil). Apa yang baik tentang konektor ini adalah bahwa mereka hanya masuk ke stopkontak dengan satu cara, jadi tidak ada cara untuk membalikkan VCC dan ground secara tidak sengaja.

Apa yang saya lakukan adalah membuat sedikit harness untuk konektor ini. Saya menyolder serangkaian wadah JST ke sepotong protoboard dan kemudian menjalankan kabel kembali ke konektor Dupont yang akan saya colokkan ke mikrokontroler. Kabel merah adalah jalur VCC, dan terhubung ke semua stopkontak JST. Kabel biru adalah kabel yang terpisah untuk setiap tombol.

Langkah 8: Rotary Encoder

Rotary Encoder
Rotary Encoder

Rotary encoder memungkinkan pengguna mengontrol kecepatan algoritme. Saya menggunakan modul yang hadir sebagai papan breakout yang menyertakan resistor pull-up untuk dua jalur data (kabel kuning). Yang ini juga merupakan tombol, tetapi saya tidak menggunakan fitur itu. Dua kabel lainnya adalah VCC dan ground. Saya juga mendapat kenop gemuk yang bagus.

Apa yang saya suka tentang encoder putar, sebagai lawan dari potensiometer, adalah bahwa itu hanya memberi sinyal rotasi (searah jarum jam vs berlawanan arah jarum jam) ke mikrokontroler, jadi mudah untuk mengubah bagaimana nilainya ditafsirkan. Misalnya, Anda dapat memberikan rasa akselerasi (seperti mouse) saat pengguna memutarnya dengan cepat.

Langkah 9: Tampilan 7-segmen

Tampilan 7-segmen
Tampilan 7-segmen

Tidak banyak yang bisa diceritakan di sini. Hal-hal ini ada di mana-mana. LED dikendalikan oleh chip yang disebut TM1637, yang berkomunikasi dengan mikrokontroler melalui protokol serial sederhana. Saya menggunakan perpustakaan yang ada yang memungkinkan saya memberi tahu nomor apa yang ingin saya tampilkan, dan sisanya.

Bagian belakang memiliki empat pin: VCC, ground, dan dua kabel untuk protokol serial. Saya menyolder sepotong header 4-pin, yang terhubung ke konektor Dupont yang sesuai dengan kabel ke mikrokontroler.

Langkah 10: Papan Pengendali Utama

Papan Pengendali Utama
Papan Pengendali Utama
Papan Pengendali Utama
Papan Pengendali Utama
Papan Pengendali Utama
Papan Pengendali Utama

Papan pengontrol utama menampung mikrokontroler itu sendiri dan semua konektor ke kontrol (tombol, layar, LED). Mikrokontroler adalah ESP32, yang menyediakan banyak daya komputasi dan memori, dan memaparkan banyak pin. Pengkabelannya cukup standar, tetapi saya akan menunjukkan beberapa bagian yang menarik.

CATATAN: Anda mungkin ingin melihat kode (https://github.com/samguyer/AlgorithmMachine) sebelum Anda mulai memasang kabel papan utama, sehingga konfigurasi pin Anda cocok dengan saya.

Saya menyolder jack barel ke papan untuk daya, dan menghubungkan dua kabel tembaga gemuk ke rel daya dan ground papan. Alasannya adalah bahwa bilah LED dapat menarik banyak daya jika kecerahan disetel tinggi, dan saya tidak ingin menarik semua daya itu melalui konektor USB pada mikrokontroler.

Untuk menyederhanakan kabel tombol, saya menyolder strip header sudut kanan pria-ke-wanita di seluruh sisi mikrokontroler (sisi atas papan seperti yang ditunjukkan). Konektor Dupont dari konektor harness tombol langsung ke header ini.

PENTING: daya untuk tombol (kabel merah) harus terhubung ke saluran listrik 3.3V pada mikrokontroler. ESP32 adalah chip 3.3V, jadi hanya sumber 3.3V yang boleh dipasang ke pin data.

Mikrokontroler menarik daya (atau mendorong daya) ke rel (sisi bawah papan seperti yang ditunjukkan) melalui pin dan ground USB 5V. Semua kabel merah/hitam lainnya adalah VCC dan ground.

Dua kabel biru adalah jalur data untuk strip LED (WS2812s). Pasangan kuning/hijau adalah jalur data untuk encoder putar, dan pasangan kuning adalah sambungan serial ke tampilan 7-segmen.

Langkah 11: Perakitan

perakitan
perakitan
perakitan
perakitan
perakitan
perakitan
perakitan
perakitan

Rangkaian foto ini menunjukkan perakitan akhir dan pengkabelan. Saya juga memasang papan pengontrol utama ke belakang di bagian atas.

Sebelum menyalakannya, saya melakukan beberapa pemeriksaan untuk menghindari kejutan yang tidak menyenangkan. Secara khusus, untuk memastikan saya tidak memiliki konektor daya / ground mundur, dan tidak ada korsleting. Atur multimeter Anda untuk menguji kontinuitas - itu akan berbunyi bip ketika ada jalur listrik di antara kedua kabel. Pasang satu kabel ke jalur VCC umum ke tombol. Kemudian pasang ujung lainnya ke setiap pin harness satu per satu. Multimeter seharusnya hanya berbunyi bip saat Anda menekan tombol. Jika Anda mendapatkan bunyi bip lain, itu berarti Anda memiliki pembalikan atau short. Lacak dan perbaiki sebelum Anda menghidupkan daya!

Langkah 12: Kode

Pertama, buka Arduino IDE Anda dan pastikan Anda telah menginstal pustaka FastLED.

Unduh kode Mesin Algoritma dari GitHub:

github.com/samguyer/AlgorithmMachine.git

Anda dapat mengkloningnya langsung ke folder Arduino Anda, atau menyalinnya dengan tangan.

Sebelum mengunggahnya, pastikan pengaturan pin sesuai dengan konfigurasi perangkat keras Anda. Saya telah menempatkan semua pengaturan pin di bagian atas file.

Unggah dan nikmati!

Langkah 13: Cara Menggunakan

Mesin Algoritma mudah digunakan dan hampir semua kombinasi tombol tidak masalah!

Pertama, gunakan tombol data untuk menginisialisasi nilai dalam array. Ada tiga pilihan: (1) mengacak, (2) menambahkan satu nilai acak, dan (3) membalikkan array. Perhatikan bahwa nilainya tetap, sehingga Anda dapat melakukan hal-hal seperti mengurutkannya terlebih dahulu, lalu menambahkan beberapa noise, lalu menjalankan algoritme pengurutan atau pencarian yang berbeda.

Pilih algoritma pencarian atau pengurutan dari pilihan tombol lainnya. Saat ini, tidak ada umpan balik ketika Anda membuat pilihan ini (sesuatu untuk pekerjaan di masa depan). Kemudian tekan tombol "mainkan".

Kenop mengontrol kecepatan. Anda juga dapat menekan "mainkan" untuk menjeda dan membatalkan jeda algoritme.

Ini akan berhenti secara otomatis ketika selesai. Anda juga dapat menekan tombol algoritme lain kapan saja. Mesin akan menghentikan algoritme saat ini dan menginisialisasi yang baru, tetapi menyimpan data persis seperti yang ditinggalkan oleh algoritme sebelumnya.

Kontes STEM
Kontes STEM
Kontes STEM
Kontes STEM

Hadiah Utama dalam Kontes STEM

Direkomendasikan: