Bagaimana menghubungkan strip LED yang dapat dialamatkan WS2812B ke Arduino
Perkembangan teknologi pencahayaan berbasis LED terus berkembang pesat. Baru kemarin, pita RGB yang dikendalikan pengontrol, yang kecerahan dan warnanya dapat disesuaikan menggunakan remote control, tampak seperti keajaiban. Saat ini, lampu dengan lebih banyak fitur telah muncul di pasaran.
Strip LED berdasarkan WS2812B
Perbedaan antara strip LED yang dapat dialamatkan dan strip standar RGB hal adalah kecerahan dan rasio warna setiap elemen disesuaikan secara terpisah. Ini memungkinkan Anda untuk mendapatkan efek pencahayaan yang pada dasarnya tidak dapat diakses oleh jenis perangkat pencahayaan lainnya. Cahaya strip LED yang dapat dialamatkan dikontrol dengan cara yang diketahui - menggunakan modulasi lebar pulsa. Fitur dari sistem ini adalah untuk melengkapi setiap LED dengan pengontrol PWM-nya sendiri. Chip WS2812B adalah dioda pemancar cahaya tiga warna dan rangkaian kontrol yang digabungkan dalam satu paket.

Elemen-elemen digabungkan menjadi pita daya secara paralel, dan dikendalikan melalui bus serial - output elemen pertama terhubung ke input kontrol elemen kedua, dll. Dalam kebanyakan kasus, bus serial dibangun di atas dua jalur, salah satunya mentransmisikan strobo (pulsa clock), dan yang lainnya - data.

Bus kontrol chip WS2812B terdiri dari satu jalur - data ditransmisikan melaluinya. Data dikodekan sebagai pulsa frekuensi konstan, tetapi dengan siklus tugas yang berbeda. Satu pulsa - satu bit. Durasi setiap bit adalah 1,25 s, bit nol terdiri dari level tinggi dengan durasi 0,4 s dan level rendah 0,85 s. Unit terlihat seperti level tinggi selama 0,8 s dan level rendah selama 0,45 s. Ledakan 24-bit (3-byte) dikirim ke setiap LED, diikuti oleh jeda tingkat rendah selama 50 s. Ini berarti bahwa data akan ditransmisikan untuk LED berikutnya, dan seterusnya untuk semua elemen rantai. Transfer data berakhir dengan jeda 100 s. Ini menunjukkan bahwa siklus pemrograman tape telah selesai dan paket data berikutnya dapat dikirim.

Protokol seperti itu memungkinkan untuk bertahan dengan satu jalur untuk transmisi data, tetapi membutuhkan akurasi dalam mempertahankan interval waktu. Perbedaan diperbolehkan tidak lebih dari 150 ns. Selain itu, kekebalan kebisingan dari bus semacam itu sangat rendah. Setiap interferensi dengan amplitudo yang cukup dapat dirasakan oleh pengontrol sebagai data. Ini memberlakukan pembatasan pada panjang konduktor dari sirkuit kontrol. Di sisi lain, ini memungkinkan pemeriksaan kesehatan pita tanpa perangkat tambahan.Jika Anda menerapkan daya ke lampu dan menyentuh bantalan kontak bus kontrol dengan jari Anda, beberapa LED mungkin menyala secara acak dan padam.
Spesifikasi elemen WS2812B
Untuk membuat sistem pencahayaan berdasarkan pita alamat, Anda perlu mengetahui parameter penting dari elemen pemancar cahaya.
| dimensi LED | 5x5mm |
| Frekuensi modulasi PWM | 400Hz |
| Konsumsi saat ini pada kecerahan maksimum | 60 mA per sel |
| Tegangan suplai | 5 volt |
Arduino dan WS2812B
Platform Arduino, yang populer di dunia, memungkinkan Anda membuat sketsa (program) untuk mengelola pita alamat. Kemampuan sistem cukup luas, tetapi jika tidak lagi cukup pada tingkat tertentu, keterampilan yang diperoleh akan cukup untuk beralih ke C ++ atau bahkan ke assembler tanpa kesulitan. Meskipun pengetahuan awal lebih mudah didapat di Arduino.
Menghubungkan Pita WS2812B ke Arduino Uno (Nano)
Pada tahap pertama, papan Arduino Uno atau Arduino Nano sederhana sudah cukup. Di masa depan, papan yang lebih kompleks dapat digunakan untuk membangun sistem yang lebih kompleks. Saat menghubungkan strip LED yang dapat dialamatkan secara fisik ke papan Arduino, beberapa kondisi harus diperhatikan:
- karena kekebalan kebisingan yang rendah, konduktor penghubung dari jalur data harus sesingkat mungkin (Anda harus mencoba membuatnya dalam jarak 10 cm);
- anda perlu menghubungkan konduktor data ke output digital gratis dari papan Arduino - itu kemudian akan ditentukan secara terprogram;
- karena konsumsi daya yang tinggi, tidak perlu memberi daya pada pita dari papan - catu daya terpisah disediakan untuk tujuan ini.
Kabel daya umum lampu dan Arduino harus terhubung.

Dasar-dasar Kontrol Program WS2812B
Telah disebutkan bahwa untuk mengontrol sirkuit mikro WS2812B, perlu untuk menghasilkan pulsa dengan panjang tertentu, menjaga akurasi tinggi. Ada perintah dalam bahasa Arduino untuk pembentukan pulsa pendek tundaMikrodetik dan mikro. Masalahnya adalah resolusi perintah ini adalah 4 mikrodetik. Artinya, tidak akan berfungsi untuk membentuk penundaan waktu dengan akurasi yang diberikan. Hal ini diperlukan untuk beralih ke alat C ++ atau Assembler. Dan Anda dapat mengatur kontrol strip LED yang dapat dialamatkan melalui Arduino menggunakan perpustakaan yang dibuat khusus untuk ini. Anda dapat mulai berkenalan dengan program Blink, yang membuat elemen pemancar cahaya berkedip.
dipimpin cepat
Perpustakaan ini bersifat universal. Selain pita alamat, ia mendukung berbagai perangkat, termasuk pita yang dikendalikan oleh antarmuka SPI. Ini memiliki kemungkinan yang luas.
Pertama, perpustakaan harus disertakan. Ini dilakukan sebelum blok pengaturan, dan garisnya terlihat seperti ini:
#sertakan <FastLED.h>
Langkah selanjutnya adalah membuat array untuk menyimpan warna dari setiap light emitting diode. Ini akan memiliki strip nama dan dimensi 15 - dengan jumlah elemen (lebih baik untuk menetapkan konstanta ke parameter ini).
strip CRGB[15]
Di blok pengaturan, Anda perlu menentukan pita mana yang akan digunakan sketsa:
batalkan pengaturan() {
FastLED.addLeds<WS2812B, 7, RGB>(strip, 15);
intg;
}
Parameter RGB mengatur urutan urutan warna, 15 berarti jumlah LED, 7 adalah jumlah output yang ditetapkan untuk kontrol (juga lebih baik untuk menetapkan konstanta ke parameter terakhir).
Blok loop dimulai dengan loop yang secara berurutan menulis ke setiap bagian dari array Merah (cahaya merah):
untuk (g=0; g< 15; g++)
{strip[g]=CRGB::Merah;}
Selanjutnya, array yang terbentuk dikirim ke lampu:
FastLED.show();
Penundaan 1000 milidetik (detik):
penundaan (1000);
Kemudian Anda dapat mematikan semua elemen dengan cara yang sama dengan menulis hitam di dalamnya.
untuk (int g=0; g< 15; g++)
{strip[g]=CRGB::Hitam;}
FastLED.show();
penundaan (1000);

Setelah menyusun dan mengunggah sketsa, pita akan berkedip dengan jangka waktu 2 detik. Jika Anda perlu mengelola setiap komponen warna secara terpisah, maka alih-alih garis {strip[g]=CRGB::Merah;} beberapa baris digunakan:
{
strip[g].r=100;// atur tingkat cahaya elemen merah
strip[g].g=11;// sama untuk hijau
strip[g].b=250;// sama untuk biru
}
NeoPixel
Pustaka ini hanya berfungsi dengan cincin LED NeoPixel Ring, tetapi kurang intensif sumber daya dan hanya berisi hal-hal penting. Dalam bahasa Arduino, programnya terlihat seperti ini:
#include <Adafruit_NeoPixel.h>
Seperti pada kasus sebelumnya, library terhubung, dan objek lenta dideklarasikan:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// di mana 15 adalah jumlah elemen dan 6 adalah output yang ditetapkan
Di blok pengaturan, kaset diinisialisasi:
batalkan pengaturan() {
lenta.mulai()
}
Di blok loop, semua elemen disorot dengan warna merah, variabel diteruskan ke umpan, dan penundaan 1 detik dibuat:
untuk (int y=0; y<15; y++)// 15 - jumlah elemen dalam lampu
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
rekaman.tampilkan();
penundaan (1000);
Cahaya berhenti dengan catatan hitam:
untuk (int y=0; y< 15; y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
rekaman.tampilkan();
penundaan (1000);

Video tutorial: Contoh efek visual menggunakan pita alamat.
Setelah Anda mempelajari cara mem-flash LED, Anda dapat melanjutkan mempelajari cara membuat efek warna, termasuk Rainbow dan Aurora Borealis yang populer dengan transisi yang mulus. LED Addressable WS2812B dan Arduino memberikan kemungkinan yang hampir tak terbatas untuk ini.
