
Всем привет!
Многие читатели моего блога просят выложить схему устройства управления микроклиматом на базе Arduino, о котором я рассказывал в этой статье. Но так сложилось, что изначально никакой схемы нарисовано не было, и прибор создавался как творческий проект — каждый новый компонент добавлялся спонтанно, по ходу сборки, каждая новая функция и строчка программного кода возникала уже, казалось, после окончательного завершения проекта. В итоге проект дорабатывался несколько раз, как по аппаратной, так и по программной части.
И вот однажды один из подписчиков попросил меня изготовить для него подобную систему управления микроклиматом, но с более широким функционалом. И в этот раз я решил не обделять читателей 🙂 и предоставить не только схему и скетч, но и подробно описать весь процесс разработки системы в мельчайших подробностях.
Это первая статья из серии, посвященной сборке системы контроля отопления и вентиляции на базе Arduino. И как видно из заголовка, речь пойдет о подготовке необходимых материалов.
Для начала, несколько слов о функционале будущей системы. Проектируемая система будет выполнять следующие функции:
- Включение и отключение вентиляции в зависимости от влажности и температуры в помещении
- Включение и отключение отопления в зависимости от влажности и температуры
- Включение вентиляции утром и вечером на заданный интервал времени для принудительного проветривания
- Управление освещением с помощью кнопки-таймера
- Управление водонагревателем — включение утром и вечером на заданное количество минут для подогрева воды
- Запись показаний всех датчиков и состояний реле на SD-карту (логгирование событий)
- Чтение настроек прибора с карты памяти (возможность настройки прибора при помощи компьютера)
Как видите, список функций значительно расширился. Особенно интересны для реализации будут функции управления освещением и логгирования событий. Возможно, в процессе сборки возникнут новые идеи, и функционал будет дополнен 🙂
А теперь перейдем непосредственно к перечню компонентов, необходимых для сборки устройства.

Основные части системы:
- Arduino Nano 3.0
- Модуль часов DS1307 или DS3231
- Модуль micro-SD card adapter
- Датчики влажности и температуры DHT11 (2 шт)
- Модули реле (у меня 2 модуля: 2 реле + 4 реле)
- Блок питания 12 вольт 1А (для Arduino)
- Блок питания 5 вольт 1А (для модулей реле)
- Дисплейный модуль LCD2004 I2C
- Монтажная плата 5х7 см (будущая материнская плата)
- Батарейка CR2032 3V
- SD карта, отформатированная на компьютере в FAT32
- Управляющие кнопки (3 шт)
- Светодиоды (3 шт)
- Резисторы номиналом от 330 Ом до 1 кОм (3 шт)
- Соединительные провода
- Различные разъемы и коннекторы (по необходимости)
- Высоковольтный выключатель (250V 6A)
- Корпус для прибора (в статье будет сборка без корпуса)
Из необязательного можно добавить макетную плату — для тестирования компонентов по отдельности перед установкой на материнскую плату, а также программатор — для смены загрузчика ардуино. О смене загрузчика и зачем это нужно будет рассказано в одной из следующих статей.
Перед началом сборки все компоненты желательно протестировать по отдельности.
Схема подключения и дальнейший процесс сборки будут опубликованы в продолжении статьи.
А пока предлагаю вашему вниманию занимательное видео о том, как я тестировал модуль часов RTC DS1307 и внутренний таймер Arduino. Суть такова, что модуль часов и ардуино при запуске однократно синхронизируют время между собой, и далее ардуино выводит показания часов RTC и своих внутренних часов (SYS) на LCD экран каждую секунду. Мне было интересно, возникнет ли через некоторое время расхождение в показаниях времени, и как скоро оно возникнет. В следующем видео показан результат этого эксперимента.
Как видите, расхождение в 2 секунды появилось уже спустя сутки, а спустя еще 20 часов расхождение составило уже целых 5 секунд! Кто из них бежит вперед, а кто отстает, судить сложно, поскольку все относительно, но пока эксперимент продолжается, и позже эти данные будут сравнены с часами на компьютере 🙂
Ниже приведен программный код для воспроизведения этого эксперимента.
#include <Wire.h> #include <TimeLib.h> #include <DS1307RTC.h> #include <LiquidCrystal_I2C.h> tmElements_t tm; LiquidCrystal_I2C lcd(0x27,20,4); String str = ""; void setup() { lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.clear(); if (RTC.read(tm)) { setTime(makeTime(tm)); } else { if (RTC.chipPresent()) { lcd.print("The DS1307 is stopped"); } else { lcd.print("DS1307 read error!"); } //delay(9000); while(1); } } void loop() { //lcd.clear(); if (RTC.read(tm)) { lcd.setCursor(0, 0); str = "RTC Time="; str = str + print2digits(tm.Hour) + ":" + print2digits(tm.Minute) + ":" + print2digits(tm.Second); lcd.print(str); lcd.setCursor(0, 1); str = "RTC Date="; str = str + String(tm.Day, DEC) + "." + String(tm.Month, DEC) + "." + String(tmYearToCalendar(tm.Year), DEC); lcd.print(str); } //а тут выведем системное время lcd.setCursor(0, 2); str = "SYS Time="; str = str + print2digits(hour()) + ":" + print2digits(minute()) + ":" + print2digits(second()); lcd.print(str); lcd.setCursor(0, 3); str = "SYS Date="; str = str + String(day(), DEC) + "." + String(month(), DEC) + "." + String(year(), DEC); lcd.print(str); delay(1000); } String print2digits(int number) { String s = ""; if (number >= 0 && number < 10) { s = "0"; } s = s + String(number, DEC); return s; }
Автору респект. Проект хорош.
Очень жду продолжения и второй части.
А можно хотя бы скетч. Сделать не терпится автоматику в курятник.
Водонагреватель при желании можно будет заменить на управление лазом в курятник.
Здравствуйте!
Скетч пока что есть только от первой версии проекта
зачем воду греть целый день. если никого нет. экономия электричества, очевидно.
Действительно 🙂
Схемы платы нет, а писали что есть ссылкк
В продолжении статьи будет схема, там же так и написано!
Интересно, а зачем водонагревателем так управлять? У него же встроенная система поддержания температуры и в постоянно включённом состоянии на мой взгляд он работает наиболее оптимально
Ну это зависит от самого водонагревателя 🙂 Я не уточнял, видимо там что-то нестандартное 🙂