Arduino Dải LED WS2812B

Trong hướng dẫn này, chúng ta sẽ học cách sử dụng Arduino để điều khiển dải LED RGB WS2812B. Với một chân Arduino duy nhất:

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×WS2812B RGB LED Strip
1×1000uF Capacitor
1×470Ω Resistor
1×5V Power Adapter
1×DC Power Jack
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về dải LED RGB WS2812B

Bố trí chân

Dải LED WS2812B RGB có ba chân:

  • Chân GND: cần được kết nối với GND (0V)
  • Chân VCC: cần được kết nối với 5V từ nguồn cấp ngoài
  • Chân Din: là chân nhận tín hiệu điều khiển. Nó nên được kết nối với một chân trên Arduino.
sơ đồ chân ws2812b

※ Lưu ý:

Thứ tự các chân có thể khác nhau giữa các nhà sản xuất. Luôn sử dụng nhãn được in trên dải LED.

Sơ đồ đấu dây

sơ đồ nối dây dải LED ws2812b rgb bằng Arduino

This image is created using Fritzing. Click to enlarge image

Cách Lập Trình Cho Dải LED WS2812B RGB

Có hai thư viện có thể được sử dụng để điều khiển dải LED WS2812B.

  • Thư viện Adafruit NeoPixel.
  • Thư viện FastLED.

Hướng dẫn này sẽ sử dụng thư viện Adafruit NeoPixel.

  • Khai báo một đối tượng WS2812B
#define PIN_WS2812B 4 // Arduino pin that connects to WS2812B #define NUM_PIXELS 30 // The number of LEDs (pixels) on WS2812B Adafruit_NeoPixel WS2812B(NUM_PIXELS, PIN_WS2812B, NEO_GRB + NEO_KHZ800);
  • Khởi tạo WS2812B
WS2812B.begin(); // INITIALIZE WS2812B strip object (REQUIRED)
  • Đặt màu cho từng đèn LED riêng lẻ (được gọi là pixel).
WS2812B.setPixelColor(pixel, WS2812B.Color(255, 0, 0));
  • Thiết lập độ sáng cho tất cả các dải.
WS2812B.setBrightness(100); // a value from 0 to 255

※ Lưu ý:

  • WS2812B.setBrightness() được dùng cho toàn bộ các pixel trên dải LED. Để thiết lập độ sáng cho từng pixel riêng lẻ, chúng ta có thể nhân giá trị màu với một hệ số tỉ lệ.
  • Các giá trị được thiết lập bởi WS2812B.setBrightness()WS2812B.setPixelColor() chỉ có hiệu lực khi gọi WS2812B.show().

Mã Arduino

Đoạn mã dưới đây thực hiện:

  • Chuyển các pixel sang màu xanh lá cây từ từ, từng pixel một, với khoảng trễ giữa mỗi pixel
  • Tắt tất cả các pixel trong hai giây
  • Bật tất cả các pixel lên màu đỏ đồng thời trong hai giây
  • Lặp lại quá trình trên vô hạn
/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-ws2812b-led-strip */ #include <Adafruit_NeoPixel.h> #ifdef __AVR__ #include <avr/power.h> // Required for 16 MHz Adafruit Trinket #endif #define PIN_WS2812B 4 // Arduino pin that connects to WS2812B #define NUM_PIXELS 30 // The number of LEDs (pixels) on WS2812B #define DELAY_INTERVAL 250 // 250ms pause between each pixel Adafruit_NeoPixel WS2812B(NUM_PIXELS, PIN_WS2812B, NEO_GRB + NEO_KHZ800); void setup() { WS2812B.begin(); // INITIALIZE WS2812B strip object (REQUIRED) } void loop() { WS2812B.clear(); // set all pixel colors to 'off'. It only takes effect if pixels.show() is called // turn pixels to green one by one with delay between each pixel for (int pixel = 0; pixel < NUM_PIXELS; pixel++) { // for each pixel WS2812B.setPixelColor(pixel, WS2812B.Color(0, 255, 0)); // it only takes effect if pixels.show() is called WS2812B.show(); // send the updated pixel colors to the WS2812B hardware. delay(DELAY_INTERVAL); // pause between each pixel } // turn off all pixels for two seconds WS2812B.clear(); WS2812B.show(); // send the updated pixel colors to the WS2812B hardware. delay(2000); // off time // turn on all pixels to red at the same time for two seconds for (int pixel = 0; pixel < NUM_PIXELS; pixel++) { // for each pixel WS2812B.setPixelColor(pixel, WS2812B.Color(255, 0, 0)); // it only takes effect if pixels.show() is called } WS2812B.show(); // send the updated pixel colors to the WS2812B hardware. delay(2000); // on time // turn off all pixels for one seconds WS2812B.clear(); WS2812B.show(); // send the updated pixel colors to the WS2812B hardware. delay(2000); // off time }

Hướng dẫn từng bước

  • Đi tới biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
  • Tìm kiếm “NeoPixel NeoPixel”, sau đó tìm thư viện WS2812B của Adafruit
  • Nhấp vào nút Cài đặt để cài đặt thư viện NeoPixel.
thư viện neopixel cho Arduino
  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấp vào Tải lên trên Arduino IDE để tải mã lên Arduino
  • Xem hiệu ứng đèn LED

※ Lưu ý:

Đối với bất kỳ hiệu ứng LED phức tạp nào, chúng tôi cung cấp dị vụ lập trình trả phí

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.