Arduino第五課(PWM模擬類比輸出)
Arduino UNO控制板的數位腳位上有[~]符號的D3,D5,D6,D9,D10,D11也可以當作類比輸出,利用PWM模擬不同的電壓輸出。(註)
註:這裡使用的類比輸出值範圍為0~255,0最小(0V),255最大(5V)
一、呼吸燈(漸亮、漸暗、漸亮、漸暗、不斷循環)
1.一顆LED呼吸燈
紅色LED長腳(正極)接數位腳D11,短腳接電阻,再接GND
先拉一個[腳位(號碼)模式設為(OUTPUT)]的積木。
做一個變數[呼吸],[腳位(11)類比輸出(呼吸)],改變[呼吸]的數值,輸出的電壓就會改變,LED的亮度也就跟著改變。
先將呼吸變數慢慢增加,LED愈來愈亮。再將呼吸變數慢慢減少,LED愈來愈暗。
[重複執行]這個動作。
程式下載:呼吸燈.sb2
延伸:
1.如何改變呼吸(亮、暗)速度?
2.請同學思考並試試看[變數改變]和[腳位..類比輸出..]這兩個積木指令的順序如果相反,結果有何不同?
3.為了讓變化更容易觀察,可以在程式中增加[等待1秒]的指令,觀察變數的變化。
註:這裡使用的類比輸出值範圍為0~255,0最小(0V),255最大(5V)
2.三顆LED呼吸燈輪流呼吸(漸亮、漸暗、換下一顆漸亮、漸暗、不斷循環)
紅色LED,正極接D11
黃色LED,正極接D10
綠色LED,正極接D9
控制D9、D10、D11的類比輸出,來控制三種顏色LED的亮度。
程式開始先拉[腳位(號碼)模式設為(OUTPUT)]的積木,將D9、D10、D11設定為輸出。
做一個變數[呼吸],[腳位(9)類比輸出(呼吸)],改變[呼吸]的數值,輸出的電壓就會改變,綠色LED的亮度也就跟著改變。
先將呼吸變數慢慢增加,綠色LED愈來愈亮。再將呼吸變數慢慢減少,綠色LED愈來愈暗。
接著換設定腳位D10的類比輸出值為[呼吸],然後是D11,不停地重複。
[重複執行]這個動作。
程式下載:3呼吸燈.sb2
程式執行後會發現換下一顆燈時,原來的燈並沒有全暗(還有一點亮光),為什麼?
因為[將變數改變]和[腳位..類比輸出..]這兩個積木指令的順序影響,改變一下試試看。
程式下載:3呼吸燈1.sb2
寫程式除了要能執行需要的功能外,如果能讓程式簡短一些,執行更有效率,更是程式設計的精神所在。
上面的範例並不是最短的程式,還有更簡短的程式寫法您想到了嗎?
延伸:
a.簡短程式
增加一個[燈號]的變數。
讓燈號從9到11重複三次,讓綠、黃、紅LED輪流呼吸。
程式下載:3呼吸燈(短).sb2
b.模仿霹靂燈,同時接18顆LED燈來呼吸
程式下載:18呼吸燈(短).sb2
從影片中可以看到大部分的燈都不會呼吸,為什麼?
因為只有數位腳位上有[~]符號的D3,D5,D6,D9,D10,D11也可以當作類比輸出,所以只有這6顆燈會呼吸。
延伸:
上面是LED一個一個亮,試試看修改程式變成成如下面影片的流星燈。
3.三顆LED呼吸燈一起呼吸(三顆LED一起漸亮、漸暗、漸亮、漸暗、不斷循環)
跟一顆LED呼吸燈主程式相似,直接將D9、D10、D11的[腳位(…)類比輸出(…)]積木中放在一起,三個綠、黃、紅LED就一起動作了。
程式下載:呼吸燈(一起).sb2
4.隨機呼吸(三顆LED隨機改變亮度)
程式開始先設啟用數位腳位9、10、11為PWM
將[腳位(號碼)類比輸出(數量值)]指令中的(號碼)用[在9到11間隨機選一個數]替換,(數量值)用[在0到255間隨機選一個數]替換
[重複執行]這個動作,三顆LED的亮度也就跟著隨機改變。
程式下載:呼吸燈(隨機).sb2
延伸:
1.請同學思考並試試看,如何讓顏色變換速度減慢?
2.請學生設計亮燈後要熄滅,保持只有一顆LED是亮的。
二、其他應用
可以控制馬達轉速,調整風扇轉速……等應用。後面再介紹。
———————————-
註1:
Pulse Width Modulation (PWM),脈衝寬度調變。
簡單的說,他是一種利用數位訊號模擬類比訊號的方式。
通常我們可以用來調整燈光的亮度、馬達的轉速、RGB LED 的配色、螢幕亮度控制、喇叭的大小聲/聲音頻率等…。
PWM 的原理,就是藉由數位訊號高頻率的切換,調整開關的比例,我們可以模擬出我們需要的類比訊號。
資料來源:http://thats-worth.blogspot.tw/2014/04/arduino-pwm-arduino-pulse-width.html
註2:
資料來源:https://www.facebook.com/DavidHuangsLab/posts/598599460593751
———————————-
相關連結:
初級班課程目錄
http://blog.ilc.edu.tw/blog/blog/868/post/97509/641433
WFduino課前準備
http://blog.ilc.edu.tw/blog/blog/868/post/97509/636665
WFduino第一課(概論、連接)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/636745
WFduino第二課(LED)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/637840
WFduino第三課(用鍵盤控制LED)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/637841
WFduino第四課(3顆LED紅綠燈)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/637850
WFduino第五課(PWM模擬類比輸出)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/638450
WFduino第六課(RGB三色LED)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/638508
WFduino第七課(蜂鳴器)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/638509
WFduino第八課(按鍵)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/639090
WFduino顏色猜猜機(第8-1課)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/639091
WFduino第九課(可變電阻)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/639092
WFduino第十課(光敏電阻)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/639093
WFduino第十一課(伺服馬達)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/639094
WFduino第十二課(超音波感測器)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/639095
WFduino第十三課(繼電器)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/639096
WFduino第十四課(人體紅外線感測器)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/640850
WFduino第十五課(主動式紅外線感測器)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/640852
WFduino第十六課(七段顯示器)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/640853
英文聽音打字練習(WFduino)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/636484
會說時間的鬧鐘(WFduino)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/637772
會說話的九九乘法表(WFduino)
http://blog.ilc.edu.tw/blog/blog/868/post/97509/636482
WFduino Chrome App
http://blog.ilc.edu.tw/blog/blog/868/post/97509/637303
WFduino語音控制(forcratchX)
http://blog.ilc.edu.tw/blog/blog/868/post/10898/635592
WFduino無線操控arduino
http://blog.ilc.edu.tw/blog/blog/868/post/97509/636819
WFduino原廠使用方法介紹網頁
http://wf8266.com/wf8266r/tutorials/65_Sx4ABlocks
WFduino for ScratchX
http://blog.ilc.edu.tw/blog/blog/868/post/10898/635190
WF8266R雲端外部感應器