Проекты для дронов на контроллере
Пятьдесят практических прошивок для микроконтроллера ATmega328P (плата Arduino Uno/Nano): питание и защита батареи, управление моторами и ESC, приём команд, датчики, индикация и телеметрия. Каждый проект — задача, алгоритм и исходник на C с возможностью скачать .c.
Все примеры написаны на языке C для регистрового уровня AVR (без Arduino-библиотек) и проверены компиляцией avr-gcc под ATmega328P. Тактовая частота 16 МГц. Таймингозависимые вещи (WS2812, DShot, SBUS) требуют подгонки под частоту и железо — это отмечено в проектах. Внимание: при любых тестах моторов снимайте пропеллеры.
Питание
09Измерение напряжения батареи через АЦП и делитель, вывод порога на светодиод.
DMC.02Пищалка предупреждает о разряде батареи прерывистым тоном.
DMC.03Автоопределение числа банок (S) LiPo по суммарному напряжению.
DMC.04Измерение тока потребления с датчика Холла (ACS712) через АЦП.
DMC.05Интегрирование тока во времени для оценки израсходованных мА·ч.
DMC.06Чтение аналогового RSSI приёмника и перевод в проценты.
DMC.07Измерение температуры регулятора датчиком LM35 и защита по перегреву.
DMC.08Отображение уровня заряда батареи столбиком из светодиодов.
DMC.09При включении проверяет напряжение и сигнализирует готовность или отказ.
Моторы и ESC
10Генерация сервосигнала 50 Гц (1000–2000 мкс) аппаратным Timer1.
DMC.11Стандартный сигнал управления регулятором 1000–2000 мкс.
DMC.12Процедура калибровки концов газа регулятора.
DMC.13Плавный разгон и торможение мотора для проверки после сборки.
DMC.14Расчёт газа четырёх моторов из throttle/roll/pitch/yaw для схемы X.
DMC.15Сборка 16-битного кадра DShot с телеметрийным битом и CRC.
DMC.16Подсчёт оборотов мотора/винта по датчику через внешнее прерывание.
DMC.17Безопасное взведение: газ в нуле плюс переключатель.
DMC.18Остановка моторов при пропадании сигнала управления по таймауту.
DMC.19Плавная развёртка сервопривода для проверки механики подвеса.
Приём управления
06Измерение ширины импульса RC-канала через захват Timer1.
DMC.21Разбор суммарного PPM-потока на отдельные каналы.
DMC.22Формирование суммарного PPM-сигнала из массива каналов.
DMC.23Разбор 25-байтного кадра SBUS в 16 каналов (UART 100000 8E2).
DMC.24Приём кадра CRSF (ELRS/Crossfire) и извлечение канала по адресу/типу.
DMC.25Смешивание крена и тангажа в два элевона для крыла/самолётного дрона.
Датчики
11Поиск адресов устройств на шине I2C (TWI) — базовая диагностика.
DMC.27Инициализация и чтение гироскопа и акселерометра MPU6050 по I2C.
DMC.28Чтение магнитометра HMC5883L и вычисление курса.
DMC.29Чтение идентификатора и сырого давления/температуры BMP280 по I2C.
DMC.30Измерение малой высоты ультразвуковым дальномером HC-SR04.
DMC.31Чтение аналогового ИК-дальномера Sharp через АЦП.
DMC.32Оценка угла наклона слиянием гироскопа и акселерометра.
DMC.33Оценка уровня вибраций по колебаниям показаний акселерометра.
DMC.34Детект переворота аппарата по акселерометру для turtle-mode.
DMC.35Накопление угла поворота интегрированием угловой скорости.
DMC.36Формирование сигнала коррекции газа для удержания высоты по барометру.
Индикация и сигнал
08Управление адресной лентой WS2812 для навигационных огней.
DMC.38Разные мигания светодиода для состояний: дизарм, арм, ошибка.
DMC.39Громкий прерывистый сигнал для поиска упавшего дрона.
DMC.40Короткая мелодия-приветствие на бузере при старте.
DMC.41Световой/звуковой маяк, передающий SOS кодом Морзе.
DMC.42Инициализация OLED SSD1306 по I2C и вывод точки данных.
DMC.43Вывод одной цифры (число банок или десятки вольт) на 7-сегментный индикатор.
DMC.44Столбик светодиодов, показывающий текущий уровень газа.
Телеметрия и служебное
06Приём строк NMEA по UART и выделение признака валидного фикса.
DMC.46Отправка кадра телеметрии (напряжение, ток, статус) по UART.
DMC.47Отсчёт времени полёта с момента арминга и сигнал по лимиту.
DMC.48Использование watchdog для перезапуска при зависании прошивки.
DMC.49Периодический маяк с засыпанием МК между сигналами.
DMC.50Периодическая запись строки телеметрии в текстовом виде по UART.