Android
Androidのもの
サーチ…
サーボモータの制御
この例では、次のような特徴を持つサーボがあると想定しています。
- 0と180度の間の動き
- 20msのパルス周期
- 最小パルス長0.5ms
- 最大パルス長2.5 ms
これらの値がハードウェアと一致するかどうかを確認する必要があります。これは、指定された動作範囲外に強制的に移動すると、サーボが損傷する可能性があるからです。サーボが損傷すると、Android Thingsデバイスが損傷する可能性があります。 ServoController
クラスの例は、 setup()
とsetPosition()
の2つのメソッドで構成されていsetup()
。
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、および信号に接続する必要があります。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow