Я как-то столкнулся с проблемой. Вахта, маневры, и 3-х позиционный клапан автоматического регулирования температуры контура ГТ главного двигателя «выключен». Температура резко повысилась. Конечно, в таких случаях клапан нужно открывать вручную, но есть одна проблема. Сколько нужно открыть? Очень большой перепуск воды в/из LT-системы приведет к резкому снижению температуры главного двигателя. Такие вещи чреваты крайне негативными последствиями, вплоть до летального исхода для некоторых очень дорогих деталей главного двигателя. Недостаточное шунтирование приведет к перегреву, что, конечно, чревато последствиями. Так на сколько нужно открыть клапан? Ближайшая точка, где можно посмотреть температуру контура ГВ, находится на две палубы выше регулирующего клапана. Проще говоря, когда вы откроете клапан и побежите посмотреть, будет уже слишком поздно! Поэтому я решил собрать устройство, которое отображает температуру главного двигателя прямо рядом с клапаном управления. Кроме того, я добавил к устройству датчик влажности и температуры в машинном отделении. Разумеется, все собирается без вмешательства в стационарные системы корабля и может быть легко демонтировано или перемещено. Датчик для измерения температуры контура ГТ главного двигателя — DS18B20. Я программно установил точность измерения на 3 знака после запятой. Влажность и температура в МО измеряется с помощью DHT11. Ниже приведен код программы.
#include <LiquidCrystal_I2C.h> // Подключаем библиотеку ЖК дисплея по шине I2C
#include <Wire.h> // Подключаем библиотеку Wire
#include <OneWire.h> // Подключаем библиотеку OneWire
#include <DallasTemperature.h> // Подключаем библиотеку Dallas Temperature
#include "DHT.h" // Подключаем библиотеку датчика влажности и температуры DHT
#define ONE_WIRE_BUS 8 // Определяем вход датчика DS18B20
OneWire oneWire(ONE_WIRE_BUS); // Подключаем OneWire устройство
DallasTemperature sensors(&oneWire); // Подключаем oneWire к Dallas Temperature.
#define DHTPIN A0 // Определяем вход датчика DHT11
#define DHTTYPE DHT11 // Подключаем датчик влажности и температуры DHT11
DHT dht(DHTPIN, DHTTYPE);
byte degree[8] = // Кодируем символ градуса на матрице дисплея
{
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
};
LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность дисплея
// Выводы дисплея для Arduino UNO подключаем к:
//SDA-A4
//SCL-A5
void setup()
{
lcd.backlight(); // Включаем подсветку дисплея
// Кодируем Сообщение Приветствия
//Выводим сообщение №1
lcd.init(); // Инициализируем lcd дисплей
lcd.setCursor(0, 0); // Устанавливаем курсор
lcd.print("AUX SYS. OF TEMP"); // Выводим текст первой строки
lcd.setCursor(0, 1); // Устанавливаем курсор
lcd.print(" CONTROL "); // Выводим текст 2 строки
delay(3000); // ждём 3000 миллисекунд
//Выводим сообщение №2
lcd.init(); // Инициализируем lcd дисплей
lcd.setCursor(2, 0); // Устанавливаем курсор
lcd.print("FOR MSC UMA"); // Выводим текст первой строки
lcd.setCursor(2, 1); // Устанавливаем курсор
lcd.print("ENGINE CREW"); // Выводим текст второй строки
delay(2000); // ждём 2000 миллисекунд
//Выводим сообщение №3
lcd.init(); // Инициализируем lcd дисплей
lcd.setCursor(1, 0); // Устанавливаем курсор
lcd.print("From Alexandr"); // Выводим текст первой строки
lcd.setCursor(1, 1); // Устанавливаем курсор
lcd.print("Cheban-Lianka"); // Выводим текст 2 строки
delay(1000); // ждём 1000 миллисекунд
//Выводим сообщение №4
lcd.init(); // Инициализируем lcd дисплей
lcd.setCursor(3, 0); // Устанавливаем курсор
lcd.print("HT-Sensor"); // Выводим текст первой строки
lcd.setCursor(4, 1); // Устанавливаем курсор
lcd.print("DS18B20"); // Выводим текст 2 строки
delay(100); // ждём 100 миллисекунд
//Выводим сообщение №5
lcd.init(); // Инициализируем lcd дисплей
lcd.setCursor(1, 0); // Устанавливаем курсор
lcd.print("Hummidity&Temp"); // Выводим текст первой строки
lcd.setCursor(1, 1); // Устанавливаем курсор
lcd.print("Sensor - DHT11"); // Выводим текст 2 строки
delay(100); // ждём 100 миллисекунд
//Выводим сообщение №6
lcd.init(); // Инициализируем lcd дисплей
lcd.setCursor(0, 0); // Устанавливаем курсор
lcd.print("chebanlianka.com"); // Выводим текст первой строки
lcd.setCursor(0, 1); // Устанавливаем курсор
lcd.print("-----------------"); // Выводим текст 2 строки
delay(3000); // ждём 3000 миллисекунд
// Инициализируем дисплей
lcd.init(); // Инициализируем lcd дисплей
lcd.backlight(); // Включаем подсветку
lcd.createChar(1, degree); // Создаем символ под номером 1
dht.begin(); // начинаем работать с DHT11
sensors.begin(); // начинаем работать с DS18B20
};
void loop() {
// Начинаем работу с DS18B20
sensors.requestTemperatures();
float temp = sensors.getTempCByIndex(0); // Читаем информацию с датчика температуры №1
// Начинаем работать с DHT11
float h = dht.readHumidity(); // Читаем с датчика DHT11 уровень влажности
float t = dht.readTemperature(); // Читаем с датчика DHT11 температуру в градусах цельсия
// Выводим на дисплей данные датчика DS18B20
lcd.setCursor (0, 0 ); // Устанавливаем курсор в начало 1 строки
lcd.print("HT-Temp="); // Выводим текст
lcd.print(temp, 3); // Выводим значение температуры, "3" - уровень точности, 3 знака после запятой
lcd.print(""); // Выводим текст
lcd.setCursor(14, 0); // Устанавливаем курсор на 14 символ 1 строки
lcd.print("\1C"); // Выводим текст - символ градуса
// Выводим на дисплей показания влажности и температуры в машинном отделении с датчика DHT11
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("E/R- \1C"); // Выводим текст, "\1" - символ градуса
lcd.setCursor(4, 1); // Устанавливаем курсор на 4 символ 2 строки
lcd.print(t,0); // Выводим значение температуры, "0" - отсутствие знаков после запятой
lcd.setCursor(9, 1); // Устанавливаем курсор на 9 символ 2 строки
lcd.print("Hum- %"); // Выводим текст
lcd.setCursor(13, 1); // Устанавливаем курсор на 13 символ 2 строки
lcd.print(h, 0); // Выводим значение влажности вмашинном отделении, "0" - отсутствие знаков после запятой
delay(100); // Добавляем паузу в 100 миллисекунд между измерениями
// Программа написана Александром Чебан-Лянка www.chebanlianka.com
// oleksandr@chebanlianka.com
// +380674836583
}