Arduino提高篇09—数字光强传感器

数字光照传感器

光敏电阻是常用的光感元件,但是其感应范围比较窄,响应速度慢,且受外界干扰较大。要接收强光时,需要更加精准的数字光照传感器。本篇介绍GY-30模块的使用,其板载BH1750数字光传感器专用IC。

1. 光强传感器介绍

GY-30模块基于BH1750FVI芯片,模块采用IIC通讯方式,内置16bit ADC转换器,可以直接数字输出,光照强度范围:0~65525 lx,勒克斯「lux,通常简写为lx」是照度的国际单位。

GY-30模块

主要特点

  • 内置16Bit ADC转换器。
  • IIC通讯协议,直接输出数字量。
  • 供电:3~5V。
  • 范围:0~65535lx。
  • 不区分环境光源,接近视觉灵敏度的分光特性。
  • 板载通信电平转换。

2. 实验材料

  • Uno R3开发板
  • 配套USB数据线
  • 面包板及配套连接线
  • 数字光强传感器GY-30模块

3. 实验步骤

1. 根据原理图搭建电路图。

GY-30模块的VCC、GND分别连接开发板的5V、GND,模块的SDA、SCL分别连接开发板的A4、A5引脚,模块的ADD引脚不连接。

实验原理图如下图所示:

实验原理图

实物连接图如下图所示:

实物连接图

2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

/*
 * BH1750
 * 数字光照传感器实验
 */
 
#include <Wire.h> //IIC

int BH1750address = 0x23;
byte buff[2];
uint16_t val = 0;

void setup()
{
  Wire.begin();
  BH1750_Init(BH1750address);
  Serial.begin(9600);
}

void loop()
{
  if (2 == BH1750_Read(BH1750address))
  {
    if (buff[0] == 255 && buff[1] == 255)
    {
      val = 65535;
    } else {
      val = ((buff[0] << 8) | buff[1]) / 1.2; //芯片手册中规定的数值计算方式
    }

    Serial.print(val, DEC);
    Serial.println("[lx]");
  }
  delay(500);
}

int BH1750_Read(int address) 
{
  int i = 0;
  Wire.beginTransmission(address);
  Wire.requestFrom(address, 2);
  while (Wire.available())
  {
    buff[i] = Wire.read();  // receive one byte
    i++;
  }
  Wire.endTransmission();
  return i;
}

void BH1750_Init(int address)
{
  Wire.beginTransmission(address);
  Wire.write(0x10);
  Wire.endTransmission();
}

3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

程序下载

4. 实验现象

打开串口监视器,波特率设置成与程序中相一致的9600。监视器中将显示环境光强度,可以通过遮挡或照射模块来改变光强度。

实验现象

关注微信公众号:TonyCode
Arduino学习交流群:868283450

更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注:
扫码加入微信公众号:TonyCode

  • 8
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要实现arduino温湿度传感器和1602传感器的结合,可以采用以下步骤: 1. 连接温湿度传感器和1602显示屏到arduino板上。 2. 在arduino IDE中编写程序代码,读取温湿度传感器的数据,然后将数据显示在1602显示屏上。 以下是一个简单的示例程序,可以实现温湿度传感器和1602显示屏的结合: ``` #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <DHT.h> #define DHTPIN 2 // 设置DHT11传感器引脚 #define DHTTYPE DHT11 // 设置DHT11型号 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal_I2C lcd(0x27, 16, 2); // 设置1602显示屏地址和行列数 void setup() { dht.begin(); lcd.init(); // 初始化1602显示屏 lcd.backlight(); // 打开背 lcd.setCursor(0, 0); // 设置标位置 lcd.print("Temp:"); // 显示温度提示 lcd.setCursor(0, 1); lcd.print("Humi:"); // 显示湿度提示 } void loop() { float temperature = dht.readTemperature(); // 读取温度值 float humidity = dht.readHumidity(); // 读取湿度值 lcd.setCursor(6, 0); // 设置标位置 lcd.print(temperature); // 显示温度值 lcd.setCursor(6, 1); lcd.print(humidity); // 显示湿度值 delay(2000); // 延时2秒 } ``` 在上述示例程序中,我们首先引入了Wire.h、LiquidCrystal_I2C.h和DHT.h三个库文件,分别用于I2C通信、1602显示屏和温湿度传感器的读取。 然后在setup()函数中,我们初始化了温湿度传感器和1602显示屏,并且设置了显示屏上的温湿度提示。 在loop()函数中,我们读取温湿度传感器的数据,并将数据显示在1602显示屏上。其中,我们使用lcd.setCursor()函数来设置标位置,使用lcd.print()函数来显示温湿度值,并使用delay()函数来延时2秒,以避免过快刷新屏幕导致显示不稳定。 通过以上步骤,我们就可以实现arduino温湿度传感器和1602显示屏的结合了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值