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

Компактное руль-триммер для FlightGear на Arduino Nano

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

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

О проекте

Идея

Создать дешёвый компактный аналоговый руль управления триммером глубины (elevator trim) для симулятора FlightGear. Arduino считывает потенциометр, отправляет данные по Serial → Python-скрипт пересылает их по UDP в FlightGear через Generic Protocol.

Архитектура

  1. Arduino-скетч (arduinoElevatorTrimOLED.ino) — опрашивает АЦп, выводит показания на OLED (шкала с иглой), шлёт float в Serial (9600 бод).
  2. Python-скрипт (arduinoElevatorTrim.py) — читает Serial, отправляет UDP-пакеты на localhost:21567.
  3. XML-протокол (arduinoElevatorTrim.xml) — кладётся в <FlightGearRoot>/data/protocol, описывает маппинг UDP → property /controls/flight/elevator-trim.

Настройка Python

>>> conda install -c anaconda pyserial
# socket и sys встроены

В скрипте укажите свой COM-порт (в примере COM4).

Запуск

  1. Прошейте Arduino (библиотека U8glib, настройте тип дисплея в строке 2).
  2. Положите arduinoElevatorTrim.xml в папку протоколов FlightGear.
  3. Запустите Python-скрипт: python путь/к/arduinoElevatorTrim.py.
  4. Запустите FlightGear с параметром:
    --generic=socket,in,30,localhost,21567,udp,arduinoElevatorTrim

Теперь поворот потенциометра плавно меняет триммер в симуляторе. На OLED отображается шкала DOWN–NEUT–UP и цифровое значение (-100…100).

Код Arduino (ключевые фрагменты)

#include 
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
const int potPin = A6;

void gauge(uint8_t angle) {
  // рисуем дугу, иглу, подписи DOWN/NEUT/UP, цифровое значение w
}

void loop() {
  int p = analogRead(potPin);
  int w = map(p, 0, 1023, 100, -100); // значение для сима
  int m = map(p, 0, 1023, 90, 0);     // угол иглы
  // вывод на OLED
  u8g.firstPage();
  do { gauge(m); } while(u8g.nextPage());
  Serial.println((p - 512.0) / 512.0); // float для Python
  delay(10);
}

Репозиторий

GitHub — полные исходники, схема в Fritzing, инструкции.

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

  1. Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
  2. Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
  3. Аналоговые POV-часы на Arduino Nano: персистенция зрения с 17 светодиодами
  4. Find Me: Умный поисковик вещей на Arduino и Bluetooth
  5. Сборка функционального 3D-печатного манипулятора на Arduino: пошаговое руководство
  6. DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
  7. NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10
  8. Своё рулевое управление (джойстик) для игр на Arduino
  9. FM-радиоприемник на Arduino и модуле TEA5767
  10. Arduino 101: Пedometer с датчиком DHT11 и LCD-дисплеем