Сборка прикормочного кораблика на радиоуправлении начиналась в рамках моего первого студенческого проекта на arduino. Я жил далеко от городской суеты, поэтому приходилось в основном использовать только те компоненты, которые были на руках. Задача была проста - создать кораблик, который сможет разносить корм для рыбы с полезной нагрузкой около двух килограмм. Что бы достичь своих целей я должен был решить список следующих задач:

  • Сделать корпус и определить габариты.

  • Сделать движители.

  • Выбрать двигатель.

  • Обеспечить радиоуправление.

  • Обеспечить автономность питания.

  • Сборка всего этого.

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

Структурная схема
Структурная схема

Механическая часть

Для изготовления корпуса скачал себе около десяти книг по судостроению и судомоделированию и начал их изучать. В итоге понял, что технически не смогу сделать те вещи, которые были написаны в этих книгах. Для изготовления шпангоутов нужен был ЧПУ фрезер или 3D принтер. Их, к сожалению, у меня не было. Руками все это делать из дерева - тоже нелегкая задача. В конце остановился на варианте с катамараном, так как в интернете нашел много аналогов. Решил все это сделать из подручных средств. Искал что-то обтекаемое, нетяжелое и нашел решение у себя в гараже. Да, это были канистры из-под масла и чемоданчик от набора инструментов. Поклеил их термоклеем, для надежности усилил деревом и фиксировал саморезом. Покрасил в разные цвета чтобы видно было издалека.

Корпус кораблика
Корпус кораблика

Далее были неудачные попытки расчета гидродинамических характеристик на FlowVision CFD. В итоге остановился на этапе 3D моделирования =)

3D модель на Компас
3D модель на Компас
Сгенирированный чертеж на Компас
Сгенирированный чертеж на Компас

Движитель выбрал основываясь на показателе КПД и самым лучшим в этом плане, конечно же, был подводный винт. Винт состоит из ступицы и радиально закреплённых к нему лопастей. Обычно используется 3-4 лопастные винты. Все размеры винтов были рассчитаны по книге "Юный моделист-кораблестроитель". Винт был изготовлен из стальной пластины, дейдвут из трубы пвх, а внутренность залита обычным солидолом.

Самодельный движитель
Самодельный движитель

С двигателем аналогичная ситуация. Бесколлекторных у меня не было, да и с Китая они шли очень долго. Нашел где-то и установил коллекторные 20-ваттные двигатели от печки ВАЗ МЭ 255.

МЭ 255
МЭ 255

Для движения механизма сброса корма использовал двухпроводной электропривод Starline SL-2 от замка машины.

Starline SL-2
Starline SL-2

Электронная часть

Перейдем к электронной части. Мозгом всего этого был выбран китайский Arduino Nano 3.0 на базе Atmega328P, так как его вычислительных мощностей хватало с запасов и прототипировать на нем тоже легко. Далее искал в интернете похожие проекты для разных задач и в youtube нашел интересный проект блока управления: часть кода и схем заимствовал оттуда и адаптировал под свои задачи. Радиомодуль использовал NRF24L01+PA+LNA. В открытой местности с ним удалось отправлять пакеты на 700м. Драйвером электродвигателя использовался L298N правда он сильно грелся из-за того, что не рассчитан на эти моторы(лучше брать с запасом), пришлось усилить их радиаторы радиаторами из старых телевизоров. Пульт управления работал на той же связке плюс 2 модуля KY-023.

Пульт управления

Функциональная схема пульта управления
Функциональная схема пульта управления
Принципиальная схема пульта управления(после доработки аккумулятор заменен на 7.4 V и добавлен диод Шоттки для защиты от переполюсовки)
Принципиальная схема пульта управления(после доработки аккумулятор заменен на 7.4 V и добавлен диод Шоттки для защиты от переполюсовки)
Макет пульта управления
Макет пульта управления
Сборка пульта управления
Сборка пульта управления
Готовый пульт после сборки
Готовый пульт после сборки

Основной блок

