Привет!
Я живу рядом с Байкалом, и много раз бывал на нем. Это красивое озеро с чистым воздухом. Несколько лет назад озеро начало загрязняться. И вот я подумал почему бы не сделать дрона с солнечными батареями, поставить на нее двигатель, нейронный компьютер с YolloV3(нейросеть которая обеспечивает зрение компьютеру) со стереокамерой, добавить GPS и научить его чистить Байкал в автономном режиме.
Погуглив, я узнал что есть две основные причины: грязные, плохо очищенные канализационные стоки города Улан-Удэ и отдыхающие, которые пользуются моющими средствами, которые в свою очередь создают на берегу Байкала высокую концентрацию нитратов и фосфатов. После еще одно поиска в гугле выяснилось, что для спасения Байкала, его всего лишь нужно очищать. Я подумал что с таким не хитрым делом я справлюсь. Так я начал свой путь дроностроителя)
Первый кому я рассказал про свою идею это был мой начальник. Это было весной 2018. Идея ему понравилась и поэтому за несколько дней он начертил 3д чертеж дрона. Это единственное фото которое сохранилось. На фото дрон со снятой солнечной батареей и нижним буйком.
Далее мы нашли спонсора, но он получив чертежи сразу отвалился. Далее и начальник тоже остыл к проекту, когда я предложил собрать его за свои деньги.
Наступил январь 2019 и все таки решил сделать его. Дядя согласился мне помочь. Первое что я купил — это обычные пластиковые трубы ( почему они такие дорогие!!!) вместе с муфтами, отворотами, хомутами и крышками. Далее мы взяли старую алюминиевую гардину, просверлили в ней отверстия под каждую муфту и прикрутили к ней лист фанеры. Трубы взял по метру диаметром 110мм. Мы не знали какие подойдут для нашего корабля, поэтому взяли эти, ну а в будущем уже подогнать необходимую грузоподъемность.
Далее мы сварили металлическую станину для двигателя из обычных старых железяк, которые валялись в огороде. Сломанный двигатель от охлаждения мотора волги-3110 дал мне дядя. После вскрытия оказалось что там был пробит искрогасящий кондер. После его замены двигатель заработал. И наш плот превратился в кораблик.
Вот уже пришла весна и я узнал про конкурс «IT-старт». Я подумал почему и мне не пойти с моим проектом. Но там мне сначала москвичи сказали, что дрон который чистит Байкал не нужен, нужно какое то коммерческое назначение, ну а потом и местные не оценили моей инициативы. К последнему дню «IT-старта» мы уже успели сделать корпус для электроники и руль. За ночь перед конкурсом я успел доделать простенькое управление кораблем yf esp8266 не имеющее обратной связи. Это видео я показал на конкурсе
Так он выглядел внутри
Аккумулятор от бесперебойника подарил знакомый весовщик. Двигатель руля где-то нашел дядя. Фильтр и насос ( насос погружного типа, поэтому находится под кораблем в «носу») пришлось окупать за свои деньги. Рэле автомобильное на 40 Ампер.
После конкурса энтузиазм убавился. И летом я занимался не белее 2 часов в неделю. Управление собранное на esp8266 имело один недостаток: работало все через get запрос в функции похожей на прерывание и если в этот момент отправлялась еще одна команда, то проц сбоил и перезагружался, что было видно по данным отправленным по ком порту. Да и сам проц постоянно отваливался. Порывшись в ардуиновских исходниках и не найдя там регистров (оказывается, как я потом уже узнал, что китайцы сразу написали управляющие функции для всех моделей esp8266) я решил идти по самому простому пути, а именно купить радио брелок и написать все управление на atmegа88pa. Обратная связь положения руля была сделана на двух пружинках, притянутых резистором на 560 Ом к 5 В. Когда алюминиевая планка, приделанная к направляющей двигателя была в правом положение, касалась ближней пружинки, то на пин1 мк приходила земля, когда к дальней то на пин2.
/*
* korabl.cpp
*
* Created: 24.07.2019 21:59:04
* Author : Антон
*/
#include <avr/io.h>
#include "util/delay.h"
# define F_CPU 8000000UL
int p=0;
int polozhenue = 0;
void init_port(void)
{
DDRD|=(1<<2)|(1<<3);
///DDRB|=1<<1;
}
void po_4asovoi_on(void)
{
PORTD|=(1<<2)|(1<<3);
}
void po_4asovoi_off(void)
{
PORTD&=0b11110011;
}
void init_polozhenie(void)
{
po_4asovoi_on();
while(PIND&0x10);
po_4asovoi_off();
p = 0;
polozhenue = 0;
}
int main(void)
{
init_port();
p=0;
/* Replace with your application code */
while (1)
{
if(PIND&0x10)
{
if ((p==1)||(p==2))///if(GPIOB->IDR&(1<<9))
{
po_4asovoi_on();
_delay_ms(200);
// HAL_TIM_Base_Stop_IT(&htim3);
po_4asovoi_off();
p=0;
}
while(PIND&0x10)
{
PORTD|=(1<<1);
_delay_ms(100);
}
}
PORTB&=0xfc;
if(PIND&0x20)
{
if ((p==2)||(p==0))///if(GPIOB->IDR&(1<<8))
{
po_4asovoi_on();
while(PIND&0x80)
{
}
//HAL_TIM_Base_Stop_IT(&htim3);
po_4asovoi_off();
p=1;
}
}
if(PIND&0x40)
{
if ((p==1)||(p==0))///if(GPIOB->IDR&(1<<7))
{
po_4asovoi_on();
while(PINB&0x02)
{
}
/// HAL_TIM_Base_Stop_IT(&htim3);
po_4asovoi_off();
p=2;
}
}
}
}
Я еще решил собрать драйвер движка управления рулем на 4-х транзисторах (на фото это светлый кусок фонеры), но после его сборки и опробования оказалось что движку без разница какая на него полярность приходит, и я отказался от этой затеи.
И вот уже конец сентября. После отпуска мы поехали его запускать. С первой попытки он начал тонуть. Зад корабля оказался тяжелый, а герметик дырявый и в него попала вода. Умер модуль радиосвязи. На следующий день купили новый и нарастили трубы. Кораблик перестал тонуть, но в боевых условиях радиомодуль брал только на пол метра. Пришлось делать третью попытку. Я нагуглил исходники для esp8266 и программу для смартфона (спасибо доброму человеку ) и с третьей попытки он заработал
Аккумулятора хватило только на несколько минут, поэтому к берегу так и не получилось притянуть.
Ну вот и все. Окончательный исходный код для ESP8266 и переделанный для атмеги лежит тут.
Автор: xo4y_B_BostonDynamics