37款傳感器與執(zhí)行器的提法掺冠,在網(wǎng)絡(luò)上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的码党。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊德崭,依照實踐出真知(一定要動手做)的理念斥黑,以學(xué)習(xí)和交流為目的,這里準備逐一動手嘗試系列實驗眉厨,不管成功(程序走通)與否锌奴,都會記錄下來—小小的進步或是搞不掂的問題,希望能夠拋磚引玉憾股。
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗一百二十二:GY-302 數(shù)字量光強度檢測 光照傳感器 BH1750FVI 光線檢測模塊
BH1750光照傳感器模塊描述
- ROHM原裝BH1750FVI芯片
2.電源:3-5v
3.光強范圍:0-65535 lx
4.傳感器內(nèi)置16bitAD轉(zhuǎn)換器
5.直接數(shù)字輸出鹿蜀,省略復(fù)雜計算,省略校準
6.不區(qū)分環(huán)境光服球,接近光譜特性的視覺靈敏度
7.可以在很寬的亮度范圍內(nèi)進行1 lux的高精度測量
8.標準NXP IIC通信協(xié)議
9.模塊包含通信級轉(zhuǎn)換茴恰,5v微控制器直接連接
模塊參考電原理圖
知識點:光亮度
光亮度(luminance)又稱發(fā)光率,是指一個表面的明亮程度有咨,以L表示琐簇, 即從一個表面反射出來的光通量∽恚或者說是指在某方向上單位投影面積的面光源沿該方向的發(fā)光強度婉商。不同物體對光有不同的反射系數(shù)或吸收系數(shù)。光亮度是表示發(fā)光面明亮程度的渣叛,指發(fā)光表面在指定方向的發(fā)光強度與垂直于指定方向的發(fā)光面的面積之比碗旅,單位是坎德拉/平方米特幔。對于一個漫散射面赖舟,盡管各個方向的光強和光通量不同宠能,但各個方向的亮度都是相等的。電視機的熒光屏就是近似于這樣的漫散射面箫攀,所以從各個方向上觀看圖像肠牲,都有相同的亮度感。亮度和照度的關(guān)系靴跛,最常用的照度單位是呎燭光(footcandle)缀雳。1呎燭光是在距離標準燭光一英尺遠的一平方英尺平面上接受的光通量。如果按公制單位梢睛,則以米為標準肥印,照度就用米燭光(metrecandle)來表示,即1米燭光是距離標準燭光一米遠的一平方米面積上的照度绝葡。
1米燭光等于0.0929呎燭光深碱。
我們不難理解亮度和照度之間的關(guān)系,其關(guān)系為:
L=R×E
式中L為亮度藏畅,R為反射系數(shù)敷硅,E為照度。
因此,當我們知道一個物體表面的反射系數(shù)及其表面的照度時竞膳,便可推算出它的亮度航瞭。
BH1750FVI是日本羅姆(ROHM)半導(dǎo)體生產(chǎn)的數(shù)字式環(huán)境光傳感IC诫硕。其主要特性有:
I2C數(shù)字接口坦辟,支持速率最大400Kbps
輸出量為光照度(Illuminance)
測量范圍1~65535 lux,分辨率最小到1lux
低功耗(Power down)功能
屏蔽50/60Hz市電頻率引起的光照變化干擾
支持兩個I2C地址章办,通過ADDR引腳選擇
較小的測量誤差(精度誤差最大值+/-20%)
Arduino實驗開源代碼
/*
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗一百二十二:GY-302 數(shù)字量光強度檢測 光照傳感器 BH1750FVI 光線檢測模塊
項目:測試環(huán)境光亮度
Module UNO
5 VCC —— 5V
6 GND —— GND
7 SCL —— A5
8 SDA —— A4
9 ADD —— NC
*/
#include <Wire.h>
#define ADDRESS_BH1750FVI 0x23 //ADDR="L" for this module
#define ONE_TIME_H_RESOLUTION_MODE 0x20
//One Time H-Resolution Mode:
//Resolution = 1 lux
//Measurement time (max.) = 180ms
//Power down after each measurement
byte highByte = 0;
byte lowByte = 0;
unsigned int sensorOut = 0;
unsigned int illuminance = 0;
void setup(){
Wire.begin();
Serial.begin(115200);
}
void loop(){
Wire.beginTransmission(ADDRESS_BH1750FVI); //"notify" the matching device
Wire.write(ONE_TIME_H_RESOLUTION_MODE); //set operation mode
Wire.endTransmission();
delay(180);
Wire.requestFrom(ADDRESS_BH1750FVI, 2); //ask Arduino to read back 2 bytes from the sensor
highByte = Wire.read(); // get the high byte
lowByte = Wire.read(); // get the low byte
sensorOut = (highByte<<8)|lowByte;
illuminance = sensorOut/1.2;
Serial.print(illuminance); Serial.println(" lux");
delay(1000);
}
光亮度數(shù)據(jù)參考
晚上: 0.001-0.02锉走;
月夜: 0.02-0.3;
多云室內(nèi): 5-50藕届;
多云室外: 50-500挪蹭;
晴天室內(nèi): 100-1000;
夏天中午光照下: 大約10*6能量休偶;
閱讀書籍時的照明度:50-60梁厉;
家庭錄像標準照明度:1400
實驗串口返回情況
打開臺燈后的光亮度波形,提高了400多倍
Arduino實驗場景圖
Arduino實驗開源代碼之二
/*
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗一百二十二:GY-302 數(shù)字量光強度檢測 光照傳感器 BH1750FVI 光線檢測模塊
項目:依據(jù)光亮度控制LED
Module UNO
5 VCC —— 5V
6 GND —— GND
7 SCL —— A5
8 SDA —— A4
9 ADD —— NC
*/
#include <Wire.h> //IIC庫
#include <math.h>
int BH1750address = 0x23;//芯片地址為16位23
byte buff[2];
void setup(){
pinMode(13,OUTPUT);
Wire.begin();
Serial.begin(9600);
}
void loop(){
int i;
uint16_t val=0;
BH1750_Init(BH1750address);
delay(100);
if(2==BH1750_Read(BH1750address))
{
val=((buff[0]<<8)|buff[1])/1.2;
Serial.print(val,DEC);
Serial.println("[lx]");
}
delay(150);
if (val<100)
{
digitalWrite(13,HIGH);
}
else
{
digitalWrite(13,LOW);
}
}
int BH1750_Read(int address) //
{
int i=0;
Wire.beginTransmission(address);
Wire.requestFrom(address, 2);
while(Wire.available()) //
{
buff = Wire.read(); // read one byte
i++;
}
Wire.endTransmission();
return i;
}
void BH1750_Init(int address)
{
Wire.beginTransmission(address);
Wire.write(0x10);//1lx reolution 120ms
Wire.endTransmission();
}
實驗開源仿真編程(Linkboy V4.62)