Android
Rzeczy na Androida
Szukaj…
Sterowanie silnikiem serwo
W tym przykładzie założono, że masz serwo o następujących właściwościach, które są typowe:
- ruch między 0 a 180 stopni
- okres impulsu 20 ms
- minimalna długość impulsu 0,5 ms
- maksymalna długość impulsu 2,5 ms
Musisz sprawdzić, czy te wartości pasują do twojego sprzętu, ponieważ zmuszenie go do wyjścia poza określony zakres działania może uszkodzić serwomechanizm. Z kolei uszkodzone serwo może uszkodzić urządzenie z Androidem Things. Przykładowa klasa ServoController
składa się z dwóch metod, setup()
i 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();
}
}
}
Możesz odkryć nazwy pinów obsługujące PWM w urządzeniu w następujący sposób:
PeripheralManagerService service = new PeripheralManagerService();
for (String pinName : service.getPwmList() ) {
Log.i("ServoControlled","Pwm pin found: " + pinName);
}
Aby Twoje serwomechanizm kołysał się na zawsze między 80 a 100 stopni, możesz po prostu użyć następującego kodu:
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();
Możesz skompilować i wdrożyć cały powyższy kod bez podłączania żadnych serwomotorów do urządzenia komputerowego. Informacje na temat okablowania znajdują się w tabeli pinoutów urządzenia komputerowego (np. Tabela pinoutów Raspberry Pi 3 jest dostępna tutaj ).
Następnie musisz podłączyć serwomechanizm do Vcc, Gnd i sygnału.