Небольшая переделка одного устройства

от автора

Понадобился на легком самолете цифровой компас, какое-то подобие привычному КИ-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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *