神说要有光,小R按了台灯,就有了光。
神说要知道光照强度,小R翻了下背包,拿出了BH1750模块.......
上午我收到的快递,到晚上才有空打开,套件2:BH1750模块+Arduino系列板+12864液晶屏
管理员包装的很好,每一个模块都独立密封,还配有USB线,排针也配了不少,社区的活动真的很赞~
打开之后来个全家福:
初识BH1750,先测个光照再说。在网上找了张接线图,先把BH1750和Arduino接起来
社区送的Arduino板装不上驱动,试了几次都不行,决定先用自己的UNO R3试试
IDE用的是arduino-1.8.5-windows,MsTimer2库需要另外导入,从下面的网站下载后导入,arduino环境就准备好了,就这么简单
http://playground.arduino.cc/Main/MsTimer2
为了加快测试,采用了已有的程序,但函数名有些变化,只将旧版的函数名换成新版,主体基本没变。
参考:
http://www.geek-workshop.com/thread-1610-1-1.html
程序如下:
- #include <Wire.h>
- #include <math.h>
- #include <MsTimer2.h>
- int BH1750address = 0x23;//BH1750 I2C地址
- byte buff[2];
- int flag = 0;//定时中断标志
- void timer()//定时中断函数
- {
- flag = 1;
- }
- void setup()
- {
- Wire.begin();
- Serial.begin(9600);
- MsTimer2::set(2000, timer); //定时器设置,每2秒触发一次timer函数操作
- MsTimer2::start();
- }
- void loop()
- {
- if( flag )//
- {
- Serial.print( BH1750() );
- Serial.println("[lux]");
- flag = 0;//归零,等着定时中断重新赋值
- }
- }
- double BH1750() //BH1750设备操作
- {
- int i=0;
- double val=0;
- //开始I2C读写操作
- Wire.beginTransmission(BH1750address);
- Wire.write(0x10);//1lx reolution 120ms//发送命令
- Wire.endTransmission();
-
- delay(200);
- //读取数据
- Wire.beginTransmission(BH1750address);
- Wire.requestFrom(BH1750address, 2);
- while(Wire.available()) //
- {
- buff[i] = Wire.read(); // receive one byte
- i++;
- }
- Wire.endTransmission();
- if(2==i)
- {
- val=((buff[0]<<8)|buff[1])/1.2;
- }
- return val;
- }
编译后下载运行
打开com口,光照强度就出来了
我的台灯有两档调节光照,先用高档强光,基本稳定在630lux,有点刺眼;再切换到低档弱光,光照强度稳定在462.5,相对温和适合阅读。
读书时买的护眼灯,我今天终于测出了光照强度,感谢社区活动
后续再进行下一步开发~~~