Komponen · 9 mnt baca

Matrix NeoPixel Arduino: Panduan Panel LED WS2812B 8x8 dan 16x16

Panduan matrix NeoPixel Arduino: susunan zigzag pada panel WS2812B 8x8 dan 16x16, fungsi XY, teks berjalan, animasi, batas arus, serta kode ESP32 dan Pico.

Matrix NeoPixel adalah salah satu layar paling mencolok yang bisa kamu buat dengan Arduino. Matrix ini terdiri dari 8x8 (64 LED) atau 16x16 (256 LED) LED RGB addressable WS2812B yang disusun di sebuah panel, dan kamu mengatur warna setiap piksel satu per satu lewat satu kabel data saja. Matrix ini ideal untuk teks berjalan, ikon, game kecil, tampilan spektrum audio, dan animasi dekoratif. Di panduan ini kamu akan belajar langkah demi langkah tentang susunan zigzag di dalam panel, fungsi yang mengubah koordinat x-y menjadi nomor LED, teks berjalan, dan animasi.

Bekerja dengan matrix butuh sedikit lebih banyak kehati-hatian dibanding satu LED strip NeoPixel. 256 LED bisa menarik arus lebih dari 15 ampere pada kecerahan penuh, RAM 2 KB milik Arduino Uno cepat penuh pada panel besar, dan output 3,3 V dari ESP32 dan Pico bisa bermasalah di beberapa panel. Karena itu, selain kode, kita juga akan membahas perhitungan arus, pembatasan kecerahan, dan perencanaan memori. Kalau kamu belum tahu dasar-dasar WS2812B, baca dulu artikel LED WS2812B NeoPixel.

Panel LED matrix NeoPixel WS2812B 8x8
LED matrix NeoPixel 8x8: 64 LED WS2812B, satu jalur data (DIN), dan catu daya 5 V.

Apa itu LED matrix NeoPixel dan bagaimana cara kerjanya?

Di dalam setiap LED WS2812B, di samping chip merah, hijau, dan biru, ada sebuah IC driver kecil. Mikrokontroler mengirim 24 bit data warna per LED lewat jalur data dengan kecepatan 800 kHz; urutan bitnya hijau, merah, biru (GRB). LED pertama mengambil 24 bit pertama untuk dirinya sendiri dan meneruskan sisanya ke LED berikutnya lewat pin DOUT, dan rantainya berlanjut seperti itu. Panel matrix bekerja dengan cara yang sama: 64 atau 256 LED sebenarnya adalah satu strip panjang yang dilipat menjadi bentuk persegi. Mengirim data ke satu LED butuh sekitar 30 mikrodetik, jadi memperbarui panel 256 LED sekali butuh sekitar 7,7 ms, artinya animasi bisa mulus di lebih dari 100 frame per detik.

FiturMatrix 8x8Matrix 16x16
Jumlah LED64256
Ukuran umumSekitar 65–80 mmSekitar 160 mm (panel fleksibel)
Catu daya5 V5 V
Arus puncak pada putih penuhSekitar 3,8 ASekitar 15,4 A
Ketika semua LED matiSekitar 40–65 mASekitar 150–260 mA
Kebutuhan RAM (3 byte/LED)192 byte768 byte
Waktu memperbarui seluruh panelSekitar 2 msSekitar 7,7 ms
Jalur dataSatu pin (DIN), 800 kHzSatu pin (DIN), 800 kHz

Susunan piksel zigzag dan fungsi koordinat XY

Di kode, kamu ingin memikirkan piksel sebagai koordinat (x, y), tapi LED dialamatkan dengan satu nomor urut yang dimulai dari 0. Di hampir semua panel fleksibel dan model 16x16, LED disusun dalam urutan zigzag (serpentine): baris pertama berjalan dari kiri ke kanan, baris kedua dari kanan ke kiri, dan baris ketiga kembali dari kiri ke kanan. Susunan ini memudahkan produksi karena ujung setiap baris tersambung ke awal baris berikutnya lewat jalur terpendek. Di tabel di bawah kamu bisa melihat nomor LED di empat baris pertama sebuah panel zigzag 8x8:

Barisx=0x=1x=2x=3x=4x=5x=6x=7
y=001234567
y=115141312111098
y=21617181920212223
y=33130292827262524

