Cách kết nối dải LED có địa chỉ WS2812B với Arduino
Sự phát triển của công nghệ chiếu sáng dựa trên đèn LED tiếp tục nhanh chóng. Mới hôm qua, các dải ruy băng RGB được điều khiển bằng bộ điều khiển, có thể điều chỉnh độ sáng và màu sắc bằng điều khiển từ xa, dường như là một phép màu. Ngày nay, các loại đèn với nhiều tính năng hơn đã xuất hiện trên thị trường.
Dải đèn LED dựa trên WS2812B
Sự khác biệt giữa dải LED định địa chỉ và dải tiêu chuẩn RGB điêu đo la độ sáng và tỷ lệ màu của từng phần tử được điều chỉnh riêng biệt. Điều này cho phép bạn có được các hiệu ứng ánh sáng mà về cơ bản các loại thiết bị chiếu sáng khác không thể tiếp cận được. Sự phát sáng của dải LED định địa chỉ được kiểm soát theo một cách đã biết - sử dụng điều chế độ rộng xung. Một tính năng của hệ thống là trang bị cho mỗi đèn LED một bộ điều khiển PWM riêng. Chip WS2812B là một diode phát sáng ba màu và một mạch điều khiển được kết hợp trong một gói duy nhất.

Các phần tử được kết hợp song song thành một băng nguồn và được điều khiển thông qua một bus nối tiếp - đầu ra của phần tử đầu tiên được kết nối với đầu vào điều khiển của phần tử thứ hai, v.v. Trong hầu hết các trường hợp, các bus nối tiếp được xây dựng trên hai đường, một trong số đó truyền chuyển động nhấp nháy (xung đồng hồ) và đường kia - dữ liệu.

Bus điều khiển của chip WS2812B bao gồm một đường - dữ liệu được truyền qua nó. Dữ liệu được mã hóa dưới dạng các xung có tần số không đổi, nhưng với các chu kỳ nhiệm vụ khác nhau. Một xung - một bit. Thời lượng của mỗi bit là 1,25 µs, bit 0 bao gồm mức cao với thời lượng 0,4 µs và mức thấp là 0,85 µs. Đơn vị trông giống như mức cao trong 0,8 µs và mức thấp trong 0,45 µs. Một cụm 24 bit (3 byte) được gửi đến mỗi đèn LED, tiếp theo là một khoảng dừng ở mức thấp trong 50 µs. Điều này có nghĩa là dữ liệu sẽ được truyền cho đèn LED tiếp theo, v.v. cho tất cả các phần tử của chuỗi. Quá trình truyền dữ liệu kết thúc với khoảng thời gian tạm dừng là 100 µs. Điều này cho thấy rằng chu trình lập trình băng đã hoàn tất và tập hợp các gói dữ liệu tiếp theo có thể được gửi đi.

Một giao thức như vậy giúp bạn có thể thực hiện bằng một đường truyền dữ liệu, nhưng đòi hỏi độ chính xác trong việc duy trì các khoảng thời gian. Sự khác biệt được phép không quá 150 ns. Ngoài ra, khả năng chống ồn của một chiếc xe buýt như vậy là rất thấp. Bất kỳ nhiễu nào có biên độ đủ lớn đều có thể được bộ điều khiển coi là dữ liệu. Điều này đặt ra hạn chế về chiều dài của dây dẫn từ mạch điều khiển. Mặt khác, điều này làm cho nó có thể kiểm tra sức khỏe dải băng mà không cần thiết bị bổ sung.Nếu bạn sử dụng nguồn điện cho đèn và dùng ngón tay chạm vào bàn tiếp xúc của thanh điều khiển, một số đèn LED có thể sáng lên và tắt một cách ngẫu nhiên.
Thông số kỹ thuật của các phần tử WS2812B
Để tạo hệ thống chiếu sáng dựa trên băng địa chỉ, bạn cần biết các thông số quan trọng của các yếu tố phát ra ánh sáng.
| Kích thước đèn LED | 5x5mm |
| Tần số điều chế PWM | 400 Hz |
| Mức tiêu thụ hiện tại ở độ sáng tối đa | 60 mA mỗi ô |
| Cung cấp hiệu điện thế | 5 vôn |
Arduino và WS2812B
Nền tảng Arduino, phổ biến trên thế giới, cho phép bạn tạo các bản phác thảo (chương trình) để quản lý băng địa chỉ. Khả năng của hệ thống đủ rộng, nhưng nếu chúng không còn đủ ở một mức độ nào đó, thì các kỹ năng có được sẽ đủ để chuyển sang C ++ hoặc thậm chí sang trình hợp dịch một cách dễ dàng. Mặc dù những kiến thức ban đầu để làm quen với Arduino sẽ dễ dàng hơn.
Kết nối Ruy-băng WS2812B với Arduino Uno (Nano)
Ở giai đoạn đầu, các bo mạch Arduino Uno hoặc Arduino Nano đơn giản là đủ. Trong tương lai, các bo mạch phức tạp hơn có thể được sử dụng để xây dựng các hệ thống phức tạp hơn. Khi kết nối vật lý dải LED định địa chỉ với bảng Arduino, một số điều kiện phải được tuân thủ:
- do khả năng chống nhiễu thấp, các dây dẫn kết nối của đường dữ liệu phải càng ngắn càng tốt (bạn nên cố gắng làm cho chúng trong vòng 10 cm);
- bạn cần kết nối dây dẫn dữ liệu với đầu ra kỹ thuật số miễn phí của bảng Arduino - sau đó nó sẽ được chỉ định theo chương trình;
- do mức tiêu thụ điện năng cao, không cần cấp nguồn cho băng từ bảng - các bộ nguồn riêng biệt được cung cấp cho mục đích này.
Dây nguồn chung của đèn và Arduino phải được kết nối.

Kiến thức cơ bản về điều khiển chương trình WS2812B
Người ta đã đề cập rằng để điều khiển vi mạch WS2812B, cần phải tạo ra các xung có độ dài nhất định, duy trì độ chính xác cao. Có các lệnh trong ngôn ngữ Arduino để hình thành các xung ngắn delayMicroseconds và cực nhỏ. Vấn đề là độ phân giải của các lệnh này là 4 micro giây. Có nghĩa là, nó sẽ không hoạt động để hình thành độ trễ thời gian với độ chính xác nhất định. Cần chuyển sang công cụ C ++ hoặc Assembler. Và bạn có thể tổ chức việc kiểm soát dải LED có thể định địa chỉ thông qua Arduino bằng cách sử dụng các thư viện được tạo đặc biệt cho việc này. Bạn có thể bắt đầu làm quen với chương trình Blink, chương trình này làm cho các phần tử phát sáng nhấp nháy.
dẫn nhanh
Thư viện này là phổ quát. Ngoài băng địa chỉ, nó hỗ trợ nhiều loại thiết bị, bao gồm cả băng được điều khiển bởi giao diện SPI. Nó có nhiều khả năng.
Đầu tiên, phải kể đến thư viện. Điều này được thực hiện trước khi khối thiết lập và dòng có dạng như sau:
#include <FastLED.h>
Bước tiếp theo là tạo một mảng để lưu trữ màu sắc của mỗi điốt phát quang. Nó sẽ có dải tên và kích thước 15 - bằng số phần tử (tốt hơn là gán một hằng số cho tham số này).
Dải CRGB [15]
Trong khối thiết lập, bạn cần chỉ định băng mà bản phác thảo sẽ làm việc với:
void setup () {
FastLED.addLeds <WS2812B, 7, RGB> (dải, 15);
intg;
}
Tham số RGB thiết lập thứ tự chuỗi màu, 15 có nghĩa là số lượng đèn LED, 7 là số đầu ra được chỉ định cho điều khiển (cũng tốt hơn nếu chỉ định một hằng số cho tham số cuối cùng).
Khối vòng lặp bắt đầu bằng một vòng lặp ghi tuần tự vào từng phần của mảng Màu đỏ (phát sáng màu đỏ):
cho (g = 0; g <15; g ++)
{dải [g] = CRGB :: Đỏ;}
Tiếp theo, mảng đã hình thành được gửi đến đèn:
FastLED.show ();
Độ trễ 1000 mili giây (giây):
chậm trễ (1000);
Sau đó, bạn có thể tắt tất cả các phần tử theo cùng một cách bằng cách viết màu đen vào chúng.
for (int g = 0; g <15; g ++)
{dải [g] = CRGB :: Đen;}
FastLED.show ();
chậm trễ (1000);

Sau khi biên dịch và tải lên bản phác thảo, băng sẽ nhấp nháy với khoảng thời gian 2 giây. Nếu bạn cần quản lý từng thành phần màu riêng biệt, thì thay vì dòng {dải [g] = CRGB :: Đỏ;} một số dòng được sử dụng:
{
dải [g] .r = 100; // đặt mức độ phát sáng của nguyên tố màu đỏ
dải [g] .g = 11; // tương tự cho màu xanh lá cây
dải [g] .b = 250; // tương tự cho màu xanh lam
}
NeoPixel
Thư viện này chỉ hoạt động với các vòng LED của NeoPixel Ring, nhưng nó ít tốn tài nguyên hơn và chỉ chứa những thứ cần thiết. Trong ngôn ngữ Arduino, chương trình có dạng như sau:
#include <Adafruit_NeoPixel.h>
Như trong trường hợp trước, thư viện được kết nối và đối tượng lenta được khai báo:
Adafruit_NeoPixel lenta = Adafruit_NeoPixel (15, 6); // trong đó 15 là số phần tử và 6 là đầu ra được chỉ định
Trong khối thiết lập, băng được khởi tạo:
void setup () {
lenta.begin ()
}
Trong khối vòng lặp, tất cả các phần tử được đánh dấu màu đỏ, biến được chuyển đến nguồn cấp dữ liệu và độ trễ 1 giây được tạo:
for (int y = 0; y <15; y ++) // 15 - số phần tử trong đèn
{lenta.setPixelColor (y, lenta.Color (255,0,0))};
tape.show ();
chậm trễ (1000);
Sự phát sáng dừng lại với một bản ghi đen:
for (int y = 0; y <15; y ++)
{lenta.setPixelColor (y, lenta.Color (0,0,0))};
tape.show ();
chậm trễ (1000);

Video hướng dẫn: Các mẫu hiệu ứng hình ảnh sử dụng băng địa chỉ.
Khi bạn đã học cách nhấp nháy đèn LED, bạn có thể tiếp tục học cách tạo hiệu ứng màu sắc, bao gồm Cầu vồng và Cực quang nổi tiếng với hiệu ứng chuyển tiếp mượt mà. Đèn LED định địa chỉ WS2812B và Arduino cung cấp khả năng gần như vô hạn cho việc này.
