Понадобился на легком самолете цифровой компас, какое-то подобие привычному КИ-13.
Чтобы можно было определить направление на истинный север и добавить возможности вносить поправки в магнитное склонение, дабы в случае необходимости летать по ортодромии, да и на вид посовременнее.
Непосредственно в качестве индикатора выбрано довольно интересное устройство для умного дома — круглая шайба, диаметром 58 мм в алюминиевом корпусе с цветным дисплеем.
Само устройство базируется на микроконтроллере ESP32-S3 с 16 мб flash для программ и дисплей 360х360, подключенный по интерфейсу quad SPI.
Также есть довольно приличный ЦАП для проигрывания музыки и возможность осуществлять беспроводное питание устройства от wireless charger, но встроенной АКБ нет.
Последние две «фичи» пока без надобности, возможно их применение в будущем.
Первой задачей было все как-то нарисовать и в поле зрения попала программа EEZ studio, которая довольно тесно интегрирована с графической библиотекой LVGL.
Навыков в отрисовке интерфейсов никогда не было, но есть такое выражение:
fly by the seat of one’s pants, что буквально означает действовать наугад, опираясь на ситуацию, а не на опыт.
Поэтому была скачана программа и с ней проведено несколько вечеров, по итогу вышла шкала с секторами и стрелками
Еще около недели ушло на отрисовку непосредственно самого компаса, устранение ошибок в шкалах и наведения красоты
По задумке компас должен иметь возможность отображения как линейной
так и круговой шкалы компаса
Второй задачей было экспортировать код *с файлов из графической программы в устройство, т.е. написать код, скомпилировать его правильно и желательно выполнить отладку.
Экспорт файлов проекта с нужными битмапами и структурой выполняется не сложно, для работы с кодом используется IDE vscode.
Небольшой код проекта, который необходимо собрать и загрузить в устройство
#include "Arduino.h"
#include "scr_st77916.h"
#include <lvgl.h>
#include <ui.h>
void setup()
{
Serial.begin(115200);
scr_lvgl_init();
#if LV_USE_LOG != 0 lv_log_register_print_cb( my_print ); /* register print function for debugging */ #endif
ui_init();
} // SETUP
void loop()
{
Compass_Widget_TaskInit();
lv_timer_handler(); /* Let the GUI do its work */ delay(5);
} // LOOP
Внутри написана также тестовая программа для инкремента значений градусов, чтобы компас вращался.
Третьей задачей было продумать как из плоской «шайбы» сделать объемный корпус с возможностью крепления в стандартное отверстие приборки 58 мм, как обычно крепятся все круглые авиаприборы.
На алюминиевом корпусе крепилась пластиковая заглушка, ее было решено моделировать в 3Д.
В итоге корпус получился вместительный и легкий
Сразу подумал о методе соединения этого прибора с системой — шина CAN 2.0, которую реализуем на микросхеме приемо-передатчика SN65HVD230D, с рабочим напряжением 3.3 вольта.
Осуществить подключение данной микросхемы к плате есп32 не простая задача, учитывая, что почти все GPIO на плате заняты каким-либо функционалом.
Вооружившись мультиметром и лупой началось изучение схемы и печатной платы
Свободными были назначены пины GPIO21 и GPIO18, но чтобы не было влияния на микросхемы ЦАП на базе PCM5100APWR, выпаял пару сопротивлений
Корпус был напечатан на 3Д принтере и подогнал под алюминиевый, смонтирован 5-ти контактный быстросъемный разъем для CAN шины и для питания устройства
Для связи прибора с датчиками и системами на самолете разработан небольшой can-концентратор, позволяющий собирать данные из шины CAN или например получать их из полетного симулятора FlightGear
О конструкции концентратора шины CAN и получении данных из симулятора полетов будет позже отдельная статья.
Помимо отрисовки виджетов компаса, сделано несколько версий для прибора отображения воздушных параметров — воздушной и вертикальной скорости, а также высоты.
Примерно так это все выглядит
В планах написать о каждом этапе более подробно позднее и спасибо за внимание🙂
ссылка на оригинал статьи https://habr.com/ru/articles/873898/
Добавить комментарий