Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Радиоуправляемый самолет Arduino | 100% сделай сам

<основной класс="главный сайт" id="главный">

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

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

Обзор

Итак, самолет полностью сделан из пенопласта. Для изготовления фигур я использовал свой станок для резки пенопласта с ЧПУ Arduino, который я уже показывал вам, как я его построил, в предыдущем видео. Хотя я использую станок с ЧПУ для сборки этого радиоуправляемого самолета Arduino, я все же могу сказать, что он на 100% сделан своими руками, потому что станок с ЧПУ также является сборкой своими руками.

Более того, управление самолетом также на 100% самодельное, на основе Arduino и модуля NRF24L01 для радиосвязи.

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

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

Да, и я чуть не забыл упомянуть, что главная особенность этого радиоуправляемого самолета на Arduino — полет, так что да, он может летать.

Проектирование радиоуправляемого самолета — 3D-модель

Я начал с проектирования самолета с помощью программного обеспечения для 3D-моделирования, в данном случае Fusion 360. Я сделал дизайн, взглянув на некоторые коммерческие радиоуправляемые самолеты и следуя некоторым основным рекомендациям или практическим правилам для параметров модели самолета.

Отправной точкой является размах крыльев, и я выбрал 80 см. Отсюда мы получаем длину фюзеляжа, которая обычно составляет 75% от размаха крыла. Что касается аэродинамического профиля или поперечного сечения крыла, я выбрал аэродинамический профиль CLARK Y, популярный выбор для радиоуправляемых самолетов.

Я загрузил форму аэродинамического профиля с сайта airfoiltools.com в виде файла .SVG, а затем импортировал его в Fusion 360. Я соответствующим образом отрегулировал размер, чтобы хорда крыла или длина крыла в направлении потока составляла около 1/5. размаха крыльев.

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

Фюзеляж самолета будет состоять из двух 10-миллиметровых бортов и 50-миллиметровой сердцевины, которая будет полой для размещения электроники.

Скачать 3D модель можно по ссылкам выше. Есть две версии самолета. Версия 1 показана здесь на изображениях, а версия 2 имеет немного меньшую носовую часть, а двигатель можно разместить ближе к передней части, чтобы улучшить воздушный поток.

Генерация G-кодов для самодельного станка для резки пенопласта с ЧПУ

Теперь, поскольку рабочая зона моего станка для резки пенопласта с ЧПУ Arduino ограничена 45 см, а длина фюзеляжа составляет 60 см, мне пришлось сделать фюзеляж из двух частей.

Итак, я вырезал фюзеляж на расстоянии 34 см от передней точки и сделал новый набросок, в котором спроецировал форму и добавил точку рядом с ней. Затем на вкладке «Производство» Fusion 360 я могу сгенерировать G-код для резки фигур.

Здесь я сначала создал новую настройку, в которой я выбрал эскиз в качестве модели, выбрал точку, которую я добавил ранее в качестве начала для настройки, и соответствующим образом отрегулировал оси X и Y.

Затем я выбрал операцию 2D-контур и выбрал или создал новый инструмент диаметром 3 мм, потому что это приблизительный размер надрезов, которые делает горячая проволока, проходя через пенополистирол. Здесь мы также можем установить скорость подачи при резке, которая зависит от самой горячей проволоки и твердости пенополистирола. Я установил 150 мм/м.

Затем в касании геометрии мы можем выбрать контур или форму, которую необходимо вырезать. Что касается высоты, я установил ее на 1 мм, так как на моем станке для резки пенопласта нет движения по оси Z. Наконец, в разделе «Связывание» я выбрал позицию входа, чтобы она была краем, расположенным рядом с исходной точкой.

При этом генерируется траектория инструмента, и мы можем взглянуть на нее, нажав кнопку Simulation. Траектория инструмента должна быть замкнутым циклом за один проход, и если это так, мы наконец можем сгенерировать G-код. Для этого мы можем перейти в Post Processes, выбрать прошивку GRBL, выбрать выходную папку, назвать файл и нажать кнопку публикации.

Затем мы можем сохранить файл, и мы можем увидеть G-код в редакторе WordPad или что-то подобное.