Rumusnya langsung terlihat dari sini: di baris genap indeks = y × W + x, dan di baris ganjil indeks = y × W + (W − 1 − x), dengan W adalah lebar panel. Misalnya, di panel 8x8 titik (2, 1) adalah LED nomor 1 × 8 + (7 − 2) = 13. Hati-hati: di beberapa board 8x8 dengan PCB kaku, semua baris berjalan ke arah yang sama (susunan lurus atau progressive); dalam hal ini rumusnya cukup y × W + x. Di beberapa panel, LED berkelok mengikuti kolom, bukan baris, artinya x dan y perlu ditukar. Cara paling pasti untuk tahu jenis panelmu adalah menjalankan sketch uji yang menyalakan LED satu per satu lalu memperhatikan bagaimana cahayanya bergerak.

Pengkabelan matrix NeoPixel: Arduino Uno, ESP32, dan Pico

Pin matrixArduino UnoESP32Raspberry Pi Pico
5V (VCC)+ dari catu daya eksternal 5 V (pin 5V untuk uji kecil)+ dari catu daya eksternal 5 VCatu daya eksternal 5 V atau VBUS (hanya 8x8, kecerahan rendah)
GNDGND + kutub – catu daya (bersama)GND + kutub – catu daya (bersama)GND + kutub – catu daya (bersama)
DIND6 (lewat resistor 330 Ω)GPIO 16 (lewat resistor 330 Ω)GP2 (lewat resistor 330 Ω)
DOUTDIN panel berikutnya (dirangkai berantai)DIN panel berikutnyaDIN panel berikutnya
Jangan pernah memberi daya panel 16x16 pada kecerahan penuh dari pin 5V Arduino atau dari USB: port USB komputer hanya memberi sekitar 500 mA, dan sekring pelindung di Uno juga putus di sekitar angka itu. Jangan juga tertukar antara ujung DIN dan DOUT panel; panah di board menunjukkan arah aliran data, dan kalau kamu memasukkan data ke DOUT, tidak ada LED yang menyala. Kalau kamu memakai catu daya eksternal, selalu sambungkan GND-nya ke GND mikrokontroler.

Untuk rangkaian yang andal, tambahkan tiga komponen kecil: resistor 300–500 Ω yang dipasang seri di jalur data (melindungi input LED pertama dari lonjakan tegangan), kapasitor elektrolit 1000 µF di antara 5V dan GND panel (meredam lonjakan arus ketika catu daya pertama kali dinyalakan), dan level shifter di board 3,3 V jika perlu. Dengan catu 5 V, WS2812B ingin melihat minimal sekitar 3,5 V (70% dari tegangan catu) di input datanya; output 3,3 V dari ESP32 dan Pico bekerja di kebanyakan panel, tapi berada di bawah batas itu. Kalau kamu melihat kedipan atau warna acak, pakai IC buffer seperti 74AHCT125; detailnya ada di artikel konverter level logika.

Program matrix pertama langkah demi langkah (Arduino Uno)

  1. Buka Library Manager di Arduino IDE dan instal library Adafruit NeoPixel.
  2. Sambungkan panel sesuai tabel: DIN ke D6 lewat resistor 330 Ω, GND ke GND Arduino, 5V ke catu daya.
  3. Atur nilai W dan H di kode sesuai ukuran panelmu; untuk panel 16x16, isi keduanya dengan 16.
  4. Pada percobaan pertama, jaga kecerahan tetap rendah; setBrightness(30) menurunkan arus panel 8x8 ke level yang masih sanggup ditangani USB.
  5. Upload kodenya; kamu seharusnya melihat pelangi diagonal yang bergeser. Kalau warnanya terlihat patah per baris, susunan panelmu berbeda, jadi sesuaikan fungsi xyIndex.
C++ (Arduino IDE)
1#include <Adafruit_NeoPixel.h>
2
3#define PIN_DATA 6                 // DIN pini (330 ohm ile) / DIN pin (via 330 ohm)
4#define W 8                        // panel genişliği / panel width
5#define H 8                        // panel yüksekliği / panel height
6#define NUM_LEDS (W * H)
7
8Adafruit_NeoPixel strip(NUM_LEDS, PIN_DATA, NEO_GRB + NEO_KHZ800);
9
10// (x, y) koordinatını LED numarasına çevirir (zikzak) / converts (x, y) to LED index (serpentine)
11uint16_t xyIndex(uint8_t x, uint8_t y) {
12  if (y & 1) {
13    return y * W + (W - 1 - x);    // tek satırlar sağdan sola / odd rows run right to left
14  }
15  return y * W + x;                // çift satırlar soldan sağa / even rows run left to right
16}
17
18void setup() {
19  strip.begin();
20  strip.setBrightness(30);         // 0-255, düşük tut / keep it low
21  strip.clear();
22  strip.show();
23}
24
25void loop() {
26  static uint16_t hueBase = 0;
27  for (uint8_t y = 0; y < H; y++) {
28    for (uint8_t x = 0; x < W; x++) {
29      uint16_t hue = hueBase + (x + y) * 4096U;   // çapraz gökkuşağı / diagonal rainbow
30      strip.setPixelColor(xyIndex(x, y), strip.gamma32(strip.ColorHSV(hue)));
31    }
32  }
33  strip.show();                    // tamponu panele gönder / push the buffer to the panel
34  hueBase += 256;                  // renkleri kaydır / shift the colors
35  delay(20);
36}

Inti kodenya adalah fungsi xyIndex(): dengan membalik x di baris ganjil, fungsi ini menyembunyikan susunan zigzag, jadi di sisa kode kamu cukup berpikir dalam koordinat. ColorHSV() mengubah nilai rona antara 0 dan 65535 di roda warna menjadi RGB; karena rona bergeser seiring bertambahnya jumlah x + y, terbentuklah pita warna diagonal. gamma32() mengoreksi cara mata menangkap kecerahan dan membuat transisi warna terlihat lebih alami. Terakhir, tidak ada perubahan yang sampai ke panel sebelum kamu memanggil show(); menulis semua piksel ke memori dulu lalu mengirimnya sekaligus adalah rahasia gambar yang mulus.

Teks berjalan: dengan Adafruit NeoMatrix

Kamu tidak perlu repot mengatur piksel satu per satu untuk menggambar huruf dan ikon. Library Adafruit NeoMatrix mengubah panel NeoPixel-mu menjadi layar yang kompatibel dengan Adafruit GFX, jadi fungsi yang kamu pakai di layar OLED, seperti print(), drawLine(), fillRect(), dan drawBitmap(), juga bekerja di matrix. Ketika menginstal Adafruit NeoMatrix dari Library Manager, instal juga dependensinya, Adafruit GFX dan Adafruit NeoPixel. Flag di konstruktor menjelaskan susunan fisik panel: NEO_MATRIX_TOP + NEO_MATRIX_LEFT berarti LED pertama ada di pojok kiri atas, NEO_MATRIX_ROWS berarti LED berjalan mengikuti baris, dan NEO_MATRIX_ZIGZAG berarti barisnya zigzag; di board dengan susunan lurus, cukup tulis NEO_MATRIX_PROGRESSIVE sebagai ganti ZIGZAG. Font bawaan 5×7 pas untuk panel 8 baris, dan setiap karakter lebarnya 6 piksel termasuk spasinya. Teks sembilan huruf panjangnya 54 piksel; konstanta textWidth menghitungnya otomatis, dan ketika x turun di bawah nilai itu, teks masuk lagi dari kanan dan berganti warna.

C++ (Arduino IDE)
1#include <Adafruit_GFX.h>
2#include <Adafruit_NeoMatrix.h>
3#include <Adafruit_NeoPixel.h>
4
5#define PIN_DATA 6
6
7// 8x8 panel, ilk LED sol üstte, zikzak satırlar / 8x8 panel, first LED top-left, zigzag rows
8Adafruit_NeoMatrix matrix(8, 8, PIN_DATA,
9  NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
10  NEO_GRB + NEO_KHZ800);
11
12const char text[] = "BlueGrays";
13const int textWidth = (sizeof(text) - 1) * 6;   // karakter başına 6 piksel / 6 pixels per character
14int x = 8;                                      // yazı sağ kenardan başlar / text starts at the right edge
15uint8_t colorStep = 0;
16
17void setup() {
18  matrix.begin();
19  matrix.setTextWrap(false);       // satır kaydırma kapalı / no line wrap
20  matrix.setBrightness(40);
21  matrix.setTextColor(matrix.Color(255, 0, 0));
22}
23
24void loop() {
25  matrix.fillScreen(0);
26  matrix.setCursor(x, 0);
27  matrix.print(text);
28  if (--x < -textWidth) {          // yazı panelden tamamen çıktı / text fully left the panel
29    x = matrix.width();
30    colorStep = (colorStep + 1) % 3;
31    if (colorStep == 0) matrix.setTextColor(matrix.Color(255, 0, 0));
32    if (colorStep == 1) matrix.setTextColor(matrix.Color(0, 255, 0));
33    if (colorStep == 2) matrix.setTextColor(matrix.Color(0, 0, 255));
34  }
35  matrix.show();
36  delay(80);                       // kayma hızı / scroll speed
37}

Batas memori di Arduino Uno

ATmega328P di Arduino Uno hanya punya 2048 byte RAM, dan setiap LED butuh buffer warna 3 byte. Panel 8x8 muat dengan mudah dengan 192 byte, sedangkan panel 16x16 memakan 768 byte, lebih dari sepertiga RAM sendirian. Bagian liciknya begini: Adafruit NeoPixel mengalokasikan buffer ini ketika program berjalan, jadi buffer ini tidak dihitung dalam pemakaian variabel global yang ditampilkan di akhir kompilasi. Meskipun hasil kompilasi menunjukkan pemakaian 70%, memori bisa habis begitu buffer panel ditambahkan; board pun macet atau kamu melihat warna yang tidak karuan. Selain itu, di board AVR interrupt dimatikan selama show() berjalan; dengan 256 LED ini butuh sekitar 7,7 ms, dan selama itu millis() bisa tertinggal dan data yang masuk lewat Serial bisa hilang. Untuk panel besar, Arduino Mega dengan RAM 8 KB atau ESP32 dengan RAM ratusan kilobyte adalah pilihan yang jauh lebih nyaman.

PanelJumlah LEDBuffer warnaPorsi RAM UnoCocok untuk Uno?
8x864192 byte9%Lega
8x32256768 byte37,5%Dengan pemakaian hati-hati
16x16256768 byte37,5%Dengan pemakaian hati-hati
2 × 16x165121536 byte75%Sulit dalam praktik
32x3210243072 byte150%Tidak mungkin (pakai ESP32)

Konsumsi arus dan pembatasan kecerahan

Setiap kanal warna WS2812B menarik sekitar 20 mA pada kecerahan penuh; ketika ketiganya menyala, yaitu putih, totalnya 60 mA per LED. Untuk perhitungan kasar, kamu bisa memakai rumus I ≈ jumlah LED × 60 mA × (kecerahan / 255). Panel 16x16 pada putih penuh menarik 256 × 60 = 15,360 mA, lebih dari 15 A; ini membebani catu daya sekaligus jalur tembaga tipis di panel. Kabar baiknya, matrix ini sangat terang: di dalam ruangan, kecerahan 20–50 dari 255 sudah terlihat cukup jelas untuk menarik perhatian. Di animasi sungguhan tidak semua LED berwarna putih bersamaan, jadi arus rata-ratanya jauh lebih rendah dari angka hitungan, tapi kamu tetap perlu memilih catu daya untuk kondisi terburuk atau membatasi arus lewat software.

Panel (putih penuh)Kecerahan 32 (12,5%)Kecerahan 64 (25%)Kecerahan 255 (100%)Catu daya yang disarankan
8x8 (64 LED)Sekitar 0,48 ASekitar 0,96 ASekitar 3,8 A5 V 2–4 A
16x16 (256 LED)Sekitar 1,9 ASekitar 3,9 ASekitar 15,4 A5 V 4–10 A + pembatasan lewat software

Di panel 16x16, kalau arus hanya diberikan dari satu ujung, LED di pojok terjauh mengalami jatuh tegangan dan warna putih terlihat kekuningan atau kemerahan. Untuk mencegahnya, beri 5V dan GND dari ujung input dan ujung output panel sekaligus memakai kabel dengan penampang minimal 0,75 mm²; cara ini disebut power injection (injeksi daya). Di sisi software, fungsi setMaxPowerInVoltsAndMilliamps(5, 2000) dari library FastLED menghitung perkiraan arus di setiap frame dan otomatis menurunkan kecerahan kalau batasnya akan terlampaui. Kalau kamu memakai baterai, kamu bisa mengecek berapa lama rangkaiannya bertahan dengan kalkulator umur baterai, dan untuk detail memilih catu daya lihat artikel Cara Memberi Daya ke Arduino.

Animasi matrix 16x16 dengan ESP32 (FastLED)

Dengan RAM yang besar dan prosesor 240 MHz, ESP32 adalah pilihan yang jauh lebih nyaman untuk panel besar; karena sinyal NeoPixel dibuat oleh unit hardware RMT, prosesornya juga tidak terlalu sibuk. Kode di bawah memakai FastLED untuk menggambar dua titik berwarna yang meluncur sambil meninggalkan jejak di panel 16x16. beatsin8() menghasilkan koordinat yang berayun secara sinusoidal seiring waktu, sementara fadeToBlackBy() sedikit meredupkan semua piksel di setiap frame untuk menciptakan efek ekor. Cukup instal versi terbaru FastLED dari Library Manager; versi terbaru mendukung core Arduino ESP32 rilis 2.x maupun 3.x.

C++ (Arduino IDE)
1#include <FastLED.h>
2
3#define DATA_PIN 16                // DIN -> GPIO 16 (330 ohm ile) / DIN -> GPIO 16 (via 330 ohm)
4#define W 16
5#define H 16
6#define NUM_LEDS (W * H)
7
8CRGB leds[NUM_LEDS];
9
10// Zikzak dizilim için koordinat dönüşümü / coordinate mapping for serpentine layout
11uint16_t xyIndex(uint8_t x, uint8_t y) {
12  return (y & 1) ? (y * W + (W - 1 - x)) : (y * W + x);
13}
14
15void setup() {
16  FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
17  FastLED.setBrightness(60);                       // genel parlaklık / global brightness
18  FastLED.setMaxPowerInVoltsAndMilliamps(5, 2000); // 5 V, en fazla 2 A / 5 V, max 2 A
19  FastLED.clear(true);
20}
21
22void loop() {
23  static uint8_t hue = 0;
24  fadeToBlackBy(leds, NUM_LEDS, 30);               // iz efekti / trail effect
25
26  uint8_t px1 = beatsin8(13, 0, W - 1);            // sinüs salınımlı koordinatlar / sine-wave coordinates
27  uint8_t py1 = beatsin8(17, 0, H - 1);
28  uint8_t px2 = beatsin8(11, 0, W - 1, 0, 64);
29  uint8_t py2 = beatsin8(7, 0, H - 1, 0, 128);
30
31  leds[xyIndex(px1, py1)] = CHSV(hue, 255, 255);
32  leds[xyIndex(px2, py2)] = CHSV(hue + 128, 255, 255);
33
34  FastLED.show();
35  hue++;
36  delay(16);                                       // yaklaşık 60 kare/sn / about 60 fps
37}

Matrix NeoPixel dengan Raspberry Pi Pico dan MicroPython

MicroPython di Pico sudah dilengkapi modul neopixel bawaan, jadi kamu tidak perlu menyalin file tambahan. Modul ini mengatur timing sinyalnya sendiri; kamu cukup menetapkan warna dengan np[i] = (r, g, b) lalu mengirimnya ke panel dengan write(). Karena MicroPython tidak punya fungsi setBrightness seperti library Adafruit, kamu membatasi kecerahan sendiri dengan mengalikan nilai warna dengan sebuah faktor. Contoh di bawah membuat ikon hati perlahan menyala dan meredup di panel 8x8; ikonnya digambar dari array bitmap yang setiap barisnya satu byte, dan bit paling kiri sesuai dengan kolom x = 0.

MicroPython
1from machine import Pin
2from neopixel import NeoPixel
3import time
4
5W, H = 8, 8
6np = NeoPixel(Pin(2), W * H)       # DIN -> GP2 (330 ohm ile) / DIN -> GP2 (via 330 ohm)
7BRIGHTNESS = 0.1                   # %10 parlaklık / 10% brightness
8
9HEART = [
10    0b01100110,
11    0b11111111,
12    0b11111111,
13    0b11111111,
14    0b01111110,
15    0b00111100,
16    0b00011000,
17    0b00000000,
18]
19
20def xy_index(x, y):
21    # zikzak dizilim / serpentine layout
22    if y % 2:
23        return y * W + (W - 1 - x)
24    return y * W + x
25
26def draw_bitmap(rows, color):
27    r, g, b = color
28    c = (int(r * BRIGHTNESS), int(g * BRIGHTNESS), int(b * BRIGHTNESS))
29    for y in range(H):
30        for x in range(W):
31            on = rows[y] & (0x80 >> x)     # soldaki bit x=0 / leftmost bit is x=0
32            np[xy_index(x, y)] = c if on else (0, 0, 0)
33    np.write()                     # panele gönder / push to the panel
34
35while True:
36    for level in range(0, 256, 8):         # kalp yavaşça yanar / heart fades in
37        draw_bitmap(HEART, (level, 0, 0))
38        time.sleep_ms(20)
39    for level in range(255, -1, -8):       # ve söner / and fades out
40        draw_bitmap(HEART, (level, 0, 0))
41        time.sleep_ms(20)

Ide proyek dengan matrix NeoPixel

  • Papan teks berjalan: tampilkan pesan yang diambil dari internet, atau jam, sebagai teks berjalan dengan ESP32; untuk jamnya kamu bisa memakai cara di artikel jam NTP ESP32.
  • Game ular dan balok: buat konsol game mini yang penuh warna dengan panel 16x16 dan sebuah joystick.
  • Spektrum reaktif musik: tampilkan level suara yang diukur mikrofon sebagai kolom-kolom berwarna; detailnya ada di artikel LED reaktif musik.
  • Lencana ikon: ganti-ganti ikon seperti wajah tersenyum, hati, dan panah di panel 8x8 dengan sebuah tombol.
  • Termometer warna-warni: gambar batang yang terisi dari biru ke merah sesuai suhu yang diukur oleh DHT11.
  • Kendali dari ponsel: instal WLED di ESP32 dan kendalikan panel lewat Wi-Fi dengan efek 2D siap pakai.
  • Dekorasi Natal: tambahkan panel visual dengan animasi salju turun dan bintang ke proyek LED pohon Natal-mu.

Kesalahan umum dan cara mengatasinya

GejalaKemungkinan penyebabSolusi
Tidak ada LED yang menyalaData tersambung ke DOUT, GND tidak bersama, atau nomor pin salahLihat tanda panah dan masukkan data ke DIN, satukan GND, cek pin di kode
Gambar patah per baris, teks terbalik seperti cerminSusunannya bukan zigzag atau pojok awalnya berbedaCari LED pertama dengan sketch uji, perbaiki xyIndex atau flag NeoMatrix
Warna salah (hijau, bukan merah)Urutan warna didefinisikan salahPakai NEO_GRB di Adafruit, GRB di FastLED
Piksel berkedip acakSinyal data 3,3 V terlalu lemah, tidak ada resistor seri, atau kabel data terlalu panjangTambahkan level shifter dan resistor 330 Ω, perpendek kabel data
Board reset pada adegan yang terangCatu daya terlalu lemah, tegangan anjlokTurunkan kecerahan, pakai catu daya eksternal yang kuat dan kapasitor 1000 µF
Putih terlihat kekuningan di pojok terjauhJatuh tegangan di sepanjang jalur panelLakukan injeksi daya dari kedua ujung panel
Uno macet atau menampilkan warna tidak karuanRAM habisKurangi jumlah LED, tulis teks dengan F(), pindah ke ESP32 atau Mega
Kalau gambarnya keluar tidak karuan, uji susunannya dulu sebelum menyalahkan kode: di loop(), nyalakan LED satu per satu mulai dari 0 dengan kecerahan rendah, lalu catat jalur yang dilalui cahayanya. Melihat di pojok mana LED nomor 0 berada dan ke arah mana baris kedua berjalan sudah cukup untuk memilih rumus xyIndex atau flag NeoMatrix yang tepat.

Matrix NeoPixel adalah cara paling seru untuk memberi proyekmu layar yang berwarna dan bergerak dengan panel yang terjangkau. Mulailah dari yang kecil: jalankan dulu panel 8x8 dengan kecerahan rendah, pastikan fungsi xyIndex bekerja, lalu lanjut ke teks berjalan dan animasi 16x16. Kalau kamu hanya perlu menampilkan teks dan angka satu warna, LED matrix MAX7219 adalah alternatif yang menarik arus lebih kecil. Di aplikasi BlueGrays kamu bisa menjelajahi proyek lampu polisi WS2812B, Knight Rider, dan animasi, serta game ular matrix 8x8 dan 16x16, langkah demi langkah lengkap dengan skema rangkaian dan kode.

Pertanyaan umum

Bisakah aku memberi daya matrix NeoPixel dari pin 5V Arduino?

Kamu bisa memberi daya panel 8x8 dari USB dan pin 5V untuk uji singkat dengan kecerahan rendah (sekitar 20–30 dari 255); arusnya akan tetap di kisaran beberapa ratus miliampere. Untuk panel 16x16 atau kecerahan tinggi, selalu pakai adaptor eksternal 5 V dan satukan GND-nya dengan Arduino. Kalau tidak, board akan reset atau port USB bisa rusak.

Berapa ampere arus yang ditarik matrix WS2812B 16x16?

Karena setiap LED menarik sekitar 60 mA pada putih penuh, panel 256 LED bisa melebihi 15 A dalam kondisi terburuk. Di animasi sungguhan angkanya jauh lebih rendah; kalau kecerahan diturunkan ke 32, arusnya sekitar 1,9 A bahkan pada putih penuh. Pilih catu daya minimal 4 A dan pasang batas arus lewat software dengan FastLED.

Kenapa teks di LED matrix-ku terlihat terbalik atau patah?

Kodenya mengasumsikan susunan panel yang salah. Panelmu mungkin bersusunan lurus, bukan zigzag, LED pertamanya mungkin ada di pojok lain, atau LED-nya berjalan mengikuti kolom, bukan baris. Temukan susunannya dengan uji yang menyalakan LED secara berurutan, lalu sesuaikan fungsi xyIndex atau flag NeoMatrix.

Berapa banyak LED NeoPixel yang bisa dikendalikan Arduino Uno?

Karena setiap LED memakai 3 byte RAM, batas praktis di Uno dengan RAM 2 KB adalah sekitar 300–500 LED; sisa memori dibutuhkan untuk variabel kode itu sendiri. Satu panel 16x16 (256 LED) bekerja tanpa masalah. Untuk dua panel atau lebih, Arduino Mega atau ESP32 lebih cocok.

Apakah aku butuh level shifter untuk matrix WS2812B dengan ESP32?

Dengan catu 5 V, WS2812B butuh sekitar 3,5 V di input datanya; output 3,3 V ESP32 sedikit di bawah angka itu. Kebanyakan panel tetap bekerja, tapi kalau kamu melihat kedipan atau warna acak, pakai level shifter seperti 74AHCT125. Kabel data yang pendek dan resistor seri 330 Ω juga memperbaiki sinyal.

Apa bedanya matrix NeoPixel dengan matrix MAX7219?

Di matrix NeoPixel setiap piksel adalah LED RGB yang bisa diwarnai sendiri-sendiri dan dikendalikan dengan satu kabel data, tapi konsumsi arusnya tinggi. Matrix MAX7219 hanya satu warna, disambungkan dengan tiga kabel data, dan menarik arus jauh lebih kecil. MAX7219 cocok untuk papan teks berjalan satu warna, sedangkan NeoPixel lebih baik untuk animasi berwarna dan game.

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
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
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
Ular Piksel Matrix 8x8
#88Mahir
Premium

Ular Piksel Matrix 8x8

Buat sendiri dan mainkan game ular klasik. Di matrix lampu 8x8 yang berwarna-warni, kamu mengarahkan ular hijau dengan joystick dan memakan apel merah; di setiap apel ular bertambah panjang, sedikit l

4.7(39)
57
Ular Matrix 16x16
#89Mahir
Premium

Ular Matrix 16x16

Game ular klasik, kali ini di layar LED raksasa dari 256 lampu. Kamu mengarahkan ular hijau dengan joystick dan mengumpulkan apel merah; di setiap apel ular bertambah panjang, skormu naik di layar ang

4.8(52)
67
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