Komponen · 5 mnt baca

LED Strip WS2812B NeoPixel dengan Arduino: Panduan LED RGB Addressable

Apa itu WS2812B NeoPixel dan bagaimana cara menghubungkannya? LED strip, ring, dan matriks RGB addressable, perhitungan daya, kode Adafruit NeoPixel dan FastLED, efek pelangi, serta contoh ESP32 dan Pico.

WS2812B adalah LED RGB yang sudah punya chip driver sendiri di dalamnya. Kalau LED RGB biasa butuh pin terpisah untuk setiap warna, dengan WS2812B kamu mengendalikan ratusan LED lewat satu kabel data dan memberi masing-masing warna serta kecerahannya sendiri. NeoPixel adalah sebutan Adafruit untuk keluarga LED addressable ini. Dijual dalam bentuk strip, ring, stick, dan matriks, LED ini dipakai di proyek yang tak terhitung jumlahnya, dari lampu suasana dan jam LED sampai game dan lampu notifikasi.

Potongan LED strip RGB addressable WS2812B
Satu potongan strip WS2812B: data masuk lewat input DI di kiri dan diteruskan ke LED berikutnya lewat output DO di kanan. Panah menunjukkan arah data.

Bagaimana cara kerja WS2812B?

Di dalam kemasan 5x5 mm setiap WS2812B ada tiga LED mungil, merah, hijau, dan biru, ditambah chip mini yang mengendalikannya. Arduino mengirim paket warna 24-bit satu demi satu lewat jalur data: 8 bit hijau, 8 bit merah, dan 8 bit biru (urutan GRB). LED pertama menyimpan 24 bit pertama untuk dirinya sendiri dan meneruskan sisanya ke LED berikutnya lewat pin DO; setiap LED melakukan hal yang sama. Ketika jalur data tetap LOW selama minimal 50 mikrodetik (280 di versi yang lebih baru), semua LED menampilkan warnanya pada momen yang sama. Dengan 256 level per warna, satu LED bisa menampilkan 16,7 juta warna yang berbeda.

FiturNilai
Tegangan catu5 V (3,5–5,3 V)
Arus per LEDSampai ~60 mA (putih penuh), ~1 mA ketika mati
Laju data800 kHz, satu kabel
Urutan warnaGRB (hijau, merah, biru)
Kedalaman warna24 bit, 16,7 juta warna
Kemasan5050 SMD (5x5 mm)

Strip, ring, dan matriks

JenisJumlah LEDPemakaian umum
Strip30, 60, atau 144 per meterLampu suasana, lampu belakang TV, lampu rak
Ring8, 12, 16, 24Jam LED, indikator, lampu meja
Matriks8x8 = 64, 16x16 = 256Teks berjalan, animasi, game piksel
Stick8Indikator level, lampu status
Ring NeoPixel WS2812B 24 LED
Ring NeoPixel 24 LED: ideal untuk jam LED dan indikator melingkar; pada muka jam 12 jam, setiap LED mewakili setengah jam.

Pengkabelan WS2812B

WS2812B punya tiga sambungan: 5V, GND, dan DIN (data masuk). Panah di strip menunjukkan arah aliran data; selalu hubungkan Arduino ke ujung tempat panah dimulai, yaitu sisi DIN. Menambahkan resistor 330–470 Ω secara seri di jalur data, dan kapasitor 1000 µF di antara 5V dan GND di input daya strip, melindungi LED pertama dari lonjakan tegangan yang mendadak.

Pin WS2812BSambungan
5V5V Arduino untuk beberapa LED, adaptor 5 V eksternal untuk lebih banyak
GNDGND (dengan adaptor eksternal, ground-nya harus bersama Arduino)
DIND6 (lewat resistor 330 Ω)
DOUTDIN LED atau strip berikutnya
Jangan beri daya banyak LED dari pin 5V Arduino: USB memberikan maksimal 500 mA, dan satu LED bisa menarik 60 mA di putih penuh. Beri daya strip dari adaptor 5 V eksternal, selalu hubungkan GND adaptor ke GND Arduino, dan jangan pernah mencolokkan kabel data sebelum GND ketika rangkaian sedang menyala, karena LED pertama bisa rusak.

Perhitungan daya: berapa ampere yang kamu butuhkan?

Rumus kasus terburuknya sederhana: jumlah LED × 60 mA. Dalam animasi, jarang semua LED menyala putih penuh bersamaan; dalam praktiknya rata-ratanya sekitar 20 mA per LED. Meski begitu, sebaiknya pilih adaptor untuk kasus terburuk atau batasi kecerahan lewat software. Pakai alat hukum Ohm untuk menghitung daya dalam watt, dan alat daya tahan baterai untuk memperkirakan lama pemakaian di proyek bertenaga baterai.

Jumlah LEDKasus terburuk (putih penuh)Catu daya yang disarankan
80,48 AUSB cukup (kecerahan dibatasi)
301,8 AAdaptor 5 V 3 A
603,6 AAdaptor 5 V 4 A
1448,6 AAdaptor 5 V 10 A
Pada strip yang panjang, jalur tembaga yang tipis kehilangan tegangan dan ujung strip terlihat kekuningan atau kemerahan. Untuk mencegahnya, alirkan lagi 5V dan GND dari adaptor ke strip setiap 1–2 meter (power injection). Menurunkan kecerahan ke 20–30% juga sangat mengurangi arus tanpa perbedaan yang terasa di mata.

Kode pertamamu dengan library Adafruit NeoPixel

Di Library Manager, cari Adafruit NeoPixel lalu instal. Kode di bawah “menyapu” strip dengan warna dengan menyalakan LED satu per satu dalam merah, hijau, dan biru:

C++ (Arduino IDE)
1#include <Adafruit_NeoPixel.h>
2
3#define PIN 6          // DIN pini / data pin
4#define NUM_LEDS 8     // LED sayısı / number of LEDs
5
6Adafruit_NeoPixel strip(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
7
8void setup() {
9  strip.begin();
10  strip.setBrightness(50);   // 0–255, yalnız bir kez / only once
11  strip.show();              // hepsini söndür / all off
12}
13
14void colorWipe(uint32_t color, int wait) {
15  for (int i = 0; i < NUM_LEDS; i++) {
16    strip.setPixelColor(i, color);
17    strip.show();            // değişikliği gönder / send the change
18    delay(wait);
19  }
20}
21
22void loop() {
23  colorWipe(strip.Color(255, 0, 0), 80);   // kırmızı / red
24  colorWipe(strip.Color(0, 255, 0), 80);   // yeşil / green
25  colorWipe(strip.Color(0, 0, 255), 80);   // mavi / blue
26}

setPixelColor() hanya mengubah warna di memori; untuk benar-benar menyalakan LED, kamu perlu memanggil show(). Dengan begitu kamu bisa mengatur warna setiap LED lalu menampilkan semuanya sekaligus. Karena setBrightness() mengubah skala data warna secara permanen, sebaiknya fungsi ini dipanggil sekali di setup(), bukan diubah terus-menerus di loop(). Setiap LED memakan 3 byte RAM Arduino; RAM 2 KB di Uno cepat penuh dengan ratusan LED.

Efek pelangi: warna HSV

Memakai HSV (hue, saturation, value) alih-alih mengatur warna dengan nilai merah, hijau, dan biru membuat efek jauh lebih mudah: kamu berkeliling seluruh roda warna hanya dengan mengubah hue. Di library Adafruit, hue berkisar dari 0 sampai 65535. gamma32() mengoreksi warna agar sesuai dengan cara mata menangkapnya, sehingga transisinya terlihat lebih alami:

C++ (Arduino IDE)
1#include <Adafruit_NeoPixel.h>
2
3#define PIN 6
4#define NUM_LEDS 24
5
6Adafruit_NeoPixel strip(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
7
8void setup() {
9  strip.begin();
10  strip.setBrightness(40);
11}
12
13void loop() {
14  for (long first = 0; first < 65536; first += 256) {
15    for (int i = 0; i < NUM_LEDS; i++) {
16      uint16_t hue = first + i * 65536L / NUM_LEDS;   // her LED'e farklı ton / a different hue per LED
17      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(hue)));
18    }
19    strip.show();
20    delay(10);
21  }
22}

