Buscar..


Controlando un Servo Motor

Este ejemplo asume que tiene un servo con las siguientes características, que son típicas:

  • Movimiento entre 0 y 180 grados.
  • periodo de pulso de 20 ms
  • Longitud mínima de pulso de 0.5 ms
  • Longitud máxima de pulso de 2,5 ms.

Debe comprobar si esos valores coinciden con su hardware, ya que forzarlo a salir de su rango operativo especificado puede dañar el servo. Un servo dañado a su vez tiene el potencial de dañar su dispositivo Android Things. La clase de ServoController ejemplo consta de dos métodos, setup() y 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();
        }
    }
}

Puede descubrir nombres de pin que admiten PWM en su dispositivo de la siguiente manera:

PeripheralManagerService service = new PeripheralManagerService();

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

Para hacer que su servo oscile por siempre entre 80 grados y 100 grados, simplemente puede usar el siguiente código:

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

Puede compilar e implementar todo el código anterior sin en realidad conectar ningún servomotor al dispositivo informático. Para el cableado, consulte la tabla de pines de su dispositivo informático (por ejemplo, una tabla de pines de la Raspberry Pi 3 está disponible aquí ).

Entonces necesitas conectar tu servo a Vcc, Gnd y señal.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow