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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#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
 
}

Залишити відповідь