NodeMCU與馬達控制

伺服馬達是可以指定轉動到絕對位置的馬達,它便宜方便好用,而且對於NodeMCU等嵌入式開發板來說,只要使用PWM就可以輕易地控制它們,因此也經常被使用在專題製作上。

伺服馬達的種類

Maker們使用的伺服馬達常見的有兩種,一種是SG90,它的規格如下所示:

另一種是扭力較大,使用金屬齒輪的MG995,其規格如下所示:

基本上,伺服馬達可以轉動的角度大約都是在90度到180度之間,由於可以做到精確的角度控制,因此也常被用來做為轉動方向機構用的動力裝置,所以又被稱為舵機。

不過,在有些情況下是需要能夠360度連續轉動的,因此也有可以支援360度轉動的伺服馬達,如下所示:

驅動伺服馬達

典型的馬達是直流馬達,像是下面這種:

此種馬達只要通電之後就會開始轉動,在可以接受的電壓範圍內,電壓愈高則轉速愈快,直流馬達是有極性的,但是如果把電源反過來接並不會故障,而是改變其轉動的方向。

但是伺服馬達不一樣,拆開它的內部其實可以發現有一個電路板以及簡單的機構在控制馬達轉動的角度,而此角度則是由波形的實際有效比例來決定。在NodeMCU等開發板中,就是以PWM的方式來輸出,控制其Duty的比例即可控制實際轉動的角度。

NodeMCU連接伺服馬達

伺服馬達需要比較大的電力,一般來說有可能會需要額外的電源。在我們練習的NodeMCU擴充板上有USB的5V電源足以驅動SG-90,因此我們就先使用SG-90來做練習。伺服馬達一般都會有3條連接線,其中一條是5V,一條是GND接地線,而另外一條則是信號線。以SG-90為例,中間紅色線是5V,棕色線是接地,分別把它們連接到擴充板的USB和GND。另外,黃色線則是信號線,可以選擇NodeMCU上的數位輸出入連接埠,不過,因為伺服馬達是使用PWM的方式控制的,因此該GPIO輸出入埠必需要能夠支援PWM才行。

NodeMCU支援PWM輸出功能的連接線共有: 0, 2, 4, 5, 12, 13, 14, 15,請任選其中之一連接即可,在這個例子中我們把它接到GPIO4(也就是D2)上。連接完畢之後,請執行以下程式:

from machine import PWM, Pin
import time
servo = PWM(Pin(4), freq=50)
for i in range(10):
servo.duty(50)
time.sleep(1)
servo.duty(100)
time.sleep(1)

此程式使用ampy上傳到NodeMCU之後,在按下REST按鈕後,伺服馬達就會以每秒1次的頻率轉動10次。範例影片如下:

一模一樣的環境以及程式,把SG-90換成MG 996R也是沒問題,影片如下:

直流馬達控制

一般的直流馬達都是只要通電,它就會轉動,而正負極交換之後,就可以改變轉動的方式,至於轉速則是由給它的電壓高低來決定。這次我們拿到的馬達模組把上述的方式簡化成兩個PIN來設定正轉或反轉。先來看看它的外觀:

它有4個輸入接腳,VCC和GND還是和其它的模組一樣,是提供電源的地方,而INA及INB則是控制正轉和反轉的信號位置。在這裡我們把INA和INB分別連接到D1和D2,如下所示:

可以用以下的程式測試一下喔: