Bagaimana menghubungkan strip LED beralamat WS2812B ke Arduino
Perkembangan teknologi pencahayaan berbasis LED terus berkembang pesat. Kemarin tampak seperti keajaiban bahwa pita RGB dikendalikan oleh pengontrol, kecerahan dan warna yang dapat disesuaikan dengan remote control. Saat ini, ada lebih banyak kemungkinan di pasar.
Strip LED berdasarkan WS2812B
Perbedaan strip LED yang dapat dialamatkan dari standar RGB Apakah itu Kecerahan dan rasio warna setiap elemen dapat disesuaikan secara terpisah. Ini memungkinkan Anda mendapatkan efek pencahayaan yang tidak tersedia untuk jenis perlengkapan pencahayaan lainnya. Strip LED dikendalikan dengan cara yang terkenal - dengan modulasi lebar pulsa. Keunikan sistem adalah bahwa setiap LED memiliki pengontrol PWM sendiri. Chip WS2812B adalah dioda pemancar cahaya tiga warna dan sirkuit kontrol, digabungkan dalam satu paket.
Elemen-elemen digabungkan menjadi pita pada catu daya secara paralel, dan dikendalikan melalui bus serial - output elemen pertama terhubung ke input kontrol yang kedua, dan seterusnya. Dalam kebanyakan kasus, bus serial dibangun di atas dua jalur, salah satunya mentransmisikan strobo (pulsa sinkron), dan yang lainnya - data.
Bus kontrol chip WS2812B terdiri dari satu jalur - ia mentransmisikan data.Data dikodekan sebagai pulsa frekuensi konstan, tetapi dengan frekuensi yang berbeda. Satu pulsa adalah satu bit. Durasi setiap bit adalah 1,25 s, bit nol terdiri dari level tinggi 0,4 s dan level rendah 0,85 s. Unit terlihat seperti tinggi 0,8 s dan rendah 0,45 s. Paket 24 bit (3 byte) dikirim ke setiap LED, diikuti dengan jeda dalam bentuk level rendah selama 50 detik. Ini berarti bahwa data untuk LED berikutnya akan ditransmisikan berikutnya, dan seterusnya untuk semua elemen rantai. Transfer data berakhir dengan jeda 100 s. Ini berarti bahwa siklus pemrograman pita selesai dan kumpulan paket data berikutnya dapat dikirim.
Protokol ini memungkinkan satu jalur untuk transmisi data, tetapi membutuhkan waktu yang tepat. Perbedaannya tidak lebih dari 150 ns. Selain itu, kekebalan kebisingan bus ini sangat rendah. Setiap interferensi dengan amplitudo yang cukup dapat dirasakan oleh pengontrol sebagai data. Ini memberlakukan batasan pada panjang kabel dari sirkuit kontrol. Di sisi lain, ini memberikan kemampuan untuk untuk memverifikasi bahwa pita tanpa perangkat tambahan. Jika Anda menerapkan daya ke luminer dan menyentuh bantalan kontak bus kontrol dengan jari Anda, beberapa LED mungkin menyala dan mati secara kacau.
Karakteristik teknis elemen WS2812B
Untuk membuat sistem pencahayaan berdasarkan pita yang dapat dialamatkan, perlu diketahui parameter penting dari elemen pemancar cahaya.
Dimensi LED | 5x5 mm |
Frekuensi modulasi PWM | 400Hz |
Konsumsi saat ini pada kecerahan maksimum | 60 mA per elemen |
Tegangan suplai | 5 volt |
Arduino dan WS2812B
Platform Arduino yang populer di dunia memungkinkan Anda membuat sketsa (program) untuk mengontrol pita yang dapat dialamatkan. Kemampuan sistem cukup luas, tetapi jika pada tingkat tertentu tidak lagi cukup, keterampilan yang diperoleh akan cukup untuk beralih ke C++ atau bahkan assembler dengan mulus. Meskipun, lebih mudah untuk mendapatkan pengetahuan dasar tentang Arduino.
Menghubungkan pita berbasis WS2812B ke Arduino Uno (Nano)
Pada tahap pertama, papan Arduino Uno atau Arduino Nano sederhana sudah cukup. Kemudian, papan yang lebih kompleks dapat digunakan untuk membangun sistem yang lebih kompleks. Saat menghubungkan strip LED yang dapat dialamatkan secara fisik ke papan Arduino, Anda harus memastikan bahwa beberapa kondisi terpenuhi:
- karena kekebalan kebisingan yang rendah, konduktor koneksi jalur data harus sesingkat mungkin (Anda harus mencoba membuatnya dalam jarak 10 cm);
- Hubungkan kabel data ke output digital gratis dari papan Arduino - nanti akan ditunjukkan oleh perangkat lunak;
- Karena konsumsi daya yang tinggi, tidak perlu menyalakan strip dari papan - catu daya terpisah disediakan untuk tujuan ini.
Penting untuk menghubungkan kabel catu daya umum luminer dan Arduino.
Dasar-dasar kontrol perangkat lunak WS2812B
Telah disebutkan bahwa untuk mengontrol chip WS2812B Anda perlu membentuk pulsa dengan panjang tertentu, dengan akurasi tinggi. Dalam bahasa Arduino terdapat perintah untuk membentuk pulsa pendek tundaMikrodetik mikro. Masalahnya adalah resolusi perintah ini adalah 4 mikrodetik. Artinya, tidak mungkin untuk membentuk waktu tunda dengan akurasi yang diberikan. Hal ini diperlukan untuk pergi ke alat C++ atau Assembler. Dimungkinkan untuk mengontrol strip LED yang dapat dialamatkan melalui Arduino dengan bantuan perpustakaan yang dibuat khusus untuk tujuan ini. Anda dapat memulai dengan program Blink, yang membuat elemen pemancar cahaya berkedip.
dipimpin cepat
Perpustakaan ini bersifat universal. Selain pita yang dapat dialamatkan, ini mendukung banyak perangkat termasuk pita yang dikontrol SPI. Ini memiliki berbagai fitur.
Pertama, Anda harus menghubungkan perpustakaan. Ini dilakukan sebelum blok pengaturan, dan string terlihat seperti ini:
#termasuk
Langkah selanjutnya adalah membuat array untuk menyimpan warna dari setiap light emitting diode. Ini akan memiliki strip nama dan dimensi 15 elemen.
Strip CRGB[15]
Di blok penyiapan, Anda harus menentukan pita yang akan digunakan skrip:
batalkan pengaturan() {
FastLED.addLeds<WS2812B, 7, RGB>(strip, 15);
int g;
}
Parameter RGB mengatur urutan warna, 15 berarti jumlah LED, 7 adalah jumlah output yang ditetapkan untuk dikontrol (lebih baik untuk menetapkan konstanta ke parameter terakhir juga).
Blok loop dimulai dengan loop yang secara berurutan menulis ke setiap bagian dari larik Merah (cahaya merah):
untuk (g=0; g< 15;g++)
{strip[g]=CRGB::Merah;}
Kemudian array yang dihasilkan dikirim ke iluminator:
FastLED.show();
Penundaan 1000 milidetik (detik):
penundaan (1000);
Kemudian Anda dapat mematikan semua elemen dengan cara yang sama, menulis hitam di dalamnya.
untuk (int g=0; g< 15;g++)
{strip[g]=CRGB::Hitam;}
FastLED.show();
penundaan (1000);
Setelah menyusun dan memuat sketsa pita akan berkedip dengan jangka waktu 2 detik. Jika Anda ingin mengontrol setiap komponen warna secara terpisah, maka alih-alih string {strip[g]=CRGB::Merah;} beberapa string yang digunakan:
{
strip[g].r=100;// atur tingkat pendaran elemen merah
strip[g].g=11;// sama untuk hijau
strip[g].b=250;// sama untuk biru
}
NeoPixel
Pustaka ini hanya berfungsi dengan NeoPixel Ring LED, tetapi kurang intensif sumber daya dan hanya berisi hal-hal penting. Di Arduino programnya terlihat seperti ini:
#termasuk
Seperti pada kasus sebelumnya, library dicolokkan, dan objek lenta dideklarasikan:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Di mana 15 adalah jumlah elemen dan 6 adalah output yang ditetapkan
Lenta diinisialisasi di blok pengaturan:
batalkan pengaturan() {
lenta.mulai ()
}
Di blok loop semua elemen menyala merah, variabel dilewatkan ke pita dan penundaan 1 detik dibuat:
untuk (int y=0; y<15;y++)// 15 - jumlah elemen dalam luminer
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
lenta.show();
penundaan (1000);
Lenta berhenti bersinar dengan menulis hitam:
untuk (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
lenta.show();
penundaan (1000);
Pelajaran video: Contoh efek visual menggunakan pita yang dapat dialamatkan.
Setelah mempelajari cara mem-flash LED, Anda dapat melanjutkan pelajaran dan mempelajari cara membuat efek warna, termasuk "Pelangi" dan "Lampu Utara" yang populer dengan transisi yang mulus. LED beralamat WS2812B dan Arduino memberi Anda kemungkinan yang hampir tak terbatas untuk ini.