mBlock & Arduino(9)舵機(Servo motor)控制

舵機(Servo motor)英文常簡稱 Servo,中文也有人稱伺服機,由控制電路、齒輪、直流馬達等組成,可使用〈mBlock & Arduino(4)利用 PWM 模擬類比訊號〉中談過的 PWM 技術來控制舵機轉動角度,像Plotclock就應用了三個舵機,以手臂在白板上繪製出目前的時間。

舵機控制原理

舵機的基本原理是接受 PWM 訊號,經由內部電路計算出轉動角度,根據我查到的資料來看,大多數舵機旋轉角度是 0 到 180 度,PWM 訊號的頻率必須是 50 Hz,控制舵機角度的脈衝持續時間約是 1.0 ms 到 2.0 ms,脈衝持續時間若為 1.0 ms 時角度為 0 度,1.2 ms 時角度為 45 度,1.5 ms 時角度為 90 度,2.0 ms 時角度為 180 度。

Plotclock 用的是Tower Pro 9g servos(SG90 digital servo),為三線式舵機,紅線接電源,棕色的線接 GND,橘色線為信號線:

在 Fritzing 中,是以紅色線接電源,黑色線接地,黃色為信號線作代表,你可以如下連接線路:

如果直接使用 Arduino 官方語言,可以使用delayMicroseconds函式來控制脈衝寬度,不過 mBlock 中只有「等待」方塊,沒辦法達到這麼短的時間控制,然而,mBlock 中有個「設置舵機腳位…」的方塊,可以直接指定舵機轉動角度,例如,以下的程式,可以一秒為間隔,不斷轉動舵機為 0、45、90、135 與 180 度:

雖然使用了 PWM 信號來控制舵機轉動,不過,這不表示要使用 Arduino 的 PWM 腳位,只不過根據Servo library的說明,除了 Arduino Mega 之外,如果使用了 Arduino 的 Servo 程式庫,D9 與 D10 腳位的 PWM 功能就會被停用,因此,通常會把舵機的信號線接在 D9 或 D10 腳位,實際測試 mBlock 的「設置舵機腳位…」方塊時,也是如此。

有指針的亮度感應器

在〈mBlock & Arduino(8)光敏電阻、亮度感應器與光線追蹤器〉中,我們使用光敏電阻製作了簡單的亮度感應器,你可以加上舵機,配合 SG90 的手臂,作個有指針的亮度感應器,你可以如下拉設電路:

實際測試我手中的光敏電阻,完全蓋住它的話,類比輸入腳位約可量得 400 左右的值,以手電筒直接照射下,約為 1000 出頭的值,因此暫且定義全暗為 400,全亮為 1000,這個範圍要轉動舵機 0 到 180 度,因此,每個類比輸入量得的值減去 400,再乘上 0.3,就是打算轉動的角度:

因為我們讀取指針的習慣,多半是順時針方向是越來越大,這正好與舵機的角度計算方向相反,所以使用 180 減去算出來的角度,就可以改為順時針指示亮度大小。

感謝CodeData用戶:caterpillar的貢獻 著作權歸作者所有

caterpillar:目前為自由工作者,喜好研究程式語言、框架、社群,從中學習設計、典範及文化。閑暇之餘 記錄所學,技術文件涵蓋 C/C++, Java, Ruby/Rails, Python, JavaScript, Haskell 等多個領域,出版電子書 Java SE 6 技術手冊、Java Lambda Tutorial、Java Tutorial、Python Tutorial、Essential JavaScript、Haskell Tutorial。

整理:寧波家電物聯網雲平台,中科極動雲

Contact Us:極動雲-寧波物聯網家電雲平台


推薦閱讀:

最優秀的開源智能家居平台-homeassistant介紹
物聯網發展:國內物聯網產業規模逼近萬億元
NB-IoT+eMTC+GSM聯網新方式 物聯網爆發真的要到了
恩智浦推出快速物聯網原型套件,助力打造物聯網概念驗證設計
看天吃飯一去不返 看物聯網技術在農業領域的應用

TAG:Arduino | 單片機 | 物聯網 |