Android
Android-saker
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.