Дистанционное управление игрушечным автомобилем с помощью Android Things GPIO. Часть 3
Этот драйвер также может управлять двигателями, которые используют ШИМ, однако в данном проекте мы не будем использовать эти функции. Используя два вывода Android Things GPIO для каждого двигателя, мы можем контролировать его направление вращения или остановить его.
Пчёлы — Комплексный подход к разработке и продвижению сайтов в Нижнем Новгороде
Давайте посмотрим, как подключить этот драйвер для платы Android Things. Приведенная ниже схема показывает, как подключить выводы GPIO к L298N и двигателей:
connect the GPIO pins
Даже если схема может показаться несколько сложной, это очень просто: в этом проекте используются четыре разных выводы Android Things GPIO:
Выводы Raspberry Pi GPIO предназначены для правого двигателя:
• BCM17
• BCM27
Левый двигатель:
• BCM23
• BCM24
Если используете другую плату, чем Raspberry Pi3, вам придется изменить названия выводов. Вы можете обратиться к официальной документации, чтобы узнать, как создать портативное приложение Android Things.
Теперь мы можем создать простой класс Java, который руководит двигателями:
public class MotorController {
PeripheralManagerService service = new PeripheralManagerService ();
private Gpio pin1Motor1;
private Gpio pin2Motor1;
private Gpio pin1Motor2;
private Gpio pin2Motor2;
public MotorController () {
try {
// Right
pin1Motor1 = service.openGpio ( «BCM17»)
pin2Motor1 = service.openGpio ( «BCM27»)
// Left
pin1Motor2 = service.openGpio ( «BCM23»)
pin2Motor2 = service.openGpio ( «BCM24»)
pin1Motor1.setDirection (Gpio.DIRECTION_OUT_INITIALLY_LOW)
pin2Motor1.setDirection (Gpio.DIRECTION_OUT_INITIALLY_LOW)
pin1Motor2.setDirection (Gpio.DIRECTION_OUT_INITIALLY_LOW)
pin2Motor2.setDirection (Gpio.DIRECTION_OUT_INITIALLY_LOW)
} Catch (IOException e) {
e.printStackTrace ();
}
}
public void forward () {
setPinValues (true, false, false, true);
}
public void backward () {
setPinValues (false, true, true, false);
}
public void stop () {
setPinValues (false, false, false, false);
}
public void turnLeft () {
setPinValues (false, false, false, true);
}
public void turnRight () {
setPinValues (true, false, false, false);
}
private void setPinValues (boolean p11, boolean p12,
boolean p21, boolean p22) {
try {
pin1Motor1.setValue (p11)
pin2Motor1.setValue (p12)
pin1Motor2.setValue (p21)
pin2Motor2.setValue (p22)
} Catch (IOException e) {
e.printStackTrace ();
}
}
}
Этот класс выполняет следующие задачи:
1. Получает ссылку на PeripheralManagerService
2. Открывает выводы GPIO
3. Устанавливает направления вращения и начальное значение
Кроме того, он определяет четыре различных способа, которые контролируют, как будет двигаться автомобиль:
• Вперед
• Назад
• Повернуть налево
• Повернуть направо
Все эти движения можно контролировать, включая или выключая каждый вывод, определенный выше. Иными словами, действуя на четыре выводы Raspberry Pi GPIO можно двигать машину во всех направлениях.
Это все. Пора реализовать управление автомобилем. Есть несколько вариантов, которые можем выбрать для этой цели. Мы можем использовать простой веб-сервер, который имеет интерфейс HTML, или можем использовать, например, Android-смежное API или даже соединение Bluetooth.
Далее мы рассмотрим использование простого веб-интерфейса.