Sök…


Styrning av en servomotor

Detta exempel antar att du har en servo med följande egenskaper, som råkar vara typiska:

  • rörelse mellan 0 och 180 grader
  • pulsperiod på 20 ms
  • minsta pulslängd på 0,5 ms
  • maximal pulslängd på 2,5 ms

Du måste kontrollera om dessa värden matchar din hårdvara, eftersom att tvinga den att gå utanför det angivna driftsområdet kan skada servo. En skadad servo i sin tur kan skada din Android Things-enhet. Exemplet ServoController klassen består av två metoder, setup() och 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();
        }
    }
}

Du kan upptäcka pin-namn som stöder PWM på din enhet enligt följande:

PeripheralManagerService service = new PeripheralManagerService();

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

För att få din servo att svinga för alltid mellan 80 grader och 100 grader kan du helt enkelt använda följande kod:

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

Du kan kompilera och distribuera alla ovanstående koder utan att verkligen ansluta servomotorer till datorenheten. För kabeldragning, se din datorutrustningskort (t.ex. ett Raspberry Pi 3 pinout-diagram är tillgängligt här ).

Sedan måste du ansluta din servo till Vcc, Gnd och signalera.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow