Arduino提高篇10—光強傳感器控制OLED背光

光強傳感器控制OLED背光

像手機、平板之類的電子設備,屏幕亮度都能隨環境光強度自動調節,其內部使用的是小體積的數字光照傳感器。本篇我們使用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通訊協議的優勢所在。

實驗原理圖如下圖所示:

實驗原理圖

實物連接圖如下圖所示:

實物連接圖

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. 連接開發板,設置好對應端口號和開發板類型,進行程序下載。

程序下載

3. 實驗現象

OLED屏幕顯示採集到的環境光強,並且屏幕亮度隨環境光強度而自動調節。

實驗現象

4. 實驗分析

在U8g2庫中,通過函數**setContrast()**來調節背光亮度,此函數接收0~255之間的數值,數值越大,背光越亮。

我們通過**map()**函數,截取光照強度的一部分[0, 500],映射成[0,255]之間的數值。我們希望當光照弱時背光亮一些,光照強時背光暗一些,所以setContrast()函數接收的數值使用255減去實際的光照強度,如下:

u8g2.setContrast(255 - map(val, 0, 500, 0, 255));

關注微信公衆號:TonyCode
Arduino學習交流羣:868283450

更多內容,歡迎關注我的公衆號。 微信掃一掃下方二維碼即可關注:
掃碼加入微信公衆號:TonyCode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章