Skip to main content

🏆 УМНАЯ АВТОМАТИЧЕСКАЯ СИСТЕМА

🎯 Цели и планируемые результаты урока

Предметные результаты:

  • Интеграция всех изученных датчиков в единую IoT систему
  • Создание комплексной логики взаимодействия между подсистемами
  • Программирование многоуровневых алгоритмов принятия решений
  • Реализация полноценной системы “умного дома”
  • Навыки системного проектирования и архитектуры ПО
  • Создание пользовательских интерфейсов для управления системой

Метапредметные результаты:

  • Развитие системного мышления и понимания взаимосвязей
  • Формирование навыков проектного управления
  • Умение работать с большими объемами данных от множества источников
  • Развитие навыков отладки сложных систем

Личностные результаты:

  • Понимание роли комплексной автоматизации в современном мире
  • Развитие инженерного мышления и творческого подхода
  • Формирование ответственности за создание безопасных систем

🚀 Мотивационное начало (10 минут)

“Дирижер цифрового оркестра - ESP32 управляет всем!”

Учитель демонстрирует полноценную систему умного класса, где все датчики работают согласованно

🎼 Грандиозная демонстрация “Симфония автоматизации”:

 1🚶 Ученик входит в класс:
 2   └─ PIR обнаруживает движение
 3   └─ Датчик света проверяет освещенность  
 4   └─ Автоматически включается освещение нужной яркости
 5   └─ DHT22 анализирует температуру и влажность
 6   └─ Включается вентилятор если жарко
 7   └─ Звуковой датчик начинает мониторинг шума
 8
 9🗣️ Ученик говорит "Слишком жарко":
10   └─ Звуковой датчик распознает речевую активность
11   └─ Система увеличивает мощность охлаждения
12   └─ PIR отслеживает, что человек еще в комнате
13   └─ Яркость света снижается для комфорта
14
15🌡️ Температура снижается до комфортной:
16   └─ DHT22 сообщает о достижении цели
17   └─ Вентилятор переходит в экономичный режим
18   └─ Освещение возвращается к оптимальному уровню
19
20🚪 Ученик покидает класс:
21   └─ PIR фиксирует отсутствие движения 5 минут
22   └─ Система переходит в режим "Никого нет"
23   └─ Освещение выключается
24   └─ Климат-контроль переходит в экономичный режим
25   └─ Активируется охранная система

🏠 Сравнение “Обычный дом vs Умный дом”:

 1🏠 ОБЫЧНЫЙ ДОМ:
 2👤 Человек приходит → Сам включает свет
 3🌡️ Жарко → Сам включает кондиционер  
 4🌙 Ложится спать → Сам выключает все
 5🚨 Злоумышленник → Может остаться незамеченным
 6
 7🤖 УМНЫЙ ДОМ:
 8👤 Человек приходит → Дом встречает комфортными условиями
 9🌡️ Жарко → Дом сам регулирует климат
10🌙 Ложится спать → Дом переходит в ночной режим
11🚨 Злоумышленник → Дом мгновенно реагирует и уведомляет
12
13РЕЗУЛЬТАТ: Экономия энергии 40%, комфорт 200%, безопасность 500%!

🌟 Интрига урока: “Сегодня вы станете архитекторами цифрового будущего! Ваш ESP32 превратится в мозг умного дома, который будет думать за всех!”

🎯 Главный вызов: “К концу урока ваша система будет автоматически создавать идеальные условия для любой ситуации!”

📖 Основная часть урока

Блок 1: “Архитектура умной системы - проектируем цифровой мозг” (18 минут)

🧠 “Системное мышление - как связать все датчики”

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

 1🏗️ АРХИТЕКТУРА УМНОЙ СИСТЕМЫ:
 2
 3┌─────────────────────────────────────────────────┐
 4│                ЦЕНТРАЛЬНЫЙ КОНТРОЛЛЕР           │
 5│                     ESP32                       │
 6│  ┌─────────────────────────────────────────────┐ │
 7│  │           СИСТЕМА ПРИНЯТИЯ РЕШЕНИЙ          │ │
 8│  │  ┌─────────┐ ┌─────────┐ ┌─────────────────┐ │ │
 9│  │  │ Климат  │ │ Освещен.│ │  Безопасность   │ │ │
10│  │  │Контроль │ │Контроль │ │    Контроль     │ │ │
11│  │  └─────────┘ └─────────┘ └─────────────────┘ │ │
12│  └─────────────────────────────────────────────┘ │
13└─────────────────────────────────────────────────┘
14           ↑                    ↓
15    ┌──────────────┐      ┌──────────────┐
16    │   ВХОДНЫЕ    │      │   ВЫХОДНЫЕ   │
17    │   ДАТЧИКИ    │      │ УСТРОЙСТВА   │
18    └──────────────┘      └──────────────┘
19           │                    │
20    ┌─────────────────┐   ┌─────────────────┐
21    │ 🌡️ DHT22        │   │ 💡 LED подсветка │
22    │ 💡 Фоторезистор │   │ 🌪️ Вентилятор   │
23    │ 🎤 Микрофон     │   │ 🔊 Buzzer       │
24    │ 🚶 PIR датчик   │   │ 📱 Уведомления  │
25    │ 🕐 RTC модуль   │   │ 📊 LCD дисплей  │
26    └─────────────────┘   └─────────────────┘

🎯 “Логика взаимодействия подсистем”

Комплексные алгоритмы принятия решений:

 1🧮 МАТРИЦА ПРИНЯТИЯ РЕШЕНИЙ:
 2
 3КЛИМАТ-КОНТРОЛЬ:
 4┌─────────────┬──────────────┬─────────────┬────────────┐
 5│   Условие   │ Температура  │ Влажность   │  Действие  │
 6├─────────────┼──────────────┼─────────────┼────────────┤
 7│ Жарко       │    >26°C     │   Любая     │ Вент. ВКЛ  │
 8│ Сухо+жарко  │    >24°C     │   <40%      │ Увлажнение │
 9│ Влажно+жарко│    >24°C     │   >70%      │ Осушение   │
10│ Комфорт     │  22-26°C     │  40-60%     │ Поддержка  │
11│ Холодно     │    <20°C     │   Любая     │ Обогрев    │
12└─────────────┴──────────────┴─────────────┴────────────┘
13
14ОСВЕЩЕНИЕ:
15┌─────────────┬──────────────┬─────────────┬────────────┐
16│  Ситуация   │ Освещенность │  Движение   │  Действие  │
17├─────────────┼──────────────┼─────────────┼────────────┤
18│ День+присут.│    >60%      │     ДА      │ Свет ВЫКЛ  │
19│ Сумерки     │   20-60%     │     ДА      │ Свет 50%   │
20│ Темно       │    <20%      │     ДА      │ Свет 100%  │
21│ Никого нет  │    Любая     │     НЕТ     │ Свет ВЫКЛ  │
22│ Ночь+движ.  │    <20%      │     ДА      │ Ночник 20% │
23└─────────────┴──────────────┴─────────────┴────────────┘
24
25БЕЗОПАСНОСТЬ:
26┌─────────────┬──────────────┬─────────────┬────────────┐
27│   Режим     │   Движение   │    Звук     │  Реакция   │
28├─────────────┼──────────────┼─────────────┼────────────┤
29│ Дома        │     ДА       │  Обычный    │ Мониторинг │
30│ Отсутствие  │     ДА       │   Любой     │ ТРЕВОГА!   │
31│ Ночь        │     ДА       │  Громкий    │ Уведомление│
32│ Охрана      │     ДА       │   Любой     │ Сирена     │
33└─────────────┴──────────────┴─────────────┴────────────┘

🕐 “Временные сценарии и режимы дня”

Автоматическая адаптация к времени:

 1🌅 СЦЕНАРИИ ПО ВРЕМЕНИ СУТОК:
 2
 306:00-08:00 УТРО "ПРОБУЖДЕНИЕ":
 4🌡️ Температура: 22-24°C (бодрящая прохлада)
 5💡 Освещение: Плавное включение от 10% до 80%
 6🔊 Звук: Мягкие уведомления
 7🚶 Движение: Высокая чувствительность
 8🎯 Цель: Комфортное пробуждение
 9
1008:00-17:00 ДЕНЬ "АКТИВНОСТЬ":
11🌡️ Температура: 20-23°C (рабочая температура)
12💡 Освещение: Адаптивное к внешнему свету
13🔊 Звук: Обычный мониторинг
14🚶 Движение: Экономичные интервалы
15🎯 Цель: Продуктивность и комфорт
16
1717:00-22:00 ВЕЧЕР "ОТДЫХ":
18🌡️ Температура: 22-25°C (расслабляющее тепло)
19💡 Освещение: Теплый свет, приглушенный
20🔊 Звук: Фоновый мониторинг
21🚶 Движение: Стандартная чувствительность
22🎯 Цель: Релаксация
23
2422:00-06:00 НОЧЬ "СОН":
25🌡️ Температура: 18-21°C (прохлада для сна)
26💡 Освещение: Только ночники при движении
27🔊 Звук: Тихий режим, только тревоги
28🚶 Движение: Охранный режим
29🎯 Цель: Качественный сон и безопасность

⚖️ “Приоритеты и конфликты системы”

Разрешение противоречий между подсистемами:

 1🎯 СИСТЕМА ПРИОРИТЕТОВ:
 2
 3УРОВЕНЬ 1 - БЕЗОПАСНОСТЬ (ВЫСШИЙ):
 4🚨 Пожарная безопасность (высокая температура)
 5🛡️ Охранная тревога (несанкционированное проникновение)
 6⚠️ Критические неисправности датчиков
 7→ ВСЕ остальные функции ОСТАНАВЛИВАЮТСЯ
 8
 9УРОВЕНЬ 2 - ЗДОРОВЬЕ (ВЫСОКИЙ):
10🌡️ Критические температуры (>30°C или <15°C)
11💨 Критическая влажность (>80% или <20%)
12🔊 Опасный уровень шума (>90дБ)
13→ Климат-контроль получает ПРИОРИТЕТ
14
15УРОВЕНЬ 3 - КОМФОРТ (СРЕДНИЙ):
16💡 Освещение по потребности
17🌪️ Вентиляция для комфорта
18🎵 Фоновые уведомления
19→ Работает при отсутствии конфликтов
20
21УРОВЕНЬ 4 - ЭКОНОМИЯ (НИЗКИЙ):
22⚡ Энергосбережение
23📊 Сбор статистики
24📱 Неважные уведомления
25→ Выполняется в последнюю очередь
26
27🔄 ПРИМЕРЫ РАЗРЕШЕНИЯ КОНФЛИКТОВ:
28
29Конфликт: "Жарко + Никого нет"
30Решение: Снизить охлаждение, но не выключать (здоровье > экономия)
31
32Конфликт: "Темно + Экономия энергии"
33Решение: Включить минимальное освещение (комфорт > экономия)
34
35Конфликт: "Тревога + Комфортная температура"  
36Решение: Включить сирену несмотря на шум (безопасность > комфорт)

Блок 2: “Программирование интегрированной системы” (20 минут)

💻 “Архитектура программного кода”

Модульная структура программы:

  1// 🏗️ АРХИТЕКТУРА УМНОЙ СИСТЕМЫ v3.0
  2// Урок 16: Интеграция всех датчиков и подсистем
  3
  4#include <WiFi.h>
  5#include <DHT.h>
  6#include <ArduinoJson.h>
  7#include <LiquidCrystal_I2C.h>
  8
  9// 🔧 ПИНЫ И НАСТРОЙКИ ДАТЧИКОВ
 10#define DHT_PIN 4
 11#define DHT_TYPE DHT22
 12#define PIR_PIN 13
 13#define LIGHT_SENSOR_PIN 34
 14#define SOUND_SENSOR_PIN 35
 15#define LED_PIN 2
 16#define BUZZER_PIN 5
 17#define FAN_PIN 25
 18#define HEATER_PIN 26
 19
 20// 📊 СТРУКТУРЫ ДАННЫХ СИСТЕМЫ
 21
 22// Данные от датчиков
 23struct SensorData {
 24  float temperature;
 25  float humidity;
 26  int lightLevel;
 27  int soundLevel;
 28  bool motionDetected;
 29  unsigned long timestamp;
 30};
 31
 32// Состояние подсистем
 33struct SystemState {
 34  // Климат-контроль
 35  bool fanActive;
 36  bool heaterActive;
 37  int targetTemperature;
 38  
 39  // Освещение
 40  int lightBrightness;
 41  bool autoLightEnabled;
 42  
 43  // Безопасность
 44  enum SecurityMode {DISARMED, HOME, AWAY, NIGHT} securityMode;
 45  bool alarmActive;
 46  
 47  // Общие настройки
 48  enum TimeMode {MORNING, DAY, EVENING, NIGHT} timeMode;
 49  int systemPriority;  // 1-4 уровень приоритета
 50};
 51
 52// Пороговые значения
 53struct SystemThresholds {
 54  float tempMin, tempMax;
 55  float humidityMin, humidityMax;
 56  int lightThreshold;
 57  int soundThreshold;
 58  unsigned long motionTimeout;
 59};
 60
 61// 📊 ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
 62SensorData sensors;
 63SystemState systemState;
 64SystemThresholds thresholds;
 65DHT dht(DHT_PIN, DHT_TYPE);
 66LiquidCrystal_I2C lcd(0x27, 16, 2);
 67
 68void setup() {
 69  Serial.begin(9600);
 70  Serial.println("🏗️ Запуск умной автоматической системы v3.0");
 71  
 72  // 🔧 Инициализация
 73  initializePins();
 74  initializeSensors();
 75  initializeThresholds();
 76  initializeDisplay();
 77  
 78  Serial.println("✅ Система готова к работе!");
 79  Serial.println("🎯 Режим: ПОЛНАЯ АВТОМАТИЗАЦИЯ");
 80  printSystemStatus();
 81}
 82
 83void loop() {
 84  // 📖 ЭТАП 1: Сбор данных
 85  readAllSensors();
 86  
 87  // 🧠 ЭТАП 2: Анализ и принятие решений
 88  analyzeEnvironment();
 89  
 90  // ⚡ ЭТАП 3: Выполнение действий
 91  executeSystemActions();
 92  
 93  // 📊 ЭТАП 4: Обновление интерфейсов
 94  updateDisplay();
 95  updateSerialOutput();
 96  
 97  // 📡 ЭТАП 5: Связь с внешним миром
 98  sendDataToServer();
 99  
100  delay(1000);  // Основной цикл каждую секунду
101}
102
103// 📖 ФУНКЦИЯ СБОРА ДАННЫХ СО ВСЕХ ДАТЧИКОВ
104void readAllSensors() {
105  sensors.timestamp = millis();
106  
107  // 🌡️ Температура и влажность
108  sensors.temperature = dht.readTemperature();
109  sensors.humidity = dht.readHumidity();
110  
111  // 💡 Освещенность (усредненная)
112  long lightSum = 0;
113  for (int i = 0; i < 10; i++) {
114    lightSum += analogRead(LIGHT_SENSOR_PIN);
115    delay(10);
116  }
117  sensors.lightLevel = lightSum / 10;
118  
119  // 🎤 Звук (пиковое значение за последнюю секунду)
120  int maxSound = 0;
121  for (int i = 0; i < 50; i++) {
122    int sound = analogRead(SOUND_SENSOR_PIN);
123    if (sound > maxSound) maxSound = sound;
124    delay(20);
125  }
126  sensors.soundLevel = maxSound;
127  
128  // 🚶 Движение
129  sensors.motionDetected = digitalRead(PIR_PIN);
130  
131  // ✅ Проверка валидности данных
132  validateSensorData();
133}
134
135// ✅ ФУНКЦИЯ ПРОВЕРКИ КОРРЕКТНОСТИ ДАННЫХ
136void validateSensorData() {
137  // 🌡️ Проверка температуры
138  if (isnan(sensors.temperature) || sensors.temperature < -40 || sensors.temperature > 80) {
139    Serial.println("⚠️ Ошибка датчика температуры!");
140    sensors.temperature = 22.0;  // Значение по умолчанию
141  }
142  
143  // 💨 Проверка влажности
144  if (isnan(sensors.humidity) || sensors.humidity < 0 || sensors.humidity > 100) {
145    Serial.println("⚠️ Ошибка датчика влажности!");
146    sensors.humidity = 50.0;  // Значение по умолчанию
147  }
148  
149  // 📊 Логирование аномалий
150  static float lastTemp = 22.0;
151  if (abs(sensors.temperature - lastTemp) > 5.0) {
152    Serial.printf("🚨 Резкое изменение температуры: %.1f°C\n", 
153                  sensors.temperature - lastTemp);
154  }
155  lastTemp = sensors.temperature;
156}

🧠 “Центральная система принятия решений”

Комплексный анализатор среды:

  1// 🧠 ЦЕНТРАЛЬНАЯ СИСТЕМА АНАЛИЗА И ПРИНЯТИЯ РЕШЕНИЙ
  2
  3void analyzeEnvironment() {
  4  // 🕐 Определяем время суток
  5  updateTimeMode();
  6  
  7  // 🎯 Анализируем по приоритетам
  8  checkCriticalSafety();      // Приоритет 1: Безопасность
  9  analyzeClimateNeeds();      // Приоритет 2: Климат
 10  analyzeLightingNeeds();     // Приоритет 3: Освещение
 11  optimizeEnergyUsage();      // Приоритет 4: Экономия
 12}
 13
 14// 🚨 ФУНКЦИЯ ПРОВЕРКИ КРИТИЧЕСКОЙ БЕЗОПАСНОСТИ
 15void checkCriticalSafety() {
 16  bool criticalAlert = false;
 17  
 18  // 🔥 Пожарная опасность
 19  if (sensors.temperature > 40.0) {
 20    criticalAlert = true;
 21    triggerFireAlarm();
 22  }
 23  
 24  // 🥶 Критический холод
 25  if (sensors.temperature < 5.0) {
 26    criticalAlert = true;
 27    triggerFreezeProtection();
 28  }
 29  
 30  // 🚨 Охранная тревога
 31  if (systemState.securityMode != DISARMED && sensors.motionDetected) {
 32    if (shouldTriggerSecurityAlarm()) {
 33      criticalAlert = true;
 34      triggerSecurityAlarm();
 35    }
 36  }
 37  
 38  // 🔊 Критический шум
 39  if (sensors.soundLevel > 3000) {  // Очень громко
 40    Serial.println("🔊 Критический уровень шума обнаружен!");
 41  }
 42  
 43  if (criticalAlert) {
 44    systemState.systemPriority = 1;  // Максимальный приоритет
 45  }
 46}
 47
 48// 🌡️ ФУНКЦИЯ АНАЛИЗА КЛИМАТИЧЕСКИХ ПОТРЕБНОСТЕЙ
 49void analyzeClimateNeeds() {
 50  if (systemState.systemPriority > 2) return;  // Есть более важные задачи
 51  
 52  // 🎯 Целевые параметры в зависимости от времени
 53  float targetTemp = getTargetTemperature();
 54  float targetHumidity = getTargetHumidity();
 55  
 56  // 🌡️ Анализ температуры
 57  float tempDelta = sensors.temperature - targetTemp;
 58  
 59  if (tempDelta > 2.0) {
 60    // Слишком жарко
 61    activatecooling();
 62  } else if (tempDelta < -2.0) {
 63    // Слишком холодно  
 64    activateHeating();
 65  } else if (abs(tempDelta) < 0.5) {
 66    // Температура в норме
 67    deactivateClimateControl();
 68  }
 69  
 70  // 💨 Анализ влажности
 71  float humidityDelta = sensors.humidity - targetHumidity;
 72  
 73  if (humidityDelta > 15.0 && sensors.temperature > 25.0) {
 74    // Слишком влажно и жарко - нужно осушение
 75    activateDehumidification();
 76  } else if (humidityDelta < -15.0 && sensors.temperature > 20.0) {
 77    // Слишком сухо и тепло - нужно увлажнение
 78    activateHumidification();
 79  }
 80  
 81  systemState.systemPriority = 2;
 82}
 83
 84// 💡 ФУНКЦИЯ АНАЛИЗА ОСВЕЩЕНИЯ
 85void analyzeLightingNeeds() {
 86  if (systemState.systemPriority > 3) return;  // Есть более важные задачи
 87  
 88  if (!systemState.autoLightEnabled) return;   // Ручной режим
 89  
 90  // 📊 Преобразуем сырое значение в проценты
 91  int lightPercent = map(sensors.lightLevel, 0, 4095, 0, 100);
 92  
 93  // 🚶 Проверяем наличие людей
 94  static unsigned long lastMotion = 0;
 95  if (sensors.motionDetected) {
 96    lastMotion = millis();
 97  }
 98  
 99  bool peoplePresent = (millis() - lastMotion) < thresholds.motionTimeout;
100  
101  // 💡 Логика управления освещением
102  if (peoplePresent) {
103    int targetBrightness = calculateOptimalBrightness(lightPercent);
104    setLightBrightness(targetBrightness);
105  } else {
106    // Никого нет - выключаем свет
107    setLightBrightness(0);
108  }
109  
110  systemState.systemPriority = 3;
111}
112
113// 🎯 ФУНКЦИЯ РАСЧЕТА ОПТИМАЛЬНОЙ ЯРКОСТИ
114int calculateOptimalBrightness(int ambientLight) {
115  int brightness = 0;
116  
117  switch (systemState.timeMode) {
118    case MORNING:
119      // Утром - плавное нарастание
120      if (ambientLight < 30) brightness = 200;
121      else if (ambientLight < 60) brightness = 100;
122      else brightness = 0;
123      break;
124      
125    case DAY:
126      // Днем - только при необходимости
127      if (ambientLight < 20) brightness = 255;
128      else if (ambientLight < 40) brightness = 150;
129      else brightness = 0;
130      break;
131      
132    case EVENING:
133      // Вечером - комфортное освещение
134      if (ambientLight < 50) brightness = 180;
135      else if (ambientLight < 70) brightness = 80;
136      else brightness = 0;
137      break;
138      
139    case NIGHT:
140      // Ночью - только ночники
141      if (sensors.motionDetected && ambientLight < 30) {
142        brightness = 50;  // Тусклый ночник
143      }
144      break;
145  }
146  
147  return brightness;
148}
149
150// ⚡ ФУНКЦИЯ ОПТИМИЗАЦИИ ЭНЕРГОПОТРЕБЛЕНИЯ
151void optimizeEnergyUsage() {
152  if (systemState.systemPriority > 4) return;  // Есть более важные задачи
153  
154  // 📊 Анализируем текущее потребление
155  int currentConsumption = calculatePowerConsumption();
156  
157  // 🎯 Стратегии экономии энергии
158  if (currentConsumption > 80) {  // Высокое потребление
159    
160    // 💡 Снижаем яркость на 20%
161    if (systemState.lightBrightness > 50) {
162      systemState.lightBrightness *= 0.8;
163      Serial.println("⚡ Снижена яркость для экономии");
164    }
165    
166    // 🌪️ Переводим вентилятор в экономичный режим
167    if (systemState.fanActive) {
168      // Уменьшаем мощность вентилятора
169      Serial.println("⚡ Вентилятор переведен в экономичный режим");
170    }
171  }
172  
173  systemState.systemPriority = 4;
174}
175
176// 📊 ФУНКЦИЯ РАСЧЕТА ЭНЕРГОПОТРЕБЛЕНИЯ
177int calculatePowerConsumption() {
178  int consumption = 10;  // Базовое потребление ESP32
179  
180  if (systemState.lightBrightness > 0) {
181    consumption += (systemState.lightBrightness * 30) / 255;  // LED
182  }
183  
184  if (systemState.fanActive) {
185    consumption += 25;  // Вентилятор
186  }
187  
188  if (systemState.heaterActive) {
189    consumption += 40;  // Нагреватель
190  }
191  
192  return consumption;  // Возвращаем процент от максимума
193}

