🏆 УМНАЯ АВТОМАТИЧЕСКАЯ СИСТЕМА
🎯 Цели и планируемые результаты урока
Предметные результаты:
- Интеграция всех изученных датчиков в единую 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 платформа школы для сбора данных
- Инструменты мониторинга и отладки
Для демонстраций:
- Проектор для показа веб-интерфейсов
- Профессиональные измерительные приборы для сравнения
- Элементы “умного дома” для демонстрации трендов
🔍 Методические заметки для учителя
Ключевые принципы урока:
- Системность - акцент на взаимосвязи компонентов
- Практичность - решение реальных задач автоматизации
- Творчество - поощрение инновационных решений
- Сотрудничество - работа в командах над сложными проектами
Возможные сложности:
- Перегрузка информацией - разбить на этапы, давать время на освоение
- Конфликты в командах - четко распределить роли и ответственность
- Технические проблемы - подготовить запасное оборудование
- Различный уровень подготовки - дифференцировать задания
Развитие курса:
Этот урок завершает базовый курс IoT, но открывает путь к:
- Специализированным курсам по машинному обучению
- Проектам с использованием камер и компьютерного зрения
- Интеграции с промышленными системами автоматизации
- Участию в технических олимпиадах и конкурсах