BH1750环境光传感器的基于Arduino测试例程及简单滤波

本文介绍了如何在Arduino环境下使用BH1750光强传感器,包括硬件连接、I2C通信、滤波算法(平均滤波和限幅滤波)的应用,以及在不同分辨率模式下的操作。通过滤波处理,得到更稳定的光照数据。同时,文章提到了未实现的高精度测量功能,并引用了其他作者的相关文章。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行的硬件环境

刷过特定BOOTLOADER的[1]STM32F103CBT6, 除了对应链接VCC和GND外,
SCL连接PB6
SDA连接PB7.

变量声明和参数设置部分

变量声明部分有2个设置是可调的,
第1个是PIN_ADDR_STATUS宏定义,主要是设置IC的I2C地址,如果addr的pin脚拉低就设置为0,拉高就设置为1;
第2个是 resolution_mode变量,主要是把手册的6种工作(分辨率)模式做成选单样式,直接切换;
不怎么会写东西,直接上代码:

#include <Wire.h> //Arduino提供的硬件I2C的库函数

/* --------opecode------------------ */
#define POWER_DOWN      0x00
#define POWER_ON        0x01
#define RESET           0x07

#define CONTINUOUSLY_H_MODE1    0x10  //resolution_mode 0
#define CONTINUOUSLY_H_MODE2    0x11  //resolution_mode 1
#define CONTINUOUSLY_L_MODE1    0x13  //resolution_mode 2

#define ONE_TIME_H_MODE1    0x20  //resolution_mode 3
#define ONE_TIME_H_MODE2    0x21  //resolution_mode 4
#define ONE_TIME_L_MODE1    0x23  //resolution_mode 5
/* -------------------------------- */

#define READ_DATA_LEN    1
#define SIMPLE_AVG_NUM   10

#define PIN_ADDR_STATUS   0 //0-> pull down; 1->pull up

int resolution_mode = 5;  // select running mode

byte i2c_addr = 0; //7-bit addr
float lux_data = 0.0f;

float sum_lux_data = 0.0f;
float avg_lux_data = 0.0f;
int avg_count = 0;
byte first_data = 0;
float compare_lux_data = 0.0f;

I2C读写函数封装

这部分主要是依照Arduino提供的硬件I2C库函数,和datasheet上的读写示例,另外结合工作精度模式做切换:

uint8_t i2c_bh1750_write(uint8 reg)
{
   
  Wire.beginTransmission(i2c_addr);
  Wire.write(reg);
  Wire.endTransmission();
  delayMicroseconds(50);
}

uint8_t i2c_bh1750_read(uint8 *get_data)
{
   
  uint8 reg = 0;
  int i;
  int len = 2;
  
  //工作精度模式切换部分
  switch (resolution_mode) {
   
    case 0:
      reg = CONTINUOUSLY_H_MODE1;
      break;
    case 1:
      reg = CONTINUOUSLY_H_MODE2;
      break;
    case 2:
      reg = CONTINUOUSLY_L_MODE1;
      break;
    case 3:
      reg = ONE_TIME_H_MODE1;
      break;
    case 4:
      reg = ONE_TIME_H_MODE2;
      break;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值