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://scontent.ftpe8-4.fna.fbcdn.net/v/t1.0-9/46511339_598599467260417_3757471393243987968_o.jpg?_nc_cat=102&_nc_ht=scontent.ftpe8-4.fna&oh=858c3689db4c40b6691ff26568686ed2&oe=5C793C40

資料來源: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雲端外部感應器

http://blog.ilc.edu.tw/blog/blog/868/post/10898/633305

roc

宜蘭縣國小資訊小站

您可能也會喜歡…