Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Управление Arduino-роботом через Firmata и геймпад Xbox One

Компоненты и материалы

Геймпад Xbox One + беспроводной адаптер для Windows1 шт.
Bluetooth-модуль (HC-05/HC-06 или BlueSMiRF Silver)1 шт.
Arduino UNO1 шт.

Приложения и сервисы

О проекте

Куплен дешёвый набор робота-платформы (шасси, 2 мотора-редуктора, Arduino Uno, драйвер L298N, шилд). Изначально для автономной работы, но задача — ручное управление с геймпада Xbox One через Firmata.

Сборка механики

Инструкция на китайском, но интуитивно понятна. Два держателя батареек: один для Arduino, второй (9В) для моторов через L298N. Общий GND обязателен.

Подключение моторов к L298N

Направление: IN1/IN2 (или IN3/IN4) — LOW/LOW = стоп, HIGH/LOW = вперёд, LOW/HIGH = назад. Скорость — PWM на ENA/ENB (0–255).

Bluetooth

HC-06: RX↔TX (перекрёстно), 5В, GND от Arduino.

Firmata на Arduino

Загружаем стандартный пример StandardFirmata (из Arduino IDE). Baud rate понижен до 9600 для стабильности HC-06.

Тест через Windows Remote Arduino Experience

  1. Сопрячьте HC-06 с Windows.
  2. В приложении выберите COM-порт Bluetooth.
  3. PWM: включите пин 5, значение 128.
  4. Digital: переключите пин 6 на HIGH — мотор завращается.
  5. Меняйте направление (пин 6 LOW, пин 7 HIGH) и скорость.

UWP-приложение — связующее звено

Приложение на C# (XAML) подключается к Arduino через Firmata по Bluetooth, опрашивает геймпад Xbox One и преобразует стики в команды моторам.

Логика танкового управления: левый стик — левый мотор, правый — правый. Вверх = вперёд, вниз = назад. Мёртвая зона 0.15. Макс. PWM ограничен 75% (192).

Ключевые моменты кода:

Код

XAML (MainPage.xaml)

<StackPanel Orientation="Vertical">
  <Button Name="btnStart" Click="btnStart_Click" FontSize="50" Width="400" Content="Start" />
  <Button Name="btnController" Content="Controller" FontSize="50" Width="400" IsEnabled="False" Click="btnController_Click" />
  <TextBlock Name="tbRead" FontSize="20" Foreground="Gray" />
</StackPanel>

C# (MainPage.xaml.cs) — основные фрагменты

private BluetoothSerial _bluetooth;
private RemoteDevice _arduino;
private UwpFirmata _firmata;
private Gamepad _gamepad;
private double _speedLimit = 0.75, _actionPoint = 0.15;
// Пины: Left PWM=5, Dir=6/7; Right PWM=10, Dir=9/8
// ... инициализация Bluetooth, Firmata, события геймпада ...

private async void btnController_Click(...) {
  DisableEnableButtons(false);
  while (true) {
    await Task.Delay(3);
    if (_gamepad == null) continue;
    var reading = _gamepad.GetCurrentReading();
    // Левый мотор
    if (Math.Abs(reading.LeftThumbstickY) < _actionPoint) { StopLeft(); }
    else if (reading.LeftThumbstickY >= _actionPoint) { ForwardLeft(reading.LeftThumbstickY); }
    else { BackwardLeft(-reading.LeftThumbstickY); }
    // Правый мотор — аналогично
  }
}
private void ArduinoDigitalWrite(byte port, PinState state) { /* ignore duplicates */ }
private void ArduinoAnalogWrite(byte port, ushort value) { /* ignore duplicates */ }

Схемы

Схема подключения L298N, Arduino, Bluetooth и батареек (см. фото в статье).

Производственный процесс

  1. Надежная система учета рабочего времени на Arduino с RFID и Python
  2. Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
  3. Умный вольтметр на Arduino и смартфоне — простое DIY-проект
  4. Удаленное IoT-управление самодельной манипулятором
  5. Точное измерение частоты и коэффициента заполнения на Arduino UNO
  6. Измерение расстояния в реальном времени: Ардуино-сонар с визуализацией в Processing
  7. Бесшовное управление яркостью светодиодов с помощью Bolt IoT и Arduino UNO
  8. Умная робо-рука на Arduino: простое DIY-руководство
  9. Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
  10. Сборка компактного FM-радио на Arduino Nano и RDA5807M