WS2812 – LED RGB tích hợp sẵn IC bên trong

97
4

Giới thiệu

WS2812 là một đèn LED RGB 5050, đã được tích hợp sẵn con chip ws2812 ngay bên trong. Giá rất rẻ, mình mua ở banggood với giá $17.5/100 LEDs.
Bạn có thể mua tại đây 

Mỗi LED gồm các chân VCC, GND, DI, DO.
Màu sắc của LED được điều khiển bằng xung từ 1 chân duy nhất, bạn có thể nối tiếp nhiều LED với nhau.

__WS2812_zd003_mini_LOGO

Hình ảnh phóng to một LED WS2812 dưới kính hiển vi

Sơ đồ kết nối ws2812 với arduino

Để LED ws2812 hoạt động các bạn cấp nguồn 5v vào chân VCC và GND, cấp xung điều khiển vào chân DI (data in), ngoài ra chúng ta có thể nối tiếp nhiều LED bằng cách nối chân DO của bóng LED này với DI của bóng LED kế tiếp.

Nối thêm tụ 1000µF vào nguồn điện và thêm điện trở 300-500Ohm vào trước DI của LED đầu tiên để tăng tuổi thọ LED

Mỗi LED được cấp nguồn 5V, trong trường hợp bạn có quá nhiều LED, arduino không đủ dòng để cấp thì bạn có thể cấp nguồn 5V từ bên ngoài, và nối chung dây GND để hoạt động.
Din của LED đầu tiên (Ngoài cùng bên phải) được nối với 1 chân cấp xung của arduino, trong sơ đồ dưới thì mình nối với chân số 6.
LED đầu tiên này sẽ có địa chỉ là 0, các led tiếp theo sẽ là 1,2,…

Sơ đồ mắc nối 3 LED ws2812 với Arduino Uno

Sơ đồ mắc nối 3 LED ws2812 với Arduino Uno

code

Để điều khiển led này hoạt động bạn cần có thư viện Adafruit_NeoPixel

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

//Khai báo PIN 6 để điều khiển LEDs
#define PIN 6

//Số lượng LED
#define NUMPIXELS 3

//Tạo mới một đối tượng tên là pixels
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 500; // delay for half a second

void setup() {

pixels.begin(); // Khởi tạo thư viện NeoPixel
}

void loop() {

// For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.

for(int i=0;i<NUMPIXELS;i++){

// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
//hàm Color() sẽ lấy giá trị RGB từ 0,0,0 đến 255,255,255,
//hàm setPixelColor() để thiết lập giá trị màu sắc cho từng pixel (1 pixel tương ứng với 1 bóng LED)
pixels.setPixelColor(i, pixels.Color(0,200,0)); // Moderately bright green color.

pixels.show(); // Cập nhập màu sắc của tất cả các LED

delay(delayval); //chờ trong 1 khoảng thời gian

}
}