Library FastLED

Untuk efek yang lebih canggih, library FastLED juga sangat populer. Library ini menyimpan LED dalam larik CRGB, menawarkan perintah yang mudah dibaca seperti leds[3] = CRGB::Red;, dan memakai rentang hue 0–255. Fungsi siap pakai seperti fill_rainbow() dan fadeToBlackBy() memungkinkanmu menulis efek api, bintang jatuh, atau bernapas dalam beberapa baris. Salah satu fiturnya yang paling praktis adalah FastLED.setMaxPowerInVoltsAndMilliamps(5, 2000);: library otomatis menurunkan kecerahan agar arusnya tetap di bawah 2 A.

Memakai matriks NeoPixel 8x8

Matriks sebenarnya hanyalah strip panjang: 64 LED yang dirangkai berurutan di satu jalur data. Di kebanyakan matriks, barisnya berjalan zig-zag (serpentine): baris genap dari kiri ke kanan, baris ganjil dari kanan ke kiri. Jadi untuk mengubah koordinat x, y menjadi nomor LED, kamu memakai y × 8 + x di baris genap dan y × 8 + (7 − x) di baris ganjil. Karena 64 LED bisa menarik 3,8 A di putih penuh, menjaga kecerahan tetap rendah sangat penting di matriks.

Matriks LED NeoPixel WS2812B 8x8
Matriks NeoPixel 8x8: 64 LED addressable yang dikendalikan lewat satu jalur data; ideal untuk teks berjalan dan game piksel.

WS2812B dengan ESP32 dan Raspberry Pi Pico

Library Adafruit NeoPixel dan FastLED juga bekerja di ESP32; berkat Wi-Fi, mudah sekali mengendalikan LED dari ponsel atau membuat lampu yang berganti warna mengikuti cuaca. Yang perlu diperhatikan adalah level tegangan: WS2812B yang diberi daya 5 V mengharapkan minimal 3,5 V di input datanya, sedangkan ESP32 dan Pico mengeluarkan 3,3 V. Kebanyakan strip tetap bekerja, tetapi kalau LED pertama berkedip atau muncul warna acak, tambahkan level shifter seperti 74AHCT125 di jalur data. Di Raspberry Pi Pico, MicroPython punya modul neopixel bawaan:

MicroPython
1from machine import Pin
2import neopixel
3import time
4
5NUM = 8
6np = neopixel.NeoPixel(Pin(0), NUM)      # GP0 → DIN
7
8def wheel(pos):                          # 0–255 → renk çemberi / colour wheel
9    if pos < 85:
10        return (255 - pos * 3, pos * 3, 0)
11    if pos < 170:
12        pos -= 85
13        return (0, 255 - pos * 3, pos * 3)
14    pos -= 170
15    return (pos * 3, 0, 255 - pos * 3)
16
17j = 0
18while True:
19    for i in range(NUM):
20        r, g, b = wheel((i * 256 // NUM + j) & 255)
21        np[i] = (r // 5, g // 5, b // 5)  # parlaklığı düşür / dim it
22    np.write()
23    j = (j + 2) & 255
24    time.sleep_ms(20)

Ide proyek WS2812B

  • Lampu suasana TV: tempel strip di bagian belakang TV untuk memberi ruangan cahaya yang lembut.
  • Jam NeoPixel: tampilkan jam, menit, dan detik dengan warna berbeda di ring 60 LED.
  • Pengukur level suara: buat bar LED yang naik mengikuti volume musik dengan modul mikrofon.
  • Lampu notifikasi: ganti warna dengan ESP32 berdasarkan cuaca atau e-mail baru dari internet.
  • Lampu polisi dan Knight Rider: tulis efek kedip merah-biru atau cahaya yang menyapu bolak-balik.
  • Game ular piksel: buat ulang game ular klasik dengan matriks 8x8 dan joystick.

Kesalahan umum dan cara mengatasinya

  • Tidak ada LED yang menyala: Arduino terhubung ke ujung strip yang salah, yaitu sisi DOUT; periksa panahnya dan pakai ujung DIN.
  • Warnanya tertukar (hijau, bukan merah): urutan warnanya salah; pakai NEO_GRB di kode, walaupun beberapa strip butuh NEO_RGB.
  • LED pertama berkedip atau menampilkan warna acak: tidak ada resistor seri, GND tidak dipakai bersama, atau sinyal data 3,3 V tidak cukup.
  • Ujung strip terlihat kekuningan: ada penurunan tegangan; alirkan daya ke strip di beberapa titik atau turunkan kecerahannya.
  • Arduino reset ketika LED menyala: arus yang ditarik dari USB terlalu besar; pakai adaptor eksternal dan kapasitor 1000 µF.
  • Hanya beberapa LED pertama yang menyala: NUM_LEDS di kode lebih kecil dari jumlah LED sebenarnya, atau ada sambungan putus di sepanjang strip.

WS2812B adalah titik awal yang bagus untuk memahami cara warna bercampur; logika warnanya ada di Cara Memakai LED RGB dan pengaturan kecerahan di Apa Itu PWM? Di aplikasi BlueGrays ada dasar-dasar WS2812B, lampu polisi, LED berjalan, pemindai Knight Rider, efek animasi, dan kontrol strip NeoPixel dengan ESP32, lengkap dengan skema rangkaian dan kode.

Pertanyaan umum

Apa perbedaan WS2812B dan NeoPixel?

NeoPixel adalah nama merek Adafruit untuk LED addressable seperti WS2812, WS2812B, dan SK6812. Semuanya memakai protokol data yang sama, jadi dikendalikan dengan cara dan library yang sama.

Berapa banyak WS2812B yang bisa dihubungkan ke satu Arduino?

Dari sisi data tidak ada batas pasti, tetapi ada tiga hal yang membatasimu: RAM (3 byte per LED, jadi dalam praktiknya beberapa ratus LED di Uno), waktu pembaruan (30 mikrodetik per LED; 1000 LED butuh sekitar 30 ms, atau ~33 frame per detik), dan catu daya.

Bisakah WS2812B diberi daya dari pin 5V Arduino?

Hanya beberapa LED dengan kecerahan rendah; misalnya, stick 8 LED bisa jalan lewat USB dengan kecerahan sekitar 50. Untuk lebih banyak LED, pakai adaptor 5 V eksternal dan sambungkan ground-nya bersama.

Apakah resistor dan kapasitornya benar-benar perlu?

Tidak mutlak wajib, tetapi sangat disarankan. Resistor 330–470 Ω di jalur data meredam lonjakan sinyal dan melindungi LED pertama, dan kapasitor 1000 µF di input daya menyerap arus awal yang besar pada momen daya diberikan.

Apakah WS2812B bekerja dengan ESP32 dan board 3,3 V?

Biasanya bisa, tetapi tidak dijamin: WS2812B yang diberi daya 5 V mengharapkan minimal 3,5 V di input datanya. Kalau kamu melihat kedipan atau warna yang salah, naikkan sinyal data ke 5 V dengan level shifter seperti 74AHCT125.

Apa perbedaan WS2812B, WS2811, WS2813, dan SK6812?

WS2811 adalah chip driver terpisah dan biasanya mengendalikan tiga LED sekaligus di strip 12 V. WS2813 punya jalur data cadangan, jadi rangkaiannya tetap bekerja walaupun satu LED rusak. SK6812 adalah alternatif yang kompatibel dan juga tersedia dalam versi RGBW dengan LED putih; untuk itu kamu memakai NEO_GRBW di kode.

Lihat semua proyek
Menggunakan LED Strip WS2812B
#69Menengah
Premium

Menggunakan LED Strip WS2812B

Kenalan dengan LED strip pintar yang setiap lampunya bisa kamu warnai sendiri-sendiri. Arduino pertama-tama menyalakan lima LED pertama dengan warna merah, sedetik kemudian lima lainnya biru, lalu mem

4.8(54)
70
Lampu Polisi dengan WS2812B
#70Menengah
Premium

Lampu Polisi dengan WS2812B

Kamu membawa lampu merah dan biru dari atap mobil polisi langsung ke mejamu. Separuh dari strip WS2812B sepuluh LED berkedip merah tiga kali dengan cepat, lalu separuh lainnya berkedip biru tiga kali,

4.8(67)
86
LED Berjalan WS2812B
#71Menengah
Premium

LED Berjalan WS2812B

Di strip sepuluh LED, satu titik cahaya hijau bergerak dari awal ke akhir satu LED demi satu, lalu melompat kembali ke awal; titik itu bertahan di setiap LED selama sepertiga detik. Di strip WS2812B,

4.8(58)
75
LED Berjalan WS2812B (Efek Isi)
#72Menengah
Premium

LED Berjalan WS2812B (Efek Isi)

Strip lampu yang terisi dan kosong seperti segelas air. Arduino menyalakan sepuluh LED warna satu per satu dengan warna oranye dan membiarkannya menyala; begitu strip penuh, ia mematikannya satu per s

4.7(50)
65
Efek Knight Rider WS2812B
#73Menengah
Premium

Efek Knight Rider WS2812B

Titik cahaya merah meluncur dari satu ujung LED strip pintar ke ujung lainnya, lalu kembali, menyapu bolak-balik tanpa pernah berhenti. Di setiap langkah Arduino hanya menyalakan satu LED, menunggu se

4.9(73)
94
Efek Knight Rider WS2812B (3 LED)
#74Menengah
Premium

Efek Knight Rider WS2812B (3 LED)

Semua warna pelangi meluncur perlahan di sepanjang strip 56 LED. Setiap LED menyala dengan warna yang sedikit berbeda dari tetangganya dan warnanya terus mengalir ke arah yang sama, menjadikan strip i

4.8(61)
79
Animasi WS2812B 1
#75Menengah
Premium

Animasi WS2812B 1

Di strip 56 LED, semua warna pelangi berjajar berdampingan dan mengalir tanpa pernah berhenti, seolah sungai cahaya meluncur di sepanjang strip. Setiap LED menyala dengan warna yang sedikit berbeda da

4.9(69)
89
Animasi WS2812B 2
#76Menengah
Premium

Animasi WS2812B 2

Siapkan pertunjukan cahaya di kamarmu yang berganti warna dengan sendirinya. Arduino terus mengalirkan warna di sepanjang strip 30 LED dan berganti ke set warna baru setiap beberapa detik: pelangi, ga

4.8(65)
84
Kendali Strip NeoPixel WS2812B ESP32
#126Menengah
Premium

Kendali Strip NeoPixel WS2812B ESP32

LED addressable WS2812B (NeoPixel) adalah LED RGB pintar yang bisa dikendalikan secara berantai lewat satu pin data. Di proyek ini, kita mengendalikan strip WS2812B 8 LED dengan library Adafruit_NeoPixel untuk membuat animasi pelangi yang halus. Meskipun level logika 3,3V ESP32 bekerja lancar dengan sebagian besar komponen WS2812B, kita menunjukkan solusi dengan resistor seri 470Ω dan kapasitor 1000µF untuk berjaga-jaga jika tidak stabil. Animasinya dibuat dengan menggeser nilai hue.

4.9(19)
30