====== Климат-контроль на Arduino ====== ** [[slot-box:start#хочу_собрать|Проекты на Arduino и Slot Shield]] ** Простая система поддержания комфорта за рабочим столом. Если становится жарко, система включает вентилятор. Если воздух становится слишком сухим, начинает работать настольный фонтанчик. Контроллер получает данные с цифрового датчика температуры и влажности DHT-11 и показывает их на четырёхсегментном дисплее. Для управления электроприборами используются мини-реле. {{ :slot-box:climate-control:climate-control.jpg |}} * Платформы: [[amp>product/arduino-uno?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|Arduino Uno]], [[amp>product/arduino-leonardo?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|Arduino Leonardo]], [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|Iskra Neo]] * Язык программирования: Arduino (C++) ===== Что потребуется ===== [[amp>collection/climate-control?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki | Полный сет]] компонентов проекта. В сет входят: * [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|Iskra Neo]] * [[amp>product/arduino-troyka-slot-shield?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|Troyka Slot Shield]] * [[amp>product/structor-slot-box?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|#Slot Box]] * [[amp>product/troyka-temperature-humidity-sensor-dht11?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|цифровой датчик температуры и влажности DHT-11]] * два [[amp>product/troyka-mini-relay?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|мини-реле]] * четырёхразряный индикатор [[amp>product/troyka-quad-display?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|Quad Display]] ===== Видеоинструкция ===== {{youtube>j0NW8zaaDHU?large}} {{:продукты:high_voltage.png?nolink |}}**//Внимание!//** Работа с высоким напряжением опасна для вашего здоровья и жизни. На плате существуют области, прикосновение к которым приведёт к поражению электрическим током. Это винты контактных колодок и места пайки выводов контактных колодок и реле. Не работайте с платой, если она подключена к бытовой сети. Для готового устройства используйте изолированный корпус. Если вы сомневаетесь как подключить к реле электроприбор, работающий от общей сети 220 В и у вас есть сомнения, вопросы на тему того как это делается, остановитесь: вы можете устроить пожар или убить себя. Убедитесь, что у вас в голове — кристальное понимание принципа работы устройства и опасностей, которые связаны с высоким напряжением. ===== Как собрать ===== Установите [[amp>product/arduino-troyka-slot-shield?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|Troyka Slot Shield]] на [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|Iskra Neo]] {{ :slot-box:climate-control:step01.png |}} Возьмите [[amp>product/troyka-temperature-humidity-sensor-dht11?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|датчик температуры DHT-11]] и вставьте в правый верхний слот. {{ :slot-box:climate-control:step02.png |}} Поверните два [[amp>product/troyka-mini-relay?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|мини-реле]] на 90 градусов против часовой стрелки и вставьте их в свободные слоты верхнего ряда. {{ :slot-box:climate-control:step03.png |}} Переверните [[amp>product/troyka-quad-display?utm_source=proj&utm_campaign=slot-proj-8&utm_medium=wiki|Quad Display]] на 180 градусов и вставьте в левый и центральный слоты нижнего ряда. {{ :slot-box:climate-control:step04.png |}} Если у вас старый модуль семисегментного индикатора (у него всего три ноги и расположены они слева), схема сборки устройства, скетч и библиотеки будут отличаться. Мы выложили их ниже, в ответах [[climate-control#часто_задаваемые_вопросы|на часто задаваемые вопросы]]. ===== Скетч ===== Прошейте контроллер скетчем через [[../установка-и-настройка-arduino-ide|Arduino IDE]]. // библиотека для работы с датчиком DHT11 #include // Подключаем библиотеку для работы с дисплеем #include // номер цифрового пина реле 1 #define RELAY_1_PIN A4 // номер цифрового пина реле 2 #define RELAY_2_PIN A2 // создаём объект класса DHT11 и передаём номер пина к которому подключён датчик DHT dht(4, DHT11); QuadDisplay qd(9); // переменная для хранения состояние системы // а именно какую информацию выводить на дисплей // температуру или влажность bool state = true; // переменная для хранения показателя температуры окружающей среды float temperature = 0; // переменная для хранения показателя влажности окружающей среды float humidity = 0; long currentMillis = 0; void setup() { // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600); qd.begin(); // начало работы с датчиком DHT11 dht.begin(); // назначаем 2 пина в режиме выхода pinMode(RELAY_1_PIN, OUTPUT); pinMode(RELAY_2_PIN, OUTPUT); currentMillis = millis(); } void loop() { // если прошёл заданный интервал времени // считывам показания датчика if (millis() - currentMillis > 3000) { state = !state; currentMillis = millis(); dht.read(); } switch (dht.getState()) { // всё OK case DHT_OK: // считываем показания температуры и влажности с датчика temperature = dht.getTemperatureC(); humidity = dht.getHumidity(); // выводим показания температуры или влажности // переключать результаты можно кнопкой if (state) { qd.displayTemperatureC(temperature); } else { qd.displayHumidity(humidity); } break; // если ошибка выводим на дисплей «Err» default: qd.displayDigits(QD_NONE, QD_E, QD_r, QD_r); break; } // если температура превысила 35 градусов if (temperature > 35) { // включаем реле 1 digitalWrite(RELAY_1_PIN, HIGH); } else { // иначе выключаем реле digitalWrite(RELAY_1_PIN, LOW); } // если влажность стала менее 20 % if (humidity < 20) { // включаем реле 2 digitalWrite(RELAY_2_PIN, HIGH); } else { // иначе выключаем реле 2 digitalWrite(RELAY_2_PIN, LOW); } // ждём 1 секунду delay(1000); } ====== Что дальше? ====== Хотите собрать другой девайс? Выберите своё будущее устройство из [[slot-box:start#хочу_собрать|списка проектов на Slot Shield]]. ====== Часто задаваемые вопросы ====== > Где скачать необходимые библиотеки и как их установить? * [[https://github.com/amperka/QuadDisplay2|Библиотека для работы с дисплеем]] * [[https://github.com/amperka/TroykaDHT|Библиотека для работы с датчиком температуры и влажности DHT-11]] * [[программирование:библиотеки|Как установить библиотеку]] > У моего модуля QuadDisplay всего три ноги и расположены они слева. Можно ли использовать его в этом проекте? Да, модуль можно использовать, но скетч, библиотеки и схема сборки отличаются. Вставьте QuadDisplay в левый нижний слот {{ :slot-box:climate-control:step04-old-quad.png |}} Прошейте контроллер скетчем через [[../установка-и-настройка-arduino-ide|Arduino IDE]]. // библиотека для работы с датчиком DHT11 #include // Подключаем библиотеку для работы с дисплеем #include // номер цифрового пина реле 1 #define RELAY_1_PIN A4 // номер цифрового пина реле 2 #define RELAY_2_PIN A2 // номер цифрового пина дисплея #define DISPLAY_PIN 11 // создаём объект класса DHT11 и передаём номер пина к которому подключён датчик DHT dht(4, DHT11); // переменная для хранения состояние системы // а именно какую информацию выводить на дисплей // температуру или влажность bool state = true; // переменная для хранения показателя температуры окружающей среды float temperature = 0; // переменная для хранения показателя влажности окружающей среды float humidity = 0; long currentMillis = 0; void setup() { // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600); // начало работы с датчиком DHT11 dht.begin(); // назначаем 2 пина в режиме выхода pinMode(RELAY_1_PIN, OUTPUT); pinMode(RELAY_2_PIN, OUTPUT); currentMillis = millis(); } void loop() { // если прошёл заданный интервал времени if (millis() - currentMillis > 3000) { state = !state; currentMillis = millis(); dht.read(); } switch (dht.getState()) { // всё OK case DHT_OK: // считываем показания температуры и влажности с датчика temperature = dht.getTemperatureC(); humidity = dht.getHumidity(); // выводим показания температуры или влажности if (state) { displayTemperatureC(DISPLAY_PIN, temperature); } else { displayHumidity(DISPLAY_PIN, humidity); } break; // если ошибка выводим на дисплей «Err» default: displayDigits(DISPLAY_PIN, QD_NONE, QD_E, QD_r, QD_r); break; } // если температура превысила 35 градусов if (temperature > 35) { // включаем реле 1 digitalWrite(RELAY_1_PIN, HIGH); } else { // иначе выключаем реле digitalWrite(RELAY_1_PIN, LOW); } // если влажность стала менее 20 % if (humidity < 20) { // включаем реле 2 digitalWrite(RELAY_2_PIN, HIGH); } else { // иначе выключаем реле 2 digitalWrite(RELAY_2_PIN, LOW); } // ждём 1 секунду delay(1000); } Скачайте и установите [[https://github.com/amperka/QuadDisplay|библиотеку для работы с «трёхногим» дисплеем]].