На главную страницу

Радиостек на Ардуино для X-Plane

08.04.2020: Прошивка панелей доработана с целью работы с новым плагином xpiohub. Исправлена ошибка (некорректная работа кнопки STB/ACT). Необходимые материалы в архиве (прошивка, плагин, дефолтный инишник и ардуино скетч) radio-0.3.0-08042020.zip.

История изменений

СОДЕРЖАНИЕ

ВВЕДЕНИЕ
1. СХЕМА ЭЛЕКТРИЧЕСКАЯ СОЕДИНЕНИЙ
2. ОРГАНЫ УПРАВЛЕНИЯ И ИНДИКАЦИИ
3. КОНСТРУКЦИЯ
4. СБОРКА
5. ПРОГРАММИРОВАНИЕ С ПОМОЩЬЮ ARDUINO IDE
6. АВТОНОМНОЕ ПРОГРАММИРОВАНИЕ
7. ТЕСТИРОВАНИЕ
8. ПОДКЛЮЧЕНИЕ К СИМУЛЯТОРУ
9. ДОБАВЛЕНИЕ КОНФИГУРАЦИОННЫХ ДАННЫХ

ВВЕДЕНИЕ

При конструировании данной реализации радиостека рассматривались функциональность соответствующего изделия фирмы Saitek и подход к делу Джима из Новой Зеландии http://www.jimspage.co.nz/Multi_Radio.htm

Для подключения к симулятору используется мультипортовый плагин xpiohub-0.6.0-radio_preconfigured.zip.

Правила преобразования событий органов управления и назначение органов индикации задаются в специальном конфигурационном файле. В папку плагинов Resources\plugins помещается сам плагин xpiohub.xpl и дефолтный конфигурационный файл xpiohub.ini.
Индивидуальные конфигурационные файлы xpiohub.ini помещаются в соответствующие папки моделей самолётов:

Дефолт в Resources\plugins
Boeing 757-200
Carenado C172II_Skyhawk
Tu154_Felis

Скетч сделан по тому же принципу, что и код для MCP

Главный цикл (см. код ниже) также представляет собой непрерывный вывод содержимого буферов на индикацию в кооперации с периодически вызываемой задачей обработки дискретного ввода. Для обеспечения приемлемой частоты опроса, задача дискретного ввода вызывается после отправки каждого второго символа на индикацию, при этом период составляет 0.86 миллисекунды при частоте обновления дисплеев 18 Гц.

void loop(void)
{
    char line[17] = "                ";
    char ndx = 0;
    char i;

    /* U N I T  1 */ 

    line1_modification(line, unit1_mode, unit1_step, unit1_stb_act);

    lcd1.setCursor(0, 0);
    for(i=0,ndx=0;i<8;i++,ndx+=2)
    {
        lcd1.write(&line[ndx],2); 
        discrete_task();
    }

    line2_modification(line, unit1_mode, unit1_step, unit1_stb_act);

    lcd1.setCursor(0, 1);
    for(i=0,ndx=0;i<8;i++,ndx+=2)
    {
        lcd1.write(&line[ndx],2); 
        discrete_task();
    }


    /* U N I T  2 */ 
     
    line1_modification(line, unit2_mode, unit2_step, unit2_stb_act);

    lcd2.setCursor(0, 0);
    for(i=0,ndx=0;i<8;i++,ndx+=2)
    {
        lcd2.write(&line[ndx],2); 
        discrete_task();
    }

    line2_modification(line, unit2_mode, unit2_step, unit2_stb_act);

    lcd2.setCursor(0, 1);
    for(i=0,ndx=0;i<8;i++,ndx+=2)
    {
     lcd2.write(&line[ndx],2); 
     discrete_task();
    }
  
}

Примеры отображаемых данных, в зависимости от положения клюва переключателя режима работы, сведены в таблицу 1. Кроме этого показаны переходы при использовании кнопки FREQ STB/ACT и соосной кнопки энкодера TUNE.

Таблица 1

Режим работы Индикация Примечание
COM1 После нажатия на кнопку STB/ACT происходит обмен между регистрами активной и запасной частоты)


После нажатия на ось энкодера TUNE происходит изменение шага перестройки с kHz на MHz
COM2 такие же действия, как и для COM1
NAV1 такие же действия, как и для COM1
NAV2 такие же действия, как и для COM1
ADF После нажатия на кнопку STB/ACT происходит переход на работу с ADF2

Нажатия на ось энкодера TUNE вызывают циклическое изменение шага перестройки 100kHz -> 10kHz ->1kHz