Функциональная схема основного блока
Функциональная схема основного блока
Arduino и радиомодуль
Arduino и радиомодуль
Arduino и драйвера двигателей
Arduino и драйвера двигателей
Макет с одним мотором для теста
Макет с одним мотором для теста
Arduino и радиомодуль(плюс дополнительный драйвер для мелких моторов при необходимости)
Arduino и радиомодуль(плюс дополнительный драйвер для мелких моторов при необходимости)
Принципиальная схема платы управления механизма сброса корма (Есть ошибка в схеме подключения светодиода)
Принципиальная схема платы управления механизма сброса корма (Есть ошибка в схеме подключения светодиода)
Макет платы механизма сброса корма
Макет платы механизма сброса корма
Плата после навесного монтажа
Плата после навесного монтажа
Принципиальная схема для платы дополнительных нагрузок
Принципиальная схема для платы дополнительных нагрузок

Последовательные диоды нужны были для понижения напряжения для полезной нагрузки R8, так как у меня не было подходящего стабилизатора в диапазоне меньше 14,8-5V, Q2 можно убрать если вам он не нужен. R8, R6, R9 это любая полезная нагрузка. Но нужно учитывать мощность транзисторов и напряжение стабилизатора. 

Плата для дополнительных нагрузок
Плата для дополнительных нагрузок
Усиление радиаторов
Усиление радиаторов
Установка двигателей. Соединение аккумуляторов. Установка двигателя для механизма сброса. Бункер для корма.
Установка двигателей. Соединение аккумуляторов. Установка двигателя для механизма сброса. Бункер для корма.
Винт и защита для винта. Механизм сброса. Установка электроники.
Винт и защита для винта. Механизм сброса. Установка электроники.

Код для основного блока (rx.ino)

#include <SPI.h> // Подключаем библиотеку для работы с SPI
#include <nRF24L01.h> // Подключаем библиотеку для работы с радиомодулем nRF24L01
#include <RF24.h> // Подключаем библиотеку для работы с радиомодулем nRF24L01

const uint64_t pipe = 0xE8E8F0F0E1LL; // Указываем адрес конфигурации радиомодуля для обмена данными
RF24 radio(2, 9); // Инициализируем объект радиомодуля на пинах 2 и 9

int data[4]; // Создаем массив для хранения полученных данных
int reserve=0; // Инициализируем переменную для хранения резервной кнопки, использовать при необходимости
unsigned long motorOnTime; // Инициализируем переменную для хранения времени включения двигателя
byte count = 0; // Инициализируем переменную счетчик для механизма сброса

// В функции setup инициализируются различные пины как входы или выходы, устанавливается канал радио, скорость передачи данных и мощность.
void setup() {
  delay(50); // Небольшая задержка перед началом работы
  radio.begin(); // начало работы с радиомодулем
  radio.setChannel(9); // установка радиоканала
  radio.setDataRate(RF24_250KBPS);        // Установка минимальной скорости;
  radio.setPALevel(RF24_PA_HIGH);         // Установка максимальной мощности;
  radio.openReadingPipe(1,pipe);  // Открытие канала для чтения данных
  radio.startListening(); // Начало прослушивания канала
  pinMode(10, OUTPUT); // Установка пина 10 на вывод
  digitalWrite(10, LOW); // Установка пина 10 в низкий уровень
  pinMode(17, OUTPUT); // Установка пина 17 на вывод
  pinMode(18, OUTPUT); // Установка пина 18 на вывод
  pinMode(19, OUTPUT); // Установка пина 19 на вывод
  pinMode(16, OUTPUT); // Установка пина 16 на вывод
  digitalWrite(16, LOW); // Установка пина 16 в низкий уровень
}

