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

Колесо вкладки аналогового триммирования FlightGear

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

Arduino Nano R3
или совместимая плата
× 1
Поворотный потенциометр (общий)
× 1
Конденсатор 100 мкФ
× 1
Adafruit SSD1306 0,96 дюйма OLED
× 1
Перемычки (общие)
× 1

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

IDE Arduino
Anaconda
FlightGear

Об этом проекте

В подключении Arduino к FlightGear нет ничего нового, но я обнаружил, что вики-сайты устарели, а форумы дают ценные советы, где вам нужно работать.

Идея заключалась в том, чтобы иметь красивую, дешевую и компактную аналоговую команду для управления колесом триммера руля высоты самолета в FlightGear. Вики работает до коммуникационной части. Строго говоря, вы не можете напрямую использовать последовательную связь для передачи команд от Arduino к FlightGear. Чтобы отправлять пакеты через UDP, необходимо найти обходной путь с Python.

Что такое триммер? Это аналоговое устройство для управления отклонением триммера, который представляет собой аэродинамическое устройство, позволяющее удерживать управляющую поверхность (в данном случае лифт, регулирующий тангаж самолета) в заданном положении без каких-либо усилий со стороны пилота. Из википедии:

Дополнительные требования для этого проекта:Python с библиотеками serial , сокет и sys установлен. Предполагая, что Anaconda установлена, недостающие библиотеки можно получить с помощью приглашения Anaconda, набрав:

>>> conda install -c anaconda pyserial

то же самое с серийным и socket . Поищите в Интернете подходящий пакет, обычно лучше всего подходят самые загружаемые для вашей платформы. После того, как у вас будет Python с этими библиотеками (и, конечно же, установлен FlightGear), вы можете перейти к следующему разделу.

Существует три сценария кода:эскиз Arduino, исполняемый сценарий Python и сценарий XML. Эскиз Arduino должен быть загружен на вашу плату. Для обеспечения связи между Arduino и FlightGear необходимо выполнить сценарий python. Сценарий XML - это общий протокол FlightGear, который необходимо переместить в / data / protocol раз и навсегда.

Для скетча Arduino требуется U8glib библиотека. Как упоминалось в комментарии, отрегулируйте линию эскиза 2 с вашим дисплеем:

  #include  U8GLIB_SSD1306_128X64 u8g (U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); // I2C / TWI  

См. U8glib примеры и документация. Скетч должен работать даже без дисплея, поэтому вы можете играть без визуальной обратной связи с доски.

Если вас не устраивает направление вращения, просто измените положение двух последних аргументов в следующей карте инструкции

  w =map (p, 0,1023,100, -100); m =map (p, 0,1023,90,0);  

чтобы значения потенциометра изменялись от -100 до 100, а датчик стрелки - от 0 до 90 (это трюк, позволяющий вывести иглу в правильное положение, попробуйте сами, если вам интересно).

Сценарий python включает адрес хоста и номер последовательного порта. Хост должен быть "localhost" . (если не работает, попробуйте 127.0.0.1 ), порт любой (может быть, он лучше не используется другими приложениями, я не знаю), последовательный порт, к которому подключена ваша плата, может быть прочитан из Arduino IDE. В моем случае это «COM4» . Примечание:если вы тестируете Arduino с помощью монитора последовательного порта, вам, возможно, придется отключить и повторно подключить плату перед выполнением скрипта python, чтобы заставить его работать правильно.

  host ="localhost" port =21567 # buf =1024addr =(host, port) UDPSock =socket (AF_INET, SOCK_DGRAM) tty ="COM4" print ("tty is", tty)  

Скрипт python может располагаться где угодно. Вы можете выполнить его из командной строки вашей операционной системы. В моем случае (Windows) я набираю в командной строке:

python c:\ путь \ к \ файлу \ arduinoElevatorTrim.py

Это может быть запущено до или даже после запуска FlightGear.

Наконец, как указывалось ранее, сценарий XML должен быть перемещен один раз и навсегда в папку протокола вашей установки FlightGear. Теперь вы готовы к работе. Запустите FlightGear в предпочитаемом режиме (командная строка или программа запуска), добавив следующую команду (без пробелов между символами!) :

--generic =socket, in, 30, localhost, 21567, udp, arduinoElevatorTrim

где мы говорим FlightGear применить общий протокол через сокет, читать ввод 30 раз в секунду, по адресу localhost, порт 21567, протокол UDP, инструкции в файле arduinoElevatorTrim.xml. Наслаждайтесь вашим личным обрезным колесом!

Код

  • arduinoElevatorTrimOLED.ino
  • arduinoElevatorTrim.py
  • arduinoElevatorTrim.xml
arduinoElevatorTrimOLED.ino Arduino
Код для загрузки на Arduino Nano. При необходимости отрегулируйте строку 2 (тип отображения).
 #include  U8GLIB_SSD1306_128X64 u8g (U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); // I2C / TWI int xmax =128; int ymax =64; int xcenter =xmax / 2; int ycenter =ymax / 2 + 10; int arc =ymax / 2; int angle =0; char * label ="ОБРЕЗАТЬ"; int labelXpos =53; int p, w, m; u8g_uint_t xx =0; int const potPin =A6; float potVal; // Настраиваемая функцияvoid gauge (uint8_t angle) {// рисуем границу шкалы u8g.drawCircle (xcenter, ycenter, arc + 6, U8G_DRAW_UPPER_RIGHT); u8g.drawCircle (xcenter, ycenter, arc + 4, U8G_DRAW_UPPER_RIGHT); u8g.drawCircle (xcenter, ycenter, arc + 6, U8G_DRAW_UPPER_LEFT); u8g.drawCircle (xcenter, ycenter, arc + 4, U8G_DRAW_UPPER_LEFT); // рисуем иглу float x1 =sin (2 * angle * 2 * 3.14 / 360); float y1 =cos (2 * угол * 2 * 3,14 / 360); u8g.drawLine (xcenter, ycenter, xcenter + arc * x1, ycenter-arc * y1); u8g.drawDisc (xcenter, ycenter, 5, U8G_DRAW_UPPER_LEFT); u8g.drawDisc (xcenter, ycenter, 5, U8G_DRAW_UPPER_RIGHT); u8g.setFont (u8g_font_chikita); // отображение меток шкалы // u8g.drawStr (10, 42, "-1.0"); // u8g.drawStr (19, 14, "-0.5"); // u8g.drawStr (63, 14, "0"); // u8g.drawStr (92, 14, "0.5"); // u8g. drawStr (105, 42, "1.0"); u8g.drawStr (1, 42, «ВНИЗ»); u8g.drawStr (52, 17, «НЕЙТ»); u8g.drawStr (105, 42, «ВВЕРХ»); // показать метку шкалы u8g.setPrintPos (labelXpos, 32); u8g.print (этикетка); // показать цифровое значение и выровнять его положение u8g.setFont (u8g_font_profont22); если (ш> =99) {u8g.setPrintPos (47,60); } если (ш> =10 &&ш <99) {u8g.setPrintPos (54,60); } если (ш> =0 &&ш <9) {u8g.setPrintPos (60,60); } если (ш> =-9 &&ш <0) {u8g.setPrintPos (48,60); } если (ш> =-99 &&ш <-9) {u8g.setPrintPos (42,60); } если (ш <-99) {u8g.setPrintPos (35,60); } u8g.print (w);} установка void () {Serial.begin (9600); u8g.setFont (u8g_font_chikita); u8g.setColorIndex (1); // назначаем значение цвета по умолчанию if (u8g.getMode () ==U8G_MODE_R3G3B2) {u8g.setColorIndex (255); } иначе, если (u8g.getMode () ==U8G_MODE_GRAY2BIT) {u8g.setColorIndex (3); } иначе, если (u8g.getMode () ==U8G_MODE_BW) {u8g.setColorIndex (1); } иначе, если (u8g.getMode () ==U8G_MODE_HICOLOR) {u8g.setHiColorByRGB (255,255,255); }} пустая петля () {potVal =analogRead (potPin); potVal =(potVal - 512.0) /512.0; Серийный принт (potVal); Serial.print ("\ n"); // p - то же самое, что potVal, но целое число p =analogRead (potPin); w =карта (p, 0,1023,100, -100); m =карта (p, 0,1023,90,0); // показать стрелку и набрать xx =m; если (хх <45) {хх =хх + 135; } else {xx =xx - 45; } // цикл изображения {u8g.firstPage (); делать {калибр (хх); } while (u8g.nextPage ()); } delay (10);} 
arduinoElevatorTrim.py Python
Скрипт, который будет выполняться вместе с FlightGear для «перевода» последовательной связи в пакеты UDP. Для выполнения этого скрипта вам потребуется установленный Python. При необходимости измените строку 14 (порт USB, к которому подключен Arduino).
 #! / Usr / bin / pythonimport sysimport serialfrom socket import * host ="localhost" port =21567 # buf =1024addr =(host, port) UDPSock =socket (AF_INET, SOCK_DGRAM) tty ="COM4" print ("tty is", tty) попробуйте:ser =serial.Serial (tty, 9600) за исключением:print ("Ошибка подключения к", tty) prevline ="" в то время как 1:outline ='' line =ser.readline () if line! =Prevline:# какое-то значение изменено print (line) outline =line UDPSock.sendto (outline, addr) prevline =line 
arduinoElevatorTrim.xml XML
Скрипт будет добавлен в папку / data / Protocol. Сделайте это один раз и навсегда.
      \ n  ,    Триммер лифта   / controls / flight / elevator-trim   float      
Github
Онлайн-репозиторий на Github https://github.com/dciliberti/arduinoElevatorTrimOLED

Схема

Во Fritzing нельзя проводить провода под компонентами. Провод заземления дисплея может проходить под Arduino Nano.

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

  1. Цифровые игральные кости Arduino
  2. Железный человек
  3. Светодиодные часы POV в аналоговом стиле
  4. Найди меня
  5. Роботизированная рука, напечатанная на 3D-принтере Arduino
  6. Управление увлажнителем Arduino
  7. NeoMatrix Arduino Pong
  8. Джойстик Arduino
  9. FM-радиоприемник Arduino TEA5767
  10. Шагомер (Arduino 101)