單元九 : 伺服馬達 Servo


Servo 依據扭力和材質不同在價格上相差很大, 但不管是哪一種其控制方式都是採用 PWM 來控制角度. WF8266R 除了 16 腳無法使用 PWM 以外, 其他腳位均可以做為 Servo 控制腳.

 材料和接線


這個單元準備了以下兩個型號做為示範

  • Tower Pro SG90 x 1 (扭力 1.8kg/cm(4.8V))
  • Tower Pro MG996R x 1 (扭力 9.4kg*cm(4.8V)/ 11kg*cm(6.0V) / 13.5kg*cm (7.2V))

在 Servo 會有3個腳位, 分別是

  • 橘色線 : DATA 腳, 接在 WF8266R PWM 腳位
  • 紅色線 : VCC 腳, 接外部電源, 這裡接在 WF8266R 的 VCC 腳位
  • 棕色線 : GND 腳, 接在 WF8266R GND 腳位

如果要接多顆 Servo 時, VCC 和 GND 可藉由麵包板將 WF8266R 的 VCC 和 GND 引出共用. 這個案例中, 我們將 SG90 的 DATA 腳接在 WF8266R 的 GPIO13, 而另一顆是接在 GPIO12

 程式


引用完 WF8266R.js 後便可透過 GPIO.servo 操作 Servo 的角度, 一開始在 wf8266r-ready 事件中, 我們使用這個 JS 物件將2顆馬達做歸零. 並且透過 <wf8266r-button></wf8266r-button>來產生UI控制項.

完整範例

這個範例中 GPIO.servo(pin ,degree ,callback) 第1個參數為腳位編號, 第2是角度, 第3則是執行後回傳的結果. 因為要做歸0的動作, 因此將 13 腳位和 12 腳位的這2顆馬達指定角度為 0.

<!doctype html>
<html>
<head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
    <title>WF8266R Servo</title>

    <!-- Imports WF8266R -->
    <script src="http://wf8266.com/wf8266r/webcomponent/jquery-2.1.4.min.js"></script>
    <script src="http://wf8266.com/wf8266r/webcomponent/wf8266r/wf8266r.js"></script>
    <link href="http://wf8266.com/wf8266r/webcomponent/wf8266r/wf8266r.css" rel="stylesheet" />

    <script>
        document.addEventListener('wf8266r-ready', function (e) {
             //歸 0
            GPIO.servo(13,0,function(data){
                console.log(data.degree);
            });
            GPIO.servo(12,0,function(data){
                console.log(data.degree);
            });
        });
        $(function () {
            //載入 WF8266R 元件
            GPIO.init();
           
        });
    </script>

</head>
<body>
    <unu-wf8266r ip="mywfXXXX.local" uuid="xxxx" device="xxxx"></unu-wf8266r>
    <wf8266r-button id="servo0" type="servo" pin="13" value="0">servo 0</wf8266r-button>
    <br />
    <wf8266r-button id="servo1" type="servo" pin="12" value="0">servo 1</wf8266r-button>
</body>
</html>

透過 WF8266R.js 的 BUTTON 控制項指定 type="servo" 並給定腳位 pin 就能在 UI 上顯示控制項, 試著拉動這二個控制項, 看看是否跟著連動.

請點下圖開啟範例程式一起玩玩你的 Servo 吧.