[活动] 【DIY活动】+ 初识BH1750+Arduino 看全部

神说要有光,小R按了台灯,就有了光。
神说要知道光照强度,小R翻了下背包,拿出了BH1750模块.......

上午我收到的快递,到晚上才有空打开,套件2:BH1750模块+Arduino系列板+12864液晶屏
001.jpg
管理员包装的很好,每一个模块都独立密封,还配有USB线,排针也配了不少,社区的活动真的很赞~
打开之后来个全家福:
002.jpg

初识BH1750,先测个光照再说。在网上找了张接线图,先把BH1750和Arduino接起来

零件图.png
社区送的Arduino板装不上驱动,试了几次都不行,决定先用自己的UNO R3试试
003.jpg

IDE用的是arduino-1.8.5-windows,MsTimer2库需要另外导入,从下面的网站下载后导入,arduino环境就准备好了,就这么简单
http://playground.arduino.cc/Main/MsTimer2
IDE.JPG


为了加快测试,采用了已有的程序,但函数名有些变化,只将旧版的函数名换成新版,主体基本没变。
参考:http://www.geek-workshop.com/thread-1610-1-1.html

程序如下:
  1. #include <Wire.h>
  2. #include <math.h>
  3. #include <MsTimer2.h>

  4. int BH1750address = 0x23;//BH1750 I2C地址
  5. byte buff[2];

  6. int flag = 0;//定时中断标志

  7. void timer()//定时中断函数
  8. {
  9.   flag = 1;
  10. }

  11. void setup()
  12. {
  13.   Wire.begin();
  14.   Serial.begin(9600);
  15.   MsTimer2::set(2000, timer); //定时器设置,每2秒触发一次timer函数操作
  16.   MsTimer2::start();
  17. }

  18. void loop()
  19. {
  20.   if(  flag )//
  21.   {
  22.     Serial.print( BH1750() );
  23.     Serial.println("[lux]");
  24.     flag = 0;//归零,等着定时中断重新赋值
  25.   }
  26. }

  27. double BH1750() //BH1750设备操作
  28. {
  29.   int i=0;
  30.   double  val=0;
  31.   //开始I2C读写操作
  32.   Wire.beginTransmission(BH1750address);
  33.   Wire.write(0x10);//1lx reolution 120ms//发送命令
  34.   Wire.endTransmission();  
  35.   
  36.   delay(200);
  37.   //读取数据
  38.   Wire.beginTransmission(BH1750address);
  39.   Wire.requestFrom(BH1750address, 2);
  40.   while(Wire.available()) //
  41.   {
  42.     buff[i] = Wire.read();  // receive one byte
  43.     i++;
  44.   }
  45.   Wire.endTransmission();
  46.   if(2==i)
  47.   {
  48.    val=((buff[0]<<8)|buff[1])/1.2;
  49.   }
  50.   return val;
  51. }
编译后下载运行
打开com口,光照强度就出来了
捕获2222.JPG

我的台灯有两档调节光照,先用高档强光,基本稳定在630lux,有点刺眼;再切换到低档弱光,光照强度稳定在462.5,相对温和适合阅读。
读书时买的护眼灯,我今天终于测出了光照强度,感谢社区活动
后续再进行下一步开发~~~



  • 沙发 bobbi
  • 2018-7-16 09:34:49
感谢分享
谢谢分享~
加油了啊