суббота, 13 июня 2020 г.

Радиоуправляемый самолёт на Arduino nano

Arduino и радиомодули nrf24 можно использовать для создания на их основе системы радиоуправления самолетом. До появления подобных модулей, микроконтроллеров и даже транзисторов такие системы делали на вакуумных лампах и реле. Основное требование к таким системам - это малый вес т.к. чем больший вес имеет система управления тем меньше вероятность что самолет сможет лететь. Чтобы самолет мог лететь, подъемная сила его должна быть больше чем сила притягивающая его к земле. Подъемная сила зависит от площади крыла, его профиля, скорости самолета чем меньше будет вес самолета тем меньше может быть его крыло и его скорость но для того чтобы максимально увеличить шансы на успешный полет нужно и максимально снизить вес и максимально увеличить подъемную силу путем увеличения площади крыла. Для снижения веса желательно реализовать систему с как можно меньшим количеством разных плат, модулей, радиодеталей и т.д. Ардуино лучше использовать какое нибудь маленькое например Arduino pro mini или Arduino nano а также использовать маленькие и мощные моторы и маленький и мощный литий ионный аккумулятор для радиоуправляемых авиамоделей. Уменьшить вес аккумулятора можно ценой времени в течении которого он может работать. Для того чтобы не надо было использовать стабилизатор напряжения на 3.3 В для радиомодуля и небольшой аккумулятор с напряжением 3.7 В нужно использовать Arduino работающее от напряжения 3...3.7 В. Поэтому в схеме приемника ниже имеется Arduino nano
Рисунок 1 - Схема приемника

Для управления моторами используются полевые транзисторы управляемые логическими уровнями т.к. только такие транзисторы могут нормально открыться от такого низкого напряжения и передать моторам достаточную мощность из аккумулятора. Ардуины с низким напряжением питания имеют более низкую тактовую частоту но в данном случае это не так важно т.к. ардуино не делает ничего требующего высокого быстродействия и производительности. Для поворота влево или в право один из моторов вращает пропеллер быстрее другого так образуется ассиметричная тяга и самолет по идее должен повернуть. Для того чтобы управлять высотой будет изменяться скорость вращения обоих пропеллероы т.к. чем она больше тем быстрее летит самолет и тем больше подъемная сила и чем медленнее летит самолет тем она меньше. Это не самый лучший способ управления самолетом но зато для него не требуются дополнительные рули, сервомоторы и т.д. которые утяжеляют конструкцию и уменьшают вероятность полёта. Пульт управления самолетом не обязательно должен быть лёгким. Можно даже сделать универсальный пуль для управления разными электронными самоделками.
Рисунок 2 - Схема пульта управления

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


Скетч приемника приведен в текстовом поле:


Данный скетч нормально откомпилируется если версия Arduino IDE будет 1.6.4
В более новых версиях IDE имеются другие версии библиотеки для радиомодуля nrf24 и скетч должны быть немного другими. Чтобы они подходили необходимо следить за обновлениями  и соответствующим образом менять их или устанавливать ранние версии Arduino IDE. Посмотреть как летает самолет и послушать рассказ про него можно на видео:
Программа для расчёта подъемной силы крыла:

плотность воздуха= кг/м^3
скорость воздуха над крылом= м/с
скорость воздуха под крылом= м/с
площадь крыла=м^2

подъемная сила=кг