Привет всем, я когда-то увидел, что не продаются модели подводных лодок с дальним радиусом действия, более менее сносным функционалом и ценой меньше чем у новенького iphone и решил сделать ее сам. Она управляется через интернет, а сейчас мобильный интернет покрывает большую площадь России. Маленькие водоемы полностью им покрыты, а от берегов больших интернет есть на даже в десятках километрах от берега.
Также Илон Маск объявил о создании всемирного интернета.
Лодку я решил печатать на 3D принтере, модели сделаны в компас_3d. Код написан на python 3.
Cсылка на github.
Оборудование и материалы
• 3d принтер
• Одноплатный компьютер Raspberry pi
• 4g модемы (2 штуки)
• ноутбук (2 штуки 1-й — передатчик, 2-й — сервер)
• серводвигатели
• веб-камера
• двигатель
• аккумуляторы Pb
• другое (реле, паяльник, датчики, клеи, краски, герметики...).
Детали
Как уже было сказано детали напечатаны на 3D принтере слоем в 0.3 мм соплом 0.4 мм
на алюминиевом столе с подложкой из клея бф2 для лучшей адгезии, самые долгие детали печатались около 14 часов. снизу картинка основных деталей.
Герметичность
Для герметичности серводвигатели и ведущий бк двигатель загерметизированы силиконовым герметиком и густой смазкой. Сама лодка в местах с трещинами и плохой печатью замазана клеем для пвх, в местах болтовых соединений силиконовый герметик для аквариумов.
Питание
В качестве источника питания — две последовательно подключенных свинцовых батарей на 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'))])#записывает в файл то что пришло до стоп слова
Воспроизведение картинки, и прием с камеры с помощью opencv. Сжатия никакого пока не происходит, поэтому задержка целых 9-13 секунд. Кнопочки управления написаны с помощью Tkinter.
Вовремя загрузки 3D модели на github я увидел из чего состоит stl файл, и решил написать код еще и для создания 3d модели рельефа дна из списка расстояний до него снятых ультразвуковым дальномером (который еще не установлен).
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
Подведение итогов
Это собственно все что я хотел рассказать, основной моей идеей кто не понял было создание аппарата позволяющего получать информацию из-под воды на огромном расстояние от управляющего ноутбука. Пока, до следующей статьи.
Автор: Alexandr2001