Итак, теперь, когда у нас есть файл G-кода, мы можем загрузить его в универсальный отправитель G-кода и отправить G-код на станок с ЧПУ для создания формы.

Мы можем отметить, что процесс, который я только что показал вам, вероятно, не самый лучший или вообще не профессиональный, но, тем не менее, он помогает заставить G-коды работать с моим самодельным станком для резки пенопласта с ЧПУ. Конечно, для получения более подробной информации об этом станке с ЧПУ DIY вы можете проверить мой конкретный учебник, ссылка находится в описании видео.

Вы можете скачать файлы G-кода здесь:

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

Что касается крыла, я использовал пенополистирол толщиной 10 см, который я обрезал шириной около 30 см, потому что это максимальный размах, который может разрезать мой станок с горячей проволокой. Я поместил два профиля крыльев в один файл с G-кодом и вырезал пару из них.

Чтобы получился размах крыльев 80см, я склею 3 куска по 27см, а чтобы они получились прямыми, я вручную обрезаю концы кусков так, чтобы они были перпендикулярны.

Сборка радиоуправляемого самолета

Итак, вот все куски пенопласта, которые я вырезал на станке с ЧПУ. Три детали спереди, три детали сзади и три детали крыла. Теперь я могу начать их собирать.

Начну с передней части. Я использую клеевой пистолет для склеивания деталей. Горячий клей немного расплавил пенопласт, но я все же смог склеить их этим методом.

Еще один хороший способ склеить пенопласт с помощью 5-минутной эпоксидной смолы. Прежде чем приклеивать другую сторону, сделаю держатель для мотора. Для этой цели я использую алюминиевый профиль шириной 30 мм, который довольно легкий. Я обрезал профиль примерно на 18 см, разметил отверстия для крепления мотора и просверлил их сверлом на 3 мм. Затем я согнул профиль на 90 градусов. Я прикрепил двигатель к держателю с помощью нескольких болтов M3.

Используя эту сборку, я проделал отверстие в передней части пенополистирола. Затем с помощью канцелярского ножа я увеличил отверстие до диаметра 30 мм, совпадающего с диаметром двигателя.

Далее, с другой стороны держателя мотора я сделал 4 отверстия, которые будут служить для фиксации держателя на месте, а также для крепления шасси. Я отметил расположение этих отверстий на фюзеляже и с помощью 4-миллиметрового сверла вручную проделал отверстия в пенопласте. Я сделал еще одну алюминиевую деталь длиной около 7 см с такими же отверстиями, и теперь я могу использовать ее для крепления держателя двигателя.

Используя болты M4, мы можем легко закрепить держатель двигателя на месте, не повредив пенополистирол. Однако я сделаю это позже, поэтому я удалил их и продолжил приклеивать другую сторону. Таким же способом я приклеил и задние части.

Следующим шагом является брак, или соединение передней и задней части фюзеляжа. Чтобы усилить связь, я добавляю между ними простые палочки для барбекю.

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

Затем с помощью универсального ножа я отрезаю два куска пенополистирола толщиной 10 мм, которые будут горизонтальным и вертикальным стабилизаторами. Я скосил края, чтобы они выглядели лучше, а также стали немного более аэродинамическими. Стабилизаторы будут приклеены непосредственно к задней части фюзеляжа, но прежде чем я это сделаю, я сначала сделаю поверхности их контроллеров.

Для этого я обрезал примерно 1/3 их длины, и это будет их поверхность управления или руль высоты для горизонтального стабилизатора и руль направления для вертикального стабилизатора. Чтобы иметь возможность шарнирно прикрепить рули к стабилизаторам, мне нужно было скосить их контактную поверхность. Опять же, я сделал это с помощью канцелярского ножа, и на самом деле нам нужен довольно острый нож, чтобы сделать эти порезы чистыми.

Я продолжил делать стабилизаторы немного более аэродинамическими. Для этого я использовал наждачную бумагу и закруглил их передние кромки. Я также немного отшлифовал задние кромки.

Теперь, так как пенополистирол довольно хрупкий, я собираюсь обернуть всю площадь стабилизаторов и их рулей простой упаковочной лентой. Это не только сделает детали прочнее, но и улучшит аэродинамику, так как лента намного более гладкая, чем сам пенополистирол.

Обмотав его, я обрезал нижнюю часть руля под углом 45 градусов, чтобы освободить место для свободного движения руля высоты.

Теперь, наконец, я могу сделать петлю для него, и я снова делаю это с помощью упаковочной ленты. Итак, я просто соединил две части вместе лентой, и получилась довольно прочная петля.

Я повторил этот процесс и для горизонтального стабилизатора. Чтобы сделать петлю еще прочнее, мы также можем добавить ленту с другой стороны. Используя ту же ленту, я обернул стороны, и на этом два стабилизатора готовы.

Я перешел к приклеиванию горизонтального стабилизатора к фюзеляжу с помощью горячего клея. Для крепления вертикального стабилизатора сначала я вставил и приклеил 3 палочки для барбекю через горизонтальный стабилизатор и фюзеляж. Затем я намазал их и контактную поверхность горячим клеем и плотно прижал стабилизатор.

На этом мы закончили со стабилизаторами и можем приступить к созданию крыла.

Итак, как я уже сказал, крыло будет состоять из 3-х частей из-за ограниченной рабочей зоны моего станка для резки пенопласта с ЧПУ своими руками. Опять же, я использую палочки для барбекю, чтобы придать дополнительную прочность при склеивании деталей. Чтобы прикрепить их точно по линии, я использую прямую деревянную планку, по которой я могу двигать детали.

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

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

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

Итак, следующий шаг — изготовление рулей крыльев или элеронов. Я собираюсь сделать их шириной 22 см и длиной около 1/4 хорды крыла. Чтобы иметь возможность свободно двигаться, я отрезал примерно полсантиметра от него.

И, конечно же, я завернул все края, открытые вырезкой. Затем я скосил нижнюю часть элерона под углом 45 градусов, и так же, как показано ранее, теперь я могу прикрепить его к крылу. Для того, чтобы поместиться на фюзеляже и иметь возможность легко прикрепить крыло к фюзеляжу, мне пришлось сделать еще одно углубление посередине крыла.

Далее пришло время установить серводвигатели для управления элеронами. Я использую микро сервоприводы 9g. Я отметил место, где они будут размещены, и с помощью канцелярского ножа аккуратно сделал отверстие в крыле, чтобы в него мог поместиться сервопривод. Между тем, я снял кронштейны крепления сервоприводов, чтобы их форма была проще. Я намазал сервопривод клеем и вставил в отверстие.

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

Я продолжил делать контрольные рожки. Я собираюсь сделать их из алюминиевого профиля, который я использовал ранее для изготовления держателя двигателя. Я рисую форму вручную, чтобы она примерно соответствовала высоте рупора серводвигателя и свисала над точкой шарнира. Я вырезал форму с помощью ножовки.

Я буду использовать стальную проволоку диаметром 2 мм в качестве управляющего стержня, поэтому я сделал отверстие в рупоре с помощью сверла диаметром 2,5 мм. Я сделал небольшой паз в элероне и приклеил рупор на место. Затем я измерил, какой длины должен быть управляющий стержень, и с помощью плоскогубцев сделал его из стальной проволоки диаметром 2 мм. Следует отметить, что при измерении и вставке управляющих стержней серводвигатели должны находиться в нейтральном положении.

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

Далее мне нужно установить сервоприводы для управления рулем направления и рулем высоты. Здесь я также использую те же микросервоприводы 9g, и процесс их установки на самом деле почти такой же, как я только что объяснил. Сначала я отметил место, сделал отверстие с помощью канцелярского ножа и приклеил два двигателя на место. Здесь они расположены рядом друг с другом, но их выходные валы находятся на противоположной стороне.

Опять же, я сделал небольшой паз в фюзеляже, чтобы провести проводку сервоприводов к отсеку электроники. Я обмотал сервоприводы куском скотча и сделал отверстия для рожков сервоприводов. Таким же образом, как показано ранее, я сделал контрольные рожки и приклеил их на место с помощью клеевого пистолета. Наконец, я сделал соответствующий стержень управления и установил его соответствующим образом.

