找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6034|回复: 17
收起左侧

【Arduino】108种传感器模块系列实验(129)---BH1750光照传感器

[复制链接]
ID:513258 发表于 2019-9-22 15:20 | 显示全部楼层 |阅读模式
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。

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


0.jpg



0-.jpg


回复

使用道具 举报

ID:513258 发表于 2019-9-27 18:20 | 显示全部楼层
01-.jpg
01.jpg

回复

使用道具 举报

ID:513258 发表于 2019-9-27 18:25 | 显示全部楼层
03.jpg
回复

使用道具 举报

ID:513258 发表于 2019-9-27 18:28 | 显示全部楼层
04.jpg
回复

使用道具 举报

ID:513258 发表于 2019-9-27 18:32 | 显示全部楼层
04-.jpg
回复

使用道具 举报

ID:513258 发表于 2019-9-27 18:36 | 显示全部楼层
04-0.jpg
回复

使用道具 举报

ID:513258 发表于 2019-9-27 18:40 | 显示全部楼层
05-.jpg

模块描述
1 ROHM原装BH1750FVI芯片
2.电源:3-5v
3.光强范围:0-65535 lx
4.传感器内置16bitAD转换器
5.直接数字输出,省略复杂计算,省略校准
6.不区分环境光,接近光谱特性的视觉灵敏度
7.可以在很宽的亮度范围内进行1 lux的高精度测量
8.标准NXP IIC通信协议
9.模块包含通信级转换,5v微控制器直接连接

回复

使用道具 举报

ID:513258 发表于 2019-9-27 18:44 | 显示全部楼层
模块电原理图

08.jpg

回复

使用道具 举报

ID:513258 发表于 2019-9-27 18:57 | 显示全部楼层
09.jpg

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

回复

使用道具 举报

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


回复

使用道具 举报

ID:513258 发表于 2019-9-27 19:18 | 显示全部楼层
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百二十九:GY-302 数字量光强度检测 光照传感器 BH1750FVI 光线检测模块
  4. 项目:测试环境光亮度
  5. Module        UNO
  6. 5 VCC   ——   5V
  7. 6 GND  ——   GND
  8. 7 SCL    ——   A5
  9. 8 SDA   ——   A4
  10. 9 ADD  ——   NC
  11. */

  12. #include <Wire.h>

  13. #define ADDRESS_BH1750FVI 0x23    //ADDR="L" for this module
  14. #define ONE_TIME_H_RESOLUTION_MODE 0x20
  15. //One Time H-Resolution Mode:
  16. //Resolution = 1 lux
  17. //Measurement time (max.) = 180ms
  18. //Power down after each measurement

  19. byte highByte = 0;
  20. byte lowByte = 0;
  21. unsigned int sensorOut = 0;
  22. unsigned int illuminance = 0;

  23. void setup()
  24. {
  25.      Wire.begin();
  26.      Serial.begin(115200);
  27. }

  28. void loop()
  29. {
  30.      Wire.beginTransmission(ADDRESS_BH1750FVI); //"notify" the matching device
  31.      Wire.write(ONE_TIME_H_RESOLUTION_MODE);     //set operation mode
  32.      Wire.endTransmission();
  33.          
  34.      delay(180);

  35.      Wire.requestFrom(ADDRESS_BH1750FVI, 2); //ask Arduino to read back 2 bytes from the sensor
  36.      highByte = Wire.read();  // get the high byte
  37.      lowByte = Wire.read(); // get the low byte
  38.      
  39.      sensorOut = (highByte<<8)|lowByte;
  40.      illuminance = sensorOut/1.2;
  41.      Serial.print(illuminance);    Serial.println(" lux");

  42.      delay(1000);
  43. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2019-9-27 19:23 | 显示全部楼层
光亮度数据参考
晚上: 0.001-0.02;
月夜: 0.02-0.3;
多云室内: 5-50;
多云室外: 50-500;
晴天室内: 100-1000;
夏天中午光照下: 大约10*6能量;
阅读书籍时的照明度:50-60;
家庭录像标准照明度:1400

11.jpg


回复

使用道具 举报

ID:513258 发表于 2019-9-27 19:33 | 显示全部楼层
12.jpg
回复

使用道具 举报

ID:513258 发表于 2019-9-27 19:36 | 显示全部楼层
打开台灯后的光亮度波形,提高了400多倍

13.jpg

回复

使用道具 举报

ID:513258 发表于 2019-9-27 19:39 | 显示全部楼层
14.jpg
回复

使用道具 举报

ID:513258 发表于 2019-9-27 19:50 | 显示全部楼层
15.jpg
回复

使用道具 举报

ID:513258 发表于 2019-9-27 19:51 | 显示全部楼层
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百二十九:GY-302 数字量光强度检测 光照传感器 BH1750FVI 光线检测模块
  4. 项目:依据光亮度控制LED
  5. Module        UNO
  6. 5 VCC   ——   5V
  7. 6 GND  ——   GND
  8. 7 SCL    ——   A5
  9. 8 SDA   ——   A4
  10. 9 ADD  ——   NC
  11. */

  12. #include <Wire.h> //IIC库

  13. #include <math.h>

  14. int BH1750address = 0x23;//芯片地址为16位23

  15. byte buff[2];

  16. void setup()

  17. {
  18.   pinMode(13,OUTPUT);
  19.   Wire.begin();

  20.   Serial.begin(9600);

  21. }




  22. void loop()

  23. {

  24. int i;

  25. uint16_t val=0;

  26. BH1750_Init(BH1750address);

  27. delay(100);

  28. if(2==BH1750_Read(BH1750address))

  29.   {

  30.    val=((buff[0]<<8)|buff[1])/1.2;

  31.    Serial.print(val,DEC);     

  32.    Serial.println("[lx]");

  33.   }

  34. delay(150);
  35.    if (val<100)
  36.   {
  37.     digitalWrite(13,HIGH);
  38.   }
  39.   else
  40.   {
  41.     digitalWrite(13,LOW);
  42.   }
  43. }




  44. int BH1750_Read(int address) //

  45. {

  46.   int i=0;

  47.   Wire.beginTransmission(address);

  48.   Wire.requestFrom(address, 2);

  49.   while(Wire.available()) //

  50.   {

  51.     buff[i] = Wire.read();  // read one byte

  52.     i++;

  53.   }

  54.   Wire.endTransmission();  

  55.   return i;

  56. }




  57. void BH1750_Init(int address)

  58. {

  59.   Wire.beginTransmission(address);

  60.   Wire.write(0x10);//1lx reolution 120ms

  61.   Wire.endTransmission();

  62. }
复制代码


回复

使用道具 举报

ID:513258 发表于 2019-9-27 20:07 | 显示全部楼层
16.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表