先前有實作過另一個光感測模組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會比較準確吧!!
程式一的串列埠顯示的畫面如下:
程式一的串列埠顯示的畫面如下:
張貼留言