光敏電阻是常用的光感元件,但是其感應范圍比較窄,響應速度慢,且受外界干擾較大。要接收強光時,需要更加精準的數字光照傳感器。本篇介紹GY-30模塊的使用,其板載BH1750數字光傳感器專用IC。
1. 光強傳感器介紹
GY-30模塊基于BH1750FVI芯片,模塊采用IIC通訊方式,內置16bit ADC轉換器,可以直接數字輸出,光照強度范圍:0~65525 lx,勒克斯「lux,通常簡寫為lx」是照度的國際單位。
主要特點
2. 實驗材料
- Uno R3開發板
- 配套USB數據線
- 面包板及配套連接線
- 數字光強傳感器GY-30模塊
3. 實驗步驟
1. 根據原理圖搭建電路圖。
GY-30模塊的VCC、GND分別連接開發板的5V、GND,模塊的SDA、SCL分別連接開發板的A4、A5引腳,模塊的ADD引腳不連接。
實驗原理圖如下圖所示:
實驗原理圖
2. 新建sketch,拷貝如下代碼替換自動生成的代碼并進行保存。
1/*
2 * BH1750
3 * 數字光照傳感器實驗
4 */
5
6#include < Wire.h > //IIC
7
8int BH1750address = 0x23;
9byte buff[2];
10uint16_t val = 0;
11
12void setup()
13{
14 Wire.begin();
15 BH1750_Init(BH1750address);
16 Serial.begin(9600);
17}
18
19void loop()
20{
21 if (2 == BH1750_Read(BH1750address))
22 {
23 if (buff[0] == 255 && buff[1] == 255)
24 {
25 val = 65535;
26 } else {
27 val = ((buff[0] < < 8) | buff[1]) / 1.2; //芯片手冊中規定的數值計算方式
28 }
29
30 Serial.print(val, DEC);
31 Serial.println("[lx]");
32 }
33 delay(500);
34}
35
36int BH1750_Read(int address)
37{
38 int i = 0;
39 Wire.beginTransmission(address);
40 Wire.requestFrom(address, 2);
41 while (Wire.available())
42 {
43 buff[i] = Wire.read(); // receive one byte
44 i++;
45 }
46 Wire.endTransmission();
47 return i;
48}
49
50void BH1750_Init(int address)
51{
52 Wire.beginTransmission(address);
53 Wire.write(0x10);
54 Wire.endTransmission();
55}