宜蘭縣教育支援平台 會員登入 會員註冊 我的i教書

« 上一篇 | 下一篇 »

D0~D10也可以當作類比輸出,利用PWM模擬不同的電壓輸出。(註)

註:這裡使用的類比輸出值範圍為0~255,0最小(0V),255最大(3.3V)

接線圖:

拿一條麵包線,一端接數位腳D7,一端接板子上寫[LEDG]的插孔(上圖標d)。

再拿一條麵包線,一端接數位腳D6,一端接板子上寫[LEDR]的插孔(上圖標e)。

再拿一條麵包線,一端接數位腳D5,一端接板子上寫[LEDB]的插孔(上圖標f)。

因為這是共陽極RGB LED,共用的正極已經內接了,數位腳位D5、D6、D7預設低電位(GND),所以接上就形成通路,LED亮燈

請學生觀察亮燈顏色。

(老師再複習一遍原理)

類比輸出255(3.3V)時LED熄滅,類比輸出為0(0V)時LED

一、呼吸燈(一個顏色漸亮、漸暗、漸亮、漸暗、不斷循環)

原來LED亮著,先用[腳位7類比輸出255]、[腳位6類比輸出255]、[腳位5類比輸出255]讓3個腳位輸出高電位,讓LED熄滅,才能開始進行。

做一個變數[呼吸],[腳位(7)類比輸出(呼吸)],改變[呼吸]的數值,輸出的電壓就會改變,LED的亮度也就跟著改變。

先將呼吸變數慢慢減少,LED愈來愈亮。(重複255次)

再將呼吸變數慢慢增加,LED愈來愈暗。(重複255次)

[重複執行]上面的動作。

程式下載1呼吸.sb2

延伸:

1.如何改變呼吸(亮、暗)速度?

2.仔細觀察會發現燈漸暗時,到最暗了燈並沒有全暗(還有一點亮光),為什麼?

3.請同學思考並試試看[變數改變]和[腳位..類比輸出..]這兩個積木指令的順序如果相反,仔細觀察結果有何不同?

二、檢查程式

在[腳位(7)類比輸出(呼吸)],下面加一個[說(呼吸)]的積木,顯示輸出的值。

為了讓變化更容易觀察,在[重複255次]下面中增加[等待2秒]的指令,觀察變數的變化。

發現當最亮時實際輸出(說的值)是1,最暗時實際輸出(說的值)是254

程式下載1呼吸(檢查).sb2

三、呼吸燈(一個顏色漸亮、漸暗、漸亮、漸暗、不斷循環)(修正)

[將變數改變(...)]和[腳位..類比輸出..]這兩個積木指令的順序改變。

發現當最亮時實際輸出(說的值)是0,最暗時實際輸出(說的值)是255

引導學生想想如何檢查程式的BUG

另一種檢查方式,可以先將綠旗下的積木都先移開,再一個積木一個積木接回去,觀察增加積木後的變化。

程式下載呼吸(檢查)修正.sb2

四、呼吸燈(三色輪流呼吸,漸亮、漸暗、換下一色漸亮、漸暗、不斷循環)

控制D5、D6、D7的類比輸出,來控制LED三種顏色的亮度。

原來LED亮著,先用[腳位7類比輸出255]、[腳位6類比輸出255]、[腳位5類比輸出255]讓3個腳位輸出高電位,讓LED熄滅,才能開始進行。

做一個變數[呼吸],[腳位(7)類比輸出(呼吸)],改變[呼吸]的數值,輸出的電壓就會改變,LED的亮度也就跟著改變。

先將呼吸變數慢慢減少,LED愈來愈亮。(重複255次)

再將呼吸變數慢慢增加,LED愈來愈暗。(重複255次)

接著換設定腳位D6的類比輸出值為[呼吸],然後是D5。

[重複執行]上面的動作。

程式下載3呼吸.sb2

延伸:

1.將檢查程式用的[說(呼吸)]、[等待 2秒]積木移除,讓程式變短。

2.寫程式除了要能執行需要的功能外,如果能讓程式簡短一些,執行更有效率,更是程式設計的精神所在。

上面的範例並不是最短的程式,還有更簡短的程式寫法您想到了嗎?

五、呼吸燈(三色輪流呼吸,簡短程式)

增加一個[燈號]的變數。

讓燈號從7到5重複三次,讓顏色從綠、紅、藍輪流呼吸。

程式下載:3呼吸短.sb2

延伸:

1.請同學思考並試試看,積木順序改變對結果的影響?

2.請同學思考並試試看,如何讓顏色變換速度減慢?

六、其他應用

可以控制馬達轉速,調整風扇轉速......等應用。後面再介紹。

----------------------------------

註:

Pulse Width Modulation (PWM),脈衝寬度調變

簡單的說,他是一種利用數位訊號模擬類比訊號的方式。

通常我們可以用來調整燈光的亮度、馬達的轉速、RGB LED 的配色、螢幕亮度控制、喇叭的大小聲/聲音頻率等…。

PWM 的原理,就是藉由數位訊號高頻率的切換,調整開關的比例,我們可以模擬出我們需要的類比訊號。

資料來源:http://thats-worth.blogspot.tw/2014/04/arduino-pwm-arduino-pulse-width.html

----------------------------------

相關連結:

DiFi課程目錄
http://blog.ilc.edu.tw/blog/blog/868/post/100870/660551

 

WFduino(Arduino)課程目錄
http://blog.ilc.edu.tw/blog/blog/868/post/97509/641433




 
 
 
用LINE傳送