Suche…


Steuern eines Servomotors

In diesem Beispiel wird davon ausgegangen, dass Sie ein Servo mit den folgenden typischen Eigenschaften haben:

  • Bewegung zwischen 0 und 180 Grad
  • Impulsdauer von 20 ms
  • Mindestimpulslänge von 0,5 ms
  • maximale Impulslänge von 2,5 ms

Sie müssen überprüfen, ob diese Werte mit Ihrer Hardware übereinstimmen, da das Servo dadurch beschädigt werden kann, wenn es dazu gezwungen wird, den angegebenen Betriebsbereich zu verlassen. Ein beschädigtes Servo kann wiederum Ihr Android Things-Gerät beschädigen. Die Beispiel- ServoController Klasse besteht aus zwei Methoden, setup() und 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();
        }
    }
}

Sie können Pin-Namen, die PWM auf Ihrem Gerät unterstützen, wie folgt ermitteln:

PeripheralManagerService service = new PeripheralManagerService();

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

Damit Ihr Servo für immer zwischen 80 Grad und 100 Grad schwingt, können Sie einfach den folgenden Code verwenden:

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();

Sie können den gesamten obigen Code kompilieren und implementieren, ohne Servomotoren tatsächlich an das Computergerät anzuschließen. Informationen zur Verdrahtung finden Sie in der Pinbelegungstabelle Ihres Computers (z. B. eine Pinbelegungstabelle des Raspberry Pi 3 ist hier verfügbar).

Dann müssen Sie Ihr Servo an Vcc, Gnd und Signal anschließen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow