Якось я зіткнувся з проблемою. Вахта, маневри, а 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 } |