01简介
BH1750 是一款环境光强传感器,输出16bit的数字测量结果。下面是在淘宝购买的模块 强度光照模块rimg02bh1750光度传感器模块 。
▲ BH1750光强度模块的正反面
■ 表格1.1 模块5PIN管脚定义
#PIN1 | PIN2 | PIN3 | PIN4 | PIN5 |
---|---|---|---|---|
VCC | GND | SCL | SDA | ADDR |
1.模块特性
▲ 模块的特性480
2.接口定义
模块输入配有 PL3500 3.3V表贴稳压芯片。模块的供电电压可以是3-5V。
▲ PL3500的管脚配置
▲ 模块上的PL3500稳压模块
02实验电路板1
1.实验电路设计
▲ 原理图设计
▲ 实验电路板
■ 表格2.1 实验板PIN6管脚定义
P1 | P2 | P3 | P4 | P5 | P6 |
---|---|---|---|---|---|
VCC | GND | SDA | SCL | ADC0 | ADC1 |
2.单片机软件2
对于I2C总线的设置:
(1)需要在STC8G头文件中将 I2C_EN设置为1
(2)需要在STC8G .C 文件中,设置: SetI2CPort(I2C_P3)
(3)需要在主程序初始化中:
#if I2C_EN
#define SDA_PIN 3,3
#define SCL_PIN 3, 2
PM_BIDIR(SDA_PIN);
PM_BIDIR(SCL_PIN);
ON(SDA_PIN);
ON(SCL_PIN);
#endif // I2C_EN
(4)测试I2C的SDA,SCL管教波形
注意: 在测试I2CSendData()函数是,一定需要调用 I2CStart()
if(++nShowCount >= 50) {
nShowCount = 0;
I2CStart();
I2CSendData(0x55);
I2CStop();
}
▲ I2C 实测SDA,SCL波形, 没有带负载
在SDA,SCL初始化成PM_BIDIR时,测量SDA,SCL波形。
▲ 带上负载之后的SDA,SCL波形
由于BH1750是3V器件,为了能把兼容BH1750,将SDA,SCL初始化成PM_OC,测量得到的波形如下。
▲ 初始化成PM_OC是测量SDA,SCL波形
03BH1705协议
1.BH1750的工作模式与命令
▲ BH1750工作模式之间转换
▲ BH1750命令表格
下面是ADDR= 时对应的高分辨率的初始化与读取协议:
▲ 连续高分辨率转换
是对应的通讯协议
2.BH1750的模块协议
/*
**==============================================================================
** BH1750.C: -- by Dr. ZhuoQing, 2020-09-02
**
**==============================================================================
*/
//------------------------------------------------------------------------------
#include "C51BASIC.H"
#include "STC8G.H"
#define BH1750_GLOBALS 1 // Define the global variables
#include "BH1750.H"
//------------------------------------------------------------------------------
void BH1750Init(void) {
I2CStart();
I2CSendData(BH1750_ADD_WRITE);
I2CReceiveACK();
I2CSendData(BH1750_CMD_H_RESOLUTION);
I2CReceiveACK();
I2CStop();
}
unsigned int BH1750Read(void) {
unsigned int nNumber;
unsigned char ucChar;
I2CStart();
I2CSendData(BH1750_ADD_READ);
I2CReceiveACK();
ucChar = I2CReceiveData();
I2CSendACK();
nNumber = ucChar;
ucChar = I2CReceiveData();
I2CSendNACK();
I2CStop();
nNumber = (nNumber << 8) + ucChar;
return nNumber;
}
//==============================================================================
// END OF THE FILE : BH1750.C
//------------------------------------------------------------------------------
/*
**==============================================================================
** BH1750.H: -- by Dr. ZhuoQing, 2020-09-02
**
** Description:
**
**==============================================================================
*/
#ifndef __BH1750__
#define __BH1750__
//------------------------------------------------------------------------------
#ifdef BH1750_GLOBALS
#define BH1750_EXT
#else
#define BH1750_EXT extern
#endif // BH1750_GLOBALS
//------------------------------------------------------------------------------
//==============================================================================
#define BH1750_ADD 1
//------------------------------------------------------------------------------
#if BH1750_ADD == 0
#define BH1750_ADD_READ 0x47
#define BH1750_ADD_WRITE 0x46
#else
#define BH1750_ADD_READ 0xB9
#define BH1750_ADD_WRITE 0xB8
#endif // BH1750_ADD == 0
//------------------------------------------------------------------------------
#define BH1750_CMD_POWERDOWN 0x0
#define BH1750_CMD_POWERON 0x1
#define BH1750_CMD_RESET 0x7
#define BH1750_CMD_H_RESOLUTION 0x10
#define BH1750_CMD_H_RESOLUTION2 0x11
#define BH1750_CMD_L_RESOLUTION 0x13
#define BH1750_CMD_ONETIME_H 0x20
#define BH1750_CMD_ONETIME_H2 0x21
#define BH1750_CMD_ONETIME_L 0x23
//------------------------------------------------------------------------------
void BH1750Init(void);
unsigned int BH1750Read(void);
//==============================================================================
// END OF THE FILE : BH1750.H
//------------------------------------------------------------------------------
#endif // __BH1750__
▲ 连续H转换读写波形
04测试实验
1.简单遮挡实验
▲ 简单手指遮挡光线
▲ 简单遮挡对应的高强变化
2.几种典型场景测量
(1) 严格遮挡数据
放置在黑色盒子里面: 读数为0.
▲ 黑色盒子里面640
(2) 在普通环境光下
读数在几十到几百的幅值。
※ 结论
- 使用5V单片机STC8G1K08可以对BH1750进行读写;
- 在STC8G1K08的SDA,SCL的输出管脚设置为 PM_OC;
- 舒适稳定性很高。
■ 相关文献链接: