【雕爺學編程】Arduino動手做(60)---WS2812直條8位模塊


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

 

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

實驗六十: 直條8位 WS2812B 5050 RGB LED內置全彩驅動彩燈模塊

 

WS2812B芯片

是一個集控制電路與發光電路於一體的智能外控LED光源。其外型與一個5050LED燈珠相同,每個元件即為一個像素點。像素點內部包含了智能數字接口數據鎖存信號整形放大驅動電路,還包含有高精度的內部振盪器和12V高壓可編程定電流控制部分,有效保證了像素點光的顏色高度一致。數據協議采用單線歸零碼的通訊方式,像素點在上電復位以后,DIN端接受從控制器傳輸過來的數據,首先送過來的24bit數據被第一個像素點提取后,送到像素點內部的數據鎖存器,剩余的數據經過內部整形處理電路整形放大后通過DO端口開始轉發輸出給下一個級聯的像素點,每經過一個像素點的傳輸,信號減少24bit。像素點采用自動整形轉發技術,使得該像素點的級聯個數不受信號傳送的限制,僅僅受限信號傳輸速度要求。

WS2812主要特點

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

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

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

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

5、內置上電復位和掉電復位電路。

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

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

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

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

10、數據發送速度可達800Kbps。

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

WS2812應用領域

具有低電壓驅動,環保節能,亮度高,散射角度大,一致性好,超低功率,超長壽命等優點。將控制電路集成於LED上面,電路變得更加簡單,體積小,安裝更加簡便。主要應用領域,LED全彩發光字燈串,LED全彩模組, LED全彩軟燈條硬燈條,LED護欄管。LED點光源,LED像素屏,LED異形屏,各種電子產品,電器設備跑馬燈等。

直條8位 WS2812B 5050 RGB LED內置全彩驅動彩燈模塊

型號:LED L1 V2

尺寸:62*12mm

芯片:WS2812(內置於LED)

LED:5050封裝RGB全彩高亮*8

電壓:5V

端口:數字

平台: 單片機

模塊主要特點

1、5050高亮LED,內置控制芯片,僅需1個IO口即可控制多個LED模塊

2、芯片內置整形電路,信號畸變不會累計,穩定顯示

3、三基色256級亮度調劑,16萬色真彩顯示效果,掃描頻率不低於400Hz/S

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

5、刷新速率30幀/秒時,低速連級模式連級數不小於512點

6、數據收發速度最高可達800Kbps

7、高亮LED,光色亮度一致性高

8、兩端有連級接口,可以直接插接

模塊電原理圖

實驗開源代碼

/*

【Arduino】168種傳感器模塊系列實驗(60)

實驗六十: 直條8位 WS2812B 5050 RGB LED內置全彩驅動彩燈模塊

實驗一,點亮ws2812直條LED

*/

 

#include <Adafruit_NeoPixel.h>

 

#define PIN 6

#define MAX_LED 8

 

#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(20);                                   

       a++;                                         

  }

}

  

/*

【Arduino】168種傳感器模塊系列實驗(60)

實驗六十: 直條8位 WS2812B 5050 RGB LED內置全彩驅動彩燈模塊

實驗程序之二,依次點亮不同色彩燈

*/

 

#include <FastLED.h>

#define LED_PIN     6

#define NUM_LEDS    8

 

CRGB leds[NUM_LEDS];

 

void setup() {

  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);

  

}

void loop() {

  

  leds[0] = CRGB(255, 0, 0);

  FastLED.show();

  delay(500);  

  

  leds[1] = CRGB(0, 255, 0);

  FastLED.show();

  delay(500);

  

  leds[2] = CRGB(0, 0, 255);

  FastLED.show();

  delay(500);

  

  leds[3] = CRGB(150, 0, 255);

  FastLED.show();

  delay(500);

  

  leds[4] = CRGB(255, 200, 20);

  FastLED.show();

  delay(500);

  

  leds[5] = CRGB(85, 60, 180);

  FastLED.show();

  delay(500);

  

  leds[6] = CRGB(50, 255, 20);

  FastLED.show();

  delay(500);

 

  leds[7] = CRGB(150, 50, 60);

  FastLED.show();

  delay(500);

}

  

/*
【Arduino】66種傳感器模塊系列實驗(61)
實驗六十一: 直條8位 WS2812B 5050 RGB LED內置全彩驅動彩燈模塊
實驗程序之三,簡單漸變彩虹色
*/
 
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif
 
#define PIN            6
 
#define NUMPIXELS      8
 
float  RDE1=0;
float  GRE1=0;
float  BLE1=0;
 
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() {
    GRE1=0;
for(int o=0;o<255;o++){
    RDE1=255;
    GRE1=GRE1+1;
    BLE1=0;
    for(int l=0;l<NUMPIXELS;l++){
    pixels.setPixelColor(l, pixels.Color(RDE1,GRE1,BLE1)); 
    pixels.show(); 
    }
    delay(20);
}
    RDE1=255;
for(int p=0;p<255;p++){
    RDE1=RDE1-1;
    GRE1=255;
    BLE1=0;
    for(int l=0;l<NUMPIXELS;l++){
    pixels.setPixelColor(l, pixels.Color(RDE1,GRE1,BLE1)); 
    pixels.show(); 
    }
    delay(20);
}
BLE1=0;
for(int k=0;k<255;k++){
    RDE1=0;
    GRE1=255;
    BLE1=BLE1+1;
    for(int l=0;l<NUMPIXELS;l++){
    pixels.setPixelColor(l, pixels.Color(RDE1,GRE1,BLE1)); 
    pixels.show(); 
    }
    delay(20);
}
GRE1=255;
for(int k=0;k<255;k++){
    RDE1=0;
    GRE1=GRE1-1;
    BLE1=255;
    for(int l=0;l<NUMPIXELS;l++){
    pixels.setPixelColor(l, pixels.Color(RDE1,GRE1,BLE1)); 
    pixels.show(); 
    }
    delay(20);
}
RDE1=0;
for(int h=0;h<150;h++){
    RDE1=RDE1+1;
    GRE1=0;
    BLE1=255;
    for(int l=0;l<NUMPIXELS;l++){
    pixels.setPixelColor(l, pixels.Color(RDE1,GRE1,BLE1)); 
    pixels.show(); 
    }
    delay(20);
}
 
}

  實驗開源圖形編程(Mind+)

實驗開源仿真編程(linkboy)


免責聲明!

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



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