前言

之前幾篇有關 WFduino/Scratch 與 Arduino 互動文章中所使用的 LED 與 DHT11 都屬於數位訊號的電子元件。等等,我們在使用 LED 燈泡時,不就利用 PWM 來模擬類比訊號了嗎?難道 LED 燈泡不是使用類比訊號的元件?是的,PWM 的實際輸出電位仍只有高、低兩種,只是透過快速的高、低電位切換來產生不同的平均電位,因此連結的仍是只能接受高、低兩種電位的數位訊號元件。有關 PWM 的進一步說明可參考這篇文章

在這篇文章中,我們首先將介紹如何在 Scratch 3 中使用連接至 Arduino 的光敏電阻,並做出依據光源強度而自動開關的燈光。為了判斷光源的強度,我們將光敏電阻組成分壓器,而分壓器的輸出電壓屬於類比訊號,與我們之前所使用的數位訊號有所區別。

光敏電阻

光敏電阻屬於可變電阻的一種,其電阻值會隨著接收到的光強度而改變,當光強度越大時,電阻值就越小。在極強的光度下,電阻值可能只有幾歐姆。反之,當光強度越小時,電阻值就會變得相當大,甚至有可能高達數百萬歐姆以上。光敏電阻常見於一般實驗板上,但 Arduino 必須使用外接式的光敏電阻,其外觀可參考下圖:

光敏電阻

光敏電阻

開發環境建置

如果你還沒有建置 WFduino + Scratch 3 的開發環境,請參考這篇文章

線路圖

在這個範例中,我們需要同時使用光敏電阻與紅色 LED 燈泡。程式根據腳位 A4 所讀取到的數值來判斷環境的光源強度是否足夠,一旦發現光源強度不夠時,隨即自動開啟紅色 LED 燈泡。雖然功能簡單,但仍算得上是簡易版本的智慧照明。

Arduino 與光敏電阻

Arduino 與光敏電阻

  1. Arduino Uno 支援類比訊號的腳位 (非 PWM 模擬) 為 A0~A5,如果以上方線路圖的方式擺放,接腳的位置在右下角。如果我們使用 WFduino 的腳位控制類別積木,會發現 A0~A7 這些編號,但是 Arduino Uno 並不具備 A6 與 A7 兩個腳位,因此僅能使用 A0~A5。
  2. 麵包板上方為我們已經相當熟悉的 LED 燈泡接法,LED 燈泡的陽極 (長腳) 連接至 Arduino 腳位 3,而陰極 (短腳) 則串聯一個 220 歐姆的電阻後連接至 GND 腳位。
  3. 因為 Arduino 無法直接量測光敏電阻的的電阻值,所以我們在此使用光敏電阻與 10K 歐姆電阻組成分壓器,並利用類比腳位讀取分壓器的輸出電壓。麵包板下方即為此分壓器,光敏電阻連接 +5V 腳位,而 10K 歐姆電阻連接 GND 腳位,輸出電壓則連接至類比腳位 A4。
  4. 當光源很強時,光敏電阻擁有極小的電阻值 (數歐姆)。此電阻值與 10K 歐姆相比顯得為不足道,所以輸出電壓幾乎就等於 +5V。反之,如果在黑暗中,光敏電阻的電阻值可能高達數百萬歐姆,遠遠大於 10K 歐姆,因此輸出電壓接近 0。也就是說,輸出電壓越高表示光敏電阻感受到的光越多越亮。

範例程式

Arduino 與光敏電阻 (Scratch 3 範例)

Arduino 與光敏電阻 (Scratch 3 範例)

  1. 程式一開始先將腳位 A4 設定為輸入的模式。
  2. 之後 Scratch 貓咪則不斷地說出從腳位 A4 所讀取到的數據。此外,當讀到的數值小於 500 時,表示環境光源的強度不夠,因此啟動 LED 燈泡 (數位輸出 1)。否則,則關閉 LED 燈泡 (數位輸出 0)。
  3. 500 這個數字為大約的估算,您可以依據身邊的環境加以調整,以達到自動啟動 LED 燈泡的目的。
  4. 當程式開始執行後,我們就可以看到 LED 燈泡在環境光源強度不夠時自動啟動。測試方式可以使用手掌貼近並遮住光敏電阻甚至是直接關掉電燈。
  5. 使用光敏電阻時需要注意的一點是它的感測範圍很小,應該說光敏電阻只能用來感測照射到它上面的光源強度。在實作中,我們只要用手掌擋在光敏電阻與光源之間就可以明顯改變輸出的電壓。但是如果以整體環境的光源來看,其強度其實是沒有甚麼改變的。所以使用上我們應盡量減少光敏電阻與主要光源之間的障礙物,以避免因為阻隔過多的光線而造成非我們所預期的結果。
  6. 在這個範例中,有可能會觀察到在光源強度不足時 LED 燈泡出現閃爍的情況,而不是持續亮著。原因在於 LED 燈泡與光敏電阻之間距離太近,因此當 LED 燈泡發亮時會增加光敏電阻所接收到光強度,進而造成程式判斷為光源充足的情況。解決方法就是將 LED 燈泡遠離光敏電阻,或是在兩者之間增加阻隔物。這個現象其實跟前一個項目一樣,都是因為光敏電阻只能感測很小的範圍而產生非預期的結果。
  7. 利用光敏電阻組成的分壓器雖然能夠告訴我們光源強度的變化,但是卻無法告訴我們實際的光源強度。雖然我們可以根據輸出電壓計算出光敏電阻的電阻值,然後再依據光敏電阻的電阻值推算出光源強度,但是此方法相當複雜而且產生的誤差也大。因此,如果我們需要光照強度的實際數值,可以考慮使用光感測器,如 TSL2561TEMT6000
Facebook 留言
Print Friendly, PDF & Email
Summary
WFduino + Scratch + Arduino 與光敏電阻
Article Name
WFduino + Scratch + Arduino 與光敏電阻
Description
WFduino + Scratch + Arduino 與光敏電阻
Author
Publisher Name
Everlearn Studio
Publisher Logo