「雕爺學編程」Arduino動手做(36)——WS2812B 4位彩燈模塊


37款傳感器與模塊的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑒於本人手頭積累了一些傳感器和模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里准備逐一動手試試做實驗,不管成功與否,都會記錄下來---小小的進步或是搞不定的問題,希望能夠拋磚引玉。 

【Arduino】108種傳感器模塊系列實驗(資料+代碼+圖形+仿真)

實驗三十六:WS2812B智能外控集成LED四位彩燈模塊(內置驅動IC)

 

WS2813B

是一個集控制電路與發光電路於一體的智能外控LED光源。其外型與一個5050LED燈珠相同,每個元件即為一個像素點。像素點內部包含了智能數字接口數據鎖存信號整形放大驅動電路,還包含有高精度的內部振盪器和12V高壓可編程定電流控制部分,有效保證了像素點光的顏色高度一致。

主要特點

●    智能反接保護,電源反接不會損壞IC。

●    IC控制電路與LED點光源公用一個電源。

●    控制電路與RGB芯片集成在一個5050封裝的元器件中,構成一個完整的外控像素點。

●    內置信號整形電路,任何一個像素點收到信號后經過波形整形再輸出,保證線路波形畸變不會累加。

●    內置上電復位和掉電復位電路。

●    每個像素點的三基色顏色可實現256級亮度顯示,完成16777216種顏色的全真色彩顯示,掃描頻率不低於400Hz/s。

●    串行級聯接口,能通過一根信號線完成數據的接收與解碼。

●    任意兩點傳傳輸距離在不超過5米時無需增加任何電路。

●    當刷新速率30幀/秒時,級聯數不小於1024點。

●    數據發送速度可達800Kbps。

●    光的顏色高度一致,性價比高。

數據協議采用單線歸零碼的通訊方式,像素點在上電復位以后,DIN端接受從控制器傳輸過來的數據,首先送過來的24bit數據被第一個像素點提取后,送到像素點內部的數據鎖存器,剩余的數據經過內部整形處理電路整形放大后通過DO端口開始轉發輸出給下一個級聯的像素點,每經過一個像素點的傳輸,信號減少24bit。像素點采用自動整形轉發技術,使得該像素點的級聯個數不受信號傳送的限制,僅僅受限信號傳輸速度要求。

LED具有低電壓驅動,環保節能,亮度高,散射角度大,一致性好,超低功率,超長壽命等優點。將控制電路集成於LED上面,電路變得更加簡單,體積小,安裝更加簡便。

應用領域
●     LED全彩發光字燈串,LED全彩模組, LED全彩軟燈條硬燈條,LED護欄管
●   LED點光源,LED像素屏,LED異形屏,各種電子產品,電器設備跑馬燈等

只需要一個數字口就可以幾乎無限級聯的全彩RGB LED( 我這里是四位的模塊)

四位模塊電原理圖

模塊引腳
VCC---這個引腳需要由一個5V-7V的直流電源接入。電壓過高(7V)的話會燒毀LED,電壓太低(5V)的話則會造成亮度過低,甚至造成LED不工作。

GND---公共引腳,接地,即接電源的負極。

IN---微控制器(或者是另外一個WS2812)的數據從這個引腳傳入LED。

OUT---數據從這里輸出給下一級的WS2812,如果這個WS2812是最后一級,則可直接懸空此引腳。

下載WS2812驅動庫Adafruit_NeoPixel,有二鏈接;
https://github.com/adafruit/Adafruit_NeoPixel
https://www.tuicool.com/articles/IbaAJbE

好像需要三個庫,以適應不同情況下的使用
Adafruit_GFX
Adafruit_NeoPixel
Adafruit_NeoMatrix

解壓縮每個庫,從文件夾名稱中刪除“-master”並將它們移動到Arduino庫文件夾libraries里面。重新啟動Arduino IDE以加載庫。

/*

【Arduino】108種傳感器模塊系列實驗(資料+代碼+圖形+仿真)

實驗三十六:WS2812B智能外控集成LED四位彩燈模塊(內置驅動IC)之一

第一個實驗:一只LED的呼吸燈

*/

 

#include <Adafruit_NeoPixel.h>

#define PIN 6

#define MAX_LED 1

#define ADD true

#define SUB false

 

int val = 0;

boolean stat = ADD;

 

Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 );

 

void setup(){

  strip.begin();

  strip.show();

}

 

void loop(){

  uint32_t color = strip.Color(val, val, val);

  strip.setPixelColor(0, color);

  

  if(val>=235)

    stat = SUB;

  if(val<=0)

    stat = ADD;

  

  strip.show();

  delay(15);

  if(stat==SUB) val --;

  else if(stat==ADD) val++;

}

  

/*

【Arduino】108種傳感器模塊系列實驗(資料+代碼+圖形+仿真)

實驗三十六:WS2812B智能外控集成LED四位彩燈模塊(內置驅動IC)之二

第二個實驗:四只LED輪流全彩快閃

*/

 

#include <Adafruit_NeoPixel.h>

 

#define PIN 6

#define MAX_LED 4

 

#define ADD true

#define SUB false

 

int val = 0;

boolean stat = ADD;

 

Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 );

 

void setup()

{

  strip.begin();           

  strip.show();           

}

 

void loop()

{

  uint8_t i,a=0;                                        

  uint32_t color = strip.Color(0, 100, 255);        

  while(a<10)

  {

      for(i=0;i<9;i++)

      {

        if(i==a) strip.setPixelColor(i, color);     

        else strip.setPixelColor(i, 0);             

      }

       strip.show();                                

       delay(30);                                   

       a++;                                         

  }

}

  

/*

【Arduino】108種傳感器模塊系列實驗(資料+代碼+圖形+仿真)

實驗三十六:WS2812B智能外控集成LED四位彩燈模塊(內置驅動IC)之三

第三個實驗:循序點亮四只綠色光LED

*/

 

#include <Adafruit_NeoPixel.h>

#ifdef __AVR__

#include <avr/power.h>

#endif

 

#define PIN            6

#define NUMPIXELS      4

 

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

 

int delayval = 500; 

 

void setup() {

 

#if defined (__AVR_ATtiny85__)

  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);

#endif

 

  pixels.begin(); 

}

 

void loop() {

 

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

 

    pixels.setPixelColor(i, pixels.Color(0,150,0)); 

 

    pixels.show(); 

 

    delay(delayval); 

 

  }

}

  實現同一效果,至少有三種編程方式,代碼+圖形+仿真,可以互為補充,互相配合

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM