先前有實作過另一個光感測模組GY-30 BH1750FVI:Arduino筆記(57):光照度感測器 GY-30 BH1750FVI。實作的結果測得光照度單位為流明,這篇實作要來測試一下另一個感測模組TEMP6000,將兩個模組測得的值呈現在LCD1602上,看看兩個感測器偵測到的光照度差異是否會很大?
TEMT6000模組的特行如下:
可是當光線較強時(我在手機拍攝時,下方投出LED手電筒光線),可以看到BH1750的數值一下就飆升很高,更接近時,顯示2000多的數值,而 TEMT6000才450左右,兩者差距甚大。由於沒有公正的檢測儀器,我也不知道哪個數值比較正確?我猜是TEMT6000會比較準確吧!!
程式一的串列埠顯示的畫面如下:
程式一的串列埠顯示的畫面如下:
TEMT6000模組的特行如下:
- 工作電壓:DC3.3~5V
- 工作溫度:-40~85℃
- 輸出訊號:模擬電壓,範圍約0~VCC
- 感測光範圍:1~1000Lux(流明)
- 模組不須額外過濾鏡,良好的線性輸出
- 對可見光照度反應與人眼類似,可模擬人對環境光線的強度判斷
- 應用:照明控制、螢幕背光控制等
- 光感應器的最高靈敏度為570nm,其具有 ±60° 的較寬半靈敏度角度。
- 該模組包括一個10K電阻器,隨著光強度的增加,電流也增加。
[材料]
- Arduino Uno
- 光照度感應器 TEMT6000
- 光照度感應器 GY-30 BH1750
- LCD1602液晶顯示器
- I2C/介面 LCD1602轉接板
- 排線 N 條
[安裝 Library]
本實作需要安裝以下程式庫:[線路圖]
| Arduino UNO | TEMT6000 | GY-30 BH1750 | LCD1602 |
|---|---|---|---|
| 5V | VCC | VCC | VCC |
| GND | GND | GND | GND |
| A0 | SIG | - | - |
| A5 | - | SCL | - |
| A4 | - | SDA | - |
| SDA | - | - | SDA |
| SCL | - | SCL |
[程式一]
測試TEMT6000得到的流明值,並顯示在串列埠上,每秒顯示一次。int temtPin = A0;
int light_value;
void setup() {
Serial.begin(112500);
pinMode(temtPin, INPUT); //data pin for ambientlight sensor
pinMode(13, OUTPUT);
}
void loop() {
int light_value = analogRead(temtPin);
float volts = analogRead(A0) * 5.0 / 1024.0; // 將5V電壓分成 1024等分
float amps = volts / 10000.0; // 電流=電壓/電阻(10K歐姆)
float microamps = amps * 1000000; //得到毫安培
float lux = microamps * 2.0; // 乘以2,得到流明
Serial.print ("Raw ADC data: ");
Serial.print (light_value);
Serial.print (" Volts: ");
Serial.print (volts);
Serial.print (" Lux: ");
Serial.println (lux);
delay(1000);
if (light_value > 1000) { //感測值超過1000時,亮Arduino板上的LED燈
digitalWrite(13, HIGH);
}
else {digitalWrite(13,LOW);}
}
[程式二]
將GY-30 BH1750 跟 TEMT6000比較一下測得的數據,並顯示在LCD1602上。#include <Wire.h>
#include <BH1750.h>
#include <LiquidCrystal_I2C.h> // 引用 LiquidCrystal_I2C Library
LiquidCrystal_I2C lcd(0x27,16,2); // 設定 LCD 位址為 0x27,有 16 個字元 2 列
BH1750 lightMeter;
int temtPin = A0;
int light_value;
void setup() {
Serial.begin(112500);
pinMode(temtPin, INPUT); //data pin for ambientlight sensor
pinMode(13, OUTPUT);
Wire.begin();
lightMeter.begin();
lcd.init(); // 初始化 lcd
lcd.backlight(); // 設定背板為亮
}
void loop() {
lcd.clear();
int light_value = analogRead(temtPin);
float volts = analogRead(A0) * 5.0 / 1024.0; // 將5V電壓分成 1024等分
float amps = volts / 10000.0; // 電流=電壓/電阻(10K歐姆)
float microamps = amps * 1000000; //得到毫安培
float lux_temt = microamps * 2.0; // 乘以2,得到流明
float lux_bh1750 = lightMeter.readLightLevel();
lcd.setCursor(0,0);
lcd.print("TEMT6000:");
lcd.print(lux_temt);
lcd.setCursor(0,1);
lcd.print(" BH1750:");
lcd.print(lux_bh1750);
Serial.print ("Raw ADC data: ");
Serial.print (light_value);
Serial.print (" Volts: ");
Serial.print (volts);
Serial.print (" Lux: ");
Serial.print (lux_temt);
Serial.print (" BH1750 Lux: ");
Serial.println (lux_bh1750);
delay(1000);
}
[結果]
以下照片在燈光暗時,兩者測得的感測值很接近。可是當光線較強時(我在手機拍攝時,下方投出LED手電筒光線),可以看到BH1750的數值一下就飆升很高,更接近時,顯示2000多的數值,而 TEMT6000才450左右,兩者差距甚大。由於沒有公正的檢測儀器,我也不知道哪個數值比較正確?我猜是TEMT6000會比較準確吧!!
程式一的串列埠顯示的畫面如下:
程式一的串列埠顯示的畫面如下:



張貼留言