Zoeken…


Besturing van een servomotor

In dit voorbeeld wordt ervan uitgegaan dat u een servo hebt met de volgende kenmerken, die toevallig typisch zijn:

  • beweging tussen 0 en 180 graden
  • pulsperiode van 20 ms
  • minimale pulslengte van 0,5 ms
  • maximale pulslengte van 2,5 ms

U moet controleren of die waarden overeenkomen met uw hardware, omdat het dwingen van het buiten het gespecificeerde werkbereik kan de servo beschadigen. Een beschadigde servo kan op zijn beurt uw Android Things-apparaat beschadigen. De voorbeeldklasse ServoController bestaat uit twee methoden, setup() en 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();
        }
    }
}

U kunt als volgt pinnamen ontdekken die PWM op uw apparaat ondersteunen:

PeripheralManagerService service = new PeripheralManagerService();

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

Om uw servo voor altijd tussen 80 graden en 100 graden te laten slingeren, kunt u eenvoudig de volgende code gebruiken:

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

U kunt alle bovenstaande code compileren en implementeren zonder daadwerkelijk servomotoren op het computerapparaat aan te sluiten. Voor het schakelen Raadpleeg de computerinrichting pinout diagram (bv Framboos Pi 3 pinout schema beschikbaar hier ).

Dan moet je je servo aansluiten op Vcc, Gnd en signaleren.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow