Климат-контроль на Arduino
Проекты на Arduino и Slot Shield
Простая система поддержания комфорта за рабочим столом. Если становится жарко, система включает вентилятор. Если воздух становится слишком сухим, начинает работать настольный фонтанчик.
Контроллер получает данные с цифрового датчика температуры и влажности DHT-11 и показывает их на четырёхсегментном дисплее. Для управления электроприборами используются мини-реле.
- Язык программирования: Arduino (C++)
Что потребуется
Полный сет компонентов проекта. В сет входят:
- два мини-реле
- четырёхразряный индикатор Quad Display
Видеоинструкция
Внимание!
Работа с высоким напряжением опасна для вашего здоровья и жизни. На плате существуют области, прикосновение к которым приведёт к поражению электрическим током. Это винты контактных колодок и места пайки выводов контактных колодок и реле. Не работайте с платой, если она подключена к бытовой сети. Для готового устройства используйте изолированный корпус.
Если вы сомневаетесь как подключить к реле электроприбор, работающий от общей сети 220 В и у вас есть сомнения, вопросы на тему того как это делается, остановитесь: вы можете устроить пожар или убить себя. Убедитесь, что у вас в голове — кристальное понимание принципа работы устройства и опасностей, которые связаны с высоким напряжением.
Как собрать
Установите Troyka Slot Shield на Iskra Neo
Возьмите датчик температуры DHT-11 и вставьте в правый верхний слот.
Поверните два мини-реле на 90 градусов против часовой стрелки и вставьте их в свободные слоты верхнего ряда.
Переверните Quad Display на 180 градусов и вставьте в левый и центральный слоты нижнего ряда.
Если у вас старый модуль семисегментного индикатора (у него всего три ноги и расположены они слева), схема сборки устройства, скетч и библиотеки будут отличаться. Мы выложили их ниже, в ответах на часто задаваемые вопросы.
Скетч
Прошейте контроллер скетчем через Arduino IDE.
- climate-controlSPI.ino
// библиотека для работы с датчиком DHT11 #include <TroykaDHT.h> // Подключаем библиотеку для работы с дисплеем #include <QuadDisplay2.h> // номер цифрового пина реле 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 Shield.
Часто задаваемые вопросы
Где скачать необходимые библиотеки и как их установить?
У моего модуля QuadDisplay всего три ноги и расположены они слева. Можно ли использовать его в этом проекте?
Да, модуль можно использовать, но скетч, библиотеки и схема сборки отличаются.
Вставьте QuadDisplay в левый нижний слот
Прошейте контроллер скетчем через Arduino IDE.
- climate-control.ino
// библиотека для работы с датчиком DHT11 #include <TroykaDHT.h> // Подключаем библиотеку для работы с дисплеем #include <QuadDisplay.h> // номер цифрового пина реле 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); }
Скачайте и установите библиотеку для работы с «трёхногим» дисплеем.