lamp.housecope.com

주소 지정이 가능한 LED 스트립 WS2812B를 Arduino에 연결하는 방법

게시: 02.08.2021
0
2578

LED를 기반으로 한 조명 기술의 발전은 빠르게 계속되고 있습니다. 바로 어제 리모컨으로 밝기와 색상을 조절할 수 있는 컨트롤러로 제어되는 RGB 리본이 기적처럼 보였습니다. 오늘날에는 더 많은 기능을 갖춘 램프가 출시되었습니다.

WS2812B 기반 LED 스트립

주소 지정이 가능한 LED 스트립과 표준 스트립의 차이점 RGB 것은 각 요소의 밝기와 색 비율을 별도로 조정. 이를 통해 다른 유형의 조명 장치에는 근본적으로 접근할 수 없는 조명 효과를 얻을 수 있습니다. 주소 지정이 가능한 LED 스트립의 광선은 펄스 폭 변조를 사용하여 알려진 방식으로 제어됩니다. 시스템의 특징은 각 LED에 자체 PWM 컨트롤러를 장착하는 것입니다. WS2812B 칩은 3색 발광다이오드와 제어회로가 하나의 패키지에 결합된 칩이다.

주소 지정이 가능한 LED 스트립 WS2812B를 Arduino에 연결하는 방법
드라이버가 있는 LED의 모습입니다.

요소는 병렬로 전원 테이프에 결합되고 직렬 버스를 통해 제어됩니다. 첫 번째 요소의 출력은 두 번째 요소의 제어 입력 등에 연결됩니다. 대부분의 경우 직렬 버스는 2개의 라인에 구축되며 그 중 하나는 스트로브(클록 펄스)를 전송하고 다른 하나는 데이터를 전송합니다.

주소 스트립의 모양.
주소 스트립의 모양.

WS2812B 칩의 제어 버스는 하나의 라인으로 구성되어 데이터가 전송됩니다. 데이터는 일정한 주파수의 펄스로 인코딩되지만 듀티 사이클은 다릅니다. 1펄스 - 1비트. 각 비트의 지속 시간은 1.25 µs이고 0 비트는 지속 시간이 0.4 µs인 하이 레벨과 0.85 µs의 하위 레벨로 구성됩니다. 단위는 0.8 µs의 경우 높은 수준으로, 0.45 µs의 경우 낮은 수준으로 보입니다. 24비트(3바이트) 버스트가 각 LED로 전송된 다음 50µs 동안 낮은 수준의 일시 중지가 이어집니다. 이것은 데이터가 다음 LED에 대해 전송되고 체인의 모든 요소에 대해 전송된다는 것을 의미합니다. 데이터 전송은 100 µs의 일시 중지로 끝납니다. 이것은 테이프 프로그래밍 주기가 완료되었으며 다음 데이터 패킷 세트를 보낼 수 있음을 나타냅니다.

주소 테이프를 관리하기 위한 데이터입니다.
주소 테이프를 관리하기 위한 데이터입니다.

이러한 프로토콜은 데이터 전송을 위해 한 라인으로 통과할 수 있지만 시간 간격을 유지하는 데 정확도가 필요합니다. 불일치는 150ns 이하로 허용됩니다. 또한 이러한 버스의 노이즈 내성은 매우 낮습니다. 충분한 진폭의 간섭은 컨트롤러에서 데이터로 인식할 수 있습니다. 이것은 제어 회로의 도체 길이에 제한을 가합니다. 한편, 이를 가능하게 하는 리본 상태 확인 추가 장치 없이.램프에 전원을 인가하고 컨트롤 버스의 접촉 패드를 손가락으로 터치하면 일부 LED가 무작위로 켜졌다 꺼질 수 있습니다.

WS2812B 요소 사양

주소 테이프를 기반으로 조명 시스템을 만들려면 발광 소자의 중요한 매개변수를 알아야 합니다.

LED 치수5x5mm
PWM 변조 주파수400Hz
최대 밝기에서 소비 전류셀당 60mA
전원 전압5볼트

아두이노와 WS2812B

세계적으로 유명한 Arduino 플랫폼을 사용하면 주소 테이프 관리를 위한 스케치(프로그램)를 만들 수 있습니다. 시스템의 기능은 충분히 넓지만 어느 정도 더 이상 충분하지 않은 경우 습득한 기술은 C++ 또는 어셈블러로 고통 없이 전환하기에 충분할 것입니다. 초기 지식은 Arduino에 더 쉽게 도달할 수 있지만.

WS2812B 리본을 Arduino Uno(Nano)에 연결하기

첫 번째 단계에서는 간단한 Arduino Uno 또는 Arduino Nano 보드로 충분합니다. 미래에는 더 복잡한 보드를 사용하여 더 복잡한 시스템을 구축할 수 있습니다. 주소 지정이 가능한 LED 스트립을 Arduino 보드에 물리적으로 연결할 때 몇 가지 조건을 준수해야 합니다.

  • 노이즈 내성이 낮기 때문에 데이터 라인의 연결 도체는 가능한 한 짧아야 합니다(10cm 이내로 만들어야 함).
  • 데이터 컨덕터를 Arduino 보드의 무료 디지털 출력에 연결해야 합니다. 그러면 프로그래밍 방식으로 지정됩니다.
  • 높은 전력 소비로 인해 보드에서 테이프에 전원을 공급할 필요가 없습니다. 이를 위해 별도의 전원 공급 장치가 제공됩니다.

램프와 Arduino의 공통 전원선을 연결해야 합니다.

배선도 WS2812B.
WS2812B 테이프 연결 다이어그램.

또한 읽기

LED를 Arduino 보드에 연결하는 방법

 

WS2812B 프로그램 제어 기본 사항

WS2812B 미세 회로를 제어하려면 높은 정확도를 유지하면서 특정 길이의 펄스를 생성해야 한다고 이미 언급했습니다. 짧은 펄스 형성을 위한 Arduino 언어의 명령이 있습니다. 지연마이크로초 그리고 마이크로. 문제는 이러한 명령의 해상도가 4마이크로초라는 것입니다. 즉, 주어진 정확도로 시간 지연을 형성하는 것은 작동하지 않습니다. C++ 또는 어셈블러 도구로 전환해야 합니다. 그리고 이를 위해 특별히 제작된 라이브러리를 사용하여 Arduino를 통해 주소 지정 가능한 LED 스트립의 제어를 구성할 수 있습니다. 발광 요소를 깜박이게 만드는 Blink 프로그램으로 친분을 시작할 수 있습니다.

빠른 주도

이 라이브러리는 보편적입니다. 주소 테이프 외에도 SPI 인터페이스로 제어되는 테이프를 비롯한 다양한 장치를 지원합니다. 그것은 넓은 가능성을 가지고 있습니다.

먼저 라이브러리가 포함되어야 합니다. 이것은 설정 블록 이전에 수행되며 행은 다음과 같습니다.

#include <FastLED.h>

다음 단계는 각 발광 다이오드의 색상을 저장할 어레이를 만드는 것입니다. 요소 수만큼 이름 스트립과 차원이 15입니다(이 매개변수에 상수를 할당하는 것이 좋습니다).

CRGB 스트립[15]

설정 블록에서 스케치에 사용할 테이프를 지정해야 합니다.

무효 설정() {

FastLED.addLeds< WS2812B, 7, RGB>(스트립, 15);

정수;

}

RGB 매개변수는 색상 시퀀스 순서를 설정하고, 15는 LED 수를 의미하고, 7은 제어를 위해 할당된 출력 수입니다(마지막 매개변수에 상수를 할당하는 것이 좋습니다).

루프 블록은 배열 Red(빨간색 광선)의 각 섹션에 순차적으로 쓰는 루프로 시작합니다.

(g=0; g< 15; g++)

{스트립[g]=CRGB::빨간색;}

다음으로 형성된 어레이가 램프로 전송됩니다.

FastLED.show();

지연 1000밀리초(초):

지연(1000);

그런 다음 검은색으로 작성하여 같은 방식으로 모든 요소를 ​​끌 수 있습니다.

for (int g=0; g<15; g++)

{스트립[g]=CRGB::블랙;}

FastLED.show();

지연(1000);

FastLed를 기반으로 한 플래싱 테이프의 스케치.
FastLed를 기반으로 한 플래싱 테이프의 스케치.

스케치를 컴파일하고 업로드하면 테이프가 2초 동안 깜박입니다. 각 색상 구성 요소를 별도로 관리해야 하는 경우 선 대신 {스트립[g]=CRGB::빨간색;} 여러 줄이 사용됩니다.

{

스트립[g].r=100;// 빨간색 요소의 광선 수준 설정

스트립[g].g=11;// 녹색과 동일

스트립[g].b=250;// 파란색도 마찬가지

}

네오픽셀

이 라이브러리는 NeoPixel Ring LED 링에서만 작동하지만 리소스 집약도가 낮고 필수 요소만 포함합니다. Arduino 언어에서 프로그램은 다음과 같습니다.

#include <Adafruit_NeoPixel.h>

앞의 경우와 마찬가지로 라이브러리가 연결되고 lenta 객체가 선언됩니다.

Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// 여기서 15는 요소 수이고 6은 할당된 출력입니다.

설정 블록에서 테이프가 초기화됩니다.

무효 설정() {

lenta.begin()

}

루프 블록에서 모든 요소는 빨간색으로 강조 표시되고 변수는 피드에 전달되며 1초의 지연이 생성됩니다.

for (int y=0; y<15; y++)// 15 - 램프의 요소 수

{lenta.setPixelColor(y, lenta.Color(255,0,0))};

테이프.쇼();

지연(1000);

검은색 레코드와 함께 광선이 멈춥니다.

(int y=0, y< 15, y++)

{ lenta.setPixelColor(y, lenta.Color(0,0,0))};

테이프.쇼();

지연(1000);

NeoPixel 기반의 Blink 프로그램용 스케치입니다.
NeoPixel 기반의 Blink 프로그램용 스케치입니다.

비디오 자습서: 주소 테이프를 사용한 시각 효과 샘플.

LED를 깜박이는 방법을 배운 후에는 부드러운 전환으로 인기 있는 Rainbow 및 Aurora Borealis를 포함하여 색상 효과를 만드는 방법을 계속 배울 수 있습니다. 주소 지정 가능 LED WS2812B 및 Arduino는 이를 위해 거의 무한한 가능성을 제공합니다.

코멘트:
아직 댓글이 없습니다. 첫 번째가 되십시오!

우리는 당신이 읽을 것을 권합니다

LED 램프를 직접 수리하는 방법