Iklan
Pernah berharap Anda memiliki mobil Knight Industries Two Thousand (KITT) Anda sendiri - Anda tahu, dari Knight Rider? Jadikan impian Anda selangkah lebih dekat dengan kenyataan dengan membangun pemindai LED! Inilah hasil akhirnya:
Apa yang kau butuhkan
Tidak banyak bagian yang diperlukan untuk proyek ini, dan Anda mungkin sudah memiliki banyak di antaranya:
- 1 x Arduino UNO atau serupa
- 1 x papan tempat memotong roti
- 8 x LED merah
- Resistor 8 x 220 ohm
- Potensiometer 1 x 10k ohm
- Laki-laki ke laki-laki menghubungkan kabel
Jika Anda punya Kit starter Arduino Apa Yang Termasuk Dalam Kit Starter Arduino? [MakeUseOf Menjelaskan]Saya sebelumnya telah memperkenalkan perangkat keras open-source Arduino di sini di MakeUseOf, tetapi Anda akan membutuhkan lebih dari sekadar Arduino yang sebenarnya untuk membangun sesuatu darinya dan benar-benar memulai. Arduino "starter kit" adalah ... Baca lebih banyak kemungkinan Anda memiliki semua bagian ini (apa yang bisa kamu buat dengan starter kit? 5 Proyek Arduino Unik untuk Pemula yang Dapat Anda Buat Hanya Dengan Kit Pemula Baca lebih banyak ).
Hampir semua Arduino akan berfungsi, asalkan memiliki delapan pin yang tersedia (Belum pernah menggunakan Arduino sebelumnya? Mulai di sini Memulai Dengan Arduino: A Beginner's GuideArduino adalah platform prototipe elektronik sumber terbuka yang didasarkan pada perangkat keras dan lunak yang fleksibel dan mudah digunakan. Ini ditujukan untuk seniman, perancang, penggemar, dan siapa pun yang tertarik untuk menciptakan objek atau lingkungan interaktif. Baca lebih banyak ). Anda bisa gunakan Daftar Shift Pemrograman Arduino - Bermain Dengan Register Shift (a.k.a Bahkan Lebih Banyak LED)Hari ini saya akan mencoba mengajari Anda sedikit tentang Shift Register. Ini adalah bagian yang cukup penting dari pemrograman Arduino, pada dasarnya karena mereka memperluas jumlah output yang dapat Anda gunakan, dengan imbalan ... Baca lebih banyak untuk mengontrol LED, meskipun ini tidak diperlukan untuk proyek ini, karena Arduino memiliki pin yang cukup.
Bangun Rencana
Ini adalah proyek yang sangat sederhana. Sementara itu mungkin terlihat rumit dari sejumlah besar kabel, masing-masing bagian sangat sederhana. Setiap Light Emitting Diode (LED) terhubung ke pin Arduino miliknya sendiri. Ini berarti setiap LED dapat dihidupkan dan dimatikan secara terpisah. Potensiometer terhubung ke pin Arduino analog, yang akan digunakan untuk menyesuaikan kecepatan pemindai.
Sirkuit
Hubungkan pin kiri luar (melihat bagian depan, dengan pin di bagian bawah) dari potensiometer ke ground. Hubungkan pin luar yang berlawanan ke + 5v. Jika tidak bekerja dengan benar, balikkan pin ini. Hubungkan pin tengah ke Arduino analog dalam 2.
Hubungkan anoda (kaki panjang) dari setiap LED ke pin digital satu hingga delapan. Hubungkan katoda (kaki pendek) ke tanah Arduino.
Kode
Buat sketsa baru dan simpan sebagai "knightRider". Ini kodenya:
led const int [] = {1,2,3,4,5,6,7,8}; // Pin yang dipimpin. const int totalLeds = 8; waktu int = 50; // Pengaturan kecepatan default batal () {// Inisialisasi semua output untuk (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {for (int i = 0; i 0; --i) {// Pindai kanan ke kiri waktu = analogRead (2); digitalWrite (leds [i], HIGH); waktu penundaan); digitalWrite (leds [i - 1], HIGH); waktu penundaan); digitalWrite (leds [i], LOW); } }
Mari kita jabarkan. Setiap pin LED disimpan dalam array:
led const int [] = {1,2,3,4,5,6,7,8};
Array pada dasarnya adalah kumpulan item terkait. Elemen-elemen ini didefinisikan sebagai konstan ("const"), yang berarti mereka tidak dapat diubah nanti. Anda tidak harus menggunakan konstanta (kode akan bekerja dengan sempurna jika Anda menghapus "const"), meskipun disarankan.
Elemen-elemen array diakses dengan menggunakan tanda kurung siku ("[]") dan bilangan bulat yang disebut indeks. Indeks mulai dari nol, jadi "leds [2]" akan mengembalikan elemen ketiga dalam array - pin 3. Array membuat kode lebih cepat untuk ditulis dan lebih mudah dibaca, mereka membuat komputer melakukan kerja keras!
A for loop digunakan untuk mengatur setiap pin sebagai output:
untuk (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); }
Kode ini ada di dalam fungsi "setup ()", karena hanya perlu dijalankan sekali pada awal program. Untuk loop sangat bermanfaat. Mereka memungkinkan Anda untuk menjalankan kode yang sama berulang-ulang, dengan nilai yang berbeda setiap kali. Mereka sangat cocok untuk bekerja dengan array. Integer "i" dideklarasikan, dan hanya kode di dalam loop yang dapat mengakses variabel ini (ini dikenal sebagai "lingkup"). Nilai i mulai dari nol, dan untuk setiap iterasi dari loop, saya dinaikkan satu. Setelah nilai i kurang dari atau sama dengan variabel "totalLeds", loop "istirahat" (berhenti).
Nilai i digunakan untuk mengakses array "leds". Loop ini mengakses setiap elemen dalam array dan mengonfigurasinya sebagai output. Anda bisa mengetik "pinMode (pin, OUTPUT)" secara manual delapan kali, tetapi mengapa menulis delapan baris ketika Anda bisa menulis tiga?
Sementara beberapa bahasa pemrograman dapat memberi tahu Anda berapa banyak elemen dalam array (biasanya dengan sintaks seperti array.length), Arduino tidak membuatnya begitu sederhana (melibatkan sedikit lebih banyak matematika). Karena jumlah elemen dalam array sudah diketahui, itu bukan masalah.

Di dalam lingkaran utama (membatalkan loop ()) dua lagi untuk loop. Yang pertama mengatur LED ON dan OFF dari 1 - 8. Loop kedua mengatur LED ON dan OFF dari 8-1. Perhatikan bagaimana pin saat ini diaktifkan, dan pin saat ini ditambah satu juga diaktifkan. Ini memastikan bahwa selalu ada dua LED menyala secara bersamaan, membuat pemindai terlihat lebih realistis.
Pada awal setiap loop, nilai pot dibaca ke dalam variabel "waktu":
waktu = analogRead (2);
Ini dilakukan dua kali, sekali di dalam setiap loop. Ini perlu terus-menerus diperiksa dan diperbarui. Jika ini di luar loop, itu akan tetap bekerja, namun akan ada penundaan kecil - itu hanya akan berjalan setelah satu loop telah selesai dieksekusi. Pot adalah analog, karenanya mengapa "analogRead (pin)" digunakan. Ini mengembalikan nilai antara nol (minimum) dan 1023 (maksimum). Arduino mampu mengonversi nilai-nilai ini menjadi sesuatu yang lebih bermanfaat, namun mereka sempurna untuk kasus penggunaan ini.
Penundaan antara penggantian LED (atau kecepatan pemindai) diatur dalam milidetik (1/1000 detik), sehingga waktu maksimum hanya lebih dari 1 detik.
Pemindai Tingkat Lanjut

Sekarang setelah Anda mengetahui dasar-dasarnya, mari kita lihat sesuatu yang lebih kompleks. Pemindai ini akan menyalakan LED berpasangan mulai dari luar dan bekerja di. Ini kemudian akan membalikkan ini dan pergi dari dalam ke pasangan luar. Ini kodenya:
led const int [] = {1,2,3,4,5,6,7,8}; // Pin yang dipimpin. const int totalLeds = 8; halfleds const int = 4; waktu int = 50; // Pengaturan kecepatan default batal () {// Inisialisasi semua output untuk (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } void loop () {for (int i = 0; i 0; --i) {// Pindai pasangan dalam waktu habis = analogRead (2); digitalWrite (leds [i], HIGH); digitalWrite (leds [(totalLeds - i) - 1], HIGH); waktu penundaan); digitalWrite (leds [i], LOW); digitalWrite (leds [(totalLeds - i) - 1], LOW); waktu penundaan); } }
Kode ini sedikit lebih kompleks. Perhatikan bagaimana kedua loop berubah dari nol menjadi "halfLeds - 1" (3). Ini membuat pemindai lebih baik. Jika kedua loop berubah dari 4 - 0 dan 0 - 4 maka LED yang sama akan berkedip dua kali dalam urutan yang sama - ini tidak akan terlihat sangat baik.
Anda sekarang harus memiliki pemindai LED Knight Rider yang berfungsi! Akan mudah untuk memodifikasi ini untuk menggunakan lebih banyak atau lebih besar LED, atau menerapkan pola Anda sendiri. Sirkuit ini sangat mudah untuk port ke Raspberry Pi (baru mengenal Pi? Mulai di sini Raspberry Pi: Tutorial Tidak ResmiBaik Anda pemilik Pi saat ini yang ingin mempelajari lebih lanjut atau calon pemilik perangkat ukuran kartu kredit ini, ini bukan panduan yang ingin Anda lewatkan. Baca lebih banyak ) atau ESP8266 Temui Pembunuh Arduino: ESP8266Bagaimana jika saya memberi tahu Anda bahwa ada papan dev yang kompatibel dengan Arduino dengan Wi-Fi bawaan kurang dari $ 10? Ya ada. Baca lebih banyak .
Apakah Anda sedang membangun replika KITT? Saya ingin sekali melihat semua hal Knight Rider di komentar.
Joe adalah lulusan Ilmu Komputer dari University of Lincoln, Inggris. Dia adalah pengembang perangkat lunak profesional, dan ketika dia tidak terbang drone atau menulis musik, dia sering ditemukan mengambil foto atau memproduksi video.