DME Сразу после переключения на режим индицируется частота автономного дальномерного комплекта. Этот комплект летает в любой модели даже если не предусмотрен типом самолёта.



После нажатия на ось энкодера TUNE происходит изменение шага перестройки с kHz на MHz и далее циклически

После нажатия на кнопку STB/ACT происходит переход на индикацию значений в каналах дальнометрии комплектов VOR1 и VOR2.


Дальнейше нажатие на STB/ACT вызывает циклическое переключение между режимами автономый DME и VOR1-2
XPDR
Циклические нажатия на ось энкодера TUNE вызывает выделение следующего изменяемого разряда
CRS Сразу после переключения на режим активным для изменения является давление.


После нажатия на ось энкодера TUNE происходит переключение на перестройку радиала VOR1.
Циклическое нажатие переключает настройку между текущим VOR и давлением


После нажатия на кнопку STB/ACT происходит переход на индикацию и перестройку радиала VOR2.
Циклическое нажатие переключает между VOR1 и VOR2


1. СХЕМА ЭЛЕКТРИЧЕСКАЯ СОЕДИНЕНИЙ

Схема в формате PDF.

2. ОРГАНЫ УПРАВЛЕНИЯ И ИНДИКАЦИИ

Таблица 2

Обозн. в схеме
соединений
Функция и тип Кол-во Вид (для справки) Контакты для соединения
с цепью GND
SW1
(MODE UNIT 1)

SW2
(MODE UNIT 2)
Переключатель
1 направление
12 положений
(используется 8)


Rotary switch 1 pole 12 positions
2

0

UNIT 1
S3 (XPND STB/ACT)
S4 (COM1/COM2)
S5 (DME)
S6 (MRK)
S7 (NAV2)
S8 (NAV1)
S9 (COM1)
S10 (COM2)

UNIT 2
S13 (XPND STB/ACT)
S14 (COM1/COM2)
S15 (DME)
S16 (MRK)
S17 (NAV2)
S18 (NAV1)
S19 (COM1)
S20 (COM2)

Переключатель
1 направление
2 положения

Toggle switch ON-ON
16

2

UNIT 1
S1 (FREQ STB/ACT)
S2 (IDENT)

UNIT 2
S11 (FREQ STB/ACT)
S12 (IDENT)

Кнопка

Push Button
(Momentary Push Button) тип DS-314 OFF-(ON)
4

1

UNIT 1
EN1 (TUNE)

UNIT 2
EN2 (TUNE)

Энкодер
с кнопкой

Rotary encoder
with push button
тип EC-11
2

2, 6, 7
U1, U2
Жидко-кристаллический индикатор
2 строки по 16 символов
LCD 2 x 16
2

D1, D2
Светодиод D3 мм
2

Катод(-)

3. КОНСТРУКЦИЯ

Панели смонтированы в приборных корпусах Gainta Industries G1024B, Корпус для РЭА 158х95.5х53мм, пластик, черный (''Чип и Дип'', Артикул G1024B http://www.chipdip.ru/product/g1024b.

На рис.1 показан общий вид стека.

Рис.1

А это вид со стороны монтажа (рис.2).

Рис.2

На рис.3 показан шаблон панели, который распечатывается из файла

Разметочные шаблоны панелей в формате Open Office Draw или
Разметочные шаблоны панелей в формате PDF.

После поечати размеры должны быть 149 х 88 мм по внешнему контуру. Разметочные наклейки клеятся на корпус для кернения, сверления отверстий согласно кодировочной таблице и вырезания прямоугольного отверстия под индикатор.

Рис.3

Шаблон для печати финальной наклейки на передние панели (рис.4) печатается из из файла
Финальные шаблоны панелей в формате Open Office Draw или
Финальные шаблоны панелей в формате PDF.

Рис.4

Финальная наклейка печатается лазерным принтером по бумаге с адгезивным слоем (самоклейка А4 LOMOND) с последующим покрытием защитной плёнкой. В качестве последей может быть использована прозрачная плёнка А4 с клеящим слоем для лазерных принтеров того же LOMOND (используется только для защиты) или прозрачная самоклейка (Erich Krause Пленка, рулон, самоклеящаяся, 400мм х3м).
Чередование слоёв финальной наклейки в ''сборе'' показано на рис.5.

Рис.5

Распечатанные изображения следует сразу же после печати закрыть защитным слоем. С первого раза может не получиться. Главное ноу-хау заключается в том, что нужно постепенно освобождать плёнку от защитного слоя и тут же прикатывать освобождённую часть валиком в виде линейки, обёрнутой тканью. Делать это нужно по всей ширине. Неплохо бы, в самом начале операции, освобождённым краем приклеиться к столу, прихватив и край защищаемой заготовки.
После всего этого наклейки обрезаются канцелярским ножом под металлическую линейку. На финальных наклейках нужно прорезать прямоугольные отверстия под индикаторы таким образом, чтобы белый контур остался на отрезанной части. Круглые отверстия вырезаются после приклеивания на корпус после "нащупывания" контуров резки.

4. СБОРКА


1. Наклеить на корпус изображение с центрами отверстий и разметкой прямоугольного отверстия под индикатор радиостека.
2. Вырезать прямоугольное отверстие под индикатор специальным ножом для оргстекла под металлическую линейку за несколько проходов инструмента по контуру.
3. Произвести сверление отверстий согласно таблице кодировки отверстий. Использовать ступенчатое сверло или производить сверление постепенно увеличивая диаметр сверла, начиная от 4 мм с шагом в 1-2 мм.
4. Удалить использованное разметочное изображение.
5. Удалить с лицевой поверхности все заусенцы и задиры, проверить поверхность на ровность проходом металлической линейки, поставленной на ребро.
6. Повторить операции 1-5 для второго модуля.
7. Вклеить индикатор, соблюдая ориентацию согласно документации на конкретный тип.
Делать на опорной повехности, положив корпус лицом к опорной поверхности. Использовать термоклей, дождаться остывания клея до температуры среды.
8. Наклеить финальные наклейки на лицевые поверхности корпусов, обращая внимание на точное совмещение прорези для LCD индикатора с маской самого LCD индикатора.
9. Притереть наклейки мягкой тканью так, чтобы обозначились контуры отверстий.
10. Хвостовиком сверла, которым производилось сверление под светодиоды, продавить отверстия в наклейках в соответствующих местах (при этом корпус с отверстием выполняет роль матрицы, а хвостовая часть сверла — роль пуансона).
11. Остальные отверстия прорезать канцелярским ножом, по кругу в несколько приёмов, не стремясь срезать за один "рез" слишком много во избежание задиров.
12. Смонтировать детали в свои отверстия согласно рисунка 3 и таблицы 2.
13. Принять решение о взаимной компоновке панелей (вертикальная или горизонтальная)затем свинтить оба блока вместе, предварительно сделав по два отверстия в нужных местах под винты (размер М3 или М4).
14. Произвести монтаж "общего" провода на выводы деталей, предназначенных для объединения согласно таблице 2, колонка 5: Контакты для соединения с цепью GND.
15. Выполнить монтаж согласно схеме электрической соединений.

5. ПРОГРАММИРОВАНИЕ С ПОМОЩЬЮ ARDUINO IDE

1. Установить среду разработки Arduino IDE (если не установлена) https://www.arduino.cc/en/Main/Software
2. Скачать архив скетча arduino_radio-0.2.0.zip и распаковать в удобное место.
3. Подключить плату Mega2560 к PC при помощи USB кабеля.
4. Определить имя нового коммуникационного USB устройства Arduino Mega 2560 при помощи Диспетчера устройств, как показано на рис.6 в качестве примера.

Рис.6

5. Открыть скетч из места, определённого в пункте 2
.
Рис.7

6. Сделать увеличение размеров приёмного и передающего буферов в файле

корневая папка установки\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.h.

До изменений:

#ifndef HardwareSerial_h
#define HardwareSerial_h

#include <inttypes.h>
#include "Stream.h"
После изменений:
#ifndef HardwareSerial_h
#define HardwareSerial_h
     #define SERIAL_TX_BUFFER_SIZE 512
     #define SERIAL_RX_BUFFER_SIZE 1024
#include <inttypes.h>
#include "Stream.h"
7. Выполнить действия, показанные на рис.8, используя в качестве имени порта данные, полученные в п.4

Рис.8


8. Если в результате загрузки выдана ошибка

#error SERIAL_TX_BUFFER_SIZE still is not 512 bytes
или
#error SERIAL_RX_BUFFER_SIZE still is not 1024 bytes,

это может означать, что изменение размера буфера, описанное в п. 6 не выполнено или выполнено, но не в актуальной папке. Такое возможно, если имеются множественные установки Arduino IDE разных версий.

6. АВТОНОМНОЕ ПРОГРАММИРОВАНИЕ

Автономное программирование удобно в том случае, когда нет необходимости вносить изменения в код. Иногда, для успешной компиляции, необходимо доустанавливать дополнительные библиотеки и менять некоторые параметры ядра. Часто бывает так, что при использовании некоторых дополнительных библиотек возникают проблемы при компиляции в Arduino IDE новейших версий. В этом случае использование уже протестированных готовых бинарных или .hex прошивок упрощает задачу.
Но и в этом случае нельзя полностью отказаться от необходимости устанавливать среду разработки, которая содержит в себе необходимые драйверы для подключения плат по USB.

1. Скачать пакет программирования (программатор avrdude и прошивка в формате .hex)
radio_programming_set-0.2.0.zip и распаковать в удобное место.

2. Открыть в блокноте на редактирование файл prog_2_units.bat (или prog_1_unit.bat, если построена одномодульная радиопанель) и указать актуальный порт подключения платы, как показано на рис.9.

Рис.9

3. Запустить на выполнение файл prog.bat. После окончания процесса программирование, окно будет иметь вид, как показано на рис.10.

Рис.10

7. ТЕСТИРОВАНИЕ

1. Скачать тестовую программу mcptest.zip и распаковать в удобное место.
2. Отрыть файл удобное_место\mcptest\Resources\plugins\xpiohub.ini и отредактировать в секции [serial] значение для port_0 согласно полученному значению в разделе 6 п.4. Ниже, для справки, содержимое этого файла.


[mode]
log=on

[serial]
port_0=COM36

[debug]
keyinfo=on

3. Запустить на выполнение файл удобное_место\mcptest\mcptest.exe.
4. В результате п.3 должно появиться консольное окно (рис.11).

Рис.11

5. Выполнять действия с органами управления, наблюдать код в окне тестовой программы и сравнивать с кодами в таблицах 3...5.

                                   Таблица 3
+------------------------------------------+
|  E N C O D E R    E V E N T    C O D E S |
+---------+---------+------+-------+-------+
|  MODE   | STB/ACT | STEP |  UP   |  DN   |
+---------+---------+------+-------+-------+
| COM1    |    0    |  0   | 0000  |  0001 |
| COM1    |    0    |  1   | 0004  |  0005 |
+---------+---------+------+-------+-------+
| COM2    |    0    |  0   | 0016  |  0017 |
| COM2    |    0    |  1   | 0020  |  0021 |
+---------+---------+------+-------+-------+
| NAV1    |    0    |  0   | 0032  |  0033 |
| NAV1    |    0    |  1   | 0036  |  0037 |
+---------+---------+------+-------+-------+
| NAV2    |    0    |  0   | 0048  |  0049 |
| NAV2    |    0    |  1   | 0052  |  0053 |
+---------+---------+------+-------+-------+
| ADF     |    0    |  0   | 0064  |  0065 |
| ADF     |    0    |  1   | 0068  |  0069 |
| ADF     |    0    |  2   | 0072  |  0073 |
| ADF     |    1    |  0   | 0066  |  0067 |
| ADF     |    1    |  1   | 0070  |  0071 |
| ADF     |    1    |  2   | 0074  |  0075 |
+---------+---------+------+-------+-------+
| DME     |    0    |  0   | 0080  |  0081 |
| DME     |    0    |  1   | 0084  |  0085 |
| DME     |    1    |  0   | 0082  |  0083 |
| DME     |    1    |  1   | 0086  |  0087 |
+---------+---------+------+-------+-------+
| TXPND   |    0    |  0   | 0096  |  0097 |
| TXPND   |    0    |  1   | 0100  |  0101 |
| TXPND   |    0    |  2   | 0104  |  0105 |
| TXPND   |    0    |  3   | 0108  |  0109 |
+---------+---------+------+-------+-------+
| NAV_CRS |    0    |  0   | 0112  |  0113 |
| NAV_CRS |    0    |  1   | 0116  |  0117 |
| NAV_CRS |    1    |  0   | 0114  |  0115 |
| NAV_CRS |    1    |  1   | 0118  |  0119 |
+---------+---------+------+-------+-------+
                                   Таблица 4
+------------------------------------------+
| U N I T   1   buttons and switches codes |
+--------------------+---------------------+
|   BUTTON/SWITCH    |     EVENT CODE      |
+--------------------+---------------------+
| ADF1               |        0152         |
| ADF2               |        0153         |
| NAV1               |        0154         |
| NAV2               |        0155         |
| MRK                |        0156         |
| DME                |        0157         |
| COM1/COM2          |        0158         |
| FREQ STB/ACT       |        0131         |
| FREQ STB/ACT(COM1) |        0176         |
| FREQ STB/ACT(COM2) |        0177         |
| FREQ STB/ACT(NAV1) |        0178         |
| FREQ STB/ACT(NAV2) |        0179         |
| XPND STB/ACT       |        0159         |
| IDENT              |        0160         |
+--------------------+---------------------+
                                   Таблица 5
+------------------------------------------+
| U N I T   2   buttons and switches codes |
+--------------------+---------------------+
|   BUTTON/SWITCH    |     EVENT CODE      |
+--------------------+---------------------+
| ADF1               |        0161         |
| ADF2               |        0162         |
| NAV1               |        0163         |
| NAV2               |        0164         |
| MRK                |        0165         |
| DME                |        0166         |
| COM1/COM2          |        0167         |
| FREQ STB/ACT       |        0131         |
| FREQ STB/ACT(COM1) |        0176         |
| FREQ STB/ACT(COM2) |        0177         |
| FREQ STB/ACT(NAV1) |        0178         |
| FREQ STB/ACT(NAV2) |        0179         |
| XPND STB/ACT       |        0168         |
| IDENT              |        0169         |
+--------------------+---------------------+

8. ПОДКЛЮЧЕНИЕ К СИМУЛЯТОРУ

1. Загрузить плагин xpiohub-0.6.0-radio_preconfigured.zip
и разместить файлы по своим местам, как показано ниже.

  
 Содержание архива:
 =================== 
 Resources\plugins\xpiohub.xpl - плагин, скопировать в папку Resources\plugins\ симулятора
 
 Resources\plugins\xpiohub.ini - дефолтные настройки, скопировать в папку Resources\plugins\ симулятора
 
 Следующие файлы разместить в соответствующих папках моделей самолётов:
 
 for_carenado_c172_folder\xpiohub.ini - файл с настройками для Carenado Cessna 172N
 for_felis_tu154_folder\xpiohub.ini - файл с настройками для Felis Tu-154M
 for_sts_ff_b757_folder\xpiohub.ini - файл с настройками для Boeing757/767 by FF&STS
 
 

2. Отрыть файл папка_симулятора\Resources\plugins\xpiohub.ini и отредактировать в секции [serial] значение для port_0 согласно полученному значению в разделе 6 п.4. Ниже, для справки, часть содержимого этого файла с настройками последовательного порта.


[mode]
log=on

[serial]
port_0=COM36

[debug]
keyinfo=on

[operation]
reload_key=160

3. Запустить симулятор и проверить функционирование.

Примечание 1. Настроек в самом симуляторе не требуется.

Примечание 2.Лог плагина ведётся в файле папка_симулятора\Resources\plugins\xpiohub.log и пересоздаётся при каждом запуске плагина.

Примечание 3. Текущий файл настроек можно редактировать на лету, чтобы перезагрузить настройки нужно вызвать пункт меню симулятора
Plugins/FlyingCat USB I/O hub -> Re-register all

Рис.12

или нажать специальную выделенную кнопку (по умолчанию это кнопка IDENT с кодом 160)

Примечание 4. Служебную функцию перезагрузки настроек допускается назначать на любую кнопку, занятую в обычных настройках. Но, желательно назначать малоиспользуемую кнопку.

Примечание 5. При необходимости перегрузить устройство, можно остановить плагин через Plugin Admin симулятора:

Рис.13

Останов плагина не происходит мгновенно, нужно подождать, пока чек в чекбоксе исчезнет. После этого можно переподключить устройство путём отсоединения/присоединения USB кабеля.

9. ДОБАВЛЕНИЕ КОНФИГУРАЦИОННЫХ ДАННЫХ

Плагин xpiohub.xpl допускает одновременное подключение до восьми устройств (пока известно два устройства, поддерживающие тот же протокол событий: MultiRadio и MCP. Возможно создание устройств пользователя, протокол описан здесь), для этого нужно дополнить секцию serial, как показано ниже.


 [serial]
  port_0:  com22
  port_1:  com20
  port_2:  com12
  port_3:  com8
  

Здесь port_N (N от 0 до 7) - условный номер порта, которому сопоставляется физический порт.
Блок описаний правил обработки событий для отдельного устройства должен предваряться секцией device, как показано ниже


 [device]
 port:  0

 # здесь начинается описательная часть для устройства, подключенного к порту с условным номером 0

 [device]
 port:  1

 # здесь начинается описательная часть для устройства, подключенного к порту с условным номером 1


 [device]
 port:  2

 # здесь начинается описательная часть для устройства, подключенного к порту с условным номером 2

 [device]
 port:  3

 # здесь начинается описательная часть для устройства, подключенного к порту с условным номером 3


На главную страницу