查看: 2026|回复: 0

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

[复制链接]
  • TA的每日心情
    无聊
    2022-4-28 09:50
  • 签到天数: 443 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2019-1-22 14:13:27 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 独活草 于 2019-1-24 09:07 编辑

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

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

        小龟上BH1750的外接电路:

    光照强度.JPG

    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、效果图

    光照.jpg



    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() 方法即可获取实时的光照强调值。








    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 00:12 , Processed in 0.107914 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.