Android
Choses Android
Recherche…
Contrôle d'un servomoteur
Cet exemple suppose que vous avez un servo avec les caractéristiques suivantes, qui sont typiques:
- mouvement entre 0 et 180 degrés
- période d'impulsion de 20 ms
- longueur d'impulsion minimale de 0,5 ms
- longueur d'impulsion maximale de 2,5 ms
Vous devez vérifier si ces valeurs correspondent à votre matériel, car le forcer à sortir de sa plage de fonctionnement spécifiée peut endommager le servo. Un servo endommagé peut à son tour endommager votre appareil Android. L'exemple de classe ServoController
comprend deux méthodes, setup()
et 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();
}
}
}
Vous pouvez découvrir les noms de pin qui prennent en charge PWM sur votre appareil comme suit:
PeripheralManagerService service = new PeripheralManagerService();
for (String pinName : service.getPwmList() ) {
Log.i("ServoControlled","Pwm pin found: " + pinName);
}
Afin de rendre votre servo oscillant entre 80 et 100 degrés, vous pouvez simplement utiliser le code suivant:
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();
Vous pouvez compiler et déployer tout le code ci-dessus sans pour autant associer des servomoteurs au périphérique informatique. Pour le câblage, reportez-vous au tableau de brochage de votre ordinateur (par exemple, un tableau de brochage Raspberry Pi 3 est disponible ici ).
Ensuite, vous devez connecter votre servo à Vcc, Gnd et signal.