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

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

07raqaqd9d-bexuzza-akjl5lhg.png

Также Илон Маск объявил о создании всемирного интернета.

Лодку я решил печатать на 3D принтере, модели сделаны в компас_3d. Код написан на python 3.
Cсылка на github.

Оборудование и материалы


• 3d принтер
• Одноплатный компьютер Raspberry pi
• 4g модемы (2 штуки)
• ноутбук (2 штуки 1-й — передатчик, 2-й — сервер)
• серводвигатели
• веб-камера
• двигатель
• аккумуляторы Pb
• другое (реле, паяльник, датчики, клеи, краски, герметики…).

Детали


Как уже было сказано детали напечатаны на 3D принтере слоем в 0.3 мм соплом 0.4 мм
на алюминиевом столе с подложкой из клея бф2 для лучшей адгезии, самые долгие детали печатались около 14 часов. Снизу сборочный чертеж.

wv_cqrtqiglvnnnddgg8py0jcai.jpeg

Герметичность


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

Питание


В качестве источника питания — две последовательно подключенных свинцовых батарей на 6 v способные выдавать 3.3 AmH, свинцовые батареи используются из-за того что они дешевле, меньше контактов для зарядки надо выводить за пределы лодки и также они тяжелые (лодка слишком объемная, а средняя ее плотность должна быть около 1000 кг/м**3).

Передача данных


Теперь о главном, передача данных.

Так как вода поглощает ЭМВ то нужно выводить модем на верх, поэтому та лодка работает с поплавком.

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

Так как мне захотелось сделать как можно больше всего, дабы было поинтереснее, и чтобы по изобретать велосипеды, то передачу видео, как я уже говорил, делал сам, поэтому не придумав ничего лучше, я решил передавать не видео, а кадры в jpg. Передается одна картинка потом отравляется стоп слово «stop», и так как оно не встречается в jpg, то код легко отделяет где и когда показывать картинку.

while bytes('stop','utf-8') not in data:
          image_result.write(data)#записывает картинку по 1 Кб в файл
          data = sock.recv(1024)#принимает данные с сервера 1 Кб  
if bytes('stop','utf-8')  in data: 
            image_result.write(data[:data.index(bytes('stop','utf-8'))])#записывает в файл то что пришло до стоп слова


-tjzvtecdsvz82pft9qvj57u8y4.jpeg

Воспроизведение картинки, и прием с камеры с помощью opencv. Сжатия никакого пока не происходит, поэтому задержка целых 9–13 секунд. Кнопочки управления написаны с помощью Tkinter.

3D модель дна


Вовремя загрузки 3D модели на github я увидел из чего состоит stl файл, и решил написать код еще и для создания 3d модели рельефа дна из списка расстояний до него снятых ультразвуковым дальномером (который еще не установлен).

пример тетраэдр.stl в txt

solid
facet normal 0 0 0
outer loop
vertex 0 0 0
vertex 2 0 0
vertex 1 1 2
endloop
endfacet
facet normal 0 0 0
outer loop
vertex 2 0 0
vertex 1 2 0
vertex 1 1 2
endloop
endfacet
facet normal 0 0 0
outer loop
vertex 0 0 0
vertex 1 2 0
vertex 1 1 2
endloop
endfacet
facet normal 0 0 0
outer loop
vertex 0 0 0
vertex 1 2 0
vertex 2 0 0
endloop
endfacet
endsolid


xelra6yksqdiv09f9vmzxc7znis.png

Далее идут фотографии интересные и не очень

u3g0fdsukrfmjrdqeiiskawscbu.jpeg

lslkyjymcmehnwofwo0j5dy8xzs.jpeg

8ftgfchrfe3ihsg_fk7qyil74_u.jpeg

yxvhzsjfk4glqwdseoaq9y0ziaq.jpeg

vxlbxrqafjqxsrt5wajgi7-f-1g.jpeg

csl2tshyx4y9a3bq-q30dw1z2qw.jpeg

5ok3h_jea1uhgjb6quksctuamlq.jpeg

vesvqmdm6uxj_-ayxlijrxwxppa.jpeg

3foywvmixjurjf74efyzbpctxgc.jpeg

ypjsbtcz2flxqhkfd43evggfr6w.jpeg

-xczu-r6krccbck8rnqt3zqvpjs.jpeg

Подведение итогов


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

© Geektimes