极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 74204|回复: 28

arduino操作光照传感器BH1750(数字型,I2C接口)

[复制链接]
发表于 2012-8-8 00:50:35 | 显示全部楼层 |阅读模式
前些天买了个BH1750传感器,打算用在气象站上。用于检测环境光光照强度
主角登场


引脚说明
  • GND 电源地
  • ADD I2C地址引脚
  • SDA I2C总线数据引脚
  • SCL I2C总线时钟引脚
  • VCC 电源 电压3-5V










线路连接
              

程序代码
  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.send(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.receive();  // 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. }
复制代码
运行结果


首发链接:http://www.ardapi.com/post/2012-08-08/40031872959

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-8-8 14:17:29 | 显示全部楼层
呵呵,顶一个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-8 22:25:28 | 显示全部楼层
开心就好 发表于 2012-8-8 14:17
呵呵,顶一个

谢谢。支持。你是ukonline2000 是吗?
回复 支持 反对

使用道具 举报

发表于 2012-8-9 12:13:52 | 显示全部楼层
hunduncn 发表于 2012-8-8 22:25
谢谢。支持。你是ukonline2000 是吗?

哈哈,没错小胖子
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-9 13:19:30 | 显示全部楼层
开心就好 发表于 2012-8-9 12:13
哈哈,没错小胖子

我之前在你那买了DS3231 RTC模块呢。
回复 支持 反对

使用道具 举报

发表于 2012-8-9 16:55:48 | 显示全部楼层
顶一个,有空看看这个传感器的特性!
回复 支持 反对

使用道具 举报

发表于 2012-8-9 17:02:47 | 显示全部楼层
可惜这个传感器最大输出值是2字节,在太阳底下就溢出变成0了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-9 18:32:30 | 显示全部楼层
飞翔的红猪 发表于 2012-8-9 17:02
可惜这个传感器最大输出值是2字节,在太阳底下就溢出变成0了

是的。放在室内比较好。
回复 支持 反对

使用道具 举报

发表于 2012-8-9 21:42:45 | 显示全部楼层
hunduncn 发表于 2012-8-9 13:19
我之前在你那买了DS3231 RTC模块呢。

多谢支持哟
回复 支持 反对

使用道具 举报

发表于 2012-8-18 15:11:01 | 显示全部楼层
貌似Vcc应该接3.3V电压
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-20 18:01:46 | 显示全部楼层
yangking91 发表于 2012-8-18 15:11
貌似Vcc应该接3.3V电压

我接5V正常的。
回复 支持 反对

使用道具 举报

发表于 2013-2-21 21:57:09 | 显示全部楼层
39行的 WIRE.SEND 0x10 精度1LUX/   0x11 精度0.5LUX/  0x13 精度4LUX 大家可以根据需要设置采集分辨率哈
因为只有2个字节,所以超过28067就为负数输出,光越强 绝对值越小,所以建议在返回值VAI 那里加个判断,如果是负数IF(VAI〈0)VAI=56134+VAI;RETURN VAI;
回复 支持 反对

使用道具 举报

发表于 2013-2-25 17:24:41 | 显示全部楼层
你好,我在下载程序时遇到了问题,如图,求教,谢谢了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-3-28 13:37:59 | 显示全部楼层
恺之 发表于 2013-2-25 17:24
你好,我在下载程序时遇到了问题,如图,求教,谢谢了!

我也遇到了这个问题,因为#include <math.h>
#include <MsTimer2.h>这2个函数没得
回复 支持 反对

使用道具 举报

发表于 2013-3-30 16:10:51 | 显示全部楼层
天天向上/tp 发表于 2013-3-28 13:37
我也遇到了这个问题,因为#include
#include 这2个函数没得

哦~谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 06:57 , Processed in 0.045271 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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