Как всё начиналось
Всех приветствую. Я Максим и хочу поделиться информацией о том, как собирал радиоуправляемую подводную лодку без каких-либо знаний об электронике в начале своего пути.
Сам я по образованию художник анимации и компьютерной графики — программированием или электроникой никогда не занимался. У меня имелся только небольшой запас знаний о пайке, которые передал мне мой дед, когда я еще был школьником начальных классов.
Всю жизнь меня интересовала тема подводных исследований, началось всё тогда же, в детстве, с Ж.И. Кусто, а закончилось разработкой игры про подледные океаны Европы. Но, впрочем, сейчас не об этом.
Решив, что пора увлечения перевести в плоскость практики — я отправился на Youtube. Получил горсть самых базовых знаний и дальше мой путь лежал уже на AliExpress, как и у многих. Закончилось всё покупкой 27-ми наименований различных модулей и прочих компонентов.
Сотрудник почтового отделения был очень недоволен когда искал 27 посылок…
Начало работ над подлодкой и первые неудачи
Сначала я нашел человека, разбирающегося в подводных лодках не понаслышке, он помогал мне с теорией и тестами.
Далее я сразу приступил писать свой первый код для Arduino. Это был код для управления двумя двигателями подлодки. Два потенциометра: левый управляет общей мощностью двигателей, а правый поворотом подлодки (уменьшает мощность у одного из двигателей, в зависимости от положения потенциометра). Все это я выводил на недорогой дисплей, так как планировал делать отдельный пульт управления (в итоге подлодка управляется через смартфон).
Учитывая, что я еще неделю назад не знал как работают потенциометры, то восторг мой был неописуем. Не останавливаясь на достигнутом я пошел в строительный магазин и в аптеку. В строительном набрал разных полипропиленовых труб, муфт и хомутов, а в аптеке я взял несколько шприцев Жане.
Трубы, соответственно, пошли на корпус подводной лодки, а шприцы на модуль изменения плавучести. Как раз модуль изменения плавучести и оказался самой проблемной частью для меня.
Модуль изменения плавучести
Задачи у этого модуля достаточно простые, набирать воду и выдавливать её обратно по команде. И встал вопрос — как толкать поршень шприца, имея горсть сервоприводов, моторчиков и набор шестерней? Вот так точно толкать не стоит:
Это был первый опыт взаимодействия с шестернями и прочими мелочами. Кстати, я смог переделать сервопривод sg90 под вращение на 360°: сточил фиксатор на главной шестерне, который крутил потенциометр, а сам вал потенциометра приклеил в нулевом положении, чтобы случайно не вращался даже со стёсанным ограничителем.
Это всё равно не помогло решить задачу — я не смог надежно зафиксировать шестерню, взаимодействующую с зубчатой рейкой. Полученный инженерный опыт помог мне со второго раза осилить модуль изменения плавучести: я взял более мощную серву, толстую шпильку с резьбой и гайку, которую закрепил на поршне. В этот раз не стал возиться с модификацией сервопривода, решил, что проще использовать внешний драйвер и подключиться напрямую к мотору сервы.
На поршне был размещен лазерный дальномер, чтобы я мог определять в режиме реального времени — в каком он сейчас положении. Ну и опираясь на эти данные о расстоянии, я прописал блокировку поршня, когда он находится в крайних позициях. Возможно, есть и более простые методы определения положения поршня, но я случайно нашел у китайцев очень дешевый модуль — дальномер VL53L0X и решил использовать именно его. В итоге остался очень доволен, библиотека простая, работает как надо, советую. Точность в замкнутом пространстве шприца у него где-то 5мм, в принципе, мне этого было достаточно.
При тестировании возникла еще одна проблема — поршень сильно приклеивается к стенкам шприца. Не знаю с чем связано, но для старта движения поршня требуется прикладывать значительное усилие, после начального застревания дальше идет нормально. Перепробовали почти все виды смазок — многие из них сделали только хуже. Именно по этой причине пришлось добавлять алюминиевый каркас для модуля.
Моторы
С двигательной системой я остановился на самом простом решении и взял готовые подводные моторы. До этого опробовал вариант с мотором внутри корпуса. Заказал дейдвудную трубку в наборе с валом и винтами, но по мере изучения вопроса выяснилось, что для моих целей нужна целая система: сложный сальник, фланцы и т.д. Иначе будет протекать в любом случае. У меня в планах на будущее забросить подлодку куда-то на Ладогу и управлять ею через 3G сети, восседая дома на диване, а значит любые возможные протечки приведут к малой автономности аппарата.
В будущем планирую использовать только подводные моторы, скорее всего бесколлекторные. На данный момент используются вот такие, коллекторные:
Управляю ими используя ШИМ. Продавец говорит, что они на 8 метров глубины максимум, что, опять же, накладывает некоторые ограничения сразу.
Корпус
С корпусом была интересная задача — сделать герметичное соединение, которое бы легко разбиралось. Задачу не выполнил, пришлось всё заклеивать намертво. Когда шприц набирает воду — создается давление внутри корпуса и все наши крепления просто выдавливало. В итоге все важные провода вывели на герметичный разъем, через который можно и зарядить аппарат, и прошить бортовую Arduino, и подключить антенну.
Да, антенна у нас подключается при помощи кабеля и находится в надводном положении, гарантируя надежную связь. Но об антенне чуть позже.
Корпус состоит из полипропиленовых труб 50мм и муфт. Места соединений замазаны герметичной пастой, а сверху, для прочности, залиты термоклеем. В торец вывели носик шприца, герметичный разъем, тумблер включения и два провода для прожекторов. Прожекторы закреплены на носовой затопляемой части, такая конструкция позволила сместить центр тяжести ближе к центру подлодки.
Мозги подлодки
Это самая интересная для меня часть. Когда начинал прорабатывать схему, то еще не знал как работают, например, конденсаторы и для чего они нужны. Очень радовался, когда при выключении питания — светодиод на Arduino медленно тускнел за счет ёмкого конденсатора.
На деле же они в схеме пригодились для сглаживания пиков, возникающих в цепи из-за работы коллекторных моторов. Также они нужны для подключения стабилизатора напряжения.
Аккумулятор у нас из двух ячеек, соответственно 8.4 В напряжение идет на моторы, а 5 В после стабилизатора — на Arduino и прочие датчики. Полноразмерная схема (кликабельно):
Сначала многое не получалось только по той причине, что собирал всё на макетной плате. Никак не мог понять почему не работает та или иная часть схемы. В итоге всё начал паять и положительные результаты тестов не заставили себя ждать.
Одна из интересных проблем возникла и с дальномером. Библиотека у него хорошая, но вот если установить режим точности на средний или высокий, то будет тормозиться весь скетч и управление выйдет с пингом в 2000 мс минимум. Из-за этого дальномер у нас в режиме FAST, но его точности все равно хватает для наших задач.
Следующее, с чем я столкнулся, это кабель-менеджмент. Диаметр корпуса 50 мм. Кажется, что этого много, пока не начинаешь пытаться разместить всё внутри. Я использовал прям чрезмерно жирные кабели, предназначенные для аудио, что меня сильно подвело. Хотелось именно медные, так как удобно их паять, и чтобы не переламывались, как, например, алюминиевые. В следующий раз на поиски хороших проводов уделю больше времени.
Далее сложности возникли только с антенной.
Антенна
В качестве антенны я решил использовать esp8266 и управлять подлодкой через смартфон по Wi-Fi. Только вот у китайцев есть большое разнообразие модулей на базе ESP8266, я приобрел три разных, но смог подключить и прошить только один из них — ESP-01.
В теории, если заказывать теперь, то они уже будут с нужной прошивкой. Управление осуществляется через RemoteXY, а ему нужна определенная версия прошивки для AT-команд. Проблему с поиском нужной прошивки для управления через АТ-команды удалось решить только при помощи гайда от RemoteXY. Кстати, не реклама, просто понравился интерфейс, а уже потом я нашел более удобные и проработанные конструкторы интерфейсов для всяческих IoT.
После успешной прошивки я обвешал модуль необходимыми компонентами для работы и припаял ему USB разъем для удобного присоединения. Интегрировал ответную часть USB в пробку из под обычной бутылки и получилась простая проводная антенна с возможностью смены корпуса (замена бутылки).
Были и еще проблемы, помимо прошивки.
Плата ESP-01 должна работать от 3.3 В, а не от 5 В. Причем как логика, так и питание. Если логику я настроил через преобразователь уровня, то вот с питанием уже было лень возиться и я просто приклеил маленького ребенка радиатора на чип. От пяти вольт нормально работает, но очень сильно греется. Радиаторчик в итоге помогает не спалить чип.
Еще из проблем — я подобрал идеальный кабель для герметичного разъема, но он всего на 2 пина с экранированием, тогда как для антенны нужно 4 (питание и RX и TX для связи между антенной и Arduino на борту).
Выяснилось, что просто отдельно запитать нашу антенну не получится, так как для работы ESP+Arduino нужно обязательно иметь общую землю. Пришлось использовать экранирование в качестве земли у кабеля, а в саму антенну добавлять отдельный аккумулятор. Неудобно, но работает. Проще, конечно, найти кабель на 4 жилы и питать антенну аккумуляторами с подлодки.
На фото удачное совпадение диаметров кабеля, силиконовой трубки и обжимного отверстия у герметичного разъема.
Управление и прошивка
Управление осуществляется через интерфейс со смартфона. Интерфейс составил из готовых модулей прямо на сайте, получил исходный код интерфейса, а дальше осталось просто привязать различные элементы интерфейса к действиям внутри прошивки.
Перед получением исходного кода интерфейса, нужно указать в настройках тип модуля беспроводной связи, с которым будет взаимодействовать Arduino. Прошиваем только саму Arduino — с Wi-Fi модулем дальше общение идет автоматическое через AT-команды. Создается точка доступа, подключаетесь к ней со смартфона и управляете через заранее установленное приложение. Интерфейс приходит от Arduino, он зашит в прошивку и распознается уже самим приложением в смартфоне.
Это был мой самый первый код, я прямо тут его оставлять не буду, поскольку там используются только базовые навыки программирования и базовая математика. Были и сложные для меня моменты — я никак не смог с первого раза сделать обычную логическую операцию — чтобы сервопривод шприца при определенных значениях блокировался на движение в одну сторону.
Например, когда доходит до максимального набора воды — поршень должен остановиться на движение назад, но не должен блокироваться на движение вперед. И наоборот, когда вся вода выдавлена, поршень должен не идти вперед, но без проблем выполнять команды на обратный ход.
if ((RemoteXY.button_1 == 1) && (RemoteXY.button_2 == 0) && (val_f < 100)) {
pwm_UP = 1;
pwm_DOWN = 0;
}
else if ((RemoteXY.button_1 == 0) && (RemoteXY.button_2 == 1) && (val_f > 25)) {
pwm_UP = 0;
pwm_DOWN = 1;
}
else {
pwm_UP = 0;
pwm_DOWN = 0;
}
Вот такая логическая конструкция в итоге, где RemoteXY.button_# это кнопки в интерфейсе для погружения или всплытия.
Также, из сложного для меня в коде это фильтр значений дальномера (взял один из самых простейших в сети), ну и настройка значений для вольтметра. Фильтр был нужен из-за вышеупомянутого режима FAST у дальномера, входящие значения сильно прыгали и фильтр как раз помог с этим справиться. А вот вольтметр пригодился для индикации разряда аккумуляторов. На Arduino есть референсный пин, и если на него подавать не больше 1.1 вольт, то Arduino сможет достаточно точно определять подаваемое напряжение на этот пин. 8.4 В после делителя напряжения конвертируем в 1.1 В. И вот эта конвертация получилась неточная, пришлось опытным путем править значение напряжения, добавляя переменную в прошивку.
Тестирование
Тестирование проводили на заброшенном карьере с относительно чистой водой. Для тестов нужно было закрепить камеру и настроить подлодке дифферент (вместе с базовой нейтральной плавучестью).
Первую задачу решили просто установкой нужного винта под крепление камеры. Чтобы избежать вращений камеры — добавили немного пластилина.
Дифферент правили мешочком, который оказалось удобно зацеплять за хомут, а уже хомут можно легко перемещать вдоль подлодки. Количеством гаек в мешочке мы настроили нейтральную плавучесть, а дальше уже быстро подобрали положения хомута, чтобы подлодка не клевала носом. Решение о таком варианте было принято уже перед самой поездкой на карьер, просто напросто не оставалось времени сделать автоматическую систему правки дифферента. Её, в теории, очень легко сделать перемещением груза по резьбовой шпильке. В следующей подлодке опробую именно такой вариант. Вот, пожалуй, и вся подлодка.
Я записал два видеоролика, где более подробно рассказываю о сборке и показываю кадры, которые удалось снять под водой. Приятного
Надеюсь, что материал был интересным. Далее будут эксперименты над камерой давления (для проверки герметичности аппаратов) и тесты подводных вёсел. По ним так же подготовлю материал в виде статьи, но уже с графиками и сравнениями тех или иных решений.
1234rfvb
Художник, говорите? Да Винчи тоже числился художником. Отличная работа с интересными подробностями и неведомыми нюансами!
Twistms Автор
Спасибо!