Хорошо, теперь я собираюсь установить два деревянных стержня диаметром 8 мм, которые будут служить для крепления крыла к фюзеляжу. Отверстия просверлил вручную сверлом на 6 мм. Стержни должны свисать примерно на 1 см с обеих сторон. Я также прикрепил их к фюзеляжу горячим клеем, и вот как они на самом деле работают.

Для крепления крыла к фюзеляжу используем резинки. Таким образом, крыло можно легко снять, а в случае раздавливания резинки значительно уменьшат воздействие на крыло. При этом сборка достаточно прочная.

Далее я собираюсь сделать шасси. Для этой цели, опять же, я буду использовать алюминиевый профиль и колеса из пенопласта. Я сделал их на станке с ЧПУ, как показано ранее. Я сделал небольшие канавки на алюминиевом профиле, чтобы его можно было легко согнуть. Вот как на самом деле должно выглядеть шасси.

Для крепления колес к профилю я буду использовать болты М5 и алюминиевую трубку с внутренним диаметром 6 мм. Трубка крепится к кронштейну с помощью болта и гайки M5, а по бокам я добавил шайбы M5, чтобы колесо могло свободно вращаться вокруг трубки. Таким же методом я сделал колесо для задней части самолета.

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

Электроника для радиоуправляемых самолетов Arduino — принципиальная схема

Итак, как я уже сказал, этот радиоуправляемый самолет полностью основан на Arduino, и передатчик, и приемник являются пользовательскими сборками на основе платы Arduino Pro Mini.

У меня уже есть подробные руководства по сборке и работе передатчика и приемника, поэтому вы можете ознакомиться с ними для получения более подробной информации. Здесь я объясню принципиальную схему и принцип работы этого радиоуправляемого самолета Arduino, а также то, как все должно быть подключено.

Вы можете получить компоненты, необходимые для этого проекта, по ссылкам ниже:

Итак, радиосвязь построена на модулях NRF24L01. Хотя это может показаться немного сложным, этот передатчик DIY Arduino на самом деле довольно прост. У него есть несколько контроллеров, джойстики, потенциометры и несколько кнопок, и он постоянно отправляет их данные на приемник. Приемник принимает эти данные по беспроводной связи через модуль NRF24L01 и выводит соответствующие команды на сервоприводы и бесколлекторный двигатель для управления самолетом.

Управление сервоприводами и бесколлекторными двигателями с помощью Arduino также довольно просто, поэтому я думаю, что вся эта концепция радиоуправляемого самолета Arduino не так уж сложна для понимания. Бесколлекторный двигатель, который я использую в этом проекте, имеет номинальную мощность 1000 кВ и требует ESC на 30 А. ESC управляет двигателем, а также обеспечивает питание Arduino и сервоприводов с помощью функции Battery Eliminator Circuit, которая выдает 5 В. А питание регулятора скорости и бесколлекторного двигателя подается от литий-полимерного аккумулятора 3S.

Я добавил еще одну функцию в этот самолет, и это простой светодиод, который будет показывать, разряжена ли батарея. Используя простой делитель напряжения, мы снижаем 12 В, поступающие от Li-Po батареи, примерно до 5 В, чтобы мы могли считывать их с аналогового входа Arduino и таким образом знать, когда напряжение батареи упадет ниже 11 В. У приемника по-прежнему есть несколько свободных каналов, поэтому мы можем добавить к этому самолету дополнительные функции, если захотим, например, стробоскопы, закрылки, механизмы опускания и т. д.

Завершение сборки

Тем не менее, давайте закончим сборку. Итак, я подключил все, как показано на схеме. На канале 1 находится руль направления, на канале 2 — руль высоты, на каналах 3 и 4 — элероны, а на канале 6 — светодиод. Я приклеил светодиод с одной стороны и выключатель питания с другой стороны.

Здесь мы можем отметить, как шасси крепится к самолету с помощью двух болтов на держателе двигателя. В двух словах, я просто вставил двигатель с держателем через это верхнее отверстие, закрепил болтами, как показано ранее, и также прикрепил шасси. Вставляя держатель, я также добавил несколько резинок, чтобы они могли удерживать аккумулятор на месте.

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

Спереди я прикрепил пропеллер к двигателю, и теперь осталось проверить центр тяжести или центр тяжести самолета.

