Страница 1 из 5
Технояхтинг с Ардуино
Добавлено: Ср ноя 03, 2021 21:38:47
maxlab
Всем привет! Ищу единомышленников.
Лодки пока нет, но скоро будет. Правда убитая в хлам.
Пока решаю этот вопрос, решил наклепать всяких датчиков
и объединить их по протоколу ModBUS.
Планируется:
Качество воздуха (противопожарка)
Температура, влажность, атм. давление (типа барометр ясно-пасмурно-ураган)
Анеморумбометр
Эхолот до 100м (стандартный фитинговый трансдьюсер или самодельный)
Лаг (СВЧ или ультразвуковой)
Радар-детектор
АИС
Автопилот( магнитный/GPS курс, ветер)
Система управления движетелем (BLDC)
Ну и т.д
Я тут уже на полляма наговорил...
И, в качестве бреда - полное радиоуправление аки дрон

Re: Технояхтинг с Ардуино
Добавлено: Чт ноя 04, 2021 05:00:18
phalanx
IMHO, в судовых условиях в качестве связного протокола CAN уже нужен. Arduino никаким боком. Или Вам утопнуть? Или речь о моделировании (беспилотном судне) идет?
Re: Технояхтинг с Ардуино
Добавлено: Чт ноя 04, 2021 14:49:30
maxlab
[uquote="phalanx",url="/forum/viewtopic.php?p=4116292#p4116292"]IMHO, в судовых условиях в качестве связного протокола CAN уже нужен.[/uquote]
Совершенно не обязательно. Разные производители судового оборудования используют разные протоколы и транспортные уровни. Гармин вообще проприетарщиной занимается. Традиционно используют NMEA (RS-232), NMEA-2000 (CAN) ну и SeaTalk (EtherNet) для взаимной интеграции. Мой выбор протокола общения ModBUS между системами обусловлен личным опытом интеграции 1С-Предприятия с пром.оборудованием. И на небольшой парусной лодке транспорт RS-485 будет к стати, бикоз он хорошо себя зарекомендовал в промышленных условиях (помехозащищенность). Стабильную скорость обмена можно подобрать из стандартного ряда.
И почему "Ардуино никаким боком. Или Вам утопнуть"? Ардуино - это не железо. Всего лишь платформа для быстрой разработки, в основе которой Processing. Железо может быть любым. Я например китайские чипы использую lgt8f328p для обработки данных с датчиков. Непотопляемость обеспечивается другими способами. Электроника здесь не при чем.
Примерно так будет выглядеть конструкция датчиков микроклимата внутри лодки.

После отладки кода все внутренности замазываются цапон-лаком и коробочка герметизируется.
Полное радиоуправление - это вишенка на торте

. Можно попробовать ... но это не точно

Re: Технояхтинг с Ардуино
Добавлено: Чт ноя 04, 2021 19:56:26
kaetzchen
. Качество воздуха (противопожарка)
Шо датчик дыма? На лодке? Накуя?
Вы ишо ковидные тесты на ардуино замутите...
Re: Технояхтинг с Ардуино
Добавлено: Чт ноя 04, 2021 20:57:11
maxlab
Это датчик не только дыма но и пропан-бутана. От зажигалки срабатывает.
На любой серьезной лодке есть газовая плита. Вдруг утечка

. Пожар в открытом море - это беда.
Яхты горят. Вот... спички детям не игрушки
https://www.youtube.com/watch?v=WJz1j6Z_8j4
Re: Технояхтинг с Ардуино
Добавлено: Пт ноя 05, 2021 15:00:46
AndyGU70
Virtuino ModBUS автору в помощь..
Re: Технояхтинг с Ардуино
Добавлено: Ср ноя 10, 2021 00:14:17
roman.com
Ну... радиоуправление для лодки у нас уже есть...
https://www.radiokot.ru/forum/viewtopic ... 8&t=148087Осталось дело за малым))

Re: Технояхтинг с Ардуино
Добавлено: Пт фев 04, 2022 22:40:42
maxlab
Всем яхтсменам и сочувствующим привет!
Загремел в госпиталь с ковидлой, поэтому месяц не отсвечивал
Как выписался так сразу понеслось...
Первый комплект датчиков готов. Выкладываю скетч. В комментариях к коду написано куда что подсоединять. Питание - DC/DC преобразователь с 8-18 на 5 вольт. Трансивер RS485 любой, с сигналом разрешения передачи.
Спойлер
Код: Выделить всё
// Для китайского контроллера LGT8F328P. Тактовая 32 мГц
#include <WDT.h>
#include "DHTStable.h"
#include "BMP085.h" //BMP-180 подключаем через I2C (SCL,SDA)
#include <Wire.h>
#include <ModbusRtu.h> //Протокол ModbusRTU
#define TXEN 7 //Нога для управления трансивером прием/передача
#define DEV_ID 1 //Номер устройства
#define Air_Quality A0 //Нога датчика качества воздуха (пропан-бутан и угарный газ)
#define DHT22_PIN 12 //Нога DHT-22
uint16_t fld_data[4] = {0,0,0,0}; //Массив для передачи
DHTStable DHT;
BMP085 myBarometer; //Подключен к i2c
Modbus slave(DEV_ID,0,TXEN);
void setup() {
analogReference(INTERNAL4V096); //Внутренний опорник на 4,096V
wdt_enable(WTO_8S); //Сторожевой таймер на 8 сек.
pinMode(Air_Quality,INPUT);
pinMode(LED_BUILTIN,OUTPUT);
Serial.begin(115200);
myBarometer.init(); //Инициализация BMP180
slave.start(); //Запуск ModbusRTU
}
void loop() {
wdt_reset(); // Сброс сторожевого таймера
delay(500);
DHT.read22(DHT22_PIN);
fld_data[0] = analogRead(Air_Quality); // Текущее значение с датчиков пишем в массив
fld_data[1] = DHT.getHumidity()*10;
fld_data[2] = DHT.getTemperature();
fld_data[2] = ((fld_data[2]+myBarometer.bmp085GetTemperature(myBarometer.bmp085ReadUT())) / 2)*10;
fld_data[3] = (myBarometer.bmp085GetPressure(myBarometer.bmp085ReadUP())/133.3223684)*10; //Переводим в мм.ртст
digitalToggle(LED_BUILTIN); //Моргаем
slave.poll(fld_data,4);
digitalToggle(LED_BUILTIN); //Моргаем
}
Этот код должен на любой нано,про микро,уно заработать
Контролировал работу с помощью QModBus. Данные идут корректные

Потроха буду герметизировать.

Ток потребления 73 мА
Следующее на очереди это датчик пространственной ориентации
Re: Технояхтинг с Ардуино
Добавлено: Вс фев 06, 2022 16:20:59
maxlab
Привет!
Добавил активную пищалку на 2 ногу контроллера.
Немного причесал скетч
Окончательная редакция:
Спойлер
Код: Выделить всё
// Для китайского контроллера LGT8F328P. Плата SSOP-20 MiniEVB. Тактовая 32 мГц, питание 5v
#include <WDT.h>
#include "DHTStable.h"
#include "BMP085.h" //BMP-180 подключаем через I2C (SCL,SDA)
#include <Wire.h>
#include <ModbusRtu.h> //Протокол ModbusRTU
#define TXEN 7 //Нога для управления трансивером прием/передача
#define DEV_ID 1 //Номер устройства
#define BEEP 2 //Активный Buzzer
#define Air_Quality A0 //Нога датчика качества воздуха (пропан-бутан и угарный газ) MQ-2
#define DHT22_PIN 12 //Нога DHT-22
#define BAD_AIR_QUALITY 1200 //Для датчика MQ-2 значение найденное экспериментально
uint16_t fld_data[4] = {0,0,0,0}; //Массив для передачи
DHTStable DHT;
BMP085 myBarometer;
Modbus slave(DEV_ID,Serial,TXEN); // Слейв режим
void setup() {
analogReference(INTERNAL4V096); //Внутренний опорник на 4,096V (только для lgt8f328p)
wdt_enable(WTO_8S); //Сторожевой таймер на 8 сек.
pinMode(Air_Quality,INPUT);
pinMode(LED_BUILTIN,OUTPUT);
pinMode(BEEP,OUTPUT);
Serial.begin(38400); //Оптимальная скорость обмена данными для моего случая
myBarometer.init(); //Инициализация BMP180
slave.start(); //Запуск ModbusRTU
}
void loop() {
wdt_reset(); // Сброс сторожевого таймера
delay(500);
DHT.read22(DHT22_PIN);
fld_data[0] = analogRead(Air_Quality); // Текущее значение с датчиков пишем в массив
fld_data[1] = DHT.getHumidity()*10; // целочисленные значения в 2 байта (умножение на 10 где необходимо)
fld_data[2] = DHT.getTemperature();
fld_data[2] = ((fld_data[2]+myBarometer.bmp085GetTemperature(myBarometer.bmp085ReadUT())) / 2)*10;
fld_data[3] = (myBarometer.bmp085GetPressure(myBarometer.bmp085ReadUP())/133.3223684)*10; //Переводим в мм.ртст
if (fld_data[0] > BAD_AIR_QUALITY) alarm();//Сигнал тревоги
digitalToggle(LED_BUILTIN); //Моргаем. Короткие вспышки - контроллер не висит. Длинные вспышки - идет обмен по RS485
slave.poll(fld_data,4); //Проверка входящих запросов и отправка массива мастеру
digitalToggle(LED_BUILTIN);
}
void alarm() { //Сигнал тревоги - 3 гудка
for (int k=0;k<6;k++) {
digitalToggle(BEEP);
delay(200);
}
digitalWrite(BEEP, LOW);
}
Re: Технояхтинг с Ардуино
Добавлено: Вс фев 06, 2022 16:52:40
roman.com
Re: Технояхтинг с Ардуино
Добавлено: Вс фев 06, 2022 17:00:19
maxlab
Круто Вы там навертели...
В моем понимании датчик "пространственной ориентации", применительно к лодке, это магнитный курс, крен и курсовые данные с GPS.
Координаты в долготе и широте понадобятся потом, когда встанет задача научить автопилот ходить по заранее заданному треку.
Магнитный курс и крен намерен получить при помощи MPU-6500 + HMC5883. есть готовые либы чтобы данные с этих модулей сразу в
Эйлеровы координаты пересчитывать. А там есть все. И курс и тангаж и крен.
Крен тоже нужен будет автопилоту. Один из критических параметров чтобы не лечь парусами на воду или уйти в брочинг
Re: Технояхтинг с Ардуино
Добавлено: Вс фев 06, 2022 17:09:14
Martian
MPU-6500 имеет статус Not recommended for new designs
Re: Технояхтинг с Ардуино
Добавлено: Вс фев 06, 2022 17:10:17
maxlab
[uquote="Martian",url="/forum/viewtopic.php?p=4175574#p4175574"]MPU-6500 имеет статус Not recommended for new designs[/uquote]
Других нету

Re: Технояхтинг с Ардуино
Добавлено: Вс фев 06, 2022 17:41:02
roman.com
Re: Технояхтинг с Ардуино
Добавлено: Вс фев 06, 2022 17:47:10
maxlab
Тут все просто... Так как лодка не игрушечная, буду использовать нетбук для сбора данных с Processing (как вариант).
У такого решения есть важное преимущество... Не надо лепить Master устройство. Есть возможность интеграции с OpenCPN.
Re: Технояхтинг с Ардуино
Добавлено: Вс фев 06, 2022 17:47:55
roman.com
Re: Технояхтинг с Ардуино
Добавлено: Вс фев 06, 2022 17:51:33
maxlab
Для автопилота можно взять за основу вот эту идею... Вроде проверена в реале
https://create.arduino.cc/projecthub/ma ... tem-b880bd
Re: Технояхтинг с Ардуино
Добавлено: Вс фев 06, 2022 17:52:04
roman.com
OpenCPN...
не работал с таким...

Re: Технояхтинг с Ардуино
Добавлено: Вс фев 06, 2022 17:55:05
maxlab
[uquote="roman.com",url="/forum/viewtopic.php?p=4175623#p4175623"]OpenCPN...
не работал с таким...

[/uquote]
В OpenCPN есть готовый универсальный модуль автопилота написанный на Питоне.
Вопрос только в интеграции.
Re: Технояхтинг с Ардуино
Добавлено: Пн фев 07, 2022 01:38:29
roman.com
делали по радио...
https://www.radiokot.ru/forum/download/ ... ?id=313952
делали по Wi-Fi...
https://www.radiokot.ru/forum/download/ ... 074fd886f3
делали по всякому))
от ModBUS отказались...
Добавлено after 5 minutes 28 seconds:
подключали всякие датчики... гироскопы... компасы... акселерометры... и т.д.
всё выводили на экран и передавали по радио... с этим проблем не возникло))
проблемы начались с обработкой всех этих данных... посчитать... откалибровать... и т.д.
программист из нашей команды не сумел правильно настроить и обработать данные со всех датчиков данные... а мне одному всё это долго...)) тем более без библиотек на простом AVR ))

ну если есть готовые библиотеки под ардуино... тогда думаю проблем не будет))
Добавлено after 13 minutes 15 seconds:
автопилот...
https://create.arduino.cc/projecthub/ma ... tem-b880bd
не знаю... у нас была другая идея...
AVR не захотел считать косинусы и синусы)) поэтому решили всё делать на нетбуке или любом другой гаджете... там с этим проблем нет))
Добавлено after 5 minutes 24 seconds:
OpenCPN...
https://habr.com/ru/post/572736/
первый раз такое вижу))
Добавлено after 1 minute 48 seconds:
на Питоне мы писали... писали... а потом перешли на Java... теперь у меня всё на Java.