void loop()  {
  if ( radio.available() ){ // Если доступны новые данные от радиомодуля
    bool done = false;
    while (!done){ // Читаем данные, пока все данные не будут прочитаны
      done = radio.read(data, sizeof(data)); // Считываем данные в массив data размером sizeof(data)
      // Проверка полученных данных от левого джойстика (data[0]), управление левым двигателем
      if(data[0]>450 && data[0]<598){ // Если значение элемента массива в заданном диапазоне
        analogWrite(5, 0); // Отключение левого двигателя
        analogWrite(6, 0); // Отключение левого двигателя
        digitalWrite(17,LOW); // Установка пина 17 в низкий уровень
        digitalWrite(10,LOW); // Установка пина 10 в низкий уровень
        digitalWrite(18,LOW); // Установка пина 18 в низкий уровень
        digitalWrite(19,LOW); // Установка пина 19 в низкий уровень
      }
      if(data[0]>598)
      {   
        analogWrite(5,255); // Включение левого двигателя
        analogWrite(6,255); // Включение левого двигателя
        digitalWrite(17,LOW); // Установка пина 17 в низкий уровень
        digitalWrite(10,HIGH); // Установка пина 10 в верхний уровень, направление движения вперед 
        digitalWrite(18,HIGH); // Установка пина 10 в верхний уровень, направление движения вперед
        digitalWrite(19,LOW); // Установка пина 19 в низкий уровень
      }
      if(data[0]< 450)
      {   
        analogWrite(5,255); // Включение левого двигателя
        analogWrite(6,255); // Включение левого двигателя
        digitalWrite(17,HIGH); // Установка пина 17 в верхний уровень, направление движения назад 
        digitalWrite(10,LOW); // Установка пина 10 в низкий уровень
        digitalWrite(18,LOW); // Установка пина 18 в низкий уровень
        digitalWrite(19,HIGH); // Установка пина 19 в верхний уровень, направление движения назад
      }  
      // Проверка полученных данных от правого джойстика (data[1]), управление правым двигателем
      if(data[1]>450 && data[1]<598){ // Если значение первого элемента массива в заданном диапазоне
        digitalWrite(3, LOW); // Отключение правого двигателя
        digitalWrite(8, LOW); // Отключение правого двигателя
        digitalWrite(4,LOW); // Установка пина 4 в низкий уровень
        digitalWrite(7,LOW); // Установка пина 7 в низкий уровень
        digitalWrite(14,LOW); // Установка пина 14 в низкий уровень
        digitalWrite(15,LOW); // Установка пина 15 в низкий уровень
      }
      if(data[1]>598)
      {   
        digitalWrite(3, HIGH); // Включение правого двигателя
        digitalWrite(8,HIGH); // Включение правого двигателя
        digitalWrite(4,LOW); // Установка пина 4 в низкий уровень
        digitalWrite(7,HIGH); // Установка пина 7 в верхний уровень, направление движения вперед 
        digitalWrite(14,HIGH); // Установка пина 14 в верхний уровень, направление движения вперед 
        digitalWrite(15,LOW); // Установка пина 15 в низкий уровень
      }
      if(data[1]< 450)
      {   
        digitalWrite(3,HIGH); // Включение правого двигателя
        digitalWrite(8,HIGH); // Включение правого двигателя
        digitalWrite(4,HIGH); // Установка пина 4 в верхний уровень, направление движения назад
        digitalWrite(7,LOW); // Установка пина 7 в низкий уровень
        digitalWrite(14,LOW); // Установка пина 14 в низкий уровень
        digitalWrite(15,HIGH); // Установка пина 15 в верхний уровень, направление движения назад
      }  
      // Проверка полученных данных от кнопки правого джойстика (data[2]), управление механизмом сброса
      if(data[2] == 1){ // Если равно 0
         if(count < 1){ // Счетчик меньше единицы
            digitalWrite(16, HIGH); // Замыкаем реле запускаем механизм сброса
            delay(500); Ждем 500 миллисекунд
            digitalWrite(16, LOW); // Отключаем
            count++; // Увеличиваем счетчик на единицу 
         }
      }
      else{
        if(count >= 1){ // Если счетчик равно или больше единицы
            digitalWrite(16, HIGH);  // Замыкаем реле запускаем механизм сброса
            delay(500); Ждем 500 миллисекунд
            digitalWrite(16, LOW); // Отключаем
            count--; // Уменьшаем счетчик на единицу 
         }
      }
      reserve = !data[3]; // Резервная кнопка правого джойстика для свободного пользования
    }
  }
}

Код для пульта управления (tx.ino)

#include <SPI.h> // Подключаем библиотеку для работы с SPI
#include <nRF24L01.h> / Подключаем библиотеку для работы с радиомодулем nRF24L01
#include <RF24.h> / Подключаем библиотеку для работы с радиомодулем nRF24L01

const uint64_t pipe = 0xE8E8F0F0E1LL; // Указываем адрес конфигурации радиомодуля для обмена данными
RF24 radio(9,10);// vмодуль на пинах 9 и 10 // Инициализируем объект радиомодуля на пинах 2 и 9

byte pinLeftJoystickX = 14; // Указываем номер пина, на который подключен левый джойстик X
byte pinRightJoystickX = 15; // Указываем номер пина, на который подключен правый джойстик X
byte pinLeftJoystickSwitch = 4; // Указываем номер пина, на который подключена кнопка левого джойстика
byte pinRightJoystickSwitch = 3; // Указываем номер пина, на который подключена кнопка правого джойстика

boolean leftJoystickSwitch = 0; // Объявляем переменную для хранения состояния кнопки левого джойстика
boolean rightJoystickSwitch = 0; // Объявляем переменную для хранения состояния кнопки правого джойстика

boolean leftJoystickSwitchState; // Объявляем переменную для хранения текущего состояния кнопки левого джойстика
boolean rightJoystickSwitchState; // Объявляем переменную для хранения текущего состояния кнопки правого джойстика

int transmitData[4]; // Массив, хранящий передаваемые данные
int latestData[4]; // Массив, хранящий последние переданные данные
boolean flag = 0; // Флаг, указывающий на необходимость отправки данных по радио
boolean leftJoystickSwitchFlag = 0; // Флаг, указывающий на изменение состояния кнопки левого джойстика
boolean rightJoystickSwitchFlag = 0; // Флаг, указывающий на изменение состояния кнопки правого джойстика

unsigned long lastPressLeftJoystickSwitch; // Переменная, хранящая время последнего нажатия кнопки левого джойстика
unsigned long lastPressRightJoystickSwitch; // Переменная, хранящая время последнего нажатия кнопки правого джойстика

void setup() {
  pinMode(pinLeftJoystickSwitch, INPUT_PULLUP); // Устанавливаем пин, на который подключена кнопка левого джойстика, в режим входа с подтяжкой к питанию
  pinMode(pinRightJoystickSwitch, INPUT_PULLUP); // Устанавливаем пин, на который подключена кнопка правого джойстика, в режим входа с подтяжкой к питанию
 
  radio.begin(); // Активировать модуль

  radio.openWritingPipe(pipe);   // Мы - труба 0, открываем канал для передачи данных
  radio.setChannel(9);  // Выбираем канал (в котором нет шумов!)

  radio.setPALevel (RF24_PA_MAX); // Уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate (RF24_250KBPS); // Скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  // Должна быть одинакова на приёмнике и передатчике!
  // При самой низкой скорости имеем самую высокую чувствительность и дальность!!

  radio.powerUp(); // Начать работу
  radio.stopListening(); // Не слушаем радиоэфир, мы передатчик
}

void loop() {
  leftJoystickSwitchState = !digitalRead(pinLeftJoystickSwitch); // Считать состояние переключателя левого джойстика
  rightJoystickSwitchState = !digitalRead(pinRightJoystickSwitch); // Считать состояние переключателя правого джойстика

  if(leftJoystickSwitchState == 1 && leftJoystickSwitchFlag == 0 && millis() - lastPressLeftJoystickSwitch > 50){ // Если нажат переключатель левого джойстика и флаг еще не поднят, и прошло более 50 миллисекунд после последнего нажатия
    leftJoystickSwitchFlag = 1;  // Поднять флаг переключения левого джойстика
    leftJoystickSwitch = !leftJoystickSwitch; // Поменять состояние переключателя левого джойстика
    lastPressLeftJoystickSwitch = millis(); // Запомнить время последнего нажатия переключателя левого джойстика
  }
  if(leftJoystickSwitchState == 0 && leftJoystickSwitchFlag == 1){ // Если переключатель левого джойстика отпущен и флаг поднят
    leftJoystickSwitchFlag = 0; // Опустить флаг переключения левого джойстика
  }
  if(rightJoystickSwitchState == 1 && rightJoystickSwitchFlag == 0 && millis() - lastPressRightJoystickSwitch > 50){ // Если нажат переключатель правого джойстика и флаг еще не поднят, и прошло более 50 миллисекунд после последнего нажатия
    rightJoystickSwitchFlag = 1; // Поднять флаг переключения правого джойстика
    rightJoystickSwitch = !rightJoystickSwitch; // Поменять состояние переключателя правого джойстика
    lastPressRightJoystickSwitch = millis(); // Запомнить время последнего нажатия переключателя правого джойстика
  }
  if(rightJoystickSwitchState == 0 && rightJoystickSwitchFlag == 1){ // Если переключатель правого джойстика отпущен и флаг поднят
    rightJoystickSwitchFlag = 0; // Опустить флаг переключения правого джойстика
  }
  
  transmitData[0] = analogRead(pinLeftJoystickX); // Записать данные с левого джойстика в массив для передачи
  transmitData[1] = analogRead(pinRightJoystickX); // Записать данные с правого джойстика в массив для передачи
  transmitData[2] = leftJoystickSwitch; // Записать состояние переключателя левого джойстика в массив для передачи
  transmitData[3] = rightJoystickSwitch;  // Записать состояние переключателя правого джойстика

  for (int i = 0; i < 4; i++) { // В цикле от 0 до числа каналов
    if (transmitData[i] != latestData[i]) { // Если есть изменения в transmit_data
      flag = 1; // Поднять флаг отправки по радио
      latestData[i] = transmitData[i]; // Запомнить последнее изменение
    }
  }

  if (flag == 1) {
    radio.powerUp(); // Включить передатчик
    radio.write(&transmitData, sizeof(transmitData)); // Отправить по радио
    flag = 0; // Опустить флаг
    radio.powerDown(); // Выключить передатчик
  }
}

