[Из песочницы] Самодельная подводная лодка с надводной wi-fi антенной

Как всё начиналось


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

bzu5cveeopuetfrblpp_-cugg0i.jpeg

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

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

Решив, что пора увлечения перевести в плоскость практики — я отправился на Youtube. Получил горсть самых базовых знаний и дальше мой путь лежал уже на AliExpress, как и у многих. Закончилось всё покупкой 27-ми наименований различных модулей и прочих компонентов.

k44bgx07o5m0yezj2ozb2xgqb2s.jpeg

Сотрудник почтового отделения был очень недоволен когда искал 27 посылок…

Начало работ над подлодкой и первые неудачи


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


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

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

batrndfvay3ft6zhgdnwub1o-84.jpeg

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

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

Модуль изменения плавучести


Задачи у этого модуля достаточно простые, набирать воду и выдавливать её обратно по команде. И встал вопрос — как толкать поршень шприца, имея горсть сервоприводов, моторчиков и набор шестерней? Вот так точно толкать не стоит:

9her6gitp8uzl1io6bcms26qcwo.jpeg

Это был первый опыт взаимодействия с шестернями и прочими мелочами. Кстати, я смог переделать сервопривод sg90 под вращение на 360°: сточил фиксатор на главной шестерне, который крутил потенциометр, а сам вал потенциометра приклеил в нулевом положении, чтобы случайно не вращался даже со стёсанным ограничителем.

Фото шестерни
ekpy84eratokd-scwdoxk2csug0.jpeg


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

pvfnl0hcqik6ofdf37vg0x4olji.jpeg

Я у мамы инженер
9vnhanu96dtnw9kvzuemkltwvjs.jpeg


Гибкая муфта по-васянски
vei90e6y1oezmmnql3kyuo4epac.jpeg


Алюминиевый каркас для жесткости
tcqtdi_-xnk4gpj5qhop-3qdvfa.jpeg


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

1j7vsjyxxezkjxh95l1jku2-n2y.jpeg

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

Моторы


С двигательной системой я остановился на самом простом решении и взял готовые подводные моторы. До этого опробовал вариант с мотором внутри корпуса. Заказал дейдвудную трубку в наборе с валом и винтами, но по мере изучения вопроса выяснилось, что для моих целей нужна целая система: сложный сальник, фланцы и т.д. Иначе будет протекать в любом случае. У меня в планах на будущее забросить подлодку куда-то на Ладогу и управлять ею через 3G сети, восседая дома на диване, а значит любые возможные протечки приведут к малой автономности аппарата.

tr3uj4jx8thwre3o3v30lxhsirw.jpeg

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

eu1kwp6v9vpix4xkcmvkmncmjae.jpeg

Управляю ими используя ШИМ. Продавец говорит, что они на 8 метров глубины максимум, что, опять же, накладывает некоторые ограничения сразу.

Корпус


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

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

kzhq2bwlzjvd-rw43ejh-ur-uxm.jpeg

Дополнительные фото


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

Мозги подлодки


Это самая интересная для меня часть. Когда начинал прорабатывать схему, то еще не знал как работают, например, конденсаторы и для чего они нужны. Очень радовался, когда при выключении питания — светодиод на Arduino медленно тускнел за счет ёмкого конденсатора.
На деле же они в схеме пригодились для сглаживания пиков, возникающих в цепи из-за работы коллекторных моторов. Также они нужны для подключения стабилизатора напряжения.

Аккумулятор у нас из двух ячеек, соответственно 8.4 В напряжение идет на моторы, а 5 В после стабилизатора — на Arduino и прочие датчики. Полноразмерная схема (кликабельно):

8uy5j-tm7ah4regwnriy-gsylg8.png

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

rrmsrt7g43ed7guybcbugkoj14q.jpeg

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

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

tgrkkrteouyf1pqcyqpsqozmqfk.jpeg

qsltn4obefspud7rvoulugh0-hy.jpeg

Далее сложности возникли только с антенной.

Антенна


В качестве антенны я решил использовать esp8266 и управлять подлодкой через смартфон по Wi-Fi. Только вот у китайцев есть большое разнообразие модулей на базе ESP8266, я приобрел три разных, но смог подключить и прошить только один из них — ESP-01.

В теории, если заказывать теперь, то они уже будут с нужной прошивкой. Управление осуществляется через RemoteXY, а ему нужна определенная версия прошивки для AT-команд. Проблему с поиском нужной прошивки для управления через АТ-команды удалось решить только при помощи гайда от RemoteXY. Кстати, не реклама, просто понравился интерфейс, а уже потом я нашел более удобные и проработанные конструкторы интерфейсов для всяческих IoT.

sbtwy3qqfrgnizav6ze85ogczes.jpeg

После успешной прошивки я обвешал модуль необходимыми компонентами для работы и припаял ему USB разъем для удобного присоединения. Интегрировал ответную часть USB в пробку из под обычной бутылки и получилась простая проводная антенна с возможностью смены корпуса (замена бутылки).

_hhvuhtxp2dta1-hgnzv40yr9r0.jpeg

Были и еще проблемы, помимо прошивки.

Плата ESP-01 должна работать от 3.3 В, а не от 5 В. Причем как логика, так и питание. Если логику я настроил через преобразователь уровня, то вот с питанием уже было лень возиться и я просто приклеил маленького ребенка радиатора на чип. От пяти вольт нормально работает, но очень сильно греется. Радиаторчик в итоге помогает не спалить чип.

gvvxaswprxalwfcicrbr-omweuu.jpeg

Еще из проблем — я подобрал идеальный кабель для герметичного разъема, но он всего на 2 пина с экранированием, тогда как для антенны нужно 4 (питание и RX и TX для связи между антенной и Arduino на борту).

Выяснилось, что просто отдельно запитать нашу антенну не получится, так как для работы ESP+Arduino нужно обязательно иметь общую землю. Пришлось использовать экранирование в качестве земли у кабеля, а в саму антенну добавлять отдельный аккумулятор. Неудобно, но работает. Проще, конечно, найти кабель на 4 жилы и питать антенну аккумуляторами с подлодки.

krlv3djpq_xaaa6kgv63vofdsdc.jpeg

На фото удачное совпадение диаметров кабеля, силиконовой трубки и обжимного отверстия у герметичного разъема.

Управление и прошивка


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

cvltcbbbb9idvyj65gmr2tp_fi4.png

Перед получением исходного кода интерфейса, нужно указать в настройках тип модуля беспроводной связи, с которым будет взаимодействовать 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 В. И вот эта конвертация получилась неточная, пришлось опытным путем править значение напряжения, добавляя переменную в прошивку.

Тестирование


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

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

iekqunj_kf29qryzxv5jpibhvms.jpeg

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

Я записал два видеоролика, где более подробно рассказываю о сборке и показываю кадры, которые удалось снять под водой. Приятного просмотра:


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

© Habrahabr.ru