學習目標 : 認識faya光感應模組的功能及使用方式
學習時間 : 35min
示範模組 : (1) fayaduino UNO
(2) faya 電源底板
(3) faya 光感應模組
工具 : (1) 樂高積木底板 (相容)
====================功能介紹====================
光感應器的功能為感測光的強弱,faya光感應模組透過面板上的光敏電阻(下圖中彎來彎去的橢圓形元件)測得光的強弱,將結果以電壓的形式在Vout埠輸出,模組能透過可變電阻調整輸出範圍,當作靈敏度的調整。
- 感應到的光愈強,Vout輸出的電壓愈高
- 可變電阻可用來調整光感應的靈敏度
註: NC埠代表 No Connection,沒有作用

====================原理知識====================
以下解釋提供給有需要知道背後原理的人:
faya光感應模組透過一顆光敏電阻(CdS)來偵測光的強弱,當接收的光愈強時,產生的電阻值愈小,當接收的光線愈弱時,產生的電阻值較大。有了這層關係,我們用以下的電路設計出能調整靈敏度的光感測器,其中R1是光敏電阻,R2是可變電阻。
我們用以下範例解釋輸出電壓與光強弱的關係,另外也解釋可變電阻的功用,首先假設:
光敏電阻在陰暗的環境下阻值為10K
光敏電阻在光亮的環境下阻值為1K
當可變電阻調在100K位置時:
在陰暗環境下,輸出Vout = (100K / (100K+10K) ) x Vcc = 0.91Vcc
在光亮環境下,輸出Vout = (100K / (100K+1K) ) x Vcc = 0.99Vcc
因此當感應到的光愈強,Vout輸出的電壓愈高
現在把可變電阻調到50K位置:
在陰暗的環境下, 輸出Vout = (50K / (50K+10K) ) x Vcc = 0.83Vcc
在光亮環境下,輸出Vout = (50K / (50K+1K) ) x Vcc = 0.98Vcc
和上一個例子相比,得知同一個光強度下,較低的可變電阻值,會得到較低的輸出電壓,意謂著偵測門檻降低了,我們可以利用這點應用在所需的專題上 (例如改變可變電阻來降低或提高偵測光強度的靈敏度)
註: 順時針調整可變電阻時,R2阻值增加,反之降低
===================範例實作(1)===================
了解模組功能(原理)後,我們用以下範例來展示模組的功能:
目標:
(1)每0.2秒在Arduino Serial Monitor秀出目前的光感應值 (0~99)
接線:
(1) 電源線連接
如下圖所示,連接的說明請看這篇文章 或簡易版
(2) 訊號線連接
Arduino_A0 ===> 光感應器_VOUT
範例程式:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 2017/5/10 | |
// Faya-Nugget 範例程式 (LightSensor_1.ino) | |
// 單元: 模組介紹-faya光感應模組 | |
// 網址: http://fayalab.blogspot.com/2017/05/faya.html | |
// 目標 (1) 每0.2秒在Arduino Serial Monitor秀出目前的光感應值 (0~99) | |
// 接線: Arduino ==> faya模組 | |
// A0 ==> Vout (光感應器) | |
//光感應器腳位設定 | |
int LightSensorPin_Vout = A0; | |
//設定變數以便運算 | |
int sensorValue = 0; //原始感測值 (0~1023) | |
int newSensorValue = 0; //對應轉換後的感測值 (0~99) | |
void setup() { | |
Serial.begin(9600); // 初始化串列傳輸,鮑率為9600bps。 | |
} | |
void loop() { | |
sensorValue = analogRead(LightSensorPin_Vout); // 讀取光感測值 (0~1023) | |
newSensorValue = map(sensorValue, 0, 1023, 0, 99); // 將感測值轉換成 (0~99) | |
// 將資料輸出至序列埠監控視窗 | |
Serial.print("sensorValue = "); | |
Serial.print(sensorValue); | |
Serial.print("\t newSensorValue = "); | |
Serial.println(newSensorValue); | |
delay(200); | |
} |
備註:
- L22: 讀取感測數值,Arduino讀取數值範圍為0~1023 (10bit)
- L23: 利用map指令把感測數值從0~1023轉換到0~99
範例結果:
討論:
大家可以看到輸出結果和我們在背景知識導出的結果相同,光線愈強,輸出值愈高,光線愈弱,輸出值愈低,大家不妨用螺絲起子調整模組上方的可變電阻(當順時針調整時,對地阻值R2增加,逆時針調整時,對地阻值R2減少),觀察阻值變化與輸出的關係!
歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
fayalab 粉絲團
FB本篇留言版
沒有留言:
張貼留言