使用GY-30光照传感器模块来控制OLED显示屏的背光亮度

oled

22人已加入

描述

像手机、平板之类的电子设备,屏幕亮度都能随环境光强度自动调节,其内部使用的是小体积的数字光照传感器。本篇我们使用GY-30光照传感器模块来控制OLED显示屏的背光亮度,使其随环境光自动调节。

1. 实验材料

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

2. 实验步骤

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

OLED屏的VCC、GND、SDA、SCL与GY-30模块的VCC、GND、SDA、SCL相对应连接,然后连接到开发板的5V、GND、A4、A5。两个模块都使用了硬件IIC,由于各自地址不同,所以并不会相互影响,这也是IIC通讯协议的优势所在。

实验原理图如下图所示:

OLED显示屏

实验原理图

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

/*
   OLED_BH1750
   光照传感器OLED背光控制
*/
#include < Arduino.h >
#include < U8g2lib.h >
#include < Wire.h > 

U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);//使用硬件IIC

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

void setup()
{
  Wire.begin();
  BH1750_Init(BH1750address);
  u8g2.begin();
  u8g2.setFont(u8g2_font_fur20_tf);
}

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; //芯片手册中规定的数值计算方式
    }
  }

  strcpy(str, u8x8_u16toa(val, 5));  

  u8g2.firstPage();
  do {
    u8g2.drawStr(20, 20, "-Light-");
    u8g2.drawStr(10, 60, str);
    u8g2.drawStr(95, 60, "Lx");
    u8g2.setContrast(255 - map(val, 0, 500, 0, 255)); //将光照数据进行区间映射,控制OLED背光
  } while ( u8g2.nextPage() );
}

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. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

OLED显示屏

程序下载

3. 实验现象

OLED屏幕显示采集到的环境光强,并且屏幕亮度随环境光强度而自动调节。

4. 实验分析

在U8g2库中,通过函数 setContrast() 来调节背光亮度,此函数接收0~255之间的数值,数值越大,背光越亮。

我们通过 map() 函数,截取光照强度的一部分[0, 500],映射成[0,255]之间的数值。我们希望当光照弱时背光亮一些,光照强时背光暗一些,所以setContrast()函数接收的数值使用255减去实际的光照强度,如下:

u8g2.setContrast(255 - map(val, 0, 500, 0, 255));
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分