回答

收藏

[原创] 【 钛极小龟】---II2C通讯(光强度传感器BH1750)

物联网 物联网 3053 人阅读 | 0 人回复 | 2019-01-22

本帖最后由 独活草 于 2019-1-24 09:07 编辑

1、硬件介绍
    BH1750 FVI 是一种两线式串行总线接口的光强度传感器,它不区分光源类型,输出为数字型,具有1~65535 lx的高分辨率,可支持较大范围的光照强度变化。结构图如下:

    从结构框图可看出,外部光照被接近人眼反应的高精度光敏二极管PD探测到后,通过集成运算放大器将PD电流转换为PD电压,由模数转换器获取16位数字数据,然后被逻辑和IIC进行数据处理与存储。OSC为内部的振荡器提供内部逻辑时钟,通过相应的指令操作即可读取出内部存储的光照数据。数据传输使用标准的IIC总线。

    小龟上BH1750的外接电路:



2、控制程序
import java.io.IOException;
import tijos.framework.devicecenter.TiI2CMaster;
import tijos.framework.transducer.oled.TiOLED_UG2864;
import tijos.framework.sensor.bh1750.TiBH1750;
import tijos.framework.util.Delay;
public class TiOLED_IIC_Test {
        public static void main(String[] args) {  
      try {
          // I2C主机总线资源分配,I2C PORT0
          TiI2CMaster i2cm0 = TiI2CMaster.open(0);
          // I2C主机总线资源与屏幕对象绑定,屏幕地址:0x3C
          TiOLED_UG2864 oled = new TiOLED_UG2864(i2cm0, 0x3C);
          // I2C主机总线资源与照度计BH1750对象绑定,默认地址:0x23            
          TiBH1750 bh1750 = new TiBH1750(i2cm0);   
          // 屏幕开启并清屏
          oled.turnOn();        
          oled.clear();
          oled.output("Illuminamce test");
          // 通过屏幕循环打印
          while (true) {
                  //获取光照度值
              int lux = bh1750.readLightLevel();
              oled.print(2, 0, "LightLevel : " + lux + " lux");
              Delay.msDelay(1000);
          }
      } catch (IOException e) {
          e.printStackTrace();
      }
        }
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3、效果图




4、总结
① 官方在 tijos.framework.sensor.bh1750 中定义的 TiBH1750 这个类
  public TiBH1750(TiI2CMaster i2c)
   {  
      this(i2c, 0x23);
   }

该类的构造方法中默认写死了IIC通讯地址为0x23,用户使用时只需要new一个对象就行:
TiBH1750 bh1750 = new TiBH1750(i2cm0);  

② 官方在 TiBH1750 类中 封装了3种不同精度的流明单位(lx): 1lx   0.5lx   4lx,默认使用的是1lx,用户可更改。
        // Measurement at 1lx resolution. Measurement time is approx 120ms.
        public final static int CONTINUOUS_HIGH_RES_MODE = 0x10;

        // Measurement at 0.5lx resolution. Measurement time is approx 120ms.
        public final static int CONTINUOUS_HIGH_RES_MODE_2 = 0x11;

        // Measurement at 4lx resolution. Measurement time is approx 16ms.
        public final static int CONTINUOUS_LOW_RES_MODE = 0x13;

③ 调用类中 readLightLevel() 方法即可获取实时的光照强调值。








分享到:
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条