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);
}
}
實現同一效果,至少有三種編程方式,代碼+圖形+仿真,可以互為補充,互相配合


