【雕爷学编程】Arduino动手做(122)---BH1750光照传感器

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百二十二:GY-302 数字量光强度检测 光照传感器 BH1750FVI 光线检测模块

0.jpg
01.jpg
01-.jpg
02.jpg
03.jpg
04.jpg
04-.jpg
04-0.jpg

BH1750光照传感器模块描述

  1. ROHM原装BH1750FVI芯片

2.电源:3-5v

3.光强范围:0-65535 lx

4.传感器内置16bitAD转换器

5.直接数字输出,省略复杂计算,省略校准

6.不区分环境光,接近光谱特性的视觉灵敏度

7.可以在很宽的亮度范围内进行1 lux的高精度测量

8.标准NXP IIC通信协议

9.模块包含通信级转换,5v微控制器直接连接

05-.jpg

模块参考电原理图

08.jpg

知识点:光亮度

光亮度(luminance)又称发光率,是指一个表面的明亮程度,以L表示, 即从一个表面反射出来的光通量。或者说是指在某方向上单位投影面积的面光源沿该方向的发光强度。不同物体对光有不同的反射系数或吸收系数。光亮度是表示发光面明亮程度的,指发光表面在指定方向的发光强度与垂直于指定方向的发光面的面积之比,单位是坎德拉/平方米。对于一个漫散射面,尽管各个方向的光强和光通量不同,但各个方向的亮度都是相等的。电视机的荧光屏就是近似于这样的漫散射面,所以从各个方向上观看图像,都有相同的亮度感。亮度和照度的关系,最常用的照度单位是呎烛光(footcandle)。1呎烛光是在距离标准烛光一英尺远的一平方英尺平面上接受的光通量。如果按公制单位,则以米为标准,照度就用米烛光(metrecandle)来表示,即1米烛光是距离标准烛光一米远的一平方米面积上的照度。

1米烛光等于0.0929呎烛光。

我们不难理解亮度和照度之间的关系,其关系为:

L=R×E

式中L为亮度,R为反射系数,E为照度。

因此,当我们知道一个物体表面的反射系数及其表面的照度时,便可推算出它的亮度。

09.jpg

BH1750FVI是日本罗姆(ROHM)半导体生产的数字式环境光传感IC。其主要特性有:
I2C数字接口,支持速率最大400Kbps
输出量为光照度(Illuminance)
测量范围1~65535 lux,分辨率最小到1lux
低功耗(Power down)功能
屏蔽50/60Hz市电频率引起的光照变化干扰
支持两个I2C地址,通过ADDR引脚选择
较小的测量误差(精度误差最大值+/-20%)

10 (1).jpg

Arduino实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百二十二:GY-302 数字量光强度检测 光照传感器 BH1750FVI 光线检测模块

项目:测试环境光亮度

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);

}

光亮度数据参考

晚上: 0.001-0.02;

月夜: 0.02-0.3;

多云室内: 5-50;

多云室外: 50-500;

晴天室内: 100-1000;

夏天中午光照下: 大约10*6能量;

阅读书籍时的照明度:50-60;

家庭录像标准照明度:1400

实验串口返回情况

11.jpg
12.jpg

打开台灯后的光亮度波形,提高了400多倍

13.jpg
14.jpg

Arduino实验场景图

15.jpg

Arduino实验开源代码之二

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百二十二:GY-302 数字量光强度检测 光照传感器 BH1750FVI 光线检测模块

项目:依据光亮度控制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)

16.jpg
21.jpg
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容