Центр тяжести, вероятно, является наиболее важным фактором, будет ли самолет летать хорошо или вообще летать.

Первоначально у самолета была тяжелая хвостовая часть, поэтому я переместил батарею вперед и добавил немного веса (несколько болтов и гаек), и он стал сбалансированным.

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

Тестирование радиоуправляемого самолета Arduino

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

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

В нижней части отсека для электроники я сделал два отверстия, одно для выхода воздуха, поступающего из переднего отверстия, а другое для вывода наружу антенны NRF24L01 для обеспечения достаточного радиуса действия.

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

Фюзеляж снова сломался, что говорит о том, что этот пенопласт довольно слаб для этой цели. Я сделал новый фюзеляж и на этот раз прикрепил его клейкой лентой.

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

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

Теперь проблема заключалась в том, что после нескольких столкновений я сломал все 4 пропеллера, которые у меня были, поэтому в этой попытке я использую приклеенный пропеллер. Разумеется, при взлете пропеллер разорвало.

Я попробовал с другим склеенным пропеллером, сделанным из двух уже сломанных пропеллеров, и на этот раз мне действительно повезло, и самолет наконец-то взлетел нормально.

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

Тем не менее, поскольку это был мой первый опыт полета на радиоуправляемом самолете, я думаю, что могу считать этот проект успешным, так как мне удалось доказать концепцию создания полностью основанной на Arduino системы для управления радиоуправляемыми самолетами.

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

Чтобы решить эту проблему, я добавил в программу функцию, с помощью которой мы можем контролировать реакцию элементов управления с помощью правого потенциометра на передатчике. Кроме того, я добавил функцию, с помощью которой мы можем настроить руль направления с помощью левого потенциометра.

Код для радиоуправляемых самолетов Arduino

Итак, наконец, давайте взглянем на код Arduino этого радиоуправляемого самолета на основе Arduino и завершим этот проект. Код точно такой же, как описано в предыдущем уроке, для управления сервоприводами и бесколлекторными двигателями с помощью приемопередающих модулей NRF24L01.

Вот полный код для этого проекта радиоуправляемого самолета на Arduino:

