ДОПОМІЖНИЙ МОНІТОРИНГ ТЕМПЕРАТУРИ ГОЛОВНОГО ДВИГУНА

Якось я зіткнувся з проблемою. Вахта, маневри, а 3-позиційний автоматичний терморегулюючий клапан HT-контуру головного двигуна “відключився”. Температура почала різко підніматися. Звичайно, в таких випадках клапан потрібно відкривати вручну, але є лише одна проблема. Скільки відкривати? Дуже великий байпас води в/з LT-системи призведе до різкого падіння температури головного двигуна. Такі речі загрожують вкрай негативними наслідками, аж до фатальних для деяких дуже дорогих деталей головного двигуна. Недостатній байпас призведе до перегріву, звісно, з відповідними наслідками. Тож на скільки відкривати клапан? Найближча точка, з якої можна побачити температуру HT-контуру, знаходиться на дві палуби вище над регулювальним клапаном. Простіше кажучи, поки ви відкриєте вентиль і збігаєте подивитися температуру, може бути вже занадто пізно! Тому я вирішив зібрати пристрій, який відображатеме температуру головного двигуна прямо біля контрольного клапана. А ще я додав до пристрою датчик вологості і температури в машинному відділенні. Звісно, все зібрано без жодного втручання в стаціонарні системи корабля і може бути легко демонтоване або переміщене. Датчик для вимірювання температури HT-контуру головного двигуна – 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

}

Leave a Reply