網頁

透過雲端開發平台Blynk的Slider工具控制PWM輸出




在Blynk APP中,Slider工具可以想像成是一個可變電阻,它就像是直線電位計一樣,可以透過移動滑桿來改變輸出的數值,在數位輸出的時候,0~1023相當於將輸出的腳位電壓從0~3.3V之間進行變化,透過這個功能我們就能控制馬達、LED燈等等的線性輸出變化。



在NodeMCU中每一支的輸出腳位(D0~D10)都有著PWM的功能可以使用,如果選擇D0腳在滑動拉桿,很明顯地會看到板子上的LED燈,會隨著拉桿的位置不同而做亮度的變化。



你可以透過電表量測該IO腳的電壓變化,能夠發現隨著拉桿的位置不同電壓會從0~3.3V變化



因此我們能搭配電晶體對馬達進行PWM控制,也可以對LED進行亮度控制。在這裡我使用MOS FET場效應驅動模組,將NodeMCU上的訊號腳及GND接上該模組,藉此就能夠透過PWM進行馬達轉速的控制。



而在Slider工具的選項中,有一個開關叫SEND VALUES ON RELEASE ONLY,這個開關在官方的說明中的原文介紹如下(Send On Release is available for most controller widgets and allows you to decrease data traffic on your hardware. For example, when you move slider widget, commands are continuously streamed to the hardware, during a single slider move you can send dozens of commands. There are use-cases where it's needed, however creating such a load may cause hardware reset. We recommend enabling Send On Release feature for most of the cases, unless you really need instant feedback. This option is enabled by default.)

 

它的意思大概是這樣的,如果打開這個開關後,每當移動拉桿有數值變化時,APP就會將數值傳送到控制板上,這個設定會使控制板上的輸出隨著拉桿變化同步改變,但是頻繁的發送數值會有造成開發版重置的問題產生,因此建議還是開啟SEND VALUES ON RELEASE ONLY這個功能(預設就是開啟的),讓數值在放開拉桿後才送出,等於Blynk APP只會送出最後放開拉桿時的數值,這樣能降低硬件的負擔,避免斷線、重置的問題產生。


以上的設定都了解之後,還有一個不太明顯的功能要注意,那就是OUTPUT中間的波浪符號,這個開關叫做Data Mapping。在Digital的OUTPUT中我們只需要使用預設的0~1023即可使電壓在0~3.3V之間變化,但有時候我們要對硬體內的函數、方程式進行數值的輸入,這時候我們就要用到Blynk特有的Virtual Pins腳位,這個腳位能使APP內的工具發送的資料傳送到硬體內(當然也可以讓硬體內的數值送到APP中),但是在學習的過程中該如何知道它發送了甚麼到硬體內,那就要使用硬體的序列視窗來觀察。

在這裡我們要使用硬體的序列視窗,搭配上Virtual Pins來觀察Blynk APP內所發送出的資料,並觀察Data Mapping的用途及功能。



首先可以參考這篇官方的教學影片,教你如何使用Virtual Pins這個功能。在拉桿的觀察相當的簡單,我們只要將預設的程式檔案→範例→Blynk→Boards WiFi→NodeMCU,再加入一段讀取Virtual Pins的程式碼即可。

舉例來說我要使用V1虛擬引腳進行APP與開發版的溝通,並傳送拉桿的數值到硬體的序列視窗中,這時我只要在程式中加入下列程式碼,就可以在V1發送數值時顯示在序列視窗上。

BLYNK_WRITE(V1)
{
Serial.println(param.asInt());
}



接著運行Blynk APP以及開發版的序列埠監控視窗,可以發現當Data Mapping功能沒有開啟的時候,數值會按照你所設定的間隔進行輸出,例如我將預設的0~1023更改成0~100,那麼輸出在序列的數值就會在0~100之間。





但是當開啟Data Mapping功能之後,輸出的數值會自動將0~100換算成0~1023進行輸出,有些場合使用0~100在感覺上比較符合輸出的樣子(百分比),這時就可以選擇開啟Data Mapping,但要記得開啟後發送到開發版的數值是0~1023之間,在程式端撰寫時要特別的注意。



而如果我要控制伺服馬達在0~90度之間旋轉,那麼我可以關閉Data Mapping,並將輸出間隔選擇為0~90,那麼虛擬引腳Virtual Pins就會照實的輸入0~90之間的數值到開發版內,再透過Arduino的函示庫就可以進行控制了。

透過這個序列顯示的方式,我們可以很清楚的知道虛擬引腳Virtual Pins實際發送到硬體內的數值,在練習以及調教程式的時候會更加的有幫助。

最後在Widget Box中的Vertical Slider這個工具使用上跟Slider是完全一樣的,只是介面上橫的跟直的差別,所以就視情況進行使用了。