【雕爷学编程】Arduino动手做(69)---GY-30环境光传感器模块4

在这里插入图片描述

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验六十九:GY30 数字光强度 光照传感器 BH1750FVI 环境光度检测模块

在这里插入图片描述

GY-30光强度传感器的实验环境
一、GY-30光强度传感器模块实验所需硬件清单

Arduino Uno开发板 X1
0.96寸OLED显示屏X1
杜邦线 若干(备了9条)
GY-30光照强度传感器模块X1
高电平触发有源蜂鸣器模块X1
LED发光二极管(绿、蓝色)X2
高电平触发单路5V继电器模块X1
蓝色诺基亚5110 LCD液晶屏模块X1
Proto Shield 原型扩展板(带mini面包板)X1

在这里插入图片描述

二、传感器模块实验所需软件平台

代码编程 Arduino IDE (版本1.8.19)
仿真编程 Linkboy (版本V4.6.3)
图形编程 Mind+ (版本 V1.7.0 RC2.0)
以及编玩边学(线上平台https://ide.codepku.com/?type=Arduino)

三、实验接线示意图

在这里插入图片描述

程序三:不带库的 BH1750FVI 控制
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序三:不带库的 BH1750FVI 控制
  实验接线:
  GY-30      UNO
  VCC  ——   5V
  GND  ——   GND
  SCL  ——   A5
  SDA  ——   A4
*/

#include <Wire.h>
#define BH_1750 0x23//模块的标准 I2C 地址为 0x23
#define DATA_REG_RESET 0b00000111
#define POWER_DOWN 0b00000000
#define POWER_ON 0b00000001

enum BH1750Mode {
  //“一次”模式的优点是模块在测量后自动进入关机模式,从而节省电力
  CHM = 0b00010000,     //CHM: 连续 H 分辨率模式
  CHM_2 = 0b00010001,   //CHM_2: 连续 H 分辨率模式 2
  CLM = 0b00010011,     //CLM: 连续 L 分辨率模式
  OTH = 0b00100000,     //OTH:一次性 H 分辨率模式
  OTH_2 = 0b00100001,   //OTH_2:一次性 H 分辨率模式 2
  OTL = 0b00100011      // OTL:一次 L 分辨率模式
} mode;

//输入 MTReg 值 (measuringTimeFactor) 作为因子,
//并从中计算 MT 寄存器的字节值
float measuringTimeFactor;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mode = CHM;
  measuringTimeFactor = 1;
  setMode();
  setMeasuringTime();
  delay(200);
}

void loop() {
  getLux();
  delay(100);
}

void getLux() {
  uint16_t rawLux;
  float lux;
  rawLux = readBH1750();
  if ((mode == CHM_2) || (mode == OTH_2)) {
    //输入 MTReg 值 (measuringTimeFactor) 作为因子,
    //并从中计算 MT 寄存器的字节值
    lux = (rawLux / 2.4) / measuringTimeFactor;
  }
  else {
    lux = (rawLux / 1.2) / measuringTimeFactor;
  }
  Serial.print(F("光强度: "));
  Serial.print(lux);
  Serial.println(F(" Lux"));
}

void powerDown() {
  writeBH1750(POWER_DOWN);
}

void powerOn() {
  writeBH1750(POWER_ON);
  setMode();
}

void dataRegReset() {
  writeBH1750(DATA_REG_RESET);
}

void setMode() {
  writeBH1750(mode);
}

//通过控制代码设置分辨率
void setMeasuringTime() {
  byte mt = round(measuringTimeFactor * 69);
  //计算字节的最佳方法是通过二进制操作
  byte highByteMT = ((mt >> 5) | 0b01000000);
  byte lowByteMT = (mt & 0b01111111);
  lowByteMT |= 0b01100000;
  writeBH1750(highByteMT);
  writeBH1750(lowByteMT);
}

uint16_t readBH1750() {
  uint8_t MSbyte, LSbyte;
  Wire.requestFrom(BH_1750, 2);
  if (Wire.available()) {
    MSbyte = Wire.read();
    LSbyte = Wire.read();
  }
  return ((MSbyte << 8) + LSbyte);
}

void writeBH1750(byte val) {
  Wire.beginTransmission(BH_1750);
  Wire.write(val);
  Wire.endTransmission();
}

(2)实验串口返回情况

在这里插入图片描述
(3)实验串口绘图器返回情况

在这里插入图片描述

程序四:读取光照强度传感器的动态数值
(1)实验开源图形编程(Mind+、编玩边学)

在这里插入图片描述
(2)实验串口返回情况

在这里插入图片描述
(3)实验串口绘图器返回情况

在这里插入图片描述

程序五:测试环境光亮强度
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序五:测试环境光亮强度
  实验接线:
  GY-30      UNO
  VCC  ——   5V
  GND  ——   GND
  SCL  ——   A5
  SDA  ——   A4
*/

#include <Wire.h>
#define ADDRESS_BH1750FVI 0x23 //此模块的ADDR="L"
#define ONE_TIME_H_RESOLUTION_MODE 0x20
//一次性H分辨率模式:
//分辨率 = 1 勒克斯
//测量时间(最大值)= 180ms
//每次测量后断电

byte highByte = 0;
byte lowByte = 0;
unsigned int sensorOut = 0;
unsigned int illuminance = 0;

void setup() {
  Wire.begin();
  Serial.begin(115200);
}

void loop() {
  //“通知”匹配设备
  Wire.beginTransmission(ADDRESS_BH1750FVI);
  //设置操作模式
  Wire.write(ONE_TIME_H_RESOLUTION_MODE);
  Wire.endTransmission();

  delay(180);
  //要求Arduino从传感器读回2个字节
  Wire.requestFrom(ADDRESS_BH1750FVI, 2);
  highByte = Wire.read();  // 获取高字节
  lowByte = Wire.read();   // 获取低字节

  sensorOut = (highByte << 8) | lowByte;
  illuminance = sensorOut / 1.2;
  Serial.print(illuminance);
  Serial.println(" lux");
  delay(10);
}

(2)实验串口返回情况

在这里插入图片描述
(3)实验串口绘图器返回情况

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值