这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取逻辑分析仪】+体验BH1750光强度光照度传感器

共1条 1/1 1 跳转至

【换取逻辑分析仪】+体验BH1750光强度光照度传感器

专家
2024-11-07 11:43:03     打赏

BH1750 是一种采用I2C串行总线接口的数字型光强度传感器集成电路。它的高分辨率可以探测较大范围的光强度变化。它的输出结果为光强单位:勒克斯lx。

本次学习使用现成的模块,

实验中,使用面包板组建相关模块电路

为了方便测试,依旧使用ESP8266模块在Arduino开发环境下进行开发、测试。ESP8266提供了一组以D1(GPIO5)和D2(GPIO4)为I2C的接口,因为系统中使用这个接口兼顾OLED显示以及BH1750的数据采集,所以使用TCA9548A拓展了这个I2C接口。为了完成快速测试,直接使用了库支持,


源代码如下:


/*
 * ESP8266通过TCA9548A驱动OLED和BH1750
 */
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "TCA9548A.h"
#include <BH1750.h>
#define TCA9548_ADDR  0x70
#define TCA9548_RESET 16
#define OLED_ADDR     0x3C
#define BH1750_ADDR   0x23 

TCA9548A I2CMux;
BH1750 bh1750;

// 声明光检测用变量:TEMT6000用
// ADC的输入口,ESP8266只有一个ADC输入口:A0
int sensorPin = A0;
// ADC转换结果
int sensorValue = 0;

// 接线备注:SCL(GPIO5---D1), SDA(GPIO4---D2)
// 分辨率: 128 * 32 像素单位
// 使用Wire默认总线:SCL(D1) - GPIO5 ; SDA(D2) - GPIO4
Adafruit_SSD1306 oled(128, 32, &Wire, -1);

uint8_t cnt = 0;

// BH1750的监测数据
uint16_t bh1750Value=0;

void setup() {
  // 初始化串口
  Serial.begin(115200);
  
  // 实际悬空,不接也没问题
  pinMode(TCA9548_RESET, OUTPUT);
  
  // 初始化TCA9548A
  I2CMux.begin(Wire);
  I2CMux.closeAll(); 
  // 初始化OLED,第2通道
  I2CMux.openChannel(2);
  oled.begin(SSD1306_SWITCHCAPVCC,0x3C);
  oled.setTextColor(WHITE);//开像素点发光
  oled.setTextSize(1);//设置字体大小  
  oled.clearDisplay();//清屏
  oled.display(); // 开显示
  I2CMux.closeChannel(2);
  
  // 初始化BH1750,第7通道
  I2CMux.openChannel(7);
  bh1750.begin();
  I2CMux.closeChannel(7);
  delay(200);
}

void loop() {
  // 获得ADC转换结果(TEMT6000)
  sensorValue = analogRead(sensorPin);
  
  // 选择第7通道,读取BH1750的测试数据
  I2CMux.openChannel(7);
  bh1750Value = bh1750.readLightLevel();  
  I2CMux.closeChannel(7);
  // 选择第2通道
  I2CMux.openChannel(2);
  oled.clearDisplay();//清屏
  oled.setCursor(0, 0);//设置显示位置
  oled.print("TEMT6000 : ");
  oled.print(sensorValue);
  oled.setCursor(0, 8);//设置显示位置
  oled.print("BH1750   : ");
  oled.print(bh1750Value);
  oled.print(" LX");
  oled.display(); // 开显示
  
  I2CMux.closeChannel(2);
  delay(100);
}


作为对比,电路中引入了TEMT6000光传感器。实际测试中,当用强光手电筒照射时,TEMT6000轻易就到达了上限,ADC结果为1024;而BH1750的数据则显示为54612,不知道是不是已经达到上限,这个数据使用的是BH1750库默认的设置。因此从效果上看,BH1750比TEMT6000的测量效果更好,精度更高。

BH1750Demo.zip


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]