/*
   Arduino RC Airplane
   == Receiver Code =
  by Dejan, www.HowToMechatronics.com
  Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>

#define led 9

RF24 radio(3, 2);   // nRF24L01 (CE, CSN)
const byte address[6] = "00001";
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;

Servo throttle;  // create servo object to control the ESC
Servo rudderServo;
Servo elevatorServo;
Servo aileron1Servo;
Servo aileron2Servo;


int throttleValue, rudderValue, elevatorValue, aileron1Value, aileron2Value, travelAdjust;
// Max size of this struct is 32 bytes - NRF24L01 buffer limit
struct Data_Package {
  byte j1PotX;
  byte j1PotY;
  byte j1Button;
  byte j2PotX;
  byte j2PotY;
  byte j2Button;
  byte pot1;
  byte pot2;
  byte tSwitch1;
  byte tSwitch2;
  byte button1;
  byte button2;
  byte button3;
  byte button4;
};
Data_Package data; //Create a variable with the above structure
void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_MAX);
  radio.startListening(); //  Set the module as receiver
  resetData();
  throttle.attach(10);
  rudderServo.attach(4);   // CH1
  elevatorServo.attach(5); // CH2
  aileron1Servo.attach(6); // CH3
  aileron2Servo.attach(7); // CH4
  pinMode(led, OUTPUT);    // CH6
}
void loop() {
  // Check whether we keep receving data, or we have a connection between the two modules
  currentTime = millis();
  if ( currentTime - lastReceiveTime > 1000 ) { // If current time is more then 1 second since we have recived the last data, that means we have lost connection
    resetData(); // If connection is lost, reset the data. It prevents unwanted behavior, for example if a drone jas a throttle up, if we lose connection it can keep flying away if we dont reset the function
  }
  // Check whether there is data to be received
  if (radio.available()) {
    radio.read(&data, sizeof(Data_Package)); // Read the whole data and store it into the 'data' structure
    lastReceiveTime = millis(); // At this moment we have received the data
  }

  // Controlling throttle - brushless motor with ESC
  throttleValue = constrain(data.j1PotY, 80, 255); // Joysticks stays in middle. So we only need values the upper values from 130 to 255
  throttleValue = map(throttleValue, 80, 255, 1000, 2000);
  throttle.writeMicroseconds(throttleValue);

  // Adjusting the servos responsiveness
  travelAdjust = map(data.pot2, 0, 255, 0, 25);  
  
  // Elevator control
  elevatorValue = map(data.j2PotY, 0, 255, (85 - travelAdjust), (35 + travelAdjust));
  elevatorServo.write(elevatorValue);
  
  // Ailerons control
  aileron1Value = map(data.j2PotX, 0, 255, (10 + travelAdjust), (80 - travelAdjust));
  aileron1Servo.write(aileron1Value);
  aileron2Servo.write(aileron1Value);

  // Rudder trimming function
  if (data.j1PotX > 127) {
    rudderValue = data.pot1 + (data.j1PotX - 127);
  }
  if (data.j1PotX < 127) {
    rudderValue = data.pot1 - (127 - data.j1PotX);
  }
  // Rudder control
  rudderValue = map(rudderValue, 0, 255, (10 + travelAdjust), (90 - travelAdjust));
  rudderServo.write(rudderValue);

  // Monitor the battery voltage
  int sensorValue = analogRead(A3);
  float voltage = sensorValue * (5.00 / 1023.00) * 3; // Convert the reading values from 5v to suitable 12V i
  // If voltage is below 11V turn on the LED
  if (voltage < 11) {
    digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
  }
}
void resetData() {
  // Reset the values when there is no radio connection - Set initial default values
  data.j1PotX = 127;
  data.j1PotY = 80; // Motors stops // the central point of the joystick is not starting point for the throttle, its at value of 80 instead of 127
  data.j2PotX = 127;
  data.j2PotY = 127;
  data.j1Button = 1;
  data.j2Button = 1;
  data.pot1 = 1;
  data.pot2 = 1;
  data.tSwitch1 = 1;
  data.tSwitch2 = 1;
  data.button1 = 1;
  data.button2 = 1;
  data.button3 = 1;
  data.button4 = 1;
}Code language: Arduino (arduino)

Описание: I will just quickly explain the main functions of the code and for all other details you can check the previous tutorial. So, after receiving the data coming from the transmitter, we use the Joystick1 Y axis value for controlling the throttle of the airplane. We convert the values from 80 to 255 coming from the transmitter into values from 1000 to 2000 which are used for controlling the brushless motor.

For controlling the elevator, we use the Joystick2 Y axis value which we convert to values from 85 to 35. These values directly set the position of the servo motor in degrees. Right next to them we can note that we have the travelAdjust variables, which value depends on the position of the right potentiometer. We actually use that value to decrease the position or the movement of the servos although the joysticks will go to their maximum position.

The same principle is applied for controlling the ailerons and the rudder.  Additionally, we use the data from the left potentiometer to adjust the neutral point of the rudder.

Lastly, using the analogRead() function and some math we control the battery voltage indicator LED.

So that’s it. I would like to hear your thoughts about this project in the comments section below, especially from you who have experience with building and flying RC airplanes. For those who are beginners and thinking of getting into this, I would suggest to check the FliteTest YouTube channel because it’s an amazing resource for learning about this RC world. I will put a link to it in the description.

I hope you enjoyed this project and learned something new. Feel free to ask any question in the comments section below and don’t forget to check my Arduino Projects Collection.


Производственный процесс

  1. Музыкальный визуализатор DIY LUMAZOID для Arduino
  2. Сделайте машинку для письма домашнего задания дома
  3. Консоль редактирования DIY Photoshop с использованием Arduino Nano RP 2040
  4. Вольтметр своими руками с использованием Arduino и смартфона
  5. Скейтборд виртуальной реальности «Сделай сам»
  6. Осциллограф 10 Гц-50 кГц для самостоятельного изготовления на ЖК-дисплее 128x64
  7. Сделай сам Arduino РАДИОНИКА Лечение MMachine
  8. Самодельный двухмерный гоночный симулятор
  9. Локальная и удаленная программируемая роботизированная рука
  10. Идея DIY с RFID