TA的每日心情 | 无聊 2022-4-28 09:50 |
---|
签到天数: 443 天 连续签到: 1 天 [LV.9]以坛为家II
|
本帖最后由 独活草 于 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() 方法即可获取实时的光照强调值。
|
|