60 дней фильмов
и сериалов
18+
Условия подписки Плюс
Мульти: clck.ru/YMaCq
VC60
Забрать

Arduino ракета на 3D принтере - учимся приземлять ракеты дома

Всем добрый день, сегодня я хотел бы поделиться своим опытом проектирования ракеты с управлением вектора тяги. Так получилось, что я долго сидел дома и решил купить 3D принтер, ну и конечно первое же, что я решил распечатать - модель ракеты типа «Батут-М», которую можно приземлять и беспроводной меч-огнемет.

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

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

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

Занимался ли я созданием ракет раньше? Никогда!!! Ну правда в одной моей iOS игре на самописном Objective-C движке «Minimal Man» - можно из ракетомета стрелять ракетами, например ограбить магазин, выпустив ракету по продавцу. В игре все ракеты взрываются.

Я выбрал 3D-принтер «Creality Ender-5», но сейчас уже доступна версия «Creality Ender-5 Pro» с тихими драйверами. Мои же драйвера шаговых моторов пищали при печати, но я купил обновленную плату с Aliexpress и прокачал принтер до «Pro» версии вручную. Теперь он работает бесшумно.

Ох, первое что я печатаю в жизни - и уже ракета, которую я хочу приземлить!!! Ну так запускаем программу SketchUP и проектируем 3Д модель.

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

Как видно на 3Д модели нижней части ракеты - для отклонения вектора тяги я использую самые дешевые сервомоторы SG90 с Aliexpress, которые конечно же желательно заменить на более элитные. Я заказал дорогие аналоги данных сервомоторов с сайта HobbyKing - но к сожалению мне их так и не доставили, вернули деньги. Сейчас я все еще ищу качественные сервомоторы, если можете что-нибудь посоветовать, отпишите в комментариях, буду очень рад совету.

Пробуем распечатать 3Д модель нижней части ракеты, которую я называю «Система трех колец» или «Нагибатор двигателя»

Естественно, я сделал мобильное приложение «Ракета» для управления ракетой через iPad, iPhone, с джойстика от PlayStaton или с любой другой bluetooth кнопки, подключил сервомоторы и все оттестировал. Несмотря на то, что я печатаю в первый раз, распечатать все получилось очень легко, и буквально за несколько минут мне удалось собрать тестовую модель отверткой. Очень советую аккумуляторную отвертку от Xiaomi, с ней собирать делали очень даже приятно, детали собираются просто, как конструктор.

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

Затем я подключил соосные моторы к системе отклонения «трех колец» через дешевые китайские регуляторы бесколлекторных моторов на 30А и протестировал тягу с iPad и с джойстика и убедился, что тяга есть.

Собираем нашу модель отверткой, прикручиваем держатели для Arduino Nano и аккумулятора.

Почему же я решил делать все на итальянском микроконтроллере Arduino, да и еще на версии Arduino Nano? Все дело в том, что многие разработчики дронов и коптеров из России во всех своих статьях пишут, что не нужно разрабатывать полетный контроллер самому, нужно покупать готовые. Напомню, что полетный контроллер - это так называемые «мозги» устройства, то есть другими словами все советуют покупать готовые «мозги» (зарубежного производства).

Так-так-так, то есть все считают, что разработать свой полетный контроллер «с нуля» - это очень сложно. Из аргументов - «там сложно реализовать PID контроллер». Вообщем для того, чтобы выяснить в чем сложность, я решил начать с платы Arduino, все-таки это хобби у меня такое - ракету собирать, почему бы и не попробовать на Arduino. Если ее мощности не будет хватать, я смогу заменить ее на более мощную плату. Если вы знаете, на какую плату ее можно заменить, пожалуйста посоветуйте что-нибудь подходящее в комментариях.

Что же такое PID регулятор и почему его так боятся? Пропорционально-интегрально-дифференцирующий (ПИД) регулятор, согласно Википедии, имеет единственное предназначение - в поддержании заданного значения r некоторой величины y с помощью изменения другой величины u.

Посмотрим формулу:

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

Но дело в том, что в интернете много готовых реализаций классов PID контроллера, которые выглядят просто как готовая функция, которой передаешь отклонение ракеты и она просто возвращает угол, на который нужно повернуть ракету! Всего-то!

Итак, определим два параметра нашей ракеты, числа «input_x» и «input_y»:

«input_x» - отклонение ракеты влево-вправо от вертикального положения

«input_y» - отклонение ракеты взад-вперед от вертикального положения

Если «input_x» больше нуля, значит ракета наклонилась вправо на «input_x» градусов, если меньше нуля - значит ракету отклонили влево. Тоже самое и для «input_y». Значит при нулевом «input_x» и «input_y» - ракета стоит вертикально.

Данные значения получаем от IMU сенсора с помощью функции IMU.readAcceleration, который уже встроен в мою версию Arduino Nano (так же в моей Arduino Nano уже есть встроенный барометр, для определения высоты, датчик температуры, bluetooth модуль, микрофон и другие датчики. И все это - на крохотной плате):

IMU.readAcceleration(input_z, input_x, input_y);

Теперь у нас есть значения отклонения ракеты, можно инициализировать PID контроллер:

double P = 1.0, I = 0.05, D = 0.03; double refresh_time = 10; PID xPID(P, I, D, refresh_time); PID yPID(P, I, D, refresh_time); xPID.setpoint = 0; // Ноль - для вертикальной стабилизации по оси X yPID.setpoint = 0; // Ноль - для вертикальной стабилизации по оси Y

При создании PID регулятора нужны три числа:

P - Пропорциональная составляющая

I - Интегрирующая составляющая

D - Дифференцирующая составляющая

refresh_time - интервал, с которым мы будем опрашивать наш PID контроллер и получать значение для сервомотора, например раз в 10 миллисекунд.

Данные коэффициенты подбираются вручную либо при помощи специальной библиотеки PIDtuner на стенде, попробую немного объяснить, на что влияют эти коэффициенты:

P - Пропорциональная составляющая для получения выходного сигнала, противодействующему отклонению регулируемой величины от заданного значения (в нашем случае нуля), наблюдаемому в данный момент времени. Допустим мы установим коэффициент P=1, тогда при отклонении ракеты вправо на 15 градусов, сервомотор отклонит мотор в противоположную сторону на 15 градусов для того, чтобы ракета смогла восстановить вертикальное положение. Если бы коэффициент мы установили в значение P=2, то при отклонении ракеты на 15 градусов, сервомотор отклонил бы вектор тяги на 30 градусов в противоположном направлении.

I - Интегрирующая составляющая, коэффициент, благодаря которому ракету меньше «колбасит влево-вправо», пока она пытается стабилизироваться в вертикальном положении. Коэффициент, который пытается загасить волну отклонений «влево-вправо» как можно быстрее.

D - Дифференцирующая составляющая, коэффициент, который предсказывает, что пока ракету колбасит «влево-вправо» её может заносить по инерции, то есть этот коэффициент позволяет затормозить ракету заранее перед тем, как она приняла вертикальное положение, то есть избежать попадания ракеты в дрифт. Дрифт коэффициент, я его называю именно так.

Естественно, данные описания этих коэффициентов я привел в своей упрощенной интерпретации, подробнее можете сами почитать на википедии. В реальном проекте конечно есть много нюансов, например из-за значения «I» внутри функции PID-контроллера накапливается интегральная ошибка, которую нужно обнулять перед запуском ну либо хранить ошибку в массиве чисел и удалять старые значения методом FIFO (англ. first in, first out — «первым пришёл — первым ушёл»), но это все экспериментальные функции, для общего понимания можете про это пока не думать.

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

Теперь раз в 10 миллисекунд нам нужно получить значение для отклонения сервомоторов «output_x» и «output_y»:

// Получение значений отклонения для сервомоторов из PID-регулятора: xPID.input = input_x; yPID.input = input_y; output_x = xPID.getResultTimer(); output_y = yPID.getResultTimer();

На данном этапе у нас есть значения «output_x» и «output_y» - поворачиваем наши сервомоторы на это значение.

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

Для того, чтобы получить значения P, I, D коэффициентов автоматически, я распечатал тестовый стенд, на котором ракета может свободно вращаться, затем подключил библиотеку PIDtuner, запустил, ракета немного покачалась туда-сюда и на выходе PIDtuner я получил в логе коэффициенты:

double P = 0.55, I = 0.05, D = 0.03;

Теперь вписываем эти коэффициенты в мобильное приложение и пробуем запустить ракету

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

Сборку ракеты я записал на видео (ссылка ниже), на видео видно, что ракету в полете немного закручивает по часовой стрелке, все дело в китайских регуляторах моторов, которые раскручивают один мотор немного быстрее, чем другой. Но ничего, в следующих обновлениях я попробую заменить регуляторы или добавить еще один ПИД-регулятор на «повороты» - и если ракету начнет закручивать, можно попробовать использовать значение из ПИД-регулятора для понижения скорости мотора, который крутится быстрее другого.

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

Полное видео можете посмотреть по ссылке:

Arduino DIY ракета на 3D принтере

Так же я по быстрому записал видео про сборку «беспроводного меча-огнемета», это видео вы так же можете найти на YouTube канале:

Arduino DIY меч-огнемет на 3D принтере

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

Заранее большое спасибо за фидбэк и критику :)

!function(e){var o={};function t(n){if(o[n])return o[n].exports;var r=o[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,t),r.l=!0,r.exports}t.m=e,t.c=o,t.d=function(e,o,n){t.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,o){if(1&o&&(e=t(e)),8&o)return e;if(4&o&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&o&&"string"!=typeof e)for(var r in e)t.d(n,r,function(o){return e[o]}.bind(null,r));return n},t.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(o,"a",o),o},t.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},t.p="",t(t.s=0)}([function(e,o,t){"use strict";t.r(o);const n=e=>{if("object"==typeof Air){Air.import("module.ajaxify").one("Before page changed",()=>{e&&e()})}};((e="teaser",o=[],t="vc")=>{const r={root:e,index:e+"--index",entry:e+"--entry",loaded:e+"--loaded",location:e+"--%location%",sitename:`${e}--${window.__codename||t}`},a=document.querySelector("."+r.root),i=document.querySelector('[air-module="module.feed"]');if(a){a.classList.add(r.sitename),-1===r.location.indexOf("location")&&a.classList.add(r.location),i?a.classList.add(r.index):a.classList.add(r.entry);const e=()=>{a.classList.add(r.loaded)};return new Promise(t=>{var i;(i=o,Promise.all(i.map((function(e){return new Promise((function(o){var t=document.createElement("img");t.onload=()=>{o(t)},t.onerror=o,t.src=e}))})))).then(()=>{t({showBanner:e,oneBeforePageChange:n,rootHTML:a,css:r,siteName:window.__codename})})})}})("kpsk-footer",["https://leonardo.osnova.io/db4d29e8-6b05-57c9-a668-8be251b5999f/","https://leonardo.osnova.io/4bc540c7-94c3-523d-a568-289bb3048c90/","https://leonardo.osnova.io/f9b0fdc7-0122-5954-86d2-a9c7b69464e5/","https://leonardo.osnova.io/b955990b-dbc0-5bf5-b6b4-d580e1ae8174/"]).then(e=>{e.showBanner()})}]);
0
20 комментариев
Популярные
По порядку
Написать комментарий...

Великолепный, сложный проект. Желаю вам удачи. Было интересно читать!

10

Спасибо)

1

Блин, если парень в домашних условиях, из условных "бутылки и клея" собрал возвращаемую ракету, а Роскосмос даже близко к этому не подошел, то я хз зачем вообще Роскосмос нужен :D

Я понимаю, что пилить деньги на старых одноразовых ракетах и на имитации разработок очень хочется, но статистика запусков говорит сама за себя )

В 2020 РФ осуществила 17 пусков против 25 годом ранее. В то же время США, в основном благодаря более коммерчески привлекательным пускам СпейсХ, в 2020 осуществила 37 пусков, а годом ранее 21, что прямо указывает на то, что коммерция уходит к Маску.

Если так хочется пилить, то есть же простая математика - лучше попилить по 2 условных миллиона с 10 пусков, чем 10 млн с одного ) Неужели так сложно это понять ))

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

Я негодую, а автор молодец )

7

Врети вы все. Путин сказал, что Россия опережает другие страны в космосе на 5-7 лет

2

)))))))))))))))

1

Потрясающе! Жму руку! Сразу ассоциация с ракетами spacex! У вас красота получилась!

6

Прошу прощения, но это просто охренеть как круто.

5

> Очень советую аккумуляторную отвертку от Xiaomi, с ней собирать делали очень даже приятно

Довольно странно эту строчку было видеть среди сплошных ios ;)
Вот ведь затык-то, сяоми отвёртку сделал, а эпл нет ещё.

А так, люблю такие статьи читать, хобби это прекрасно!

3

Отличный проект! Спасибо за статью. Увлекательно

3

Вот такие посты приятно читать, когда человек создает технически сложные вещи сам, в своей квартире. Удачи в проектах!

3

Офигенно. А можно настоящую ракету так сделать - на жидком топливе?

1

Товарищ майор, это игрушка, никаких ракет на жидких топливах никто не делает.

4
Легендарный рубин

Класс, спасибо!

1

Молодец. Главное не делайте это в многоквартирных жилых домах.

1

Автору большой респект! Такие проекты повышают интерес к робототехнике и инженерии. Возможно даже бывшие инженеры вновь откроют свои САПР и начнут мини проекты, как хобби офк ;)

1

Огромный респект автору - обязательно полетит! Особенно понравился "отладочный" двигатель с соосными винтами. А как планируется регулировать тягу на твердотопливном?

1

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

0

Очень крутая работа! Хотя я удивился под конец, что "ракета" вовсе не ракета, а вертолет. Почему двигатель ракетный не поставишь? Или это пока для тестов управления полетом?

1

Когда в детстве строил ракеты (совсем не возвращаемые) помню учитывал центр тяжести и центр давления. Думаю тебе это должно помочь. Первое, что нагуглилось: http://kia-soft.narod.ru/interests/rockets/theory/stability/stability.htm

1

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

0
Читать все 20 комментариев
Хочу кухню как у подруги: зачем в Циан сделали поиск квартир по фото

Рассказывает Юлия Зыкова, руководитель команды «Аудитория» в Циан.

ТОП-17 ошибок, которые съедают конверсию лендинга на завтрак
Как у меня украли 600 тысяч с карты, а «Тинькофф» нарушает федеральный закон

Спойлер: я не вводил никуда код, не переходил по ссылкам и не сообщал данные карты.

Мы сделали бот, который печатает и отправляет ваши фото маме. В 2 клика
Катя со свежими фотками для родителей

Мы запустили Kind Bot — доброго бота, которому в 2 клика можно скинуть свои фотки. Он их напечатает и отправит по почте вашей маме. Или другому близкому человеку.

Возник по просьбе бразильских банкиров и стал любимым напитком солдат во время Второй мировой: история Nescafe Статьи редакции

В 2021 году Nescafe — крупнейшее подразделение Nestle и бренд, который оценивается больше чем в $20 млрд. По собственным данным компании, в мире каждую секунду выпивают более 5000 чашек напитка.

Дегустация Nescafe National Museum
Завод по производству идей. Как работают акселераторы, зачем они нужны стартапам и куда идти с идеей прямо сейчас

По данным Startup Genome, 9 из 10 стартапов терпят неудачу. Возможных причин «смерти» много: недостаточно протестированная гипотеза, неподтвержденная юнит-экономика, неверная стратегия или просто неудача в подходе к продажам.

Новый пролетариат

Очень давно один из классиков написал ёмкую по тогдашним временам фразу «пролетариату нечего терять, кроме своих цепей» Сейчас сложно понять её суть, но тогда она была понятна всем. Рабочий обладал только своими «руками» и это было единственное, чем он владел, абсолютное большинство жило от зарплаты до заплаты в арендованном жилье и не обладала…

Опыт возврата денег за обучение дизайну у Yakovlevv.com. Тварь я дрожащая или право имею?

В данной статье приведен мой личный опыт покупки данных курсов, мои оценочные суждения, а также сухие факты, в виде скриншотов и аудиозаписей из моей личной переписки с владельцем этих самых курсов, на тот момент исполняющего услуги как ИП Яковлев Виталий Борисович ( ОГРНИП: 319784700156839 ), сейчас же, работающего от лица ФОП Торб'як Тетяна…

МТС не удалила привязанные к номеру персональные данные владельца после перехода номера к другому человеку

Какое-то время я пользовалась телефонным номером МТС, годах в 2015-18х. Номер юзался только для мессенджеров, симку в поездке вынула и куда-то задевала, в итоге номер перешел другому человеку. На звонки номер не отвечал, абонент был не абонент. В 2019 узнавала в салоне, можно ли его выкупить, сказали - увы, уже 2х владельцев сменил. Ну нет и нет.…

Из науки в IT: как создать свой стартап и стать преподавателем

Как перейти в IT из другой сферы? Как разработать курс, которому нет аналогов? Как студенту получить максимум пользы от занятий? Рассказывает преподаватель OTUS Сергей Окатов, руководитель курсов «Kotlin Backend Developer» и «Kotlin Developer. Basic».

Бизнес — как ребенок: как мамы совмещают свое дело с заботой о детях

Как совмещать бизнес и семью? Ко Дню матери своими историями поделились бизнесвумен, которые работают c ЮKassa и занимаются детьми. Читайте, как им удается сохранять жизненный баланс и добиваться успеха.

null