В заключении тесты показали, что кораблик развивает скорость 1м/c с нагрузкой в тихую погоду. Радиоуправление работает до 700м в открытой местности. Сильно перегреваются драйвера двигателей, их нужно заменить на более мощные. Периодически протекают деидвуды при заднем ходе. Лучше купить готовые решения. Не хватает оборотов у двигателей, нужны более оборотистые. Плюс нужен рефакторинг всего кода.

Комментарии (44)


  1. sshmakov
    23.04.2023 05:13
    +1

    Почему нужны более высокооборотистые двигатели? По-моему, в воде они не смогут развить скорость из-за сопротивления среды.


    1. nielsanderson Автор
      23.04.2023 05:13

      Скорость на воде под нагрузкой действительно в несколько раз меньше. В книге С. Т Лучининов «Юный моделист-кораблестроитель» написано, что оптимально 3000-4000 об/мин, в даташит МЭ 255 тоже 3000 об/мин, но по ощущениям, там явно меньше. Количество лопастей, размер винта все это подобрано экспериментально.


      1. sshmakov
        23.04.2023 05:13
        +7

        То есть одни высокие обороты не помогут, на самом деле нужна мощность двигателя, чтобы поддержать нужные обороты.


    1. salnicoff
      23.04.2023 05:13

      Не нужны. Чем медленнее вращается винт, тем выше его К.П.Д., ибо быстрокрутящийся винт гоняет воду вокруг себя и пытается ее вскипятить. Совсем быстро крутится — здравствуйте, кавитация и разрушение винта.


  1. NekitGeek
    23.04.2023 05:13
    +4

    Вот это настоящий труъ-DIY. Но в схеме модуля реле светодиод зашунтирован, а в схеме стабилизатора не особо понял зачем транзисторы подтягивают питание через 10 КОм резисторы на землю.


    1. DvoiNic
      23.04.2023 05:13
      +6

      … настоящий труъ-DIY

      Вряд ли бессмысленный, но изрядно беспощадный.


    1. Didimus
      23.04.2023 05:13
      +3

      «сопротивление бесполезно»


    1. nielsanderson Автор
      23.04.2023 05:13

      R8, R6, R10 это любая нагрузка, перерисую схему


  1. Javian
    23.04.2023 05:13
    +1

    Может радиаторы драйверов двигателя в воду опустить?


    1. nielsanderson Автор
      23.04.2023 05:13

      Есть проблемы с герметизацией, лучше купить мощный драйвер с запасом


      1. Javian
        23.04.2023 05:13
        +1

        В конструкции можно запланировать часть погруженной конструкции металлической, например киль.


      1. iliasam
        23.04.2023 05:13
        +1

        Вот-вот, L298N - древний драйвер на биполярных транзисторах. Современные драйверы на MOSFET будут значительно меньше греться.


    1. salnicoff
      23.04.2023 05:13

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


  1. hbrmrk
    23.04.2023 05:13
    +2

    Движитель выбрал основываясь на показателе КПД

    установил коллекторные 20 ваттные двигатели

    В это время тихо заплакал один движитель.

    Б\К скорее всего придётся с хорошим редуктором ставить. Ещё из плюсов - моторы и контроллеры есть водостойкие - охлаждение перестаёт быть проблемой


  1. Didimus
    23.04.2023 05:13
    -1

    А что с законностью такого средства? Надо перед заплывом курс за две недели согласовать?


    1. salnicoff
      23.04.2023 05:13
      +1

      До 200 кг. докового веса и до 8 киловатт главных машин — не регистрируются. Тут, правда, еще остается вопрос, потому что КВВТ и КТМ предполагают на судне экипаж как минимум из одного человека. :-)

      Надо перед заплывом курс за две недели согласовать?

      Не надо лезть туда, куда нельзя. Согласовывать ничего не надо. Если водоем не входит в перечень внутренних водных путей, то можно лезть куда угодно. На море тоже сложнее: там еще погранцы внезапно появляются, со своими заморочками.


  1. andrew_zola
    23.04.2023 05:13

    супер!

    еще бы видео


  1. timoxa_dev
    23.04.2023 05:13

    Не хватает оборотов у двигателей, нужны более оборотистые

    Добрый день! А вы случайно не пробивали тему с бесколлекторными двигателями которые делают в РФ? Я смог найти только оптовые варианты, а поштучно только китайские


    1. nielsanderson Автор
      23.04.2023 05:13
      +2

      Добрый день! Нет, я не из РФ :)


    1. DungeonLords
      23.04.2023 05:13
      -1

      Российские BLDC тут https://instagram.com/motochrome_llc?igshid=YmMyMTA2M2Y=

      Правда не гарантирую, что инженеры не разбежались из-за войны...


  1. Ydhduucyw
    23.04.2023 05:13
    +1

    Ну осталось сделать кораблик который будет рыбу ловить. ;)


    1. Javian
      23.04.2023 05:13

      Пусть хотя бы поплавок с крючком завезет подальше и сбросит.


  1. grey_rat
    23.04.2023 05:13

    Так а цель такого кораблика? Это для рыбалки или рыбу просто покормить? Если для рыбалки, так уже придуманы разные способы доставки корма на точку. А в дальнее плавание смысл отправлять, если снасть туда не добросить?


    1. CrashLogger
      23.04.2023 05:13

      Надо к нему еще автоматическую удочку добавить - катушку с моторчиком и датчик клева )


      1. Roma_letchik
        23.04.2023 05:13

        И сонар :)


      1. DvoiNic
        23.04.2023 05:13
        +1

        ..."сапёрную удочку"™


  1. sergarcada
    23.04.2023 05:13
    +4

    Хотелось бы более подробного описания. Например, тема механизма сброса корма не раскрыта совсем.


  1. salnicoff
    23.04.2023 05:13
    +1

    Для изготовления шпангоутов нужен был ЧПУ фрезер или 3D принтер. Их, к сожалению, у меня не было. Руками все это делать из дерева - тоже нелегкая задача.

    Шпангоуты выпиливаются лобзиком из фанеры или ламинируются из нескольких слоев. Первое на порядок проще, второе — лучше, но требует оснастки. Другие варианты (сборка из отдельных частей на деревянных гвоздях и т. п.) рассматривать не будем. :-)

    Далее были неудачные попытки расчета гидродинамических характеристик на FlowVision CFD. В итоге остановился на этапе 3D моделирования

    Неправильно ты, Дядя Федор, бутерброд жуешь. Для проектирования судов есть Free Ship. Если мелко будет, то делаем проект в 10 раз больше (т. е. 20-метровое судно вместо 2-метрового), потом пересчитываем результаты через коэффициенты подобия.


  1. mmMike
    23.04.2023 05:13

    Периодически протекают деидвуды при заднем ходе.

    Странно, почему все пытаются сделать, в надводных моделях, расположение двигателя ниже уровня воды и мучаются с протеканиями.

    В Азии все ездят на самодельных лодках с двигателем выше уровня воды. Берется обычный движок от убитой легковушки приляпывается прямо к валу коробки длинный вал на конце которого гребной винт и все.

    КПД и пр. для варианта "длинный вал входит в воду под 35-45 градусов" не идеален, но насколько проще конструкция и нет проблем с герметизацией. Особенно если нужна не скоростная модель для соревнований, а что то не очень скоростное и не особенно важно КПД и долгая жизнь.


    1. salnicoff
      23.04.2023 05:13

      Азиатское судостроение оно такое азиатское... Хуже, наверное, только кубинские лодки-автомобили. Не надо все это повторять, пусть даже и в самоделке для рыбака-фаната.


      1. mmMike
        23.04.2023 05:13
        +1

        Не надо все это повторять, пусть даже и в самоделке для рыбака-фаната.

        А почему?
        Так и хочется сказать "вам шашечки или ехать?"


        1. salnicoff
          23.04.2023 05:13

          Там много проблем, начиная с безопасности и заканчивая эффективностью. И если на эффективность еще можно забить (да, принцип «шашечки или ехать» многие для себя не отменяли), то вот на безопасность/надежность/и т. п. я бы забивать не стал.


          1. mmMike
            23.04.2023 05:13

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

            Но речь идет о практически одноразовой модельке (несколько часов работы за сезон) с чисто утилитарной задачей.

            безопасность - да какая разница для модели малого размера.
            а надежность - ну так 100% над поверхностью и не зальет/не замкнет мотор. И "схема вал под углом в воду" гораздо проще и надежнее чем сальники вала в дейдвуде в домашних условиях или гибкий вал или схема передачи типа "подвесной мотор".


            1. salnicoff
              23.04.2023 05:13

              Эта «одноразовая» моделька запросто может выйти из-под контроля и куда-нибудь убежать. Попадет под какой-нибудь Б.Ж.П. — он ее переломает и дело с концом, а если в какого-нибудь купающегося ребенка? Да и С.П.К. тоже не любят встречи с посторонними объектами на полном ходу. Сейчас, правда, С.П.К. мало осталось, зато развелось множество пластиковых «кроссовок», в которых дури больше, чем в «Ракетах» и «Метеорах», а прочность корпуса — ниже... В общем, если это игрушка, которую будут запускать в пожарном пруду в глухой деревне, — это одно, и на безопасность можно забить, а если этот пепелац будет в водоеме хотя бы с маломерным судоходством, то «safety first»...


              1. mmMike
                23.04.2023 05:13
                +1

                А какая зависимость "безопасность" от вариантов (вал зафиксированный. ибо это не человек рулит)

                • вал параллелен поверхности (мотор ниже уровня воды)

                • вал под углом 35-45 градусов (мотор выше уровня воды)

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

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


                1. salnicoff
                  23.04.2023 05:13

                  В первом случае вал находится на линии, проходящей через центр величины (предполагаем, что все спроектировано верно), и есть два вектора — один от этого центра в одну сторону (сопротивление воды), другой — в другую (упор винта). В сумме (векторной) — ноль. Хотим быстрее — вектор сопротивления больше, вектор упора — тоже больше, сумма — ноль. Во втором случае все далеко не на одной линии, и возникают разные разворачивающие моменты типа «давайте нырнем носом в воду». У С.П.К. и глиссеров валы наклонные, но там еще есть вектора сил динамического поддержания, да и то с ними надо поаккуратнее (на тех же «Метеорах» было два штурвала).

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

                  Тихоходная штука может в кого-то другого нехило «приехать». Да и винты сзади торчат явно выскооборотные — такая вот самоходная циркулярка получается... Это не значит, что не надо такие штуки делать, просто надо заранее думать о всяких нехороших ситуациях...


  1. ErshoffPeter
    23.04.2023 05:13

    А где GPS GLONASS с возвратом в точку отбытия? Актуально в случае когда аккумы внезапно закончатся посреди водоёма.


    1. DvoiNic
      23.04.2023 05:13

      и если аккумы кончатся — как поможет ГЛОНАСС ?


      1. ErshoffPeter
        23.04.2023 05:13
        +1

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

        Дальше продолжать?


        1. salnicoff
          23.04.2023 05:13

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


          1. DvoiNic
            23.04.2023 05:13
            +1

            течение, скорость которого может

            Даже ветер.


            1. salnicoff
              23.04.2023 05:13

              Да, и ветер посильнее тоже может «помочь»...


          1. ErshoffPeter
            23.04.2023 05:13

            Если у вас нету собаки - её не отравит сосед,

            Думайте сами - решайте сами: иметь или не иметь.

            С коптерами та же фигня и тем не менее без возврата по спутникам в точку вылета сечас летают только камикадзе.


            1. salnicoff
              23.04.2023 05:13

              С коптерами та же фигня и тем не менее без возврата по спутникам в точку вылета сечас летают только камикадзе.

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