====== Климат-контроль на 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|библиотеку для работы с «трёхногим» дисплеем]].