控制伺服電機

這個例子假設你有一個具有以下特徵的伺服,這恰好是典型的:

  • 在 0 到 180 度之間移動
  • 脈衝週期為 20 毫秒
  • 最小脈衝長度為 0.5 ms
  • 最大脈衝長度為 2.5 ms

你需要檢查這些值是否與你的硬體匹配,因為強制它超出其指定的工作範圍會損壞伺服。損壞的伺服器有可能損壞你的 Android Things 裝置。示例 ServoController 類包含兩個方法,setup()setPosition()

public class ServoController {
    private double periodMs, maxTimeMs, minTimeMs;
    private Pwm pin;

    public void setup(String pinName) throws IOException {
        periodMs  = 20;
        maxTimeMs = 2.5;
        minTimeMs = 0.5;

        PeripheralManagerService service = new PeripheralManagerService();
        pin = service.openPwm(pinName);

        pin.setPwmFrequencyHz(1000.0d / periodMs);
        setPosition(90);
        pin.setEnabled(true);
    }

    public void setPosition(double degrees) {
        double pulseLengthMs = (degrees / 180.0 * (maxTimeMs - minTimeMs)) + minTimeMs;

        if (pulseLengthMs < minTimeMs) {
            pulseLengthMs = minTimeMs;
        } else if (pulseLengthMs > maxTimeMs) {
            pulseLengthMs = maxTimeMs;
        }

        double dutyCycle = pulseLengthMs / periodMs * 100.0;

        Log.i(TAG, "Duty cycle = " + dutyCycle + " pulse length = " + pulseLengthMs);

        try {
            pin.setPwmDutyCycle(dutyCycle);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

你可以在裝置上發現支援 PWM 的引腳名稱,如下所示:

PeripheralManagerService service = new PeripheralManagerService();

for (String pinName : service.getPwmList() ) {
    Log.i("ServoControlled","Pwm pin found: " + pinName);
}

為了使伺服在 80 度和 100 度之間永久擺動,你只需使用以下程式碼:

final ServoController servoController = new ServoController(pinName);

Thread th = new Thread(new Runnable() {
    @Override
    public void run() {
        while (true) {
            try {
                servoController.setPosition(80);
                Thread.sleep(500);
                servoController.setPosition(100);
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
});
th.start();

你可以編譯和部署上述所有程式碼,而無需將任何伺服電機連線到計算裝置。有關接線,請參閱你的計算裝置引腳分佈圖(例如,此處提供了 Raspberry Pi 3 引腳分佈圖 )。

然後你需要將伺服器連線到 Vcc,Gnd 和訊號。