Android Contrôle d'un servomoteur


Exemple

Cet exemple suppose que vous avez un servo avec les caractéristiques suivantes, qui sont typiques:

  • mouvement entre 0 et 180 degrés
  • période d'impulsion de 20 ms
  • longueur d'impulsion minimale de 0,5 ms
  • longueur d'impulsion maximale de 2,5 ms

Vous devez vérifier si ces valeurs correspondent à votre matériel, car le forcer à sortir de sa plage de fonctionnement spécifiée peut endommager le servo. Un servo endommagé peut à son tour endommager votre appareil Android. L'exemple de classe ServoController comprend deux méthodes, setup() et 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();
        }
    }
}

Vous pouvez découvrir les noms de pin qui prennent en charge PWM sur votre appareil comme suit:

PeripheralManagerService service = new PeripheralManagerService();

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

Afin de rendre votre servo oscillant entre 80 et 100 degrés, vous pouvez simplement utiliser le code suivant:

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

Vous pouvez compiler et déployer tout le code ci-dessus sans pour autant associer des servomoteurs au périphérique informatique. Pour le câblage, reportez-vous au tableau de brochage de votre ordinateur (par exemple, un tableau de brochage Raspberry Pi 3 est disponible ici ).

Ensuite, vous devez connecter votre servo à Vcc, Gnd et signal.