Предыстория. Очень хороший друг детства попросил отремонтировать бойлер т.к. он перестал отключаться при нагреве. Даже термометр на корпусе бойлера сплавился. Естественно сразу появилось подозрение на неисправность терморегулятора но т.к. он очень неудобно расположен сзади и сбоку бойлера что просто нереально открутить закрывающую его крышку и вообще оценить состояние терморегулятора. Было принято решение снять его и привезти на ремонт ко мне домой.

После снятия крышки терморегулятора была обнаружена неисправность собственно терморегулятора, точнее вместо терморегулятора стоял простой термопредохранитель на 95 градусов Цельсия. Он попросту сплавился и его заклинило на «вечное включение». Я предложил снять один из двух предохранительных терморегуляторов которые стояли в том же бойлере снизу и практически никак не могли его защитить от перегрева. Друг сказал что ему надо хотя бы знать какая температура воды в бойлере… А термометр то сломан! На что я и предложил сделать ему схему на контроллере и отображением состояния бойлера на индикаторе. По цене это выйдет около 700р. только за все детали. За работу я с него денег естественно не возьму. Он подумал и сказал- Делай. Вот с такой историей сломанный бойлер оказался в моем полном распоряжении.
Исследования.-
-
- Я предложил другу сделать отдельную коробку (использовал бы распределительную электрическую коробку) и в ней разместить всю электронику. Он сказал что не хотелось бы вешать еще всяких коробок. Опять же пришлось ставить дополнительные разъемы под термодатчик и какую нибудь розетку для подключения ТЭНа бойлера. Но опять же такая схема была бы максимально защищена от возможной протечки бойлера, т.к. при сборке на нижней крышке вода может залить всю схему и, соответственно, все к херам выгорит. Сказано было сделать максимально компактно, т.е. в нижней крышке. Хорошо. Сказано- делаем.
- Следующий момент на который я обратил внимание т.к. схема должна монтироваться в непосредственной близости от бака бойлера- температурный режим 328 атмеги. Скачал даташит и увидел что максимальная температура кристалла- плюс 85 градусов Цельсия. Значит делаем вывод что максимальная рабочая температура бойлера должна составлять 80 градусов, лучше конечно поменьше, все равно это уже практически кипяток.
- Реле включения ТЭНа. Т.к. мощность ТЭНа составляет 1300Вт то рассчитываем ток из формулы I=P/U, где I- ток,А, P- мощность в Ваттах, U- напряжение , в данном случае 220В. Получаем 1300/220=5,91А. Таким образом нам подойдет релейная сборка KY-019 которая выдерживает ток до 10А и мощность при 220В аж целых 2,2кВт! У меня в наличии оказалась только сдвоенная релейная сборка которая прям идеально подходила под крышку бойлера. Решил использовать одно реле на включение / отключение ТЭНа, т.е. регулировке температуры а вторую сделать как аварийной при температуре выше 83 градусов. Почему это сделано именно так. Ну во первых по даташиту контроллера температура не должна быть выше 85 градусов (см. п.2), соответственно нужно отключать ее немного раньше. Тут стоит взглянуть на строение бойлера. Термодатчик будет установлен в районе середины бака по высоте. Как известно тепло всегда стремится вверх, при этом холодная часть вещества будет всегда снизу. Понятно что при температуре на датчике в 83 градуса нижняя часть бойлера будет иметь меньшую температуру чем верхняя и мы имеем некий буфер от перегрева контроллера.
- Датчиком будет являться Dallas DS1820 который выдерживает температуру до 120 градусов. Можно конечно применить и терморезисторы но у меня их не оказалось и я решил использовать DS1820.
- Контроллер решил поставить Nano 3.0 хотя вот буквально только что подумал что хватило бы и 8 атмеги за глаза но… плата уже сделана, запущена и работает а переделывать… не хочется, все равно потом закажу еще деталей. Опять же под перепрошивку на Нано уже есть разъем а Атмегу пришлось бы ставить на панель и каждый раз перешивать.
- В роли регулятора температуры решил использовать простой переменный резистор на 10кОм подключенный крайними выводами к питанию а ползунок подключить к аналоговому входу через резистор 330 Ом (чтобы при питании выше 5 В нечаянно не пожечь вход).
- Блок питания решил взять из зарядника телефона. Можно конечно использовать 5 В по 50 руб с Али но у них мощности хватает в обрез и я боюсь что при длительном использовании они просто не выдержат и сгорят. Все устройство потребляет около 200 мА при включенных релюшках. Поэтому пришлось взять именно БП из зарядника телефона.
- Вы могли бы предложить поставить готовый терморегулятор с Али всего за 150-200 руб но… люди там до того боятся техники что им нужен минимализм во всем электронном. Т.е. буквально выключатель и регулятор температуры. А в китайском варианте в 3 кнопках они точно запутаются.
-
Вот такие небольшие исследования пришлось провести прежде чем взяться за реализацию проекта. Скетч был написан буквально за полчаса. Он был тупо переделан из моего датчика управления котлом из которого я вырезал библиотеку работы с ЕЕПРОМ (здесь она уже не нужна) и много чего другого. Скетч привожу ниже.
#include <OneWire.h>; #include <LiquidCrystal.h>; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); OneWire ds(10); int iNastrTemp; // настраиваемая температура int16_t iTekTemp; // текущая температура int Delta = 5; //дельта по умолчанию byte sw = 0; // для включения реле void setup() { lcd.begin(16, 2); pinMode(13, OUTPUT); // пин для управления РАБОЧИМ реле pinMode(9, OUTPUT); // пин для управления ЗАЩИТНЫМ реле // ВНИМАНИЕ! На реле активный уровень -LOW!!! digitalWrite(9, LOW); // включаем защитное реле digitalWrite(13, HIGH); // выключаем рабочее реле iTekTemp = inCurTemp();// запускаем прогрев температурного датчика (850 мс) // экран загрузки для стабилизации температурного датчика lcd.setCursor(6, 0); lcd.print("Hi"); lcd.setCursor(3, 1); lcd.print("Loading"); delay(800); byte count = 0; while (count != 3) { lcd.print("."); delay(600); count++; } lcd.clear(); } void loop() { iTekTemp = inCurTemp();// измеряем температуру iNastrTemp = map(analogRead(A7), 0, 1000, 10, 80); // устанавливаем температуру // аварийное отключение if (iTekTemp >= 83 || iTekTemp < 0) { digitalWrite(13, HIGH); // выключаем рабочее реле delay(100); // небольшая задержка для отмены искрения защитного реле digitalWrite(9, HIGH); // выключаем защитное реле lcd.clear(); lcd.setCursor(0, 0); lcd.print ("FAILURE"); delay(100); lcd.clear(); } else // рабочий цикл { display(iTekTemp, iNastrTemp); if ((iNastrTemp - Delta <iTekTemp) && (iTekTemp < iNastrTemp) && (sw == 1)) // работа в дельте digitalWrite(13, LOW); lcd.setCursor(13, 0); lcd.print(" ON"); } else // при повышенной температуре { digitalWrite(13, HIGH); lcd.setCursor(13, 0); lcd.print("OFF"); sw = 0; // флаг на то что система остывает на дельту } if (iTekTemp <= iNastrTemp - Delta) // при пониженной температуре { digitalWrite(13, LOW); lcd.setCursor(13, 0); lcd.print(" ON"); sw = 1; } } } //-------------------------функции-------------------------------// void display(int TCur, int TSet) { lcd.setCursor(0, 0); lcd.print("Current"); lcd.setCursor(8, 0); lcd.print(TCur); lcd.setCursor(10, 0); lcd.print("'C"); lcd.setCursor(0, 1); lcd.print("Set"); lcd.setCursor(8, 1); lcd.print(TSet); lcd.setCursor(10, 1); lcd.print("'C"); } int16_t inCurTemp() { byte data[2]; ds.reset(); ds.write(0xCC); ds.write(0x44); ds.reset(); ds.write(0xCC); ds.write(0xBE); data[0] = ds.read(); data[1] = ds.read(); int Temper = (data[1] << 8) + data[0]; Temper = Temper >> 4; return Temper; }
Описывать как все это работает смысла не вижу т.к. вы, если изучали предыдущие уроки, уже вполне можете сами разобраться что и как написано. Критика кстати принимается. Принцип работы такой:
-
-
- При включении подаем на выходы управления реле (в моем случае 13 вывод- рабочее реле, 9- защитное реле) высокий потенциал на 13 вывод (отключаем реле принудительно) и низкий на 9 (включаем защитное реле). В первоначальном варианте я подавал по логике высокий уровень на включение а низкий- на отключение и у меня все работало… только в зеркальном варианте. Нашел схему и сразу все стало понятно что активный уровень в данном модуле- низкий. Хотя мне мой друг сказал что есть модули с высоким активным уровнем… Можно конечно было через транзисторы инвертировать сигнал но усложнять схему мне не захотелось.
- Затем запускаем измерение температуры функцией inCurTemp(). Выводим экран загрузки и снова измеряем температуру. Почему я 2 раза измеряю температуру спросите вы? При первом измерении запускается датчик температуры и он выдаст стандартное значение в 85 градусов т.к. сам термодатчик еще не инициализировался. По даташиту DS1820 необходимо 850 миллисекунд для выхода в рабочий режим. Поэтому придаем «красивость» интерфейсу через строку загрузки. За это время термодатчик выйдет в рабочий режим и начнет давать корректные показания. Поэтому просто измеряем температуру еще раз. Простое решение проблемы.
- Строка в рабочем цикле iNastrTemp = map(analogRead(A7), 0, 1000, 10, 80); является одной из главных во всем скетче. Она отвечает за установку температуры нагрева. Раньше я объяснял как работать с оператором map но объясню еще раз. Мы берем этим оператором пределы значений одного измерения и преобразуем их в совершенно другой предел. В данной строке мы получаем данные с аналогового входа А7, берем значения от 0 до 1000 (напоминаю что аналоговые входы 10 битные и принимаю 1024 значения в пределах от 0 до 1023) и преобразуем их в предел от 10 до 80 (значение установленной температуры). Т.е простым преобразованием поступивших данных с входа А7 мы можем напрямую указать нужную температуру нагрева! Всего одна строка и никаких мучений с придумыванием формул и описанием буквально каждого состояния аналогового порта. Опять же значения вы можете поменять под себя. Можно было указать более низкую температуру но тогда придется еще ввести условие на значение температуры меньше 10 для корректного отображения на LCD. Или дописывать ноль перед значением, или ставить пробел после значения чтобы затереть предыдущие показания.
- Затем идут уже обработки на аварийное отключение защитного реле (больше 83 градусов) и сам цикл работы. Цикл работы следующий: нагревается вода до заданной температуры, отключается рабочее реле, как только вода в бойлере остынет на Delta градусов- реле опять включится. Дельту я установил равным 5 градусам. Меньшие значения позволят поддерживать температуру более точно но увеличивают количество срабатываний рабочего реле, что сократит срок его службы. Большие значения дельты будут проявляться в редком включении рабочего реле но и выходящая вода будет иметь большой разброс по температуре, что тоже не является нормальным т.к. заставляет постоянно подбирать нужную температуру моющемуся. Кстати защитное реле после перегрева больше не включается до тех пор, пока не перезапитаете бойлер, что позволит понять причину перегрева- залипание контактов рабочего реле.
- При аварийном срабатывании ВСЕГДА отключается сначала рабочее реле и лишь затем, через небольшую задержку, защитное. Это сделано для того чтобы защитное реле имело как можно меньшее срабатывании под нагрузкой. Т.е. максимально исключено воздействие электрической дуги на ее контакты и, соответственно, снижена вероятность залипания контактов реле. Что для защитного реле является самым главным условием. Т.е. при залипании контактов рабочего реле аварийное реле должно сработать и выдать сообщение о перегреве.
-
Функции вывода сообщений на дисплей и измерения температуры просто нет смысла описывать. Перейдем к самой конструкции и сборке бойлера. Первым делом я убрал с передней панели 2 выключателя и выпилил на их месте отверстие под LCD 1602. Слева просверлил на небольшом расстоянии отверстие диаметром 20мм пёркой под выключатель, а справа на таком же расстоянии отверстие диаметром 7 мм под переменный резистор для регулировки температуры. Все стало красиво на свои места! Затем был мучительный процесс придумывания как закрепить плату с контроллером, соединить его с дисплеем и остальной периферией. Решил напаять плату прямо на выводы дисплея. Но для такого варианта нужно было бы использовать двухсторонний текстолит. Он конечно есть но ковыряться с двухсторонней платой катастрофически не хотелось. Поэтому просто впаял под выводы подключения на плате изогнутые пин- штырьки и намертво припаял к штырькам дисплея. Получилось даже лучше чем ожидал. Штырьки дисплея предварительно подогнул чтобы контроллер не упирался в дно бачка бойлера.
Установка температурного датчика DS1820 Датчик Dallas DS1820 установил на месте старого термопредохранителя. Для этого пришлось выгнуть из оцинковки S- образную полосу. Под место установки термодатчика поставил резиновую прокладку, сам термодатчик посадил на термоклей непосредственно к колбе бойлера и прижал сверху полосой через резиновую прокладку чтобы тепло меньше отводилось в металл. Выводы обязательно нужно затянуть в термоусадку чтобы они не могли замкнуть на корпус. Можно конечно поставить термодатчик в отверстие рядом с ТЭНом, которое собственно и предназначено для установки термодатчика но я сделал по старой схеме и просто тупо перетянул провода и установил датчик на старое место. Вы можете сколхозить какую нибудь конструкцию и закрепить термодатчик где вам больше нравится. Единственное условие- устанавливать надо на всю глубину гнезда.
Закрепленные модули в бойлере Осталось закрепить модули и все- можно пробовать и отдавать все это дело другу! После небольшой отладки и испытаний собрал в корпус. Внимание! При проверке не подключайте ТЭН для настройки и тестирования. Вы сожгете ТЭН бойлера и, таким образом, наживете себе проблем.
Внешний вид готового терморегулятора Внешний вид полусобранного регулятора приведен на фото. Осталось только прикрутить саму крышку к корпусу.
Ниже привожу схему данного устройства.
Схема регулятора температуры для бойлера На ней не указан блок питания, хотя это само собой подразумевается. Схема элементарная и доступна даже начинающему.
Хочу предупредить что на некоторых участках схемы будет опасное напряжение в 220 вольт. Будьте осторожны при сборке, настройке и подключении устройства!
Печатную плату вы тоже можете скачать здесь.
PS. Ввиду того что WordPress некорректно отображает кавычки
Ошибка при переносе скетча в WordPress и по замечанию пользователя Ruslan выкладываю сам скетч. Архив скетча можете скачать ЗДЕСЬ. Ruslan, спасибо за замечание. Тем кто хочет скачивать- просто замените кавычки как показано на скриншоте сбоку во всем скетче.
-
- Руслан, специально для тебя- бойлер с звуковой индикацией неисправности:
#include <OneWire.h> #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); OneWire ds(10); int iNastrTemp; // настраиваемая температура int16_t iTekTemp; // текущая температура int Delta = 5; //дельта по умолчанию byte sw = 0; // для включения реле void setup() { lcd.begin(16, 2); pinMode(13, OUTPUT); // пин для управления РАБОЧИМ реле pinMode(9, OUTPUT); // пин для управления ЗАЩИТНЫМ реле pinMode(11, OUTPUT); // пин для звука // ВНИМАНИЕ! На реле активный уровень -LOW!!! digitalWrite(9, LOW); // включаем защитное реле digitalWrite(13, HIGH); // выключаем рабочее реле iTekTemp = inCurTemp();// запускаем прогрев температурного датчика (850 мс) // экран загрузки для стабилизации температурного датчика lcd.setCursor(6, 0); lcd.print("Hi"); lcd.setCursor(3, 1); lcd.print("Loading"); delay(800); byte count = 0; while (count != 3) { lcd.print("."); delay(600); count++; } lcd.clear(); } void loop() { iTekTemp = inCurTemp();// измеряем температуру iNastrTemp = map(analogRead(A7), 0, 1000, 10, 80); // устанавливаем температуру // аварийное отключение if (iTekTemp > 83 || iTekTemp < 0) { // прежде всего- выключаем питание с ТЭНа digitalWrite(13, HIGH); // выключаем рабочее реле delay(100); // небольшая задержка для отмены искрения защитного реле digitalWrite(9, HIGH); // выключаем защитное реле // теперь выводим сообщения и звук if (iTekTemp > 83 ) // перегрев бойлера { lcd.clear(); lcd.setCursor(0, 0); lcd.print ("HIGH TEMPERATURE"); Sound(500, 1000); // вызываем функцию звука (описана ниже) через каждые 0,5 сек (500 мсек) издается звук 1000 Гц с длительностью 500 мсек. lcd.clear(); } if (iTekTemp < 0) // обрыв датчика { lcd.clear(); lcd.setCursor(0, 0); lcd.print ("NO DATA"); delay(100); Sound(50, 1000); // вызываем функцию звука (описана ниже) через каждые 0,05 сек (50 мсек) издается звук 1000 Гц с длительностью 50 мсек. т.е. короткие и быстрые звуки lcd.clear(); } } else // рабочий цикл { display(iTekTemp, iNastrTemp); if ((iNastrTemp - Delta < iTekTemp) && (iTekTemp < iNastrTemp) && (sw == 1)) // работа в дельте { digitalWrite(13, LOW); lcd.setCursor(13, 0); lcd.print(" ON"); } else // при повышенной температуре { digitalWrite(13, HIGH); lcd.setCursor(13, 0); lcd.print("OFF"); sw = 0; // флаг на то что система остывает на дельту } if (iTekTemp <= iNastrTemp - Delta) // при пониженной температуре { digitalWrite(13, LOW); lcd.setCursor(13, 0); lcd.print(" ON"); sw = 1; } } } //-------------------------функции-------------------------------// void display(int TCur, int TSet) { lcd.setCursor(0, 0); lcd.print("Current"); lcd.setCursor(8, 0); lcd.print(TCur); lcd.setCursor(10, 0); lcd.print("'C"); lcd.setCursor(0, 1); lcd.print("Set"); lcd.setCursor(8, 1); lcd.print(TSet); lcd.setCursor(10, 1); lcd.print("'C"); } int inCurTemp() { byte data[2]; ds.reset(); ds.write(0xCC); ds.write(0x44); ds.reset(); ds.write(0xCC); ds.write(0xBE); data[0] = ds.read(); data[1] = ds.read(); int Temper = (data[1] << 8) + data[0]; Temper = Temper >> 4; return Temper; } void Sound (int tm, int freq) { tone (6, freq); delay (tm); noTone(6); delay (tm); }
Прошу прощения у всех делающих данное устройство. На последней схеме номинал резистора R3- 10 кОм вместо указанного 1 кОм, но в принципе будет работать и так.
Привет. Использование реле с низким уровнем в Вашем случае опасно. Например, если сгорит блок питания или выйдет из строя сам контроллер, то бойлер будет непрерывно нагревать воду. А если неисправен или отсутствует предохранительный клапан то возможен взрыв с тяжелыми последствиями.
Не совсем так. Если сгорит БП- то реле просто «откинет» нормально разомкнутые контакты реле. Т.е. питание не пойдет на ТЭН бойлера. И тут неважно на какое напряжение питания рассчитано реле, важнее коммутируемый ток. Если выйдет сам контроллер то тут возможны варианты. Обычно при сгорании контроллера происходит просадка напряжения БП и, опять же, откинется реле на работу. А если неисправен или отсутствует обратный клапан…. Блин. Тогда вообще надо на костре воду в ведре греть. Не зря же клапан ставят на впуск в бойлер. Кстати, в таком случае и простое залипание термодатчика, как было у моего друга, ничуть не безопаснее чем схема на контроллере. Он живет на 4 этаже и сумел «прогреть» стояк с холодной водой до 2-го этажа до 60 градусов… Делайте выводы.
Аааа, я понял почему вы так сказали! Просто на схеме я нарисовал прямое подключение реле к выводам ардуино, что подразумевает подключение вывода D13 ардуино к выводу In1 блока KY-019 и D9 ардуино к выводу In2. Если посмотреть саму схему KY-019 то там Вы увидите что в блоке применяются ключевые транзисторы для включения самих реле. Выходной ток пинов Ардуино всего 25 мА что крайне мало для включения практически любой релюшки. Поэтому в блоке KY-019 и стоят усиливающие входной сигнал транзисторы. Просто я немного не дорисовал схему, подумал что понятно. Спасибо за указанную неточность. Исправлю схему и перезалью.
Добрый вечер. Есть пару непоняток.
1) В описании пункт 6 и 8, как бы дублируют другу друга. Но на самом деле тут какая-то путаница с регулятором температуры и терморегулятором. На схеме от KY-019 идут Терм1 и Терм2. Что это такое??? Я поняла, что это двойной предохранитель по обозначению в схеме.
2) Программа выкидывает ошибки. Возможно проблема с библиотекой OneWire.h. Можете, пожалуйста, напечатать ссылку, где брали эту библиотеку.
Здравствуйте. Спасибо за замечания и ошибки. Коротко по вашим замечаниям. 1- регулятор температуры- это то чем собственно регулируют температуру но не управляют выходным устройством, т.е. простой переменный резистор. Отличие от терморегулятора в п.8- терморегулятор УЖЕ готовое устройство, просто подавай на него питание и забирай управляющее напряжение. Резистором же только выставишь температуру но никак еще управлять не сможешь без исполнительного модуля. Надеюсь понятно объяснил. Еще короче и понятнее можно объяснить так п.6- просто крутилка, п.8- УЖЕ готовое устройство. Если перейти по ссылке (ссылка может устареть) то вы увидите уже готовое устройство. Терм1 и Терм 2- это уже стоящие в бойлере термопредохранители (защищаться надо комплексно все таки).
2. OneWire.h честно не помню где взял. Попробуйте ЭТОТ архив.
Пробовал не получается
Внизу страницы выложил готовый скетч в RAR архиве. Спасибо за замечание. WordPress не дает писать кавычки как в Ардуино, преобразует их в другие. Тут или менять шрифт всей темы или… искать плагин для правильного отображения.
Нашел плагин для WP. Теперь можно копировать прямо со страницы. Спасибо ВСЕМ за замечания и устранению проблемы.
Спасибо, всё работает.
Вопрос, защитное реле не залипнит?
Да пожалуйста. Как и было написано в описании- защитное реле включается первее рабочего. Т.е. пока нагрузки нет- включится защитное реле. Рабочее реле просто включает/ отключает нагрузку во время работы. Таким образом быстрее должно «залипнуть» рабочее реле т.к. оно имеет больше срабатываний под нагрузкой. Соответственно быстрее выгорают контакты. А защитное должно сработать уже при «залипании» рабочего. Но так как оно работает весь цикл без отключения/ включения то износ контактов по логике должен быть минимальным (оно включается без нагрузки). Ведь изнашиваются контакты реле именно при замыкании/ размыкании под нагрузкой. Т.е. дуга выжигает покрытие контактов. Можно, конечно, поставить оптопару с отключением через ноль и по этому же принципу включать/ отключать реле. Будет наименьший износ контактов и, соответственно, дольше проработает реле. Ну тут уж нет предела совершенству. Если хотите- можно подумать и над этим вопросом. Но, в любом случае, обратный клапан на подаче холодной воды просто ОБЯЗАТЕЛЕН. Если и рабочее реле не сработает- то лишнее давление будет стравливаться именно через обратный клапан в подачу. Это хоть как то предотвратит бойлер от взрыва.
При обрыве датчика температуры ппоисходит нагрев воды.
Получаеться что при привышения нагрева воды защитное реле не сработает.
Ну это естественно! При обрыве будет считаться температура -127 градусов. Естественно МК будет считать что вода ООООЧЕНЬ холодная и будет стараться её нагреть. А как же иначе? Потому я и сказал что старые термодатчики не нужно вообще отключать. В случае такого форс мажора они хоть как то защитят. В принципе, можно ввести еще один термодатчик на аварийное срабатывание. Поставить их рядом и при разнице, например, больше 10 градусов включать защиту. Но опять же- где гарантия что и второй датчик не оборвется? Я же не говорю что сделал идеальный вариант контроллера для бойлера, подумайте дальше сами. Опять же на обрыв можно дописать буквально одну строку- если температура ниже нуля (такого в бойлере быть не может) включаем защиту. Все просто. А еще проще- дописать строку if (iTekTemp > 83), получится if (iTekTemp > 83 || iTekTemp < -5). Таким образом предотвратим обрыв датчика. Только что теперь писать вместо lcd.print («HIGH TEMPERATURE»);? Напишите lcd.print («FAILURE»);, что значит- неисправность.
Ruslan, что еще хотел бы увидеть на страницах сайта? Я тут как раз готовлю материал по ess8266 на управление курятником через Mqtt сервер. Все уже сделано, работает. Хочется выложить все с о всеми подводными камнями которые я нашел пока собирал и доводил до ума. Но, я так чувствую, очень много вопросов связано с восстановлением разной бытовой техники. На эту зиму запланировал аж несколько серьезных проектов. — сделать сестре электрическую духовку на Ардуино (это довольно просто) т.к. старая плита «Мечта» сгорела (выгорели переключатели) а на газовой духовке все подгорает. 2- кабелеискатель, опять же на Ардуино.
Добрый вечер.
Дописал скетч if (iTekTemp > 83 || iTekTemp < -5).Авария не сработала.
Поменял -5 на 0 все заработало.
На счет курятника, интересно было бы собрать.
Еще интересует проект часы с будильником на дисплее нокио 5110
Руслан, я сам немного ошибся в своем же примере… Понимаешь, переменная iTekTemp имеет тип integer который НЕ МОЖЕТ БЫТЬ МЕНЬШЕ НУЛЯ. Поэтому то что ты написал в скетче- тоже непройдет. Нужно присвоить iTekTemp другой тип, например int16_t, тот же integer но может принимать значения от -32768 до 32767, т.е. по любому впишемся в заданный диапазон температур, но нужно учесть что и функция int inCurTemp() тоже должна стать типа int16_t. Скетч я сейчас исправлю и тогда будет все работать как положено. Спасибо за внимание и поиск ошибок. Есть самому над чем поломать голову. Курятник выложу в ближайшее время.
Добрый день.
Хотелось бы добавить звуковой сигнал.
При аварии водонагревателя, что бы сигнализировал 1-2минуты.
Руслан, как я и говорил- нет предела совершенству, можно вечно дорабатывать ОДНО устройство, наращивать функционал но так и не добиться финальной версии. В принципе так у всех ардуинщиков все и происходит и я,кстати, не исключение. Если нужен сигнал то попробуй сам разобраться по моему же скетчу в разделе Ардуино- Отпугиватель мышей. Там есть готовый скетч… Для вывода звука используется оператор tone(8, lfreq )- что значит на 8 цифровом выводе (он должен быть объявлен как OUTPUT) генерируется сигнал с частотой lfreq (любое целое числовое значение) в Герцах. Например tone(8, 1000); значит что на 8 цифровом выводе появится сигнал с частотой 1000 Гц или 1 кГц. Попробуй сам разобраться… Очень легко использовать готовые решения но хочется чтоб ты сам попробовал сделать данную функцию. Если не получится- пиши. Тут делов всего на пару минут. Кстати, напрямую подключать звуковые устройства (динамики) крайне не рекомендую. Ток на выходах МК не должен превышать 25 мА, иначе можешь сжечь выход. Для этого используй транзистор с токоограничивающим резистором на базе. Это тоже написано в разделе Ардуино- Усиление и инвертирование выходного сигнала. Еще следует помнить что звуковые устройства в режиме отсутствия сигнала должны быть без напряжения. Иначе при подаче на них постоянного тока в течении длительного времени они просто сгорят. Еще раз советую разобраться самому. Ну уж если не получится- пиши. Помогу. Спасибо за внимание.
Добрый вечер.
К сожалению я не умею писать скетч.
Вот и приходиться в инт… искать всякие поделки что бы воплатить какую нибудь поделку. Конечно, что то я могу методом тыканья в скетче поправить, но не всегда получается. Вот и ваш проект с водонагревателем мне понравился.
Уже во всю фунциклирует у меня.
Так то можно и без пищалки.
Хорошо. Написал в конце страницы скетч со звуком. Выход на пьезокерамический излучатель (можно напрямую подключать к выходу Ардуино- не сгорит). При неисправности будет пищать до тех пор пока неисправность не будет устранена. Блин, получилось дольше обновлять страницу и комментарии чем писать сам скетч. Советую все таки подучить Ардуиновский язык и тогда ты сможешь сделать такое….. и, что самое главное- сам!
Почитай у меня на сайте уроки.. Начиная с Blink… Будет сразу что то понятно.
Спасибо.
Действительно надо потихонечку изучать ардуинский язык.