Климат-контроль на Arduino

Проекты на Arduino и Slot Shield

Простая система поддержания комфорта за рабочим столом. Если становится жарко, система включает вентилятор. Если воздух становится слишком сухим, начинает работать настольный фонтанчик.

Контроллер получает данные с цифрового датчика температуры и влажности DHT-11 и показывает их на четырёхсегментном дисплее. Для управления электроприборами используются мини-реле.

Что потребуется

Полный сет компонентов проекта. В сет входят:

Видеоинструкция

Внимание!

Работа с высоким напряжением опасна для вашего здоровья и жизни. На плате существуют области, прикосновение к которым приведёт к поражению электрическим током. Это винты контактных колодок и места пайки выводов контактных колодок и реле. Не работайте с платой, если она подключена к бытовой сети. Для готового устройства используйте изолированный корпус.

Если вы сомневаетесь как подключить к реле электроприбор, работающий от общей сети 220 В и у вас есть сомнения, вопросы на тему того как это делается, остановитесь: вы можете устроить пожар или убить себя. Убедитесь, что у вас в голове — кристальное понимание принципа работы устройства и опасностей, которые связаны с высоким напряжением.

Как собрать

Установите Troyka Slot Shield на Iskra Neo

Возьмите датчик температуры DHT-11 и вставьте в правый верхний слот.

Поверните два мини-реле на 90 градусов против часовой стрелки и вставьте их в свободные слоты верхнего ряда.

Переверните Quad Display на 180 градусов и вставьте в левый и центральный слоты нижнего ряда.

Если у вас старый модуль семисегментного индикатора (у него всего три ноги и расположены они слева), схема сборки устройства, скетч и библиотеки будут отличаться. Мы выложили их ниже, в ответах на часто задаваемые вопросы.

Скетч

Прошейте контроллер скетчем через Arduino IDE.

climate-controlSPI.ino
// библиотека для работы с датчиком DHT11
#include <TroykaDHT11.h>
// Подключаем библиотеку для работы с дисплеем
#include <QuadDisplay2.h>
 
// номер цифрового пина реле 1
#define RELAY_1_PIN  A4
// номер цифрового пина реле 2
#define RELAY_2_PIN  A2
 
// создаём объект класса DHT11 и передаём номер пина к которому подключён датчик
DHT11 dht(4);
 
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();
  }
  switch (dht.read()) {
    // всё 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 <TroykaDHT11.h>
// Подключаем библиотеку для работы с дисплеем
#include <QuadDisplay.h>
 
// номер цифрового пина реле 1
#define RELAY_1_PIN  A4
// номер цифрового пина реле 2
#define RELAY_2_PIN  A2
// номер цифрового пина дисплея
#define DISPLAY_PIN  11
 
// создаём объект класса DHT11 и передаём номер пина к которому подключён датчик
DHT11 dht(4);
 
// переменная для хранения состояние системы
// а именно какую информацию выводить на дисплей
// температуру или влажность
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();
  }
  switch (dht.read()) {
    // всё 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);
}

Скачайте и установите библиотеку для работы с «трёхногим» дисплеем.