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

После урока сможешь: строить пороговую логику по нескольким показаниям сразу, управлять сигнализацией по результату, собрать и объяснить готовую станцию мониторинга целиком.
Статус станции: три уровня по двум показаниям
Станция уже считает среднюю температуру и процент освещённости. Добавим решение: «Авария», если средняя температура выше 35 или ниже 0 — это должно проверяться ПЕРВЫМ (самое строгое условие, как в занятии про пороговую логику); «Предупреждение» — если температура в диапазоне повышенного риска (28..35) ИЛИ освещённость подозрительно низкая (меньше 10%, датчик мог быть закрыт); иначе — «Норма».
String status;
int pinLed = 9;
if (srednyayaTemperatura > 35 || srednyayaTemperatura < 0) {
status = "Авария";
digitalWrite(pinLed, HIGH);
} else if ((srednyayaTemperatura > 28 && srednyayaTemperatura <= 35) || svetProcent < 10) {
status = "Предупреждение";
digitalWrite(pinLed, LOW);
} else {
status = "Норма";
digitalWrite(pinLed, LOW);
}
Serial.print("Статус: ");
Serial.println(status);
Статус: Норма
Итоговая лесенка статуса станции:
temp > 35 ИЛИ temp < 0 ? --да--> "Авария" (LED включён)
| нет
v
(28 < temp <= 35) ИЛИ свет < 10 ? --да--> "Предупреждение" (LED выключен)
| нет
v
"Норма" (LED выключен)
Миссия: собери станцию целиком
Возьми программу из прошлого занятия (датчиковая часть) и добавь: пин 9 как выход для светодиода в setup(), блок определения статуса выше, вывод статуса в дашборд. Запусти и проверь все три состояния, меняя показания (ручку LDR можно закрыть рукой в Wokwi, температуру DHT22 в Wokwi можно менять в панели свойств компонента).
Защита проекта
На занятии с преподавателем объясни своими словами: (1) зачем нужны ДВА датчика и что каждый измеряет; (2) почему показания читаются через millis(), а не delay(); (3) зачем скользящее окно, а не просто последнее показание; (4) почему условие «Авария» проверяется РАНЬШЕ «Предупреждения»; (5) что означает включённый светодиод. Если можешь ответить на все пять — проект защищён.
Проверь себя
Контрольный вопрос. srednyayaTemperatura = 20, svetProcent = 50. Какой будет статус?
Исходный код для этого задания:
if (srednyayaTemperatura > 35 || srednyayaTemperatura < 0) { status = "Авария"; } else if ((srednyayaTemperatura > 28 && srednyayaTemperatura <= 35) || svetProcent < 10) { status = "Предупреждение"; } else { status = "Норма"; }Подсказка: 20 не больше 35 и не меньше 0; 20 не входит в 28..35, и 50 не меньше 10 — какая ветка остаётся?
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. srednyayaTemperatura = 40. Какой будет статус и что произойдёт со светодиодом?
Исходный код для этого задания:
if (srednyayaTemperatura > 35 || srednyayaTemperatura < 0) { status = "Авария"; digitalWrite(pinLed, HIGH); } else if ((srednyayaTemperatura > 28 && srednyayaTemperatura <= 35) || svetProcent < 10) { status = "Предупреждение"; digitalWrite(pinLed, LOW); } else { status = "Норма"; digitalWrite(pinLed, LOW); }Подсказка: 40 больше 35 — первое же условие истинно.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. srednyayaTemperatura = 30, svetProcent = 50.
Исходный код для этого задания:
if (srednyayaTemperatura > 35 || srednyayaTemperatura < 0) { status = "Авария"; } else if ((srednyayaTemperatura > 28 && srednyayaTemperatura <= 35) || svetProcent < 10) { status = "Предупреждение"; } else { status = "Норма"; }Подсказка: 30 не больше 35, но 30 больше 28 и не больше 35 — левая часть составного условия истинна.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. srednyayaTemperatura = 20, svetProcent = 5.
Исходный код для этого задания:
if (srednyayaTemperatura > 35 || srednyayaTemperatura < 0) { status = "Авария"; } else if ((srednyayaTemperatura > 28 && srednyayaTemperatura <= 35) || svetProcent < 10) { status = "Предупреждение"; } else { status = "Норма"; }Подсказка: Сама по себе температура не переводит станцию в эту ветку, но проверь ВТОРУЮ половину составного условия через || — возможно, сработает она.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Почему условие «Авария» должно проверяться ПЕРВЫМ, раньше «Предупреждения»?
Подсказка: Вспомни занятие про пороговую логику: правило — проверять от самого строгого условия к самому мягкому, чтобы не потерять более серьёзный случай.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. Напиши код сам. Допиши составное условие вместо ___ для ветки «Предупреждение»: температура строго больше 28 И не больше 35, ИЛИ освещённость меньше 10.
Исходный код для этого задания:
} else if (___) { status = "Предупреждение"; digitalWrite(pinLed, LOW); }Подсказка: Собери из && (для диапазона температуры) и || (для добавления условия по свету), не забудь скобки вокруг части с &&.
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. srednyayaTemperatura равна РОВНО 35, svetProcent = 50.
Исходный код для этого задания:
if (srednyayaTemperatura > 35 || srednyayaTemperatura < 0) { status = "Авария"; } else if ((srednyayaTemperatura > 28 && srednyayaTemperatura <= 35) || svetProcent < 10) { status = "Предупреждение"; } else { status = "Норма"; }Подсказка: 35 > 35 ложно (строгое неравенство) — первая ветка не сработает. Проверь вторую: 35 <= 35 истинно.
Онлайн-проверка ответа появится позже
Задание. Напиши блок целиком (около 10 строк): определение переменной status (String) и if/else if/else по правилам этого занятия (авария: temp>35 || temp28 && temp<=35) || свет<10; иначе норма), плюс digitalWrite для pinLed в каждой ветке и финальный вывод статуса в Serial.
Исходный код для этого задания:
// используй переменные srednyayaTemperatura, svetProcent, pinLed (уже объявлены)Подсказка: Собери всё из материала занятия: объявление String status, три ветки if/else if/else с нужными условиями и digitalWrite, затем Serial.print(«Статус: «) + Serial.println(status).
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
Онлайн-проверка ответа появится позже
Задание. Мини-проект. В датчиковую часть станции (занятие 10) добавь: pinMode(9, OUTPUT) в setup(), и внутри неблокирующего блока (после расчёта srednyayaTemperatura и svetProcent) — блок определения статуса и управления светодиодом по правилам этого занятия, с выводом статуса в Serial. Принято, если: пин 9 настроен как выход в setup(); статус определяется в правильном порядке (авария проверяется первой); светодиод включается ТОЛЬКО в статусе «Авария»; в Serial печатается строка «Статус: ».
Исходный код для этого задания:
// добавь pinMode(9, OUTPUT) в setup() и блок статуса в loop() датчиковой части занятия 10Подсказка: pinMode добавляется одной строкой в setup(); блок статуса — тот же, что ты написал в задании этого занятия про if/else if/else, вставленный после строк с svetProcent.
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
Онлайн-проверка ответа появится позже
Задание. Финальный проект. Напиши ПОЛНУЮ программу станции мониторинга с нуля (около 45 строк): библиотека DHT22 (пин 4) + датчик освещённости LDR (A0) + скользящее окно из 5 температур + функции vyvestiPokazanie и sredneeMassiva + неблокирующий интервал 2000 мс + определение статуса (авария/предупреждение/норма) + светодиод на пине 9 + дашборд со всеми значениями и статусом. Принято, если: все части из занятий 6-11 присутствуют и работают вместе (компилируется и логически верна последовательность датчик → окно → среднее → статус → сигнал → дашборд); пороги и их порядок — как в этом занятии; вывод в Serial содержит температуру, среднюю температуру, освещённость и статус.
Исходный код для этого задания:
// напиши #include, объекты/переменные, setup() и loop() — соберите ВСЮ станцию по описанию вышеПодсказка: Это сборка того, что ты уже написал по частям на занятиях 6, 7, 8, 10 и в этом занятии — собери куски друг за другом в одном файле, ничего принципиально нового придумывать не нужно.
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
Онлайн-проверка ответа появится позже
Курс пройден
Ты прошёл путь от первой мигающей лампочки до полноценной станции мониторинга на двух датчиках с сигнализацией. Это ровно тот фундамент программирования микроконтроллеров, на который опираются вузовские дисциплины «Микропроцессорная техника» и «Системы программного управления» — дальше вуз даст схемотехнику и теорию управления, а код ты уже писать умеешь.
Итог: станция мониторинга собрана целиком — два датчика, скользящее окно, дашборд, трёхуровневая сигнализация. Курс пройден.
