强度光照模块rimg02 BH1750光度传感器模块


01简介


BH1750 是一款环境光强传感器,输出16bit的数字测量结果。下面是在淘宝购买的模块 强度光照模块rimg02bh1750光度传感器模块

▲ BH1750光强度模块的正反面

▲ BH1750光强度模块的正反面

■ 表格1.1 模块5PIN管脚定义

#PIN1 PIN2 PIN3 PIN4 PIN5
VCC GND SCL SDA ADDR

1.模块特性

▲ 模块的特性480

▲ 模块的特性480

2.接口定义

模块输入配有 PL3500 3.3V表贴稳压芯片。模块的供电电压可以是3-5V。

▲ PL3500的管脚配置

▲ PL3500的管脚配置

▲ 模块上的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波形

▲ I2C 实测SDA,SCL波形, 没有带负载

在SDA,SCL初始化成PM_BIDIR时,测量SDA,SCL波形。

▲ 带上负载之后的SDA,SCL波形

▲ 带上负载之后的SDA,SCL波形

由于BH1750是3V器件,为了能把兼容BH1750,将SDA,SCL初始化成PM_OC,测量得到的波形如下。

▲ 初始化成PM_OC是测量SDA,SCL波形

▲ 初始化成PM_OC是测量SDA,SCL波形

03BH1705协议


1.BH1750的工作模式与命令

▲ BH1750工作模式之间转换

▲ BH1750工作模式之间转换

▲ BH1750命令表格

▲ BH1750命令表格

下面是ADDR= 时对应的高分辨率的初始化与读取协议:
▲ 连续高分辨率转换

▲ 连续高分辨率转换

▲ 下面是ADDR=1

``▲ 下面是ADDR=1是对应的通讯协议

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转换读写波形

▲ 连续H转换读写波形

04测试实验


1.简单遮挡实验

▲ 简单手指遮挡光线

▲ 简单手指遮挡光线

▲ 简单遮挡对应的高强变化

▲ 简单遮挡对应的高强变化

2.几种典型场景测量

(1) 严格遮挡数据

放置在黑色盒子里面: 读数为0.
▲ 黑色盒子里面640

▲ 黑色盒子里面640

(2) 在普通环境光下

读数在几十到几百的幅值。

※ 结论


  • 使用5V单片机STC8G1K08可以对BH1750进行读写;
  • 在STC8G1K08的SDA,SCL的输出管脚设置为 PM_OC;
  • 舒适稳定性很高。

■ 相关文献链接:


  1. 实验电路板AD工程文件:AD\Test\2020\I2C8G1K08\I2C8G1K08.SchDoc ↩︎

  2. 单片机开发工程文件:C51\STC\Test\2020\TestBH17508G1K\TestBH17508G1k.uvproj ↩︎

猜你喜欢

转载自blog.csdn.net/zhuoqingjoking97298/article/details/108292785