⚡ “Исполнительная система”

Координированное управление всеми устройствами:

  1// ⚡ ИСПОЛНИТЕЛЬНАЯ СИСТЕМА - ВЫПОЛНЕНИЕ ПРИНЯТЫХ РЕШЕНИЙ
  2
  3void executeSystemActions() {
  4  // 🌡️ Климат-контроль
  5  executeClimateControl();
  6  
  7  // 💡 Управление освещением
  8  executeLightingControl();
  9  
 10  // 🚨 Системы безопасности
 11  executeSecurityActions();
 12  
 13  // 📊 Обновление статуса
 14  updateSystemStatus();
 15}
 16
 17// 🌡️ ФУНКЦИЯ УПРАВЛЕНИЯ КЛИМАТОМ
 18void executeClimateControl() {
 19  // 🌪️ Управление вентилятором
 20  if (systemState.fanActive) {
 21    digitalWrite(FAN_PIN, HIGH);
 22    Serial.println("🌪️ Вентилятор включен");
 23  } else {
 24    digitalWrite(FAN_PIN, LOW);
 25  }
 26  
 27  // 🔥 Управление нагревателем
 28  if (systemState.heaterActive) {
 29    digitalWrite(HEATER_PIN, HIGH);
 30    Serial.println("🔥 Нагреватель включен");
 31  } else {
 32    digitalWrite(HEATER_PIN, LOW);
 33  }
 34  
 35  // 🎯 Логика взаимоисключения
 36  if (systemState.fanActive && systemState.heaterActive) {
 37    // Конфликт! Отключаем менее приоритетное
 38    if (sensors.temperature > systemState.targetTemperature) {
 39      systemState.heaterActive = false;
 40      digitalWrite(HEATER_PIN, LOW);
 41      Serial.println("⚠️ Отключен нагреватель (конфликт с охлаждением)");
 42    } else {
 43      systemState.fanActive = false;
 44      digitalWrite(FAN_PIN, LOW);
 45      Serial.println("⚠️ Отключен вентилятор (конфликт с нагревом)");
 46    }
 47  }
 48}
 49
 50// 💡 ФУНКЦИЯ УПРАВЛЕНИЯ ОСВЕЩЕНИЕМ
 51void executeLightingControl() {
 52  static int currentBrightness = 0;
 53  
 54  // 🌈 Плавное изменение яркости
 55  if (currentBrightness != systemState.lightBrightness) {
 56    int step = (systemState.lightBrightness > currentBrightness) ? 5 : -5;
 57    currentBrightness += step;
 58    
 59    // 🎯 Ограничиваем диапазон
 60    currentBrightness = constrain(currentBrightness, 0, 255);
 61    
 62    // ✅ Достигли цели?
 63    if (abs(currentBrightness - systemState.lightBrightness) < 5) {
 64      currentBrightness = systemState.lightBrightness;
 65    }
 66    
 67    // 💡 Применяем яркость
 68    analogWrite(LED_PIN, currentBrightness);
 69    
 70    Serial.printf("💡 Яркость: %d/255 (цель: %d)\n", 
 71                  currentBrightness, systemState.lightBrightness);
 72  }
 73}
 74
 75// 🚨 ФУНКЦИЯ ВЫПОЛНЕНИЯ ДЕЙСТВИЙ БЕЗОПАСНОСТИ
 76void executeSecurityActions() {
 77  static bool lastAlarmState = false;
 78  
 79  if (systemState.alarmActive != lastAlarmState) {
 80    if (systemState.alarmActive) {
 81      // 🚨 Активация тревоги
 82      activateAlarmDevices();
 83    } else {
 84      // ✅ Отключение тревоги
 85      deactivateAlarmDevices();
 86    }
 87    lastAlarmState = systemState.alarmActive;
 88  }
 89  
 90  // 🔊 Поддержание звука сирены
 91  if (systemState.alarmActive) {
 92    // Паттерн европейской сирены
 93    int frequency = (millis() % 1000 < 500) ? 800 : 400;
 94    tone(BUZZER_PIN, frequency);
 95  }
 96}
 97
 98// 🚨 ФУНКЦИЯ АКТИВАЦИИ ТРЕВОЖНЫХ УСТРОЙСТВ
 99void activateAlarmDevices() {
100  Serial.println("🚨 АКТИВАЦИЯ СИСТЕМЫ ТРЕВОГИ!");
101  
102  // 🔊 Звуковая сирена
103  tone(BUZZER_PIN, 1000, 200);
104  
105  // 💡 Мигающий свет
106  systemState.lightBrightness = 255;
107  
108  // 📱 Уведомление (имитация)
109  sendEmergencyNotification();
110  
111  // 📸 "Фотографирование" (имитация)
112  Serial.println("📸 Сделан снимок нарушителя");
113}
114
115// ✅ ФУНКЦИЯ ОТКЛЮЧЕНИЯ ТРЕВОГИ
116void deactivateAlarmDevices() {
117  Serial.println("✅ Тревога отключена");
118  
119  // 🔇 Отключение звука
120  noTone(BUZZER_PIN);
121  
122  // 💡 Возврат к нормальному освещению
123  analyzeLightingNeeds();
124}
125
126// 📱 ФУНКЦИЯ ОТПРАВКИ ЭКСТРЕННОГО УВЕДОМЛЕНИЯ
127void sendEmergencyNotification() {
128  Serial.println("📱 ЭКСТРЕННОЕ УВЕДОМЛЕНИЕ:");
129  Serial.printf("   🕐 Время: %s\n", getCurrentTimeString().c_str());
130  Serial.printf("   📍 Место: Кабинет информатики\n");
131  Serial.printf("   🚨 Тип: %s\n", getAlarmTypeString().c_str());
132  Serial.printf("   🌡️ Температура: %.1f°C\n", sensors.temperature);
133  Serial.printf("   🔊 Звук: %d\n", sensors.soundLevel);
134  Serial.printf("   💡 Свет: %d%%\n", 
135                map(sensors.lightLevel, 0, 4095, 0, 100));
136}

Блок 3: “Пользовательские интерфейсы и мониторинг” (15 минут)

📱 “Веб-интерфейс управления системой”

