ГБО-2 на ВАЗ 2107і без датчика масової витрати повітря

На моїй машині був поламаний датчика масової витрати повітря (скор. ДМРВ), тому я їздив раніше без нього. І на бензині і на газу метан машина якось їздила. Але коли я встановив пропан – з’явилися дуже перевищенні оберти на холостому ходу, до 2500 наприклад.

Дослідження встановило, що мозок авто дуже сильно відкривав канал для подачі повітря холостого ходу за допомогою регулятора холостого ходу (скор. РХХ). Це значення становило 70-80 кроків.

При цьому збільшувалося розрідження і газовий редуктор видавав більше газу, внаслідок чого були підвищені оберти.

Регулювання настройок редуктора призводили до єдиного результату – або 2000 обертів, або двигун заглохав.

При значенні кроків РХХ в районі 20 – були припустимі оберти двигуна – 950-1000. Тому я задумав “перехопити” управління РХХ, я хотів встановлювати його на 20 кроків при переході на газ, а на бензині мозок авто управляв ним.

Для цього були проведені значні дослідження із застосуванням мікроконтроллера ATmega8, а також комп’ютерної техніки.

Відмінності від карбюраторного двигуна.

Справа в тому, що ГБО-2 – це є газовий карбюратор. Оберти двигуна на карбюраторному двигуні виставляються двома факторми:

  1. Розрідженням у впускному колекторі (управляється положенням дросельної заслонки правою ногою)
  2. Кутом випередження запалювання, який залежить напряму від обертів двигуна.

А от інжектор управляє і розрідженням і кутом як йому заманеться. Тому були проведені певні тести, які показали, що дуже часто мозок авто управляє оборотами за допомогою кута випередження іскри.

В результаті перехоплення управління РХХ нічого б не дало, і можливо спочатку авто мало б прийнятні оберти холостого ходу, а пізніше після “самонавчання” вони б ставали перевищені. Тому даний проекто я похоронив.

Для вирішення проблеми я просто купив аналог ДМРВ для даної моделі авто і встановив його. У результаті все працює, лінк на статтю про це

Також хочу сказати, що я побоююсь недовговічності ДМРВ, враховуючи його високу ціну (так званий оригінал 3000 грн, капія-заміна 800 грн), тому задумував цей проект.

Деякі результати проведених наукових досліджень для цього проекту

Для початку перехоплення я підключився до проводів управління РХХ. Спочатку ненароком їх замкнув, на що мозок авто видав помилку (нічого не згоріло). Мозок посилає деякі сигнали для руху крокового двигуна в ту чи іншу сторону. Сигнали мають певний період в часі.

Несподіванкою виявилося те, що невідомо як мозок авто знаходить нульову крапку в кроках двигуна РХХ. Перед цим я читав на форумах в інтернеті, що при увімкненні запалювання мозок повністю закриває канал, висовуючи шток РХХ на максимум в упор – це і є нульова позиція кроків. Потім відводить шток на 20 кроків, наприклад.

Мій же мозок Bosch M7.9.7, наче запам’ятовує позицію РХХ перед тим як я виключив запалювання. Можливо якщо зняти акумуляторну клему, то мозок би шукав “нуль”.

Чому треба шукати нуль? Наприклад я встановлював новий РХХ замість старого. Якщо у нових виставлено 20 кроків, а старий а зняв з виставленими 40 кроками – то як система запрацює справно?

Це все ще загадка для мене.

Для дослідження сигналів я використовував оптопару з сучасних блоків живлення (напр. до телефонів). Оптопара давала сигнал на мікроконтроллер, який зчитував момент зміни і записував час в мілісекундах в масив. Ось приклад результатів:

80 кроків після запуску  (скоріш всього він не шукає 0)
A = x      B = Y

mBan > fval: 1
86,
106,
114,
121,
130,
138,
145,
154,
162

ввів з 80 до 90 кроків

mBan > fval: 1
22
12699
12707
12714
12723
12731

ввів з 90 на 80

mBan > fval: 1
9878
9888
9898
9908
9918


ввів з 82 до 92

mBan > fval: 1
3120
3128
3136
3143
3152


було 82 увів 0

mBan > fval: 1
9346
9355
9366
9375
9385
9396
9406
9416
9426
9436
9447
9457
9467
9476
9487
9496
9506
9517
9527
9537
9547
9557
9567
9576
9587
9596
9606
9618
9628
9638
9648
9658
9668
9678
9688
9697
9707
9718
9728
9738
9748


Коли позиція РХХ фіксована, програма постійно видає струм на РХХ, тому я бачу 22 мілісекунди

було 82 увів 142

mBan > fval: 1
6385
6393
6401
6408
6417
6425
6432
6441
6449
6457
6465
6472
6481
6489
6496
6505
6513
6521
6530
6538
6545
6554
6562
6570
6578
6585
6594
6602
6609
6618


було 83 ввів 86

mBan > fval: 1
7302
7310

Менше 3х кроків бачу тільки один сигнал

Певні кроки тримаються постійно підключеним  струмом на обмотку, наприклад 84

92, 93 є струм на обмотку
94 95 нема
96 97 є
0 1 є
2 3  нема
4 5 є
6 7 нема



-===-=-=-=-=-=-=-===-=--=-=-=---=-

A = Y     B = X

Було десь 6, стало 83 приблизно, це просто для інтервалів
mBan > fval: 1
86
109
118
126
133
142
151
158
167
175
182
191
199
207
215
222
231
239
246
255
263
270
279
287
295
304
312
319
328
336
344
352
359
368
376
383
392
400
407
416


0 1 нема струму
2 3 є 

і так далі

82 ввів 92

mBan > fval: 1
22
8430
8437
8446
8454
8461


86  ввів 96

mBan > fval: 1
22
6329
6336
6345
6353
6361


82 увів 0

mBan > fval: 1
22
5164
5174
5184
5194
5204
5214
5223
5233
5244
5253
5264
5274
5285
5295
5305
5315
5324
5335
5344
5354
5365
5375
5385
5395
5405
5415
5424
5435
5445
5455
5466
5476
5486
5496
5506
5516
5526
5536
5545
5555
5566


90  ввів 80

mBan > fval: 1
22
5290
5301
5310
5320
5331


Ноутбуком виставляю 0 і вимикаю запалювання. потім увімкну

було 87 кроків

mBan > fval: 1
110
118
126
133
142
151
158
167
175
182
191
199
207
215
222
231
239
246
255
263
270
279
288
295
304
312
319
328
336
344
352
359
368
376
383
392
400
408
416
425
433
441
448


-===-=-=-=-=-=-=-===-=--=-=-=---=-


A = X

Ноутбуком виставляю 0 і вимикаю запалювання. потім увімкну

було 87 кроків

mBan > fval: 1
86
109
118
126
133
143
151
158
167
175
183
191
198
207
215
222
231
239
246
255
263
271
279
286
295
304
312
320
328
335
344
352
359
368
376
384
392
399
408
416
423
432
440
448
457

Для отримання графіків сигналів, я модифікував результати досліджень за допомогою не хитрих програм і згодував ці дані певним сайтам, які будують математичні графіки. Ось результати:

5-10ms 80Hz
16-36ms
27-42ms

Ось такі маємо результати. Вони не повні і не мають закінченого висновку, тому що проект було закопано в могилу. Але добре те, що вдалося зчитати імпульси за допомогою контроллера – а це можна використати для іншого важливого проекту – зчитування імпульсів від інфрачервоних пультів ДУ для їх клонування. Це важливо для мене, тому що в мене є акустична система 5.1 BBK з пультом RC-05. Ніяких органів управління, крім пульта – немає. Без цього маленького пульта вся система не працюватиме взагалі.

ДМРВ EuroEx 2104i-07i для ВАЗ 2107

Вирішив купити ДМРВ саме фірми EuroEx EX-AF2107I, тому що він не являється копією оригінала Siemens VDO 5WK97014. Цей висновок я зробив на основі фотографії датчика масової витрати повітря.

На даній сторінці я буду оновляти інформацію про роботу датчика ДМРП EuroEx, тому всі власники легендарного автомобіля ВАЗ 2107 (інжектор) зможуть зробити висновок, чи варто купляти EuroEx

Датчик витрати повітря був встановлений 21.01.2022. Після встановлення бажано виконати “Сброс ЭБУ с инициализацией”. Машина почала нормально їздити. Витрата повітря склала 9 -11 кг/г на холостому ходу і прогрітому двигуну (на старому не дуже справному датчику Siemens VDO дана витрата була 17-21 kg/h

Висновок

Датчик робочий. EuroEx EX-AF2107I працює нормально на ВАЗ 2107 (інжектор) без перепрошивки.

Відгук про даний датчик я залишив на сторінці покупки https://detali.zp.ua/ua/catalog/22206-dmrv_2104i_07i_EuroEx/#comments

Чи працює датчик до цього часу:

  • 01-02-2022 працює нормально
  • 16-05-2022 працює в нормі

Електронні схеми в інтернеті

Вам мабуть не цікаво, чому я зацікавився розробкою схем із самих низів – з дискретних елементів як от транзистори, резистори. А я всеодно напишу чому!

В молодості я пару раз хотів зібрати деякі схеми, наприклад підсилювач мікрофону, металошукач і інше. Але після збірки схема не працює. Відлагодити її не є можливим, тому що невідомо за яким принципом працює схема, як її розраховували і т.д.

Взагалі я вважаю схеми в інтернеті в великій більшості є неправильними. І ось цьому доказ. Знаходимо сайт через пошук Гугл “Три схемы УНЧ для новичков”, заходимо на сайт https://cxem.net/sound/amps/amp169.php

Там бачимо якісь схеми, все так гарно і легко, багато хто купився і зібрав ці схеми. Тепер читаємо відгуки!

Я вважаю, що якщо схема викладена в інтернеті, має бути такий підпис:

Я, Іванов Іван Іванович, інженер-конструктор на заводі Промислового Обладнання міста Іванов, розробив цю схему в 2005 році, зібрав її на платі, перевірив роботу при температурі 7 градусів в холодильнику і влітку в закритій машині при температурі +38 градусів, а також при кімнатній температурі. Все працює. Додаю відео з Youtube, де знімаю, що все працює.

ось такій схемі можна довіряти

На практиці ми заходимо на якийсь сайт схем, де намальовані певні принципові електронні схеми – невідомо, хто їх розробив, хто перевірив. Може це студент на парі грався і складав транзистор до резистора і виставив в інтернет.

То як, ви ще вірите схемам в інтернеті і збираєте їх навмання ? Я – ні.

Как отремонтировать спидометр ВАЗ 2107

Як відремонтувати спідометр ВАЗ 2107

Ця стаття розповість як відремонтувати сам спідометр. Якщо у вас проблеми з тросиком і т.д., то ця стаття не для вас. Практично було визначено, що новий спідометр працює приблизно 30000 – 35 тисяч кілометрів. Після цього стрілка швидкості тільки тиліпається, з часом взагалі перестає “вставати”.

В результаті розбору такого спідометра, було визначено, що причиною поломки є зміщення залізної пластини відносно магніта, а також забруднення всередині.

Магніт у формі ромба закритий зверху залізною пластиною, обидва вони насаджені по центру на вісь. Чомусь через 30 тисяч кілометрів пластина і магніт провертаються, зміщуючи магнітні поля, магнітну індукцію, і вихреві струми в алюмінієвій мисці, яка провертає стрілку.

Для ремонту я закріплюю магніт з металевою пластиною звичайним супер-клеєм. Також я все вимиваю ватною паличкою з рідиною для зняття жіночого лаку.

Щоб виставити правильну швидкість, я виставляю стрілку в довільне, трохи натягнуте пружиною положення, після чого встановлюю це в панель приладів. Їду за містом по рівній дорозі, тримаючи постійну швидкість (~70 км/год) по GPS в смартфоні і порівнюю ці дані з показниками спідометра. Записую швидкості і визначаю на скільки треба скоригувати показники.

Потім я знову знімаю спідометр, зажимаю стрілку двома прижимами, зажимаю алюмінієву миску 4 клаптиками канцелярської гумки, знімаю прижими і стрілку, виставляю правильно стрілку і закріплюю її. Виймаю гумки і все готово.

Як відкалібрувати стрілку спідометра на ВАЗ 2107

Калібрування може знадобитися після заміни редуктора заднього моста на новий з іншим передаточним числом. Різниця в реальній швидкості може бути 10 км/год. Для калібрування я знімаю спідометр, зажимаю стрілку двома прижимами, зажимаю алюмінієву миску 4 клаптиками канцелярської гумки, знімаю прижими і стрілку, виставляю правильно стрілку і закріплюю її. Виймаю гумки і все готово.

Нижче наведено фотографії, які пояснюють всю суть справи, про яку йшла мова в даній статті.

Вид спідометра знизу

Перед зняттям і розбиранням треба помітити як стоїть алюмінієва миска відносно корпуса. Маркером.

Видно провернуту металеву пластину відносно ромба
Поломка – металевий пил, забрундення. В цьому випадку металева накладка магніта не провернулась, а відламалась
Закріплення стрілки для того, щоб виставити правильні показання приладу

Зменшення коефіціенту підсилення. Зворотній негативний зв’язок

Дана стаття є експериментом для доповнення статті Коефіціент підсилення. Gain. На транзисторі. В тій статті було висунуте припущення про можливість зменшення коефіцієнту підсилення (Gain) у підсилювачі зі спільним емітером біполярного транзистора, а в даній статті те припущення перевірене і підтверджене. Для зменшення Gain викоритовується Negative feedback, який складається з резистора і конденсатора. На схемі вони позначені як Rnf i Cnf

Ось схема експерименту:

RnfCnfUin (V)Uout (V)Gain
00.1u0.030.4515
00.5u0.030.031
01u0.030.155
2.2k 1u 0.03 0.062
7.7k 1u 0.03 0.26.6
12.5k 1u 0.03 0.310
28k 1u 0.03 0.5618.6
2.2k 1u 122

Таким чином ми бачимо, що ставлячи конденсатор в 1 мікрофарад і підбираючи резистор в кілоомах можна добитися необхідного зменшеного підсилення.

Як розрахувати параметри цих двох деталей невідомо, але дуже просто можна підібрати, в разі необхідності.

html код для тестування стилів, шрифту

Заголовок h2

Заголовок h3

  • Список 1
  • Список 2
  • Список 3
  1. Список нумерований 1
  2. Список нумерований 2
  3. Список нумерований 3

Цитата: Ненажерливі чорні діри, вибухи зірок та надрозпечений газ – все це можна спостерігати на новій мапі, пише кореспондент BBC News з питань науки Джонатан Амос.
Інформацію для мапи зняв телескоп росіта, встановлений на орбітальній обсерваторії Spektr-RG.
Цей телескоп запустили минулого липня. Він вивчає космос з позиції на відстані 1,5 млн км від Землі.
Пів року Spektr-RG безперервно сканував глибини Всесвіту, повільно обертаючись.

це цитата
Двигун автомобіля
Це код
<div class="row zindex1">
<div class="col-md-12 d-none d-md-block d-lg-block">	
<div class="block1">
	<a class="button1 shevron_close" href="#" id="button1_first">Обучение</a>
	<div class="shevron1"></div>
	<a class="button1 " href="/news" >Программы</a>
	<a class="button1 " href="/news" >Статьи</a>
	<a class="button1 shevron_close" href="/news" >База знаний</a>
	<div class="shevron1"></div>
	<div class="hidden_menu1_0">
		<a class="hidden_menu1_0_item" href="/news">Для новичков</a>
		<a class="hidden_menu1_0_item" href="/news">Для продвинутых</a>
		<a class="hidden_menu1_0_item" href="/news">Для профессионалов</a>
	</div>
</div>	
</div>
</div>
Автомобіль

Це параграф. Жирний, нахилений і підкреслений. Це посилання кудись. Маршрутизація пакетів заснована на стратегії логічного віртуального каналу, і процедури керування потоками й корекції помилок у мережі не реалізуються. Буферна пам’ять (основна) функціонує відповідно до дисципліни «першим прийшов — першим обслужений». Пам’ять керування заміняється блоком, що може розглядатися як комутатор протокольної одиниці — елемента. Основні функції комутатора: циклове фазування й перетворення послідовного коду в паралельний; вирівнювання фази й супернапрямок; нагромадження елементів у буферній пам’яті; виділення елементів і повторна передача; комутаційні функції.

Что такое YMYL-сайты и как переделать свой

YMYL-сайты – это сайты важной тематики для конечного пользователя, которые могут повлиять на его жизнь. Часто пользователи интернета ищут не только прокилы, но и советы медицинского характера, кулинарного и др. Таким образом Google хочет выдавать результаты только с правдивыми, достоверными данными. YMYL это первые буквы от слогана “Your Money or Your Life”, в переводе с английского означает «Ваши деньги или Ваша жизнь».Your Money or Your Life

Тематики, которые примерно попадают под фильтр YMYL-сайтов:

  • Здоровье и медицина
  • Продажа товаров: интернет-магазины и сайты с отзывами и обзорами о товарах без продаж
  • Финансовая сфера – сайты об инвестировании, видах заработка
  • Государственные официальные сайты – содержат важную информацию.
  • Юридическая сфера
  • Сайты новостей о важных событиях – такие сайты могут нанести панику, если опубликуют неправдивые новости.

К сайтам таких тематик Google предьявляет повышенные требования, которым нужно соответствовать, чтобы держаться в выдаче достаточно высоко и получать трафик.

Первый фильтр появился в 2018 году и сразу же задел сайты медицинской тематики. До некоторых сайтов данный фильтр докатился только через год – в 2019 году, по-этому в памяти вебмастеров может заложиться дата – 2019 год.

Вместе с внедрением фильтра YMYL, Гугл не забыл выпустить рекомендации для вебмастеров, владеющих сайтами таких тематик. К сожалению эти наставления все еще доступны только на английском языке, по этой ссылке https://static.googleusercontent.com/media/guidelines.raterhub.com/en//searchqualityevaluatorguidelines.pdf

Примером сайта YMYL может быть ресурс о ремонте автомобильных турбин http://alfaturbo.kiev.ua/ , потому что правильный и качественный ремонт машины отвечает за безопаснойсть езды на ней. К тому же на сайте продаются турбины, например турбина на Mercedes с Euro 6 фирмы Garrett стоит 6200.00 грн. Таким образом сайт попадает под описание сайтов, к которым поисковая систему Гугл предьявляет повышенные требования к качеству контента.

Согласно рекомендациям Гугл, YMYL-сайты должны исполнять 3 ветки задач, чтобы быть принятыми в выдачу на высоких позициях. В руководстве они называются E-A-T. В расшифровке-переводе это звучит Экспертность, Авторитетность, Доверие.

Экспертность означает, что автор статьи должен иметь соотвествующее образование, должность.

Авторитетность означает что этот автор должен быть известным в сети, на него должны стоять ссылки, позитивные отзывы.

Доверие означает, что Гугл должен доверять вашему сайту. Для этого публикации должны быть правдивыми, проверенными.

Вывод. Пришло время потрудиться для вебмастеров. Материал, заказанный на бирже копирайта у женщины в декрете или школьников больше не оценится гуглом высоко.

Arduino UNO. Чергове оновлення функціоналу

При використанні душу на дачі за рік сталася біда – забились якісь труби. Відповідно напір води став менший, а проточний нагрівач все ще гріє сильно як і рік тому назад. Тому вода стає дуже гаряча, і всередині нагрівача спрацьовує запобіжник від перегріву. Він приблизно стпрацьовує при 48-50 градусах Цельсія.

Потім нагрів відключається і йде прохолодна вода – “літньої” температури. Через 30 секунд нагрів включається і все повторюється.

Щоб побороти дане неподобство я вирішив ввести новий функціонал в Arduino UNO – максимальну температуру нагріву. Для цього впаяв іще один світлодіод і 3 саморобні “кпопки”. При перевищенні допустимого максимуму ткмператури нагрів відключається, вмикається червоне світло. Кнопками можна виставити бажану максимальну температуру.

Ось що роблять кнопки

  1. Збільшити t на 1 градус
  2. Показати t на моніторі
  3. Зменшити t на 1 градус

Максимальна температура зберігається в енергонезалежній пам’яті EEPROM. Тобто виставлена температура збережеться і після відключення всіх приладів. Щож, публікую код:

#include <EEPROM.h>

#define SERIAL_R 49000 // сопротивление последовательного резистора, 49 кОм
#define B 3950 // B-коэффициент
#define THERMISTOR_R 50000 // номинальное сопротивления термистора, 50 кОм
#define NOMINAL_T 25 // номинальная температура (при которой TR = 100 кОм)
#define MANUAL_CORRECTION 0 // РУЧНА КОРЕКЦІЯ температури на виході
const byte tempPin = A0;
int waterFlowNormal, minimumWaterFlow, TC2_OVF;
int afterReset = 0;
int heatOff = 7;
int heatOn = 4;
int transistor = 8;
int overHeat = 9;
int readVal;
bool settingsMaxTempMode = false;
int currentTemperature;

void setup() {
  // put your setup code here, to run once:
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(overHeat, OUTPUT);
  pinMode(transistor, OUTPUT);
  pinMode(5, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);

  // set EEPROM cell for first time, or make it normal value
  byte val;
  val = EEPROM[0];
  if (val > 80) {
    EEPROM[0] = 43;
  }
  if (val < 10) {
    EEPROM[0] = 43;
  }
  
  // timer2 setup from https://www.teachmemicro.com/arduino-timer-interrupt-tutorial/
  TIMSK2 = (TIMSK2 & B11111110) | 0x01;
  TCCR2B = (TCCR2B & B11111000) | 0x07;
  // Timer/Counter 1 initialization
  // Clock source: T1 pin Rising Edge
  // Mode: Normal top=0xFFFF
  // OC1A output: Disconnected
  // OC1B output: Disconnected
  // Noise Canceler: On
  // Input Capture on Rising Edge
  // Timer1 Overflow Interrupt: Off
  // Input Capture Interrupt: Off
  // Compare A Match Interrupt: Off
  // Compare B Match Interrupt: Off
  TCCR1A = (0 << COM1A1) | (0 << COM1A0) | (0 << COM1B1) | (0 << COM1B0) | (0 << WGM11) | (0 << WGM10);
  TCCR1B = (1 << ICNC1) | (1 << ICES1) | (0 << WGM13) | (0 << WGM12) | (1 << CS12) | (1 << CS11) | (1 << CS10);
  TCNT1H = 0x00;
  TCNT1L = 0x00;
  ICR1H = 0x00;
  ICR1L = 0x00;
  OCR1AH = 0x00;
  OCR1AL = 0x00;
  OCR1BH = 0x00;
  OCR1BL = 0x00;
  minimumWaterFlow = 1;
  Serial.begin( 9600 );
  pinMode( tempPin, INPUT );
}

ISR(TIMER2_OVF_vect) {
  TC2_OVF++;
  if (TC2_OVF > 30) { // 30 is 10 LED togles in 19 seconds
    TC2_OVF = 0;
    // Toggle LED
    digitalWrite( 2, digitalRead( 2 ) ^ 1 );
    // now thermistor logic
    int t = analogRead( tempPin );
    float tr = 1023.0 / t - 1;
    tr = SERIAL_R / tr;
    float steinhart;
    steinhart = tr / THERMISTOR_R; // (R/Ro)
    steinhart = log(steinhart); // ln(R/Ro)
    steinhart /= B; // 1/B * ln(R/Ro)
    steinhart += 1.0 / (NOMINAL_T + 273.15); // + (1/To)
    steinhart = 1.0 / steinhart; // Invert
    steinhart -= 273.15; 
    int rxresult = (int)steinhart + MANUAL_CORRECTION;
    currentTemperature = rxresult;
    if (settingsMaxTempMode) {
      byte val;
      val = EEPROM[0];
      Serial.println(val);
    } else {
      if (rxresult < -22) {
        Serial.println("ER");
      } else {
        Serial.println(rxresult);
      }
    }

    if (afterReset < 100) {
      afterReset++;
    }
    //code for timer counting impulses
    if ( TIFR1 & (1 << TOV1 )) { // if it has been overflow
      waterFlowNormal = 1;  // because overflow means in was more than 65535 tics (real test leads from ~5 to ~30)
      TIFR1 = (1 << TOV1 ); // clear the flag of overflow
    }
    else {
      if ((short int)TCNT1 > minimumWaterFlow) {
        waterFlowNormal = 1;
      }
      else {
        waterFlowNormal = 0;
      }
    }
    TCNT1 = 0;  // clear in any case
  }
}

void loop() {
  if (afterReset < 6) {
    digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(70);
    digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
    delay(60);
  } else {
    digitalWrite(LED_BUILTIN, LOW);
  }  
  
  byte maxTemperature = EEPROM[0];
  if ((waterFlowNormal == 1) and (currentTemperature <= maxTemperature)) {
    digitalWrite(heatOff, LOW);
    digitalWrite(heatOn, HIGH);
    digitalWrite(transistor, HIGH);
  }
  else {
    digitalWrite(heatOff, HIGH);
    digitalWrite(heatOn, LOW);
    digitalWrite(transistor, LOW);
  }
  if (currentTemperature > maxTemperature) {
    digitalWrite(overHeat, true);
  } else {
    digitalWrite(overHeat, false);
  }
  
  // Button Set Max Temp Minus 1
  readVal = digitalRead(10);
  if (readVal) {
    digitalWrite(overHeat, false);
  }
  else {
    // button pressed
    digitalWrite(overHeat, true);
    byte val;
    val = EEPROM[0];
    EEPROM[0] = val - 1;
    delay(400);
  }
    
  // Button Set Max Temp Plus 1
  readVal = digitalRead(12);
  if (readVal) {
    digitalWrite(overHeat, false);
  }
  else {
    // button pressed
    digitalWrite(overHeat, true);
    byte val;
    val = EEPROM[0];
    EEPROM[0] = val + 1;
    delay(400);
  }

   // Button Read Max Temp To UART
  readVal = digitalRead(11);
  if (readVal) {
    digitalWrite(overHeat, false);
    settingsMaxTempMode = false;
  }
  else {
    // button pressed
    digitalWrite(overHeat, true);
    settingsMaxTempMode = true;
    delay(400);
  }
}

Тести проводив “програмно”, так як код пишу в м. Полтава, а сама установка нагріву і душ знаходяться в будинку в селі Черкасівка. Надіюсь що я не помилився і зможу приймати душ, хоч із зменшеним напором води, але із стабільною температурою (реле буде швидко клацати і підтримувати температуру в межах +/- 1 C). До того ж – це економія електроенергії – зменшений потік води, нагрів включається і виключається. Сусідам не позаздриш – так як 5.5 кВт навантаження спричинятиме поблимування їх неекономних лампочок.

Блог розробника сайтів і електронних схем