伺服馬達(dá)(Servo motor)英文常簡(jiǎn)稱 Servo,中文也有人稱伺服機(jī),由控制電路、齒輪、直流馬達(dá)等組成,可使用〈mBlock & Arduino(4)利用 PWM 模擬類比訊號(hào)〉中談過(guò)的 PWM 技術(shù)來(lái)控制馬達(dá)轉(zhuǎn)動(dòng)角度,像Plotclock就應(yīng)用了三個(gè)伺服馬達(dá),以手臂在白板上繪制出目前的時(shí)間。
伺服馬達(dá)控制原理
伺服馬達(dá)的基本原理是接受 PWM 訊號(hào),經(jīng)由內(nèi)部電路計(jì)算出馬達(dá)的轉(zhuǎn)動(dòng)角度,根據(jù)我查到的資料來(lái)看,大多數(shù)伺服馬達(dá)旋轉(zhuǎn)角度是 0 到 180 度,PWM 訊號(hào)的頻率必須是 50 Hz,控制馬達(dá)角度的脈沖持續(xù)時(shí)間約是 1.0 ms 到 2.0 ms,脈沖持續(xù)時(shí)間若為 1.0 ms 時(shí)角度為 0 度,1.2 ms 時(shí)角度為 45 度,1.5 ms 時(shí)角度為 90 度,2.0 ms 時(shí)角度為 180 度。
Plotclock 用的是Tower Pro 9g servos(SG90 digital servo),為三線式伺服馬達(dá),紅線接電源,棕色的線接 GND,橘色線為訊號(hào)線:

在 Fritzing 中,是以紅色線接電源,黑色線接地,黃色為訊號(hào)線作代表,你可以如下連接線路:

如果直接使用 Arduino 官方語(yǔ)言,可以使用delayMicroseconds函式來(lái)控制脈沖寬度,不過(guò) mBlock 中只有“等待”方塊,沒(méi)辦法達(dá)到這么短的時(shí)間控制,然而,mBlock 中有個(gè)“設(shè)置伺服馬達(dá)腳位…”的方塊,可以直接指定馬達(dá)轉(zhuǎn)動(dòng)角度,例如,以下的程式,可以一秒為間隔,不斷轉(zhuǎn)動(dòng)馬達(dá)為 0、45、90、135 與 180 度:

雖然使用了 PWM 訊號(hào)來(lái)控制馬達(dá)轉(zhuǎn)動(dòng),不過(guò),這不表示要使用 Arduino 的 PWM 腳位,只不過(guò)根據(jù)Servo library的說(shuō)明,除了 Arduino Mega 之外,如果使用了 Arduino 的 Servo 程式庫(kù),D9 與 D10 腳位的 PWM 功能就會(huì)被停用,因此,通常會(huì)把伺服馬達(dá)的訊號(hào)線接在 D9 或 D10 腳位,實(shí)際測(cè)試 mBlock 的“設(shè)置伺服馬達(dá)腳位…”方塊時(shí),也是如此。
有指針的亮度感應(yīng)器
在〈mBlock & Arduino(8)光敏電阻、亮度感應(yīng)器與光線追蹤器〉中,我們使用光敏電阻制作了簡(jiǎn)單的亮度感應(yīng)器,你可以加上伺服馬達(dá),配合 SG90 的手臂,作個(gè)有指針的亮度感應(yīng)器,你可以如下拉設(shè)電路:

實(shí)際測(cè)試我手中的光敏電阻,完全蓋住它的話,類比輸入腳位約可量得 400 左右的值,以手電筒直接照射下,約為 1000 出頭的值,因此暫且定義全暗為 400,全亮為 1000,這個(gè)范圍要轉(zhuǎn)動(dòng)馬達(dá) 0 到 180 度,因此,每個(gè)類比輸入量得的值減去 400,再乘上 0.3,就是打算轉(zhuǎn)動(dòng)的角度:

因?yàn)槲覀冏x取指針的習(xí)慣,多半是順時(shí)針?lè)较蚴窃絹?lái)越大,這正好與伺服馬達(dá)的角度計(jì)算方向相反,所以使用 180 減去算出來(lái)的角度,就可以改為順時(shí)針指示亮度大小。
感謝CodeData用戶:caterpillar的貢獻(xiàn) 著作權(quán)歸作者所有
整理:寧波家電物聯(lián)網(wǎng)云平臺(tái),中科極動(dòng)云