ДронЗавод – Telegram
ДронЗавод
2.41K subscribers
240 photos
113 videos
13 files
26 links
Производим FPV дроны. По всем вопросам @dronemaster @techno_drone
Чат https://news.1rj.ru/str/dronesfactoryc
Биткоин кошелек для пожертвований: перемещен
Download Telegram
🛠 Важность Писать Читаемый Код 🛠

Привет, коллеги-разработчики! Сегодня хотим поговорить о важности написания простого и читаемого кода. В мире программирования, читаемость кода имеет огромное значение. Это не только облегчает процесс отладки и поддержки, но и делает наш код более понятным для других разработчиков.

📡 Наш Подход 📡

На скриншоте приведён ключевой метод из прошивки нашего сканера частот "ФИЛИН". Этот метод отвечает за несколько важных задач: обновление данных всех диапазонов частот, вычисление максимального RSSI, обновление временных меток всех диапазонов, агрегация данных для отображения на интерфейсе, сглаживание значений с помощью скользящего окна, отсечка значений по среднеквадратичному отклонению, установка уведомлений и состояний устройства на основе текущих данных и предупреждений, проверка состояний всех диапазонов на наличие активных предупреждений.

Этот код еще претерпит множество изменений, но он должен оставаться понятным для всех, кто будет с ним работать.

🔍 Почему это важно?

1. 📚 Читаемость и Понятность: Хорошо структурированный код легко читается и понимается, даже если вы видите его впервые.
2. 🛠 Отладка и Поддержка: В явном коде легче находить и исправлять ошибки, добавлять новые функциональности.
3. 📈 Совместная Работа: Когда ваша команда растет, читаемый код помогает новым разработчикам быстро включаться в работу.
4. 🎯 Надежность: Читаемый код снижает вероятность появления багов и упрощает тестирование.

Создавайте программы, которыми будете гордиться! Пишите читаемый код, снижайте технический долг и делайте мир программирования лучше!
#филин
👍11🔥1🫡1
Media is too big
VIEW IN TELEGRAM
🌊 Реализация Диаграммы "Водопад" в Нашем Сканере Частот "ФИЛИН" 🌊

Привет, коллеги! Сегодня хотим поделиться с вами тем, как мы реализовали диаграмму "Водопад" в нашем сканере частот "ФИЛИН". Диаграмма "Водопад" позволяет визуализировать изменения уровня сигнала (RSSI) с течением времени, отображая данные в виде движущегося графика.

📋 Цель:
Создать визуализацию, которая покажет изменения RSSI (Received Signal Strength Indicator) в режиме реального времени, перемещая данные вверх по экрану, подобно движению воды в водопаде.

🛠 Как мы это сделали:

Мы использовали библиотеку TFT_eSPI для работы со спрайтами и отображения данных на экране. Далее, применили класс WaterfallSprite, который наследуется от TFT_eSprite и добавили в него метод drawWaterfall для отрисовки диаграммы.

class WaterfallSprite : public TFT_eSprite
{
public:
using TFT_eSprite::TFT_eSprite;

void drawWaterfall(uint8_t *data)
{
int16_t height = this->height();
int16_t width = this->width();

memmove(_img + width, _img, (height - 1) * width * 2);

for (size_t x = 0; x < width; ++x)
{
uint16_t color = rssiToColor565(data[x]);
drawPixel(x, 0, color);
}
}
};


Метод drawWaterfall выполняет следующие задачи:
1. 📏 Получает размеры спрайта.
2. 📉 Перемещает данные на один пиксель вниз, освобождая верхнюю строку.
3. 🎨 Отрисовывает верхнюю строку данных на основе текущих значений RSSI.

🔥 Пример использования:

Создание и очистка спрайта:

waterfallSprite.createSprite(DISPLAY_CHANNELS(), GRAPH_HEIGHT);
waterfallSprite.fillScreen(TFT_BLACK);


Обновление спрайта при наличии новых данных:

waterfallSprite.drawWaterfall(frequencyRange.rssi);


Перемещение и вывод спрайта на экран:

waterfallSprite.pushSprite(0,0);


🔍 Почему это важно?

Диаграмма "Водопад" позволяет нам видеть изменения сигнала в динамике, что очень полезно для анализа и мониторинга. Реализуя это в нашей прошивке, мы обеспечили наглядность и удобство восприятия данных пользователем.
#филин
🔥82👍2
Media is too big
VIEW IN TELEGRAM
🔧 Разработка state машины для обработки кнопок: больше, чем просто нажатие!

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

🎯 Основные задачи:
1. Устранение дребезга при нажатии и отпускании кнопок.
2. Определение коротких нажатий.
3. Определение длинных нажатий.
4. Обработка одновременных нажатий обеих кнопок.

🛠 Структура нашей state машины с подробными переходами:

- IDLE (Ожидание):
- Ждём нажатия кнопки.
- При нажатии любой кнопки переходим в состояние DEBOUNCE и отмечаем время.

- DEBOUNCE (Устранение дребезга):
- Проверяем, прошло ли время дребезга (30 мс).
- Если да и кнопку отпустили, возвращаемся в IDLE.
- Если да и кнопку удерживают, фиксируем состояние кнопок и переходим в PRESS_FIXED.

- PRESS_FIXED (Проверка фиксированного нажатия):
- Если обе кнопки удерживаются:
- при отпускании до 1000 мс: переход в SHORT_PRESS_BOTH.
- при удержании более 1000 мс: переход в LONG_PRESS_BOTH.
- Если одна кнопка удерживается:
- при отпускании до 1000 мс: переход в соответствующее SHORT_PRESS состояние.
- при удержании более 1000 мс: переход в соответствующее LONG_PRESS состояние.

- SHORT_PRESS_UP, SHORT_PRESS_DOWN, SHORT_PRESS_BOTH:
- Обрабатывать короткое нажатие.
- Сохранять настройки.
- Переход в состояние RELEASE_DEBOUNCE для ожидания устранения дребезга при отпускании.

- LONG_PRESS_UP, LONG_PRESS_DOWN, LONG_PRESS_BOTH:
- Обрабатывать длинное нажатие с повторяющимся действием (например, увеличение/уменьшение чувствительности).
- Сохранять настройки.
- При отпускании переход в RELEASE_DEBOUNCE.

- RELEASE_DEBOUNCE (Устранение дребезга при отпускании):
- Проверять, прошло ли достаточное время для устранения дребезга при отпускании (30 мс).
- Возвращаться в состояние IDLE.

📊 Итоги:
- Реализация state машины для обработки кнопок может быть непростой задачей.
- Важно думать о всех возможных состояниях и переходах между ними.
- Учитывайте устранение дребезга для стабильной работы вашей системы.

Обработка нажатий кнопок – это искусство! 🎨 Поделитесь своим опытом и лайфхаками в комментариях. 👇

#Программирование #Задачи #Arduino #Электроника #StateMachine #филин
👍8🔥4🤓3
Media is too big
VIEW IN TELEGRAM
🚁 Тест нашего сканера частот "ФИЛИН" в поле 🚁

И снова привет, друзья! Сегодня хотим поделиться с вами результатами полевых испытаний нашего сканера частот "ФИЛИН", который находится в стадии разработки. Мы взяли Mavic 3T и протестировали наш детектор с точки старта на расстоянии 400 метров. Результаты оказались многообещающими!

📡 Как это было:

Мы использовали наш прототип сканера частот "ФИЛИН", чтобы зафиксировать сигнал на частоте 2.4 ГГц. Оператор и точка старта были расположены на расстоянии 400 метров от устройства. Во время полета Mavic 3T наш детектор успешно обнаружил сигнал, и вы можете увидеть это на прикрепленном видео.

🔍 Почему это важно:

1. Дальность обнаружения: Наше устройство продемонстрировало хорошие результаты на расстоянии 400 метров, что подтверждает его высокую чувствительность.
2. Реальное тестирование: Эти тесты показывают, что наш сканер частот "ФИЛИН" движется в правильном направлении и может эффективно отслеживать и анализировать сигналы.
3. Постоянное совершенствование: Мы продолжаем работать над улучшением нашего устройства, и такие тесты помогают нам выявить области для улучшений.

#филин
🔥74👍32🎉2👀1
📢 Режим обновления прошивки по WiFi!

Пока готовится железо, мы в настоящее время работаем над новой функцией нашего прототипа, которая значительно упростит процесс обновления прошивки устройства. Теперь не нужны никакие дополнительные кабели или сложные инструкции. Все, что нужно, – это смартфон! 📱

Вот как это будет работать:

🔧 Переход в режим обновления:
- Пользователь зажимает две кнопки и включает устройство. Простое действие, и устройство мгновенно переходит в режим обновления прошивки.

📶 QR-код для подключения к WiFi:
- На экране устройства появляется QR-код. Пользователь сканирует его смартфоном, и он автоматически подключится к WiFi-сети, созданной устройством. Это первый шаг к обновлению прошивки.

🌐 Шаг второй - доступ к странице загрузки прошивки:
- После успешного подключения устройство покажет второй QR-код. Отсканировав его, пользователь попадет на страницу загрузки новой прошивки. Быстро и просто, как никогда раньше!

💡 Преимущества:
- 📲 Обновления прошивки станут максимально удобными.
- 🔌 Без кабелей, без сложных инструкций – только смартфон и QR-коды.
- 🔄 Уверенность в актуальности программного обеспечения устройства.

Мы уверены, что эта функция сделает процесс обновления прошивки еще более простым и удобным.
🔥11👍2👀1👾1
Media is too big
VIEW IN TELEGRAM
🔧 Прогресс нашего проекта: новая функция обновления прошивки!

Как и было заявлено, мы реализовали функцию обновления прошивки. После подключения сетевых библиотек прошивка значительно увеличилась в размере — практически вдвое! Поэтому нам пришлось заняться оптимизацией: сжимали все, что можно сжать, избавлялись от ненужных зависимостей — все для того, чтобы сохранить красоту и удобство использования.

🔍 На видео ниже можно увидеть функцию обновления в действии.

Теперь впереди еще немного работы над железной частью. Мы планируем собрать первые 10 экземпляров для тестирования.

Оптимистичный план — месяц на изготовление.
Пессимистичный план — полтора месяца на изготовление.

Следите за нашими обновлениями и оставайтесь с нами! 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1241
📦 Понедельник – день разбора зависших проектов!

Мы продолжаем улучшать наш код, разруливая домены и обновляя драйверы. Сегодня, мы переработали логику обработки частотных доменов, чтобы сделать их более структурированными и удобными для работы. Теперь мы имеем два домена: domain_0 и domain_1, которые описывают низкий и высокий частотные диапазоны соответственно.

🔧 Что мы сделали?
- Переписали структуру fhss_config_t для поддержки новых доменов.
- Удалили устаревшие домены и добавили новые, следующие новому принципу именования.
- Обновили функции для работы с новыми доменами.
- Переписали код для объединения доменов в одну строку формата domain_0-domain_1.

🔍 На скрине пасхалка про тот функционал, который мы имеем в виду! 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🥰1👌1💯1😎1
This media is not supported in your browser
VIEW IN TELEGRAM
Работа с attachInterrupt под разными микроконтроллерами

🤖 Введение

Наш сбросной механизм подключается как обычная серво машинка и читает PWM сигнал. Мы столкнулись с особенностями работы функции attachInterrupt под разными микроконтроллерами, такими как STM32 и ESP32.

💡 STM32: Лямбда-функции

STM32 позволяет использовать лямбда-функции для настройки прерываний, что упрощает код.

c++
#include "device/PwmHandler.h"

void PwmHandler::Init(callback_function_t callback)
{
mCallback = callback;
pinMode(mPwmPin, INPUT);
attachInterrupt(
digitalPinToInterrupt(mPwmPin), [this]()
{ this->ISR_pwm(); },
CHANGE);
}

void PwmHandler::ISR_pwm()
{
// Логика обработчика прерываний
}


⚠️ ESP32: Ограничения и синглтон

ESP32 не поддерживает лямбда-функции в attachInterrupt. Решение — использование шаблона Singleton и статических методов.

c++
#include "device/PwmHandler.h"

PwmHandler* PwmHandler::instance = nullptr;

void IRAM_ATTR handler_wrapper()
{
if (PwmHandler::instance) {
PwmHandler::instance->ISR_pwm();
}
}

void PwmHandler::Init(callback_function_t callback)
{
mCallback = callback;
pinMode(mPwmPin, INPUT);
instance = this;
attachInterrupt(digitalPinToInterrupt(mPwmPin), handler_wrapper, CHANGE);
}

void PwmHandler::ISR_pwm()
{
// Логика обработчика прерываний
}


И да, на видео демонстрация работы механизма от подписчика. 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🆒1😎1
ДронЗавод
🔧 Прогресс нашего проекта: новая функция обновления прошивки! Как и было заявлено, мы реализовали функцию обновления прошивки. После подключения сетевых библиотек прошивка значительно увеличилась в размере — практически вдвое! Поэтому нам пришлось заняться…
🔧 Обновление по нашему проекту: временные рамки и прогресс!

😔 К сожалению, нам пришлось перейти на пессимистичный план. В процессе работы над железной частью возникли некоторые трудности, из-за чего мы вынуждены были перерисовывать некоторые компоненты. Но несмотря на это, мы движемся вперед и стараемся не упускать из вида нашу конечную цель.

🚀 Хорошая новость заключается в том, что на данный момент все Gerber файлы готовы! Теперь дело стоит за тестированием первых 10 экземпляров.

Оптимистичный план завершения — 1.5 месяца на изготовление.
Пессимистичный план — около 2 месяцев на изготовление.

Спасибо за вашу поддержку и понимание! 📡
👍86😁3😎2🏆1
ДронЗавод
🧳 Немного в коде, по этому контента пока не много. И да, на картинке оригинальное китайское название QUENE PROTOCAL. #код
This media is not supported in your browser
VIEW IN TELEGRAM
Вот еще один интересный проект, нужно подключиться к китайской железке и по QueneProtocal работать вот с такого девайса, очень современно и амбициозно :).

Мы столкнулись с задачей интеграции с устройством, работающим по уникальному протоколу, который требует тщательного анализа и кастомной реализации. 🛠

Проект включает в себя:

1. Обратная разработка протокола: Разбираем и тестируем QueneProtocal, чтобы понять, как устройство общается с внешним миром. Мы использовали Wireshark для перехвата и анализа каждого сообщения, распарсив его в структурированный формат. 📡

2. CQRS подход и фасад для UDP протокола: Мы используем подход CQRS для эффективного управления запросами и командами, и оборачиваем сложный двусторонний UDP протокол в удобное API. Это API будет доступно для написания клиента, что делает взаимодействие с устройством намного проще и удобнее. 🔄

3. Развертывание на Raspberry Pi: Весь наш код и API будут развернуты на компактном и мощном устройстве Raspberry Pi, что позволит эффективно обрабатывать запросы и команды в режиме реального времени. 🍓🖥

Работа с таким устройством требует постоянного тестирования и общения через UDP, что добавляет свою изюминку в процесс разработки. ⚙️

Каждое сообщение между нашим приложением и устройством было перехвачено Wireshark и распаршено в структуру для правильной обработки на стороне железки. В итоге, работа над таким проектом не только расширяет технические знания и навыки, но и представляет собой увлекательный и креативный процесс, где каждая мелочь имеет значение. 💡

Следите за нашими обновлениями, будет ещё много увлекательного! 🚀

#разработка #технологии #интеграция #инженерия #RaspberryPi #QueneProtocal
👍43😍3❤‍🔥11👏1
🚀 Влияние GPT на IT-профессии и перспективы

Для разработчиков и инженеров 💻:
1. Автоматизация рутинных задач: GPT освобождает разработчиков от рутинной работы, позволяя сосредоточиться на более сложных задачах.
2. Генерация кода: GPT-4 помогает писать фрагменты кода и тесты, ускоряя процесс разработки.
3. Обучение: Новички могут использовать GPT как наставника для объяснения сложных концепций.

Для специалистов по данным 📊:
1. Анализ данных: GPT помогает находить инсайты в больших объемах данных.
2. Создание отчетов: Автоматическая генерация отчетов и визуализаций.
3. Прогнозирование: Поддержка в построении моделей и прогнозов.

Для специалистов по кибербезопасности 🔒:
1. Выявление угроз: GPT анализирует лог-файлы и сетевой трафик для обнаружения аномалий.
2. Автоматизация мер: Помощь в автоматизации ответных мер на инциденты.

Будущее IT-профессий 🌟:
1. Сотрудничество человека и ИИ: GPT будет усиливать производительность и креативность специалистов.
2. Новые роли: Появятся новые направления и роли, связанные с интеграцией GPT.
3. Этические и правовые аспекты: Важно установить правила использования GPT для защиты прав пользователей.

GPT уже меняет IT и будет делать это дальше. Важно адаптироваться и использовать все преимущества ИИ! 💪

#IT #GPT #Будущее #Технологии
👍2😱2💩2😨2👎1
🔧 Мы продолжаем улучшать наши инструменты и расширять парк оборудования.

🆕 Недавно мы получили новый резак для вырубки на прессах, и теперь ждем еще пресс.

👷‍♂️ Наш инженер больше не будет мучаться канцелярским ножом, ведь работа с новыми инструментами заметно упрощает задачу!
🔥5👍4😎2🫡1
Целая гора пластиковых 3D печатных проставок, готовых к отправке! 🚀✈️

Как думаете, сколько здесь штук? Пишите ваши догадки в комментариях! 😉

#3Dпечать #проставки #угадайчисло #сбросноймеханизм
👍3🤷‍♂2🤩21👎1🔥1
🚀 Борьба за граммы и поиск идеального облегчения! 🚀

Старая подкладка весила целых 21,5 грамма, но благодаря использованию другого материала удалось снизить вес до 4,3 грамма! 🌟 Мы находимся на пути к совершенству и уже нашли несколько мест для дальнейшего облегчения. 🔧 Ожидаем тестовые образцы деталей с нетерпением! 💡

#сбросноймеханизм
🔥11👍4🤩31🏆1
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 Допекаем последнюю партию плат на сбросы 🚀

Новая версия плат уже вот вот подъедет!

Контакты в шапке описания канала.

#сбросноймеханизм
👍117🔥6😎2👎1👌1🤓1
This media is not supported in your browser
VIEW IN TELEGRAM
🎉 Большая благодарность всем причастным!

🔧 Благодаря вашим и нашим усилиям у нас теперь есть ещё один 3D принтер, который в три-четыре раза производительнее тех, что у нас уже есть. 🚀

🔍 Для сравнения: наш самый высокопроизводительный принтер мог печатать 8 проставок за 11 часов, а новый принтер справляется с 12 проставками всего за 5 часов 30 минут! 💪

🔥 С этим новым оборудованием мы сможем значительно улучшить наши проекты и достичь новых высот. Спасибо каждому, кто помог сделать это возможным!

#благодарность #3Dпринтер #технологии #производительность #сбросноймеханизм
🔥14👍7👌31👏1
ДронЗавод
🔧 Обновление по нашему проекту: временные рамки и прогресс! 😔 К сожалению, нам пришлось перейти на пессимистичный план. В процессе работы над железной частью возникли некоторые трудности, из-за чего мы вынуждены были перерисовывать некоторые компоненты. Но…
🚀 Обновление по проекту "Филин"! 🦉

Платы для нашего проекта "Филин" приехали уже пару недель назад. Однако, мелкие детали ("рассыпуха") все еще находятся в пути. Временные логистические трудности не помешают нашему прогрессу.

В качестве временного решения, для изготовления первого образца мы решили использовать детали из старой техники. 💡🔧💻 В доноры попал "горелый" полетный контроллер от SpeedyBee, который, несмотря на свой прежний опыт, все еще может послужить делу! 🔥🛠

#филин
🔥10👍3❤‍🔥21💩1
Media is too big
VIEW IN TELEGRAM
🔧 Собрали первый экземпляр "Филин"! 🚀

Обошлось не без помарок, но всё починили на месте. 😅

🔧 В ходе сборки выяснили несколько важных моментов:
1. Нужно добавить в сервисный режим режимы калибровки, так как каждая железка требует своих параметров.
2. Уменьшить количество используемых потоков. 🎛

🖌 Помимо этого, необходимо нарисовать новый корпус и выбрать элементы питания. К сожалению, литий-ионные батареи оказались слишком большими. 🔋

🎉 Радует, что устройство заработало с первой итерации!

Продолжаем работу, чтобы улучшить и оптимизировать "Филин".
#филин
👍12🔥122👻21
crossfire_parser.py
4.1 KB
📡 Парсер кроссфаер протокола на Python
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
📡 Парсер кроссфаер протокола на Python

Друзья, может для кого-то будет полезным Python-скрипт, который позволяет парсить данные встроенного кроссфаер (Crossfire) протокола и выводить содержимое различных каналов!

Этот скрипт считывает данные из выбранного последовательного порта и выводит информацию о:

- GPS-позиции (широта, долгота, скорость, высота и количество спутников)
- Скорости подъема/спуска (Vario)
- Углах наклона (Pitch, Roll, Yaw)
- Барометрической высоте
- Состоянии связи (RSSI, LQ, SNR)
- Параметрах батареи (напряжение, ток, заряд, процент заряда)
- Упакованных RC-каналах

Как запустить скрипт:

1. Убедитесь, что у вас установлен Python 3 и необходимые библиотеки.
2. Сохраните скрипт в файл, например crossfire_parser.py.
3. Откройте терминал или командную строку и перейдите в каталог с сохраненным файлом.
4. Запустите скрипт с указанием последовательного порта и скорости:


    python3 crossfire_parser.py -P <Ваш COM порт> -b <Скорость>


Пример:


    python3 crossfire_parser.py -P COM6 -b 420000


Скрипт начнет выводить соответствующую информацию в реальном времени.

Приятного использования и удачных полетов! 🚀

Скачать скрипт можно по ссылке [сылка на файл / архив с Python скриптом].
👍14🆒31👎1🔥1🤩1👌1🤓1
Media is too big
VIEW IN TELEGRAM
⚠️ Экстренное введение процедуры калибровки в проект "Филин"! 🛠

📡 Описание проблемы:

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

🎥 Что добавлено:

В сервисном режиме теперь доступна калибровка нижнего и верхнего порога напряжения. Это позволит точно установить границу шума и максимального приема, обеспечивая мониторинг в рабочем диапазоне.

Детали на видео! 👇
#филин
👍8😎2👎1🎉1