Seni Segitiga LED Dinamis: Buat Tampilan RGB 45 LED dengan Arduino UNO
Komponen dan Perlengkapan
- LED RGB APA-106 dapat diprogram × 45
- Kawat tembaga timah 22 gauge × 1
- Arduino UNO × 1
- Segitiga plywood 12 inci di sisi, tebal 1/4 inci × 1
Alat dan Mesin yang Diperlukan
- Paku las (generik)
- Pistol lem panas (generik)
- Klip pendingin × 1
Tentang Proyek Ini
Pendahuluan
Proyek ini menggunakan 45 LED APA-106 yang dapat diprogram dan dikontrol oleh Arduino UNO. LED ini mirip dengan strip LED yang dapat diprogram secara individual, jadi kami menggunakan perpustakaan Neo-pixel Adafruit untuk mengontrolnya. Satu pin pada UNO memprogram seluruh tampilan, karena satu garis data berjalan ke semua LED dalam rantai.
Inspirasi untuk desain ini berasal dari dua proyek saya sebelumnya. Kubus RGB 5x5x5 kedua saya (Another 5x5x5 RGB Cube) menggunakan LED APA-106 yang dapat diprogram dan saya tersisa sekitar 75 extras. Saya bisa membangun kubus 4x4x4 dari mereka, tetapi saya telah membangun banyak kubus terakhirnya - saatnya untuk sesuatu yang lain. Proyek Seni Motor Servo saya dibuat sebagai segitiga dan desain segitiga itu menciptakan banyak pola menarik. Jadi proyek ini menggunakan 45 LED APA-106 yang disusun dalam pola segitiga untuk menjelajahi seni segitiga lebih lanjut.
Ini adalah proyek yang cukup mudah baik dari segi hardware maupun perangkat lunak. Mari kita lihat hardware terlebih dahulu dan kemudian perangkat lunak.
Hardware
Hardware hanya terdiri dari UNO dan 45 LED. LED ini sangat terang pada daya penuh, jadi saya mengatur kecerahan seluruh tampilan menjadi 30 pada skala 0 hingga 255. Pada tingkat tersebut, UNO dan semua LED dapat dihubungkan langsung ke input USB UNO, jadi suplai daya 1 ampere - 5 volt bersifat opsional.
Langkah pertama dalam konstruksi adalah membuat lubang di sebuah potongan plywood tebal 1/4 inci. Papan itu berukuran 12 inci di setiap sisi. LED diatur jarak 1 inci dalam segitiga sama sisi yang dibuat dengan hati-hati. LED berukuran 8mm, jadi saya membuat lubang 8 mm yang memberikan pas ketat pada LED - mereka tidak bergerak sama sekali setelah ditekan masuk.
Di atas kiri adalah LED APA-106. Kaki panjang adalah ground. Data out adalah kaki di kanan di sisi tepi datar kemasan. Kaki pertama di kiri adalah data in, dan kaki berikutnya antara data in dan ground adalah +5V. 4 kaki ini dibengkok seperti yang ditunjukkan di kanan. Kaki ground memiliki bengkok kedua di ujungnya - tujuannya hanya untuk mengidentifikasi kaki ground, karena sulit untuk melihatnya setelah mereka semua dibengkok.
Gambar di atas menunjukkan bagaimana papan disambungkan. Perhatikan terlebih dahulu bahwa garis data yang berwarna biru bergerak maju dan mundur saat LED disambungkan secara berantai. Ini berarti bahwa pada baris ganjil data mengalir dari kiri ke kanan, sementara pada baris genap, data mengalir dari kanan ke kiri. Ini juga menyebabkan bus daya berbeda untuk baris ganjil versus baris genap. Untuk baris ganjil, kaki ground naik dan kaki +5v turun, kemudian sebaliknya untuk baris genap.
Foto di atas menunjukkan penyambungan. Semua dilakukan dengan kawat tembaga timah polos 22 gauge. Saya mengumpulkan bus ground di kiri dan bus +5V di kanan. Anda harus melakukan yang sebaliknya. Setiap koneksi garis data pada papan saya harus melewati bus daya, tetapi jika Anda mengganti ground ke kanan dan +5v ke kiri, garis data tidak akan perlu melewati apa-apa!
Di atas adalah tampilan close-up dari penyambungan. Perhatikan bagaimana garis data di kanan melintasi di atas bus daya 5 volt.
Foto di atas menunjukkan papan yang selesai. Saya menggunakan beberapa potongan plastik kecil sebagai standoff untuk UNO dan memasang UNO pada papan dengan sedikit lem panas.
Foto di atas menunjukkan segitiga dalam kotak. Ini adalah cetakan 3D dari file .stl yang disertakan di sini. Anda juga dapat membuat satu dengan cukup mudah dari plywood.
Perangkat Lunak
Perangkat lunak cukup sederhana berkat perpustakaan neo-pixel Adafruit. Ini memberikan kami setPixelColor(# dalam rantai, warna) untuk menentukan warna dari satu LED dan show() yang memperbarui seluruh tampilan ke perubahan terbaru. Perpustakaan menggunakan angka 32 bit tanpa tanda untuk mewakili warna LED, menyimpan 8 bit masing-masing untuk intensitas merah, hijau dan biru. Saya menggunakan skema ini secara langsung untuk mempercerah dan meapkan warna primer, tetapi untuk segala hal lainnya, saya menggunakan skema manajemen warna sederhana saya sendiri, yang dipinjam dari kubus LED saya. Ini adalah skema sederhana di mana angka 1 hingga 42 mewakili palet warna pelangi, menambahkan 0 untuk Hitam (semua mati) dan 43 untuk Putih (semua menyala).
Anda mungkin telah memperhatikan di diagram penyambungan di atas bahwa LED diberi nomor dimulai dengan 0 di atas dan nomor berjalan dari kiri ke kanan menurut baris. Ini adalah sistem penomoran yang saya gunakan untuk mengidentifikasi LED. Ini tidak bergerak maju dan mundur seperti garis data, jadi saya membuat versi sendiri dari setPixelColor yang merujuk ke LED berdasarkan nomor penugasan saya dan memungkinkan saya untuk menentukan warna menggunakan palet warna 0 hingga 43 saya.
Hampir semua animasi atau efek yang Anda lihat dalam video didasarkan pada tabel. Satu tabel memberitahu Anda bagaimana menyapu dari sudut atas. Dua tabel lain menerjemahkan efek itu ke dua sudut lainnya. Tabel lain memberitahu Anda LED di segitiga luar, kemudian tengah, kemudian segitiga dalam terdalam. Semua tabel yang berbeda ini disimpan dalam memori program bukan RAM. Awalnya saya khawatir semua tabel ini akan mengambil terlalu banyak ruang program berharga. Tetapi menggunakan pendekatan tabel ini terbukti sangat efisien dan ruang program tidak pernah menjadi masalah.
Program atau sketsa terbagi menjadi empat file atau tab di Arduino IDE. Pertama adalah deklarasi, tabel dan rutinitas setup. Kedua adalah loop utama yang hanya memanggil daftar berbagai animasi. Ketiga adalah animasi itu sendiri. Keempat adalah fungsi umum atau subrutin yang mendukung semua animasi.
Dalam video di atas Anda melihat tampilan asli dengan 15 animasi. Ini berlangsung sekitar 3 menit sebelum mengulang. Namun sejak itu, saya telah memperluas tampilan untuk menyertakan sejumlah animasi baru yang dapat Anda lihat dalam video di bawah ini.
Semua animasi dalam video di atas semuanya dilakukan dengan panggilan ke satu subrutin yang disebut rotation(). Segitiga terdiri dari segitiga luar 24 LED, segitiga tengah 15 LED dan segitiga dalam 6 LED. Pembagi umum dari ketiga angka ini adalah 120. Jadi dalam 120 langkah kita dapat memutar seluruh konten segitiga 360 derajat. Itulah yang dilakukan oleh rutinitas rotate(). Ubah pola awal, ubah arah rotasi, ubah kecepatan rotasi, dan Anda akan mendapatkan semua efek yang Anda lihat dalam video di atas.
Tampilan dalam unduhan sekarang mencakup tampilan asli, serta semua animasi di atas, menghasilkan tampilan dengan 26 animasi yang berlangsung 5 menit sebelum mengulang.
Kode
- Kode Arduino untuk Seni Segitiga
Kode Arduino untuk Seni SegitigaArduino
Ini adalah file zip dengan rutinitas pengujian, tampilan dengan 26 animasi, dan petunjuk untuk menggunakan perpustakaan Neo-pixel
No preview (download only).
Bagian dan Penutup Khusus
Sebuah file .stl untuk penutup
Skema