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