第四章 數位輸出模組
主板上能用來做輸出控制的只有「D0 ~ D13」共14個數位輸出腳位(其中D0、D1做為即時連線資料傳輸已被韌體佔用),這些腳位能做為主板的輸出腳,也能做為輸入腳,因此,在使用前需先規劃為「OUTPUT」才能做為數位輸出腳位使用。
數位輸出只有二種狀態:低電位(Low)輸出0V、高電位(High)輸出5V,如果要輸出0 ~ 5V中間的電壓值,就必需採PWM(脈衝寬度調變)來模擬類比輸出,其中只有「D3、D5、D6、D9、D10、D11」才能設為PWM腳位,在使用前需先規劃為「PWM」才能做為模擬類比輸出腳位使用。
4-1 模組說明
常見的數位輸出模組有LED模組、蜂鳴器模組、繼電器模組等,LED模組、全彩LED模組如需要有不同的亮度、直流馬達需要控制轉速,均需使用PWM來給出0 ~ 5V之間不同的電壓值。
4-2 「S」可接至主板腳位
D2 ~ D13 :(以LED模組為例)
※ 當數位輸出腳位設為「OUTPUT」時,腳位寫入「HIGH」則LED全亮,腳位寫入「LOW」則LED全滅。
D3、D5、D6、D9、D10、D11:
※ 當數位輸出腳位設為「PWM」時,LED亮度範圍「0 ~ 255」,腳位寫入「255」則LED全亮,腳位寫入「0」則LED全滅。
4-3 範例1:開關LED燈(LED模組)
說明:
「LED模組」的LED(發光二極體)是半導體元件,可做為指示燈或照明用途,對於主板而言「LED模組」屬於輸出模組,共有三支接腳,「VCC」和「GND」為電源腳位,「S」(或IN)為信號輸入腳位,LED依照「S」腳位的輸入電位(0 ~ 5V)決定亮度,電位越高LED越亮。
將「LED模組」的輸入腳「S」接到擴充板的「D2」數位腳位(如接線圖),在寫入「D2」腳位前需將「D2」設定為「OUTPUT」(數位輸出),當按下電腦鍵盤「↑」鍵時點亮LED;當按下電腦鍵盤「↓」鍵時熄滅LED,並讓舞台的角色說出「LED開」或「LED關」。
接線圖:
程式碼:
執行結果:
4-4 範例2:PWM輸出(LED模組)
說明:
此範例要做PWM輸出練習,所以必需將「LED模組」的輸入腳「S」接到擴充板的「D3」數位腳位(如接線圖),在寫入「D3」腳位前需將「D3」設定為「PWM」(脈衝寬度調變輸出),當按下鍵盤「↑」鍵時逐漸點亮LED,當按下鍵盤「↓」鍵時LED逐漸變暗,並讓舞台的角色說出LED的「亮度」(0 ~ 255)。
※只有「D3、D5、D6、D9、D10、D11」的數位腳位才能設為PWM(脈衝寬度調變)輸出腳
接線圖:
程式碼:
執行結果:
4-5 範例3:交通號誌(紅綠燈模組)
說明:
此範例模擬三個燈號的路口紅綠燈,先將「紅綠燈模組」的「R」(紅)接到擴展板「D2」;「Y」(黃)接到「D3」;「G」(綠)接到「D4」;「GND」(接地)接到擴展板的「GND」 (如接線圖),程式中先規劃「D2、D3、D4」為數位輸出(OUTPUT)腳位,並使用函式積木建立點亮三個燈號的自訂函式積木,在依序執行「紅、黃、綠」燈號函式積木,並重複執行。
接線圖:
程式碼:
執行結果:
綠燈亮2秒後,綠燈閃二次(每次間隔0.4秒),黃燈亮1秒後,紅燈亮2秒,重複上述動作。
4-6 範例4:霹靂燈(紅綠燈模組)
說明:
此範例要做紅、黃、綠燈左右來回點亮,程式中使用了「有限狀態機(FSM)」原理,「有限狀態機」表示了多個狀態及狀態間轉移和動作的模型,這個方式分別明確定義模型的處理方式,了解「有限狀態機」有助於未來對於複雜的動作可更簡便的設計程式。
程式中「Lamp」變數為動作狀態分別為「1 ~ 3」,左側程式碼只負責判斷當某種狀態成立時做對應的動作,右側程式碼則只負責切換動作狀態(將「Lamp」遞增或遞減),兩組程式分別獨立設計,執行時互相搭配。
程式中「Flag」變數為「0」時:變數「Lamp」遞增;「1」:變數「Lamp」遞減,當要改變方向時,使用「Flag = 1 - Flag」,即可讓「Flag」的變數內容在「0」與「1」之間切換。
接線圖:(同上一範例)
程式碼:
執行結果:
紅、黃、綠燈每隔0.5秒依序來回點亮。
4-7 範例5:開關電燈(繼電器模組)
說明:
因為主板的單腳最大只能提供40mA的輸出電流,「繼電器模組」是利用主板腳位較小的電流去控制較大電流負載的一種「開關」,讓主板能透過「繼電器模組」驅動電壓220V以下及電流3A以下負載,如:家用電燈、微型水泵、電磁閥等,模組右側有三支接腳,「VCC」和「GND」為電源腳位,「S」(或IN)為信號輸入腳位,模組左側為大電流負載控制腳,使用一字螺絲起子鬆開或鎖緊電線,中間接點是共同點;在未給信號時NO(常開)接點和共同點斷開;NC(常閉)接點與共同點導通,當「S」信號輸入高電位(High)時,NO接點和共同點導通,NC接點與共同點斷開。
將「繼電器模組」的輸入腳「S」接到擴充板的「D2」數位腳位(如接線圖),在寫入「D2」腳位前需將「D2」設定為「OUTPUT」(數位輸出),當按下電腦鍵盤「↑」鍵時啟動繼電器,電燈開啟;當按下電腦鍵盤「↓」鍵時關閉繼電器,電燈熄滅,並讓舞台的角色說出「已開燈」或「已關燈」。
接線圖:
程式碼:
執行結果:
4-8、範例6:全彩LED控制(RGB LED模組)
說明:
所謂全彩是指透過紅、綠、藍三個LED當成色彩三原色,再把每個LED亮度分成256種(0 ~ 255)變化,所以全部組合起來就有1677萬色,「RGB LED模組」就是把紅、綠、藍三個LED做在一顆晶片上,然後晶片內部將三個LED的負級接在一起後引出一個「-」的腳位,此腳必需接地(GND),另外三個腳位R、G、B分別對應到紅、綠、藍三個LED的正極,這三腳如要做到調整亮度,也必需接至主板有PWM輸出的數位輸出腳。
※只有「D3、D5、D6、D9、D10、D11」的數位腳位才能設為PWM(脈衝寬度調變)輸出腳
將「R、G、B」三腳分別接至「D3、D5、D6」,「-」接至「GND」,在程式初始化時需將「D3、D5、D6」腳位設定為「PWM」模擬類比輸出,程式執行時分別使用數字鍵來調整紅、綠、藍三個LED的亮度,如下表所示:
接線圖:
程式碼:
執行結果:
可使用數字鍵調整LED顏色。
4-9 範例7:單直流馬達轉速控制(電晶體MOS模組)
說明:
當要控制的負載不超過24VDC(從VIN提供)或是只是要控制單顆直流馬達轉速,則可使用「電晶體MOS模組」即可,此模組跟「繼電器模組」一樣,控制電源(VCC、GND)跟負載電源(VIN、GND)可以是獨立分開的,給予此模組的「SIG」腳位一個數位訊號(HIGH或LOW)能將此模組當做開關使用(V+、V-有電壓輸出或無電壓輸出),或是給予此模組「SIG」腳位一個PWM信號就能控制馬達轉速(馬達接在V+、V-),但無法控制正反轉,給予的PWM值太小時馬達可能會無法順利轉動。
以下電路將負載電源(VIN、GND)直接接至擴充板電源(VCC、GND),接錯會導致Scratch與主板中斷連線,當直流馬達線路(V+、V-)對調時馬達旋轉方向相反。
接線圖: 接線影片(Youtube) 110/03/23公告材料中N20減速馬達為已焊好杜邦線,影片中焊接部分可跳過。
程式碼:
執行結果:
4-10 範例8:雙直流馬達轉速及正反轉控制(L9110S馬達模組)
說明:
要驅動直流馬達並能控制轉速,除了需要依轉速給予不同的電壓外也需要足夠的電流才能推動馬達運轉(N20直流馬達最大負載電流210mA),這時就無法採用「繼電器模組」,因為「繼電器模組」只能當「開關」,無法快速切換腳位的輸出電位,達到模擬類比輸出來控制馬達轉速,因此需透過「L9110S馬達模組」來驅動直流馬達,給予此模組二個PWM信號+二個數位信號,可分別控制兩顆直流馬達轉速及正反轉。
「L9110S馬達模組」除了可以選擇推動二組直流馬達外,也能選擇用來推動一組四線二相的步進馬達。
將「L9110S馬達模組」的接腳依以下表格接線至擴展板和馬達(如接線圖):
擴充板的數位腳位PWM設定值為「0 ~ 255」,對應腳位電壓輸出為「0 ~ 5V」,馬達轉速為兩腳之電壓差(A-1A和A-1B;B-1A和B-1B),方向則看哪支接腳電位高(馬達兩腳位接線對調,則轉向會相反),如果馬達不需反轉,則馬達其中一端可直接接擴展板GND,馬達另一端則接擴展板PWM腳位,即可使用PWM腳位控制馬達轉速。
※只有「D3、D5、D6、D9、D10、D11」的數位腳位才能設為PWM(脈衝寬度調變)輸出腳
接線圖:
程式碼: