控制伺服電機
這個例子假設你有一個具有以下特徵的伺服,這恰好是典型的:
- 在 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 和訊號。