Создание dashboard для контроля:

  1// 📱 ВЕБ-ИНТЕРФЕЙС УПРАВЛЕНИЯ УМНОЙ СИСТЕМОЙ
  2
  3#include <WebServer.h>
  4#include <SPIFFS.h>
  5
  6WebServer server(80);
  7
  8void initializeWebInterface() {
  9  // 🌐 Инициализация веб-сервера
 10  server.on("/", handleRoot);
 11  server.on("/api/status", handleApiStatus);
 12  server.on("/api/control", HTTP_POST, handleApiControl);
 13  server.on("/api/data", handleApiData);
 14  
 15  server.begin();
 16  Serial.println("🌐 Веб-интерфейс запущен на http://192.168.1.100");
 17}
 18
 19// 🏠 ГЛАВНАЯ СТРАНИЦА
 20void handleRoot() {
 21  String html = generateDashboardHTML();
 22  server.send(200, "text/html", html);
 23}
 24
 25// 📊 ГЕНЕРАЦИЯ HTML DASHBOARD
 26String generateDashboardHTML() {
 27  String html = R"(
 28<!DOCTYPE html>
 29<html>
 30<head>
 31    <title>🏠 Умная Система - Класс 5А</title>
 32    <meta charset="UTF-8">
 33    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 34    <style>
 35        body { 
 36            font-family: Arial, sans-serif; 
 37            background: #1a1a2e; 
 38            color: #eee; 
 39            margin: 0; 
 40            padding: 20px;
 41        }
 42        .dashboard { 
 43            display: grid; 
 44            grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); 
 45            gap: 20px; 
 46        }
 47        .card { 
 48            background: #16213e; 
 49            border-radius: 10px; 
 50            padding: 20px; 
 51            box-shadow: 0 4px 8px rgba(0,0,0,0.3);
 52        }
 53        .status-good { border-left: 5px solid #4CAF50; }
 54        .status-warning { border-left: 5px solid #FF9800; }
 55        .status-critical { border-left: 5px solid #f44336; }
 56        .metric { 
 57            display: flex; 
 58            justify-content: space-between; 
 59            margin: 10px 0; 
 60        }
 61        .metric-value { 
 62            font-weight: bold; 
 63            font-size: 1.2em; 
 64        }
 65        .controls button {
 66            background: #0066CC;
 67            color: white;
 68            border: none;
 69            padding: 10px 20px;
 70            border-radius: 5px;
 71            margin: 5px;
 72            cursor: pointer;
 73        }
 74        .controls button:hover { background: #0052A3; }
 75        .chart { 
 76            height: 200px; 
 77            background: #0f3460; 
 78            border-radius: 5px; 
 79            margin: 10px 0;
 80            display: flex;
 81            align-items: center;
 82            justify-content: center;
 83        }
 84    </style>
 85</head>
 86<body>
 87    <h1>🏠 Умная Автоматическая Система</h1>
 88    <div class="dashboard">
 89)";
 90
 91  // 🌡️ Карточка климата
 92  html += generateClimateCard();
 93  
 94  // 💡 Карточка освещения
 95  html += generateLightingCard();
 96  
 97  // 🛡️ Карточка безопасности
 98  html += generateSecurityCard();
 99  
100  // 📊 Карточка аналитики
101  html += generateAnalyticsCard();
102
103  html += R"(
104    </div>
105    <script>
106        // 🔄 Автообновление каждые 5 секунд
107        setInterval(updateDashboard, 5000);
108        
109        function updateDashboard() {
110            fetch('/api/data')
111                .then(response => response.json())
112                .then(data => {
113                    updateValues(data);
114                });
115        }
116        
117        function updateValues(data) {
118            document.getElementById('temp').innerText = data.temperature + C';
119            document.getElementById('humidity').innerText = data.humidity + '%';
120            document.getElementById('light').innerText = data.lightLevel + '%';
121            document.getElementById('motion').innerText = data.motionDetected ? 'ДА' : 'НЕТ';
122        }
123        
124        function sendCommand(action, value) {
125            fetch('/api/control', {
126                method: 'POST',
127                headers: {'Content-Type': 'application/json'},
128                body: JSON.stringify({action: action, value: value})
129            });
130        }
131    </script>
132</body>
133</html>
134)";
135
136  return html;
137}
138
139// 🌡️ ГЕНЕРАЦИЯ КАРТОЧКИ КЛИМАТА
140String generateClimateCard() {
141  String statusClass = "status-good";
142  if (sensors.temperature > 26 || sensors.temperature < 20) {
143    statusClass = "status-warning";
144  }
145  if (sensors.temperature > 30 || sensors.temperature < 15) {
146    statusClass = "status-critical";
147  }
148
149  return String(R"(
150        <div class="card )" + statusClass + R"(">
151            <h2>🌡️ Климат-контроль</h2>
152            <div class="metric">
153                <span>Температура:</span>
154                <span class="metric-value" id="temp">)" + String(sensors.temperature, 1) + R"(°C</span>
155            </div>
156            <div class="metric">
157                <span>Влажность:</span>
158                <span class="metric-value" id="humidity">)" + String(sensors.humidity, 0) + R"(%</span>
159            </div>
160            <div class="metric">
161                <span>Вентилятор:</span>
162                <span class="metric-value">)" + (systemState.fanActive ? "ВКЛ" : "ВЫКЛ") + R"(</span>
163            </div>
164            <div class="metric">
165                <span>Обогреватель:</span>
166                <span class="metric-value">)" + (systemState.heaterActive ? "ВКЛ" : "ВЫКЛ") + R"(</span>
167            </div>
168            <div class="controls">
169                <button onclick="sendCommand('fan', 'toggle')">🌪️ Вентилятор</button>
170                <button onclick="sendCommand('heater', 'toggle')">🔥 Обогрев</button>
171                <button onclick="sendCommand('temp', 'up')">🔺 +1°C</button>
172                <button onclick="sendCommand('temp', 'down')">🔻 -1°C</button>
173            </div>
174        </div>
175)");
176}
177
178// 💡 ГЕНЕРАЦИЯ КАРТОЧКИ ОСВЕЩЕНИЯ
179String generateLightingCard() {
180  int lightPercent = map(sensors.lightLevel, 0, 4095, 0, 100);
181  
182  return String(R"(
183        <div class="card status-good">
184            <h2>💡 Освещение</h2>
185            <div class="metric">
186                <span>Внешний свет:</span>
187                <span class="metric-value" id="light">)" + String(lightPercent) + R"(%</span>
188            </div>
189            <div class="metric">
190                <span>Яркость LED:</span>
191                <span class="metric-value">)" + String((systemState.lightBrightness * 100) / 255) + R"(%</span>
192            </div>
193            <div class="metric">
194                <span>Автоматика:</span>
195                <span class="metric-value">)" + (systemState.autoLightEnabled ? "ВКЛ" : "ВЫКЛ") + R"(</span>
196            </div>
197            <div class="metric">
198                <span>Движение:</span>
199                <span class="metric-value" id="motion">)" + (sensors.motionDetected ? "ДА" : "НЕТ") + R"(</span>
200            </div>
201            <div class="controls">
202                <button onclick="sendCommand('light', 'on')">💡 ВКЛ</button>
203                <button onclick="sendCommand('light', 'off')">💤 ВЫКЛ</button>
204                <button onclick="sendCommand('light', 'auto')">🤖 АВТО</button>
205                <button onclick="sendCommand('light', 'dim')">🔅 ТУСКЛО</button>
206            </div>
207        </div>
208)");
209}

📊 “LCD дисплей для локального мониторинга”

Информационная панель на устройстве:

 1// 📊 СИСТЕМА ОТОБРАЖЕНИЯ НА LCD ДИСПЛЕЕ
 2
 3void updateDisplay() {
 4  static unsigned long lastUpdate = 0;
 5  static int currentScreen = 0;
 6  const int SCREEN_COUNT = 4;
 7  
 8  // 🔄 Переключение экранов каждые 3 секунды
 9  if (millis() - lastUpdate >= 3000) {
10    currentScreen = (currentScreen + 1) % SCREEN_COUNT;
11    lastUpdate = millis();
12    
13    lcd.clear();
14    
15    switch (currentScreen) {
16      case 0: displayClimateScreen(); break;
17      case 1: displayLightingScreen(); break;
18      case 2: displaySecurityScreen(); break;
19      case 3: displaySystemScreen(); break;
20    }
21  }
22}
23
24// 🌡️ ЭКРАН КЛИМАТА
25void displayClimateScreen() {
26  lcd.setCursor(0, 0);
27  lcd.print("KLIMAT  " + getCurrentTimeString().substring(11, 16));
28  
29  lcd.setCursor(0, 1);
30  String line2 = String(sensors.temperature, 1) + "C " + 
31                String(sensors.humidity, 0) + "% ";
32  
33  if (systemState.fanActive) line2 += "FAN";
34  else if (systemState.heaterActive) line2 += "HTR";
35  else line2 += "---";
36  
37  lcd.print(line2);
38}
39
40// 💡 ЭКРАН ОСВЕЩЕНИЯ
41void displayLightingScreen() {
42  lcd.setCursor(0, 0);
43  lcd.print("LIGHT   ");
44  
45  int lightPercent = map(sensors.lightLevel, 0, 4095, 0, 100);
46  lcd.print(String(lightPercent) + "%");
47  
48  lcd.setCursor(0, 1);
49  String line2 = "LED:" + String((systemState.lightBrightness * 100) / 255) + "% ";
50  
51  if (sensors.motionDetected) line2 += "MOV";
52  else line2 += "---";
53  
54  lcd.print(line2);
55}
56
57// 🛡️ ЭКРАН БЕЗОПАСНОСТИ
58void displaySecurityScreen() {
59  lcd.setCursor(0, 0);
60  lcd.print("SECURITY ");
61  
62  String modes[] = {"OFF", "HOME", "AWAY", "NIGHT"};
63  lcd.print(modes[systemState.securityMode]);
64  
65  lcd.setCursor(0, 1);
66  if (systemState.alarmActive) {
67    lcd.print("!!! ALARM !!!");
68  } else {
69    String line2 = "SND:" + String(sensors.soundLevel / 40) + " ";
70    line2 += sensors.motionDetected ? "MOTION" : "QUIET ";
71    lcd.print(line2);
72  }
73}
74
75// 🖥️ ЭКРАН СИСТЕМЫ
76void displaySystemScreen() {
77  lcd.setCursor(0, 0);
78  lcd.print("SYSTEM  v3.0");
79  
80  lcd.setCursor(0, 1);
81  String line2 = "PWR:" + String(calculatePowerConsumption()) + "% ";
82  
83  String priorities[] = {"SAFE", "CLIM", "LIGT", "ECO"};
84  line2 += priorities[systemState.systemPriority - 1];
85  
86  lcd.print(line2);
87}

Блок 4: “Тестирование и отладка интегрированной системы” (12 минут)

🔧 “Методика комплексного тестирования”

Пошаговая проверка всех функций:

 1🧪 ПРОТОКОЛ КОМПЛЕКСНОГО ТЕСТИРОВАНИЯ:
 2
 3ЭТАП 1: ТЕСТИРОВАНИЕ ДАТЧИКОВ (5 минут)
 4□ 🌡️ DHT22: Дыхание на датчик → Изменение температуры/влажности
 5□ 💡 Фоторезистор: Закрыть/открыть → Изменение освещенности
 6□ 🎤 Микрофон: Хлопок/речь → Изменение звукового уровня
 7□ 🚶 PIR: Движение рукой → Обнаружение движения
 8□ 📊 Все данные отображаются корректно
 9
10ЭТАП 2: ТЕСТИРОВАНИЕ ПОДСИСТЕМ (10 минут)
11□ 🌡️ Климат-контроль:
12   - Имитация жары → Включение вентилятора
13   - Имитация холода → Включение нагревателя
14   - Нормальная температура → Отключение климата
15
16□ 💡 Освещение:
17   - Движение + темно → Включение света
18   - Нет движения → Выключение света (через таймаут)
19   - День + движение → Минимальный свет
20
21□ 🛡️ Безопасность:
22   - Режим "ОТСУТСТВИЕ" + движение → Тревога
23   - Режим "ДОМА" + движение → Мониторинг
24   - Громкий звук → Реакция системы
25
26ЭТАП 3: ТЕСТИРОВАНИЕ ИНТЕГРАЦИИ (10 минут)
27□ 🎯 Сценарий "Утреннее пробуждение":
28   1. Установить время "УТРО"
29   2. Имитировать движение
30   3. Проверить: плавное включение света + комфортная температура
31
32□ 🎯 Сценарий "Никого нет":
33   1. Отсутствие движения 5+ минут
34   2. Проверить: выключение света + экономия энергии + режим охраны
35
36□ 🎯 Сценарий "Экстренная ситуация":
37   1. Имитировать высокую температуру (>40°C)
38   2. Проверить: отключение всех систем + тревога + уведомления
39
40□ 🎯 Сценарий "Конфликт систем":
41   1. Одновременно включить нагрев и охлаждение
42   2. Проверить: автоматическое разрешение конфликта
43
44ЭТАП 4: ТЕСТИРОВАНИЕ ИНТЕРФЕЙСОВ (5 минут)
45□ 📱 Веб-интерфейс: Открытие страницы + получение данных
46□ 📊 LCD дисплей: Циклическая смена экранов
47□ 🖥️ Serial Monitor: Корректный вывод логов
48□ 📡 IoT сервер: Отправка данных на сервер
49
50ЭТАП 5: СТРЕСС-ТЕСТИРОВАНИЕ (5 минут)
51□ ⏰ Непрерывная работа 30+ минут без сбоев
52□ 🔄 Быстрые изменения всех параметров одновременно
53□ 📊 Обработка некорректных данных от датчиков
54□ 🌐 Потеря и восстановление WiFi соединения

🐛 “Диагностика и устранение неполадок”

Инструменты для отладки сложной системы:

 1🔍 СИСТЕМА ДИАГНОСТИКИ НЕПОЛАДОК:
 2
 3🚨 ТИПИЧНЫЕ ПРОБЛЕМЫ И РЕШЕНИЯ:
 4
 5ПРОБЛЕМА: "Система не реагирует на изменения"
 6🔍 ДИАГНОСТИКА:
 7- Проверить Serial Monitor на ошибки чтения датчиков
 8- Убедиться что системный приоритет не заблокирован
 9- Проверить пороговые значения
10
11ПРОБЛЕМА: "Конфликты между подсистемами"  
12🔍 ДИАГНОСТИКА:
13- Проанализировать логи принятия решений
14- Проверить корректность системы приоритетов
15- Убедиться в правильности логики разрешения конфликтов
16
17ПРОБЛЕМА: "Ложные срабатывания системы безопасности"
18🔍 ДИАГНОСТИКА:
19- Проверить калибровку PIR датчика
20- Анализировать пороги звукового датчика
21- Убедиться в корректности временных задержек
22
23ПРОБЛЕМА: "Медленная реакция системы"
24🔍 ДИАГНОСТИКА:
25- Оптимизировать частоту опроса датчиков
26- Проверить задержки в основном цикле
27- Анализировать время выполнения функций
28
29🛠️ ИНСТРУМЕНТЫ ДИАГНОСТИКИ:
30
31// 📊 Функция детального логирования
32void enableDebugMode() {
33  Serial.println("🔍 РЕЖИМ ОТЛАДКИ АКТИВИРОВАН");
34  
35  // Подробные логи всех решений
36  Serial.println("📋 Формат: [ВРЕМЯ] СИСТЕМА → РЕШЕНИЕ (ПРИЧИНА)");
37}
38
39// 📈 Функция мониторинга производительности
40void monitorPerformance() {
41  static unsigned long lastCheck = 0;
42  
43  if (millis() - lastCheck >= 10000) {  // Каждые 10 секунд
44    Serial.println("📊 ПРОИЗВОДИТЕЛЬНОСТЬ СИСТЕМЫ:");
45    Serial.printf("├ Время цикла: %lu мс\n", getLastCycleTime());
46    Serial.printf("├ Свободная память: %d байт\n", ESP.getFreeHeap());
47    Serial.printf("├ Время работы: %lu сек\n", millis() / 1000);
48    Serial.printf("└ Обработано решений: %d\n", getTotalDecisions());
49    
50    lastCheck = millis();
51  }
52}
53
54// 🔧 Функция самодиагностики
55void runSelfDiagnostic() {
56  Serial.println("🔧 ЗАПУСК САМОДИАГНОСТИКИ...");
57  
58  // Проверка датчиков
59  bool sensorsOK = true;
60  if (isnan(sensors.temperature)) {
61    Serial.println("❌ Ошибка DHT22");
62    sensorsOK = false;
63  }
64  
65  if (sensors.lightLevel == 0 || sensors.lightLevel == 4095) {
66    Serial.println("⚠️ Возможная проблема с датчиком света");
67  }
68  
69  // Проверка исполнительных устройств
70  testOutputDevices();
71  
72  // Проверка связи
73  if (WiFi.status() != WL_CONNECTED) {
74    Serial.println("❌ Нет WiFi соединения");
75  }
76  
77  if (sensorsOK) {
78    Serial.println("✅ Самодиагностика успешна");
79  } else {
80    Serial.println("⚠️ Обнаружены проблемы - см. выше");
81  }
82}

🎨 Творческое задание: “Проектирование умного пространства” (25 минут)

🏗️ “Создание персонализированной экосистемы”

Техническое задание для команд:

 1🎯 ФИНАЛЬНЫЙ ПРОЕКТ "УМНОЕ ПРОСТРАНСТВО МЕЧТЫ":
 2
 3Каждая команда создает уникальную интегрированную систему для:
 4🏠 Выберите ОДНУ из целевых областей:
 5- Умный класс для идеального обучения
 6- Умная спальня для качественного сна
 7- Умная гостиная для семейного отдыха
 8- Умный офис для продуктивной работы
 9- Умная теплица для выращивания растений
10
11📋 ОБЯЗАТЕЛЬНЫЕ КОМПОНЕНТЫ:
12✅ Интеграция ВСЕХ 5 типов датчиков
13✅ Система приоритетов и разрешения конфликтов
14✅ Минимум 3 автоматических сценария
15✅ Веб-интерфейс или LCD для управления
16✅ Система безопасности и аварийных ситуаций
17
18🌟 ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ (выбрать 2-3):
19🎨 Цветовая индикация состояний (RGB LED)
20🔊 Голосовые уведомления и команды
21📊 Продвинутая аналитика и машинное обучение
22🌐 Интеграция с внешними API (погода, время)
23📱 Мобильное приложение
24🤖 ИИ-помощник с естественными ответами
25⚡ Система энергоменеджмента
26🔮 Предиктивная автоматизация

📋 “Техническая документация проекта”

Создание профессиональной документации:

 1📄 ТЕХНИЧЕСКАЯ ДОКУМЕНТАЦИЯ УМНОЙ СИСТЕМЫ
 2Команда: _________________ Область: _________________
 3
 4🎯 НАЗВАНИЕ ПРОЕКТА: "_________________________"
 5
 6📐 АРХИТЕКТУРА СИСТЕМЫ:
 7[Схема подключения всех датчиков и устройств]
 8
 9🧠 ЛОГИКА СИСТЕМЫ:
10Основные сценарии:
111. Сценарий "________________________":
12   Триггеры: ________________________________
13   Условия: _________________________________
14   Действия: ________________________________
15
162. Сценарий "________________________":
17   Триггеры: ________________________________
18   Условия: _________________________________
19   Действия: ________________________________
20
213. Сценарий "________________________":
22   Триггеры: ________________________________
23   Условия: _________________________________
24   Действия: ________________________________
25
26🎯 СИСТЕМА ПРИОРИТЕТОВ:
27Приоритет 1 (КРИТИЧЕСКИЙ): ____________________
28Приоритет 2 (ВЫСОКИЙ): _______________________
29Приоритет 3 (СРЕДНИЙ): _______________________
30Приоритет 4 (НИЗКИЙ): ________________________
31
32⚖️ РАЗРЕШЕНИЕ КОНФЛИКТОВ:
33Конфликт 1: ___________________________________
34Решение: ____________________________________
35
36Конфликт 2: ___________________________________
37Решение: ____________________________________
38
39📊 ПОРОГОВЫЕ ЗНАЧЕНИЯ:
40🌡️ Температура: мин=____°C, макс=____°C, цель=____°C
41💨 Влажность: мин=___%, макс=___%, цель=___%
42💡 Освещенность: темно<___%, ярко>___%
43🔊 Звук: тихо<___, громко>___, критично>___
44🚶 Движение: таймаут=____сек, чувствительность=___
45
46🌟 УНИКАЛЬНЫЕ ОСОБЕННОСТИ:
471. _________________________________________
482. _________________________________________
493. _________________________________________
50
51🔧 ТЕХНИЧЕСКАЯ РЕАЛИЗАЦИЯ:
52Сложность алгоритмов: ⭐⭐⭐⭐⭐
53Количество строк кода: _____ строк
54Использованных библиотек: _____ шт
55Время разработки: _____ часов
56
57✅ ТЕСТИРОВАНИЕ:
58□ Все датчики работают корректно
59□ Сценарии выполняются правильно
60□ Конфликты разрешаются автоматически
61□ Интерфейсы отображают актуальные данные
62□ Система стабильно работает >30 минут
63□ Аварийные ситуации обрабатываются
64□ Энергопотребление оптимизировано
65
66🏆 ОЦЕНКА ПРОЕКТА:
67Техническое совершенство: ⭐⭐⭐⭐⭐
68Инновационность решений: ⭐⭐⭐⭐⭐
69Практическая применимость: ⭐⭐⭐⭐⭐
70Качество документации: ⭐⭐⭐⭐⭐
71Презентация проекта: ⭐⭐⭐⭐⭐

🎪 “Выставка умных технологий будущего”

Итоговая презентация проектов:

Каждая команда получает 8 минут для демонстрации своей умной системы перед жюри из учителей и приглашенных экспертов.

Формат презентации:

  • 2 минуты - Концепция и архитектура решения
  • 4 минуты - Живая демонстрация всех функций
  • 1 минута - Уникальные инновации и будущее развитие
  • 1 минута - Ответы на вопросы жюри

Критерии оценки жюри:

 1🏆 НОМИНАЦИИ КОНКУРСА:
 2
 3🥇 "ТЕХНИЧЕСКОЕ СОВЕРШЕНСТВО"
 4- Сложность интегрированных алгоритмов
 5- Надежность работы всех компонентов
 6- Качество программного кода
 7
 8🥈 "ИННОВАЦИОННЫЙ ПОДХОД"  
 9- Оригинальность технических решений
10- Креативность применения датчиков
11- Неожиданные функции системы
12
13🥉 "ПРАКТИЧЕСКАЯ ПОЛЬЗА"
14- Решение реальных жизненных проблем
15- Удобство использования
16- Экономическая эффективность
17
18🎨 "ЛУЧШИЙ ДИЗАЙН ИНТЕРФЕЙСА"
19- Качество веб-панели управления
20- Информативность LCD дисплея
21- Интуитивность управления
22
23🌟 "ПРИЗ ЗРИТЕЛЬСКИХ СИМПАТИЙ"
24- Голосование всего класса
25- Самая впечатляющая демонстрация
26- Понятность объяснения

Сценарий выставки:

 1🎪 ПРОГРАММА ВЫСТАВКИ "УМНОЕ БУДУЩЕЕ":
 2
 315:30-15:35 | Торжественное открытие
 4           | 🎤 Приветствие директора школы
 5           | 🏆 Представление жюри и номинаций
 6
 715:35-16:15 | Презентации команд (8 мин × 5 команд)
 8           | 🚀 Демонстрация проектов
 9           | ❓ Вопросы от жюри и зрителей
10
1116:15-16:25 | Свободное посещение
12           | 🔬 Тестирование систем посетителями
13           | 💬 Общение с разработчиками
14
1516:25-16:35 | Подведение итогов
16           | 🏆 Объявление победителей
17           | 📸 Награждение и фотосессия
18
1916:35-16:45 | Рефлексия и планы
20           | 💭 Обсуждение опыта
21           | 🚀 Планы дальнейшего развития

📝 Рефлексия и закрепление (8 минут)

🧠 “Системное мышление - от датчика до решения”

Интерактивная викторина:

 1❓ ЦЕПОЧКА СИСТЕМНЫХ РЕШЕНИЙ:
 2
 3Ситуация: "Ученик заходит в жаркий темный класс"
 4
 5🔄 ПРОСЛЕДИТЕ ПУТЬ ПРИНЯТИЯ РЕШЕНИЙ:
 61. Какой датчик сработает ПЕРВЫМ? → ___________
 72. Какая подсистема получит ВЫСШИЙ приоритет? → ___________  
 83. Какое ПЕРВОЕ действие выполнит система? → ___________
 94. Как система определит ОПТИМАЛЬНУЮ температуру? → ___________
105. Когда включится ОСВЕЩЕНИЕ? → ___________
116. Что произойдет через 10 МИНУТ без движения? → ___________
12
13Покажите жестами работу КАЖДОГО датчика!

🎚️ “Шкала мастерства интеграции систем”

 1🎚️ УРОВЕНЬ ВЛАДЕНИЯ ИНТЕГРИРОВАННЫМИ СИСТЕМАМИ:
 2
 3🏆 Системный архитектор (100%):
 4"Проектирую сложные IoT экосистемы, понимаю взаимосвязи, создаю ИИ-решения"
 5
 6🥇 Интегратор IoT (80%):
 7"Объединяю множество датчиков, программирую комплексную логику, создаю интерфейсы"
 8
 9🥈 Программист автоматизации (60%):
10"Создаю автоматические системы, понимаю приоритеты, решаю конфликты"
11
12🥉 Разработчик устройств (40%):
13"Программирую отдельные датчики и исполнительные устройства"
14
15🌱 IoT новичок (20%):
16"Понимаю базовые принципы автоматизации"
17
18Поднимите руки на свой уровень! 🙋‍♂️🙋‍♀️

💭 “Размышления о будущем автоматизации”

Философские вопросы технологического прогресса:

Каждый ученик завершает фразы:

  • “Интеграция всех датчиков научила меня…”
  • “Самое сложное в создании умных систем это…”
  • “Через 10 лет умные дома будут…”
  • “Я боюсь что автоматизация может…”
  • “Я мечтаю создать умную систему для…”

🏠 Домашнее задание

🏗️ “Проектировщик умного будущего”

Долгосрочный проект на каникулы:

1. Исследовательская работа:

  • Изучить 3 реальные системы “умного дома” (Xiaomi, Apple HomeKit, Google Home)
  • Сравнить их возможности с вашим проектом
  • Найти 5 новых датчиков которые можно добавить

2. Развитие проекта:

  • Добавить новую функцию в свою систему
  • Оптимизировать алгоритмы для экономии энергии
  • Создать мобильное приложение (по желанию)

3. Презентация для родителей:

  • Показать систему родителям и объяснить принципы работы
  • Собрать отзывы и предложения по улучшению
  • Подготовить план внедрения в реальный дом

📔 “Итоговый дневник IoT инженера”

 1📔 МОЙ ИТОГОВЫЙ ДНЕВНИК IoT ИНЖЕНЕРА - УРОК 16
 2
 3🏆 ГЛАВНЫЕ ДОСТИЖЕНИЯ КУРСА:
 4Изучено датчиков: _____ типов
 5Создано проектов: _____ штук  
 6Написано строк кода: _____ строк
 7Решено проблем: _____ штук
 8Самое сложное задание: _________________________
 9
10🧠 РАЗВИТИЕ СИСТЕМНОГО МЫШЛЕНИЯ:
11До курса я думал что IoT это: ___________________
12Теперь я понимаю что это: ______________________
13Самое важное в интеграции: _____________________
14Принципы хорошей автоматизации: _________________
15
16🔧 МОЯ ФИНАЛЬНАЯ СИСТЕМА:
17Название: ____________________________________
18Количество датчиков: _____ шт
19Количество сценариев: _____ шт
20Самая крутая функция: __________________________
21Время непрерывной работы: _____ часов
22
23💭 ФИЛОСОФИЯ АВТОМАТИЗАЦИИ:
24Автоматизация должна: __________________________
25Автоматизация НЕ должна: _______________________
26Этические проблемы IoT: ________________________
27Мое отношение к "умным домам": __________________
28
29🚀 ПЛАНЫ НА БУДУЩЕЕ:
30Хочу изучить: _________________________________
31Хочу создать: _________________________________
32Хочу решить проблему: __________________________
33Моя мечта в IoT: ______________________________
34
35🏅 САМООЦЕНКА КУРСА:
36Сложность курса: ⭐⭐⭐⭐⭐
37Интересность курса: ⭐⭐⭐⭐⭐
38Практическая польза: ⭐⭐⭐⭐⭐
39Качество преподавания: ⭐⭐⭐⭐⭐
40Общая оценка: ⭐⭐⭐⭐⭐
41
42📝 ПИСЬМО СЕБЕ В БУДУЩЕЕ:
43Дорогой я через 5 лет!
44_________________________________________
45_________________________________________
46_________________________________________
47Подпись: _______________

📊 Критерии оценивания финального проекта

“Отлично” (5):

  • Создает полноценную интегрированную IoT систему
  • Демонстрирует глубокое понимание взаимодействия всех компонентов
  • Программирует сложные алгоритмы с системой приоритетов
  • Реализует инновационные функции и решения
  • Создает профессиональные интерфейсы управления
  • Показывает системное мышление и архитектурный подход
  • Документирует проект на высоком техническом уровне

“Хорошо” (4):

  • Успешно интегрирует большинство изученных датчиков
  • Создает работающую систему автоматизации
  • Программирует базовые сценарии взаимодействия
  • Реализует систему приоритетов и разрешения конфликтов
  • Создает функциональные интерфейсы пользователя
  • Демонстрирует понимание принципов IoT

“Удовлетворительно” (3):

  • С помощью интегрирует несколько типов датчиков
  • Создает простую автоматическую систему
  • Понимает базовые принципы системной интеграции
  • Участвует в групповой работе над сложным проектом

🛠️ Материалы и оборудование

Для каждой команды (3-4 человека):

  • ESP32 DevKit плата
  • Полный набор датчиков: DHT22, фоторезистор, микрофон, PIR
  • Исполнительные устройства: LED ленты, вентилятор, buzzer, реле
  • LCD дисплей I2C для локального интерфейса
  • Макетные платы и соединительные провода
  • Корпус для создания завершенного устройства

Программное обеспечение:

  • Arduino IDE с полным набором библиотек
  • Веб-инструменты для создания интерфейсов
  • IoT платформа школы для сбора данных
  • Инструменты мониторинга и отладки

Для демонстраций:

  • Проектор для показа веб-интерфейсов
  • Профессиональные измерительные приборы для сравнения
  • Элементы “умного дома” для демонстрации трендов

🔍 Методические заметки для учителя

Ключевые принципы урока:

  1. Системность - акцент на взаимосвязи компонентов
  2. Практичность - решение реальных задач автоматизации
  3. Творчество - поощрение инновационных решений
  4. Сотрудничество - работа в командах над сложными проектами

Возможные сложности:

  • Перегрузка информацией - разбить на этапы, давать время на освоение
  • Конфликты в командах - четко распределить роли и ответственность
  • Технические проблемы - подготовить запасное оборудование
  • Различный уровень подготовки - дифференцировать задания

Развитие курса:

Этот урок завершает базовый курс IoT, но открывает путь к:

  • Специализированным курсам по машинному обучению
  • Проектам с использованием камер и компьютерного зрения
  • Интеграции с промышленными системами автоматизации
  • Участию в технических олимпиадах и конкурсах