Свой проект: метеостанция с порогами

Время собрать всё вместе. Датчик, пороги, индикация, вывод на компьютер — из россыпи приёмов рождается настоящее устройство.

Метеостанция — идеальный первый проект: она чувствует (датчик), думает (пороги), показывает (светодиоды) и докладывает (Serial). Все шесть разделов курса в одном скетче.

Сейчас спроектируем устройство: оно читает температуру и влажность, зажигает зелёный/жёлтый/красный светодиод по уровню комфорта и шлёт данные на компьютер. Это твой выпускной проект.

Архитектура устройства

   [ DHT датчик ]--->[ Arduino ]--->[ 3 светодиода ]
        |                |               (зелёный/жёлтый/красный)
   t, влажность     пороги + millis      индикация
                         |
                         +---> Serial ---> компьютер (мониторинг)

Логика: комфортно — зелёный, на грани — жёлтый, душно/холодно — красный. Опрос датчика раз в 2 секунды (через millis, без блокировки), а индикация и Serial обновляются мгновенно.

Код проекта

#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

const int GREEN = 5, YELLOW = 6, RED = 7;
unsigned long lastRead = 0;
const unsigned long READ_INTERVAL = 2000;

void setLeds(int g, int y, int r) {
  digitalWrite(GREEN, g);
  digitalWrite(YELLOW, y);
  digitalWrite(RED, r);
}

void setup() {
  Serial.begin(9600);
  dht.begin();
  pinMode(GREEN, OUTPUT);
  pinMode(YELLOW, OUTPUT);
  pinMode(RED, OUTPUT);
}

void loop() {
  if (millis() - lastRead >= READ_INTERVAL) {
    lastRead = millis();
    float t = dht.readTemperature();
    float h = dht.readHumidity();
    if (isnan(t) || isnan(h)) {
      Serial.println("Ошибка датчика");
      return;
    }
    if (t >= 20 && t <= 26 && h < 60) {
      setLeds(HIGH, LOW, LOW);        // комфорт
    } else if (t > 26 && t <= 29) {
      setLeds(LOW, HIGH, LOW);        // на грани
    } else {
      setLeds(LOW, LOW, HIGH);        // некомфортно
    }
    Serial.print(t); Serial.print(" C, ");
    Serial.print(h); Serial.println(" %");
  }
}

Как работает под капотом

Это сплав всего курса: цифровой датчик по протоколу (DHT) даёт числа, условная логика порогов решает уровень комфорта, цифровые выходы зажигают нужный светодиод, а Serial шлёт данные на компьютер. Опрос обёрнут в millis-таймер, поэтому устройство остаётся отзывчивым и не «зависает» в delay. Каждый кусочек ты уже понимаешь по отдельности — проект просто соединяет их в систему.

# Та же логика на Python: пороговый классификатор комфорта
def comfort_led(t, h):
    if t is None or h is None:
        return "ОШИБКА"
    if 20 <= t <= 26 and h < 60:
        return "ЗЕЛЁНЫЙ (комфорт)"
    if 26 < t <= 29:
        return "ЖЁЛТЫЙ (на грани)"
    return "КРАСНЫЙ (некомфортно)"

for t, h in [(23,45),(28,55),(31,70),(15,40),(None,None)]:
    print(f"t={t}, h={h} ->", comfort_led(t, h))

Частые ошибки

  • Все светодиоды на одном пине. Каждому индикатору — свой пин и свой резистор.
  • Опрос DHT в каждой итерации loop. Слишком часто — NaN. Только через millis-интервал.
  • Жёсткие пороги без проверки. Подбери границы под свой климат, глядя в монитор порта.

Best practices

  • Выноси повторяющееся в функции (setLeds) — код становится чище и понятнее.
  • Сначала проверь каждый блок отдельно (датчик, светодиоды, Serial), потом собирай вместе.
  • Развивай проект: добавь дисплей, запись данных, отправку в интернет (на Uno R4 WiFi) — основа уже есть.

Куда расти дальше

Метеостанция — это каркас, на который легко наращивать. Добавь дисплей (I2C-экранчик 16x2 или OLED) — и данные будут видны без компьютера. Подключи модуль часов (RTC) — и сможешь записывать, когда было жарко. Поставь SD-карту — и получишь логирование на дни вперёд, которое потом откроешь в таблице на компьютере. Каждое расширение использует уже знакомый принцип «библиотека + пара пинов», так что добавлять их не страшно.

А если взять Uno R4 WiFi или плату на ESP32, метеостанция выходит в интернет: данные о температуре дома можно смотреть с телефона из любой точки мира, строить графики в облаке, слать уведомления. Так твой учебный проект превращается в настоящий элемент умного дома. Главное, что у тебя теперь есть, — это не конкретная метеостанция, а способ мышления: разбить задачу на ввод, обработку и вывод, проверять каждый блок отдельно и собирать из проверенных кусочков надёжное целое. С этим набором ты построишь что угодно — от игрового контроллера до робота.

Итоги

Метеостанция объединила весь курс: датчик чувствует, пороги решают, светодиоды показывают, Serial докладывает, millis держит всё отзывчивым. Ты прошёл путь от мигающего светодиода до собственного устройства. Дальше — только твои идеи: робот, умная лампа, игровой контроллер. У тебя есть все инструменты.

Проверьте себя
1. Почему опрос DHT в проекте обёрнут в millis-таймер, а не вызывается каждую итерацию?
AДля красоты кода
BЧтобы не опрашивать датчик чаще, чем он успевает, и не блокировать loop
CЧтобы экономить память
DТак требует Serial
2. Какой принцип объединяет все блоки метеостанции?
AСлучайность
BДатчик чувствует, логика решает, выходы показывают, Serial докладывает
CТолько вывод в Serial
DТолько мигание