ElectroBest

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

게시 날짜: 2021년 8월 2일
0
2578

LED 기반 조명 기술의 개발은 빠르게 진행되고 있습니다. 어제 RGB 리본이 컨트롤러로 제어되고 밝기와 색상이 리모콘으로 조정되는 것이 기적처럼 보였습니다. 오늘날 시장에는 훨씬 더 많은 가능성이 있습니다.

WS2812B 기반 LED 스트립

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

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

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

주소 지정 가능한 스트립의 모양입니다.
주소 테이프의 모습입니다.

WS2812B 칩의 제어 버스는 데이터를 전송하는 하나의 라인으로 구성됩니다.데이터는 일정한 주파수의 펄스로 인코딩되지만 주파수는 다릅니다. 하나의 펄스는 1비트입니다.. 각 비트의 지속 시간은 1.25μs이고 제로 비트는 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볼트
전문가의 조언
등기구가 소비하는 전력은 상당히 높습니다. 이는 글로우 p-n 접합을 시작하는 데 필요한 전류뿐만 아니라 PWM 형성 시 스위칭 손실에 의해 결정됩니다. 15개 요소로 구성된 웹의 경우 전원 공급 장치와 도체는 최소 1암페어의 전류용으로 설계되었습니다.

아두이노와 WS2812B

세계에서 널리 사용되는 Arduino 플랫폼을 사용하면 주소 지정 가능한 리본을 제어하는 ​​스케치(프로그램)를 만들 수 있습니다. 시스템의 기능은 충분히 넓지만 어떤 수준에서 더 이상 충분하지 않은 경우 습득한 기술은 C++ 또는 어셈블러로 원활하게 전환하기에 충분할 것입니다. 그러나 Arduino에 대한 기본 지식을 얻는 것이 더 쉽습니다.

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

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

  • 노이즈 내성이 낮기 때문에 데이터 라인 연결 도체는 가능한 한 짧아야 합니다(10cm 이내로 만들어야 함).
  • 데이터 와이어를 Arduino 보드의 무료 디지털 출력에 연결하십시오. 나중에 소프트웨어에서 표시됩니다.
  • 높은 전력 소비로 인해 보드에서 스트립에 전원을 공급할 필요가 없습니다. 이를 위해 별도의 전원 공급 장치가 제공됩니다.

등기구의 공통 전원선과 아두이노를 연결해야 합니다.

WS2812B 배선도.
WS2812B 리본 배선도.

또한 읽기

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

 

WS2812B 소프트웨어 제어의 기초

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

FastLed

이 라이브러리는 보편적입니다. 주소 지정 가능한 리본 외에도 SPI 제어 리본을 포함한 많은 장치를 지원합니다. 다양한 기능이 있습니다.

먼저 라이브러리를 연결해야 합니다. 이것은 설정 블록 전에 수행되며 문자열은 다음과 같습니다.

#포함

다음 단계는 각 발광 다이오드의 색상을 저장하기 위한 어레이를 만드는 것입니다. 이름 스트립과 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);

그런 다음 같은 방식으로 모든 요소를 ​​끄고 검은색으로 쓸 수 있습니다.

(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에서 프로그램은 다음과 같습니다.

#포함

이전 경우와 마찬가지로 라이브러리가 연결되고 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))};

lenta.show();

지연(1000);

lenta는 검은색으로 작성하여 빛나는 것을 멈춥니다.

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

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

lenta.show();

지연(1000);

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

비디오 강의: 주소 지정 가능한 리본을 사용한 시각 효과 샘플.

LED를 깜박이는 방법을 배운 후에는 수업을 계속하고 부드러운 전환으로 인기 있는 "무지개" 및 "오로라"를 비롯한 색상 효과를 만드는 방법을 배울 수 있습니다. WS2812B 및 Arduino 주소 지정 가능 LED는 이에 대한 거의 무한한 가능성을 제공합니다.

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

독서를 위한 팁

LED 전등을 스스로 수리하는 방법