🚶 Датчик движения PIR
🎯 Цели и планируемые результаты урока
Предметные результаты:
- Понимание принципов работы PIR датчиков и инфракрасного излучения
- Освоение методов детекции движения и присутствия
- Навыки настройки чувствительности и временных параметров PIR
- Умение создавать охранные и автоматические системы
- Практические навыки работы с цифровыми датчиками движения
- Создание умных устройств реагирующих на присутствие человека
Метапредметные результаты:
- Развитие понимания невидимых физических явлений
- Формирование навыков создания автоматических систем безопасности
- Умение анализировать паттерны движения и поведения
- Развитие системного мышления при проектировании охранных систем
Личностные результаты:
- Понимание важности безопасности и защиты имущества
- Развитие ответственного отношения к приватности
- Формирование интереса к системам “умного дома”
🚀 Мотивационное начало (8 минут)
“Невидимый страж - ESP32 с рентгеновским зрением”
Учитель демонстрирует PIR датчик, который “видит” людей через препятствия и реагирует на движение
🔍 Загадочная демонстрация “Невидимое обнаружение”:
1👤 Учитель заходит в класс → Светодиод загорается ДО того, как его видят ученики
2🚪 Кто-то движется за дверью → Система сразу реагирует
3📄 Лист бумаги перед датчиком → Человек за листом все равно обнаруживается!
4🪑 Учитель прячется за стул → Датчик "видит" сквозь мебель
5❄️ Включаем кондиционер → Система не реагирует на холодный воздух
🎭 Интерактивная аналогия “Тепловое зрение хищника”:
1🐍 ЗМЕЯ-ГАДЮКА ↔ 🔍 PIR ДАТЧИК
2Видит тепловое излучение ↔ Обнаруживает ИК-излучение
3Реагирует на теплокровных ↔ Реагирует на людей/животных
4Не видит холодные объекты ↔ Игнорирует неживые предметы
5Охотится в полной темноте ↔ Работает без освещения
6Мгновенная реакция на жертву ↔ Быстрое срабатывание
🏠 Демонстрация умных сценариев:
1🌙 УМНЫЙ ДОМ НОЧЬЮ:
2- Входите в коридор → Автоматически включается приглушенный свет
3- Идете в ванную → Освещение следует за вами
4- Покидаете комнату → Через 2 минуты все выключается
5
6🛡️ СИСТЕМА БЕЗОПАСНОСТИ:
7- Движение ночью → Сигнал тревоги + фото на телефон
8- Долгое отсутствие движения → "Режим охраны" активирован
9- Обнаружен злоумышленник → Сирена + уведомление владельцу
🌟 Интрига урока: “Сегодня мы научим ESP32 видеть тепло живых существ и создадим систему, которая будет знать о каждом вашем движении!”
🎯 Вызов дня: “К концу урока ваш ESP32 станет невидимым охранником, который будет следить за классом даже в полной темноте!”
📖 Основная часть урока
Блок 1: “Принципы работы PIR датчиков - видим невидимое тепло” (15 минут)
🌡️ “Инфракрасное излучение - тепловые волны вокруг нас”
Физические основы ИК-детекции:
1🌈 СПЕКТР ЭЛЕКТРОМАГНИТНОГО ИЗЛУЧЕНИЯ:
2
3Видимый свет: 380-780 нм (то что видят наши глаза)
4Ближний ИК: 780нм-1.4мкм (пульты ДУ, оптоволокно)
5Средний ИК: 1.4-8мкм (ТЕПЛОВОЕ излучение человека!)
6Дальний ИК: 8-15мкм (тепловизоры, астрономия)
7
8🔥 ТЕПЛОВОЕ ИЗЛУЧЕНИЕ ЧЕЛОВЕКА:
9- Температура тела: 36.6°C = 309.6K
10- Пик излучения: 9.3 мкм (средний ИК)
11- Мощность: ~100 Вт тепла с поверхности тела
12- Видимость: В полной темноте для ИК-камеры!
13
14❄️ ОКРУЖАЮЩИЕ ОБЪЕКТЫ:
15- Комнатная температура: 20°C = 293K
16- Пик излучения: 9.9 мкм
17- Контраст: 6.6°C разности = четкое обнаружение!
🔍 “PIR - Passive Infrared sensor”
Устройство и принцип работы:
1🔬 АНАТОМИЯ PIR ДАТЧИКА:
2
31️⃣ ПИРОЭЛЕКТРИЧЕСКИЙ ЭЛЕМЕНТ:
4- Материал: Танталат лития (LiTaO3)
5- Принцип: Изменение поляризации при нагреве
6- Структура: ДВА элемента рядом (дифференциальная схема)
7- Чувствительность: Изменения температуры 0.1°C
8
92️⃣ ЛИНЗА ФРЕНЕЛЯ:
10- Материал: Полиэтилен (прозрачен для ИК)
11- Функция: Фокусировка ИК-лучей на сенсор
12- Зоны: 20-60 фокусных сегментов
13- Угол обзора: 90-120 градусов
14
153️⃣ ЭЛЕКТРОННАЯ ОБРАБОТКА:
16- Усилитель: Увеличивает слабый сигнал в 1000+ раз
17- Компаратор: Превращает аналоговый сигнал в цифровой
18- Таймер: Устанавливает длительность выходного сигнала
19- Фильтр: Убирает помехи и ложные срабатывания
20
21🎯 ПРИНЦИП РАБОТЫ:
221. ИК-излучение от человека попадает на ОДИН из двух элементов
232. Возникает РАЗНОСТЬ сигналов между элементами
243. Разность усиливается и сравнивается с порогом
254. При превышении порога → Выход становится HIGH
265. Таймер удерживает HIGH заданное время
📐 “Зоны обнаружения и мертвые точки”
Геометрия работы PIR датчика:
1🎯 ЗОНЫ ОБНАРУЖЕНИЯ PIR:
2
3АКТИВНЫЕ ЗОНЫ (высокая чувствительность):
4┌─────────────────────────┐
5│ \ /\ /\ / │ ← Лучи линзы Френеля
6│ \ / \ / \ / │
7│ \ / \ / \ / │
8│ X X X │ ← Фокальные точки
9│ \ /|\ / │
10│ \ / | \ / │
11│ \/ | \/ │
12│ PIR │
13└─────────────────────────┘
14
15МЕРТВЫЕ ЗОНЫ (слабая чувствительность):
16- Прямо перед датчиком (слишком близко)
17- Между активными лучами
18- Сбоку от датчика (вне угла обзора)
19- За препятствиями (стены, мебель)
20
21🚶 ОПТИМАЛЬНОЕ ДВИЖЕНИЕ:
22✅ Поперек лучей (слева направо)
23✅ На расстоянии 2-7 метров
24✅ Средняя скорость (1-2 м/с)
25
26❌ ПЛОХОЕ ОБНАРУЖЕНИЕ:
27- Движение прямо на датчик/от датчика
28- Очень медленное движение (<0.3 м/с)
29- Очень быстрое движение (>5 м/с)
30- В жаркую погоду (малый контраст)
🧪 Практическое исследование “Поведение PIR датчика”
Эксперименты с обнаружением движения:
1🔬 ЛАБОРАТОРИЯ ДЕТЕКЦИИ ДВИЖЕНИЯ:
2
3Эксперимент 1: Зависимость от расстояния
4Методика: Движение на разных расстояниях от датчика
5
6📊 ТАБЛИЦА ДАЛЬНОСТИ:
7┌─────────────┬──────────────┬─────────────┬──────────────┐
8│ Расстояние │ Обнаружение │ Время реакции│ Надежность │
9├─────────────┼──────────────┼─────────────┼──────────────┤
10│ 0.5 м │ ДА/НЕТ │ _____ мс │ ____/10 │
11│ 1 м │ ДА/НЕТ │ _____ мс │ ____/10 │
12│ 2 м │ ДА/НЕТ │ _____ мс │ ____/10 │
13│ 3 м │ ДА/НЕТ │ _____ мс │ ____/10 │
14│ 5 м │ ДА/НЕТ │ _____ мс │ ____/10 │
15│ 7 м │ ДА/НЕТ │ _____ мс │ ____/10 │
16└─────────────┴──────────────┴─────────────┴──────────────┘
17
18Эксперимент 2: Направление движения
19- Слева направо: Обнаружен на расстоянии _____ м
20- Справа налево: Обнаружен на расстоянии _____ м
21- На датчик: Обнаружен на расстоянии _____ м
22- От датчика: Обнаружен на расстоянии _____ м
23- Вывод: Лучшее направление _____________
24
25Эксперимент 3: Влияние препятствий
26- Прозрачное стекло: БЛОКИРУЕТ/ПРОПУСКАЕТ
27- Тонкая ткань: БЛОКИРУЕТ/ПРОПУСКАЕТ
28- Лист бумаги: БЛОКИРУЕТ/ПРОПУСКАЕТ
29- Пластиковая бутылка: БЛОКИРУЕТ/ПРОПУСКАЕТ
30- Вывод: ИК-излучение проходит через ___________
31
32Эксперимент 4: Ложные срабатывания
33□ Включение лампы накаливания
34□ Горячий чай рядом с датчиком
35□ Фен или обогреватель
36□ Домашнее животное (кот/собака)
37□ Развевающиеся шторы
38□ Автомобиль за окном
⚙️ “Настройки PIR модуля HC-SR501”
Регулировка параметров работы:
1🎛️ ОРГАНЫ УПРАВЛЕНИЯ HC-SR501:
2
31️⃣ ПОТЕНЦИОМЕТР ЧУВСТВИТЕЛЬНОСТИ (Sx):
4Положение: Левый потенциометр
5Диапазон: 3-7 метров
6Поворот по часовой: УВЕЛИЧИТЬ дальность
7Поворот против часовой: УМЕНЬШИТЬ дальность
8Рекомендация: Для класса - средняя позиция
9
102️⃣ ПОТЕНЦИОМЕТР ВРЕМЕНИ (Tx):
11Положение: Правый потенциометр
12Диапазон: 0.3 - 300 секунд
13Поворот по часовой: УВЕЛИЧИТЬ время удержания
14Поворот против часовой: УМЕНЬШИТЬ время
15Рекомендация: Для тестов - минимум (0.3 сек)
16
173️⃣ ПЕРЕМЫЧКА РЕЖИМА РАБОТЫ:
18Позиция H: Режим "Повтора" (retriggering)
19- При новом движении время сбрасывается
20- Подходит для освещения
21
22Позиция L: Режим "Однократного срабатывания"
23- Игнорирует движение пока идет отсчет
24- Подходит для охранных систем
25
26🔧 РЕКОМЕНДУЕМЫЕ НАСТРОЙКИ:
27Для обучения: Sx = мин, Tx = мин, Jumper = L
28Для освещения: Sx = сред, Tx = 30сек, Jumper = H
29Для охраны: Sx = макс, Tx = макс, Jumper = L
Блок 2: “Подключение и программирование PIR датчика” (14 минут)
🔌 “Схема подключения HC-SR501”
Простое подключение к ESP32:
1🛠️ СХЕМА ПОДКЛЮЧЕНИЯ PIR ДАТЧИКА:
2
3 ESP32 HC-SR501
4 ┌─────────┐ ┌─────────────┐
5 │ 5V │──────────────│ VCC (красный)│
6 │ GPIO 13 │──────────────│ OUT (желтый) │
7 │ GND │──────────────│ GND (черный) │
8 └─────────┘ └─────────────┘
9 │ [Sx] [Tx] │ ← Потенциометры
10 │ [H/L] │ ← Перемычка
11 └─────────────┘
12
13⚠️ ВАЖНЫЕ МОМЕНТЫ:
141. PIR требует 5V питания (не 3.3V!)
152. Выходной сигнал 3.3V - безопасен для ESP32
163. После включения нужно 60 секунд на стабилизацию
174. Не касаться руками линзы датчика
185. Устанавливать вертикально для лучшей работы
19
20🔧 ДОПОЛНИТЕЛЬНЫЕ КОМПОНЕНТЫ:
21- Светодиод + резистор 220Ом (индикация движения)
22- Buzzer (звуковая сигнализация)
23- Реле (управление мощными нагрузками)
24- LCD дисплей (отображение статуса)
💻 “Базовая программа детекции движения”
Код с обработкой PIR сигналов:
1// 🚶 ПРОГРАММА ДАТЧИКА ДВИЖЕНИЯ PIR
2// Урок 15: Обнаружение движения и создание охранных систем
3
4// 🔧 Настройки пинов
5const int PIR_PIN = 13; // Пин подключения PIR датчика
6const int LED_PIN = 2; // Встроенный светодиод
7const int EXTERNAL_LED_PIN = 5; // Внешний светодиод
8const int BUZZER_PIN = 4; // Пищалка (опционально)
9
10// 📊 Параметры детекции
11const unsigned long STABILIZATION_TIME = 60000; // 60 сек стабилизации
12const unsigned long MOTION_TIMEOUT = 5000; // 5 сек без движения = "покой"
13const int MOTION_COUNTER_THRESHOLD = 3; // Мин. количество срабатываний
14
15// 📈 Переменные состояния
16bool motionDetected = false; // Текущее состояние движения
17bool systemArmed = false; // Система активирована
18unsigned long lastMotionTime = 0; // Время последнего движения
19unsigned long systemStartTime = 0; // Время запуска системы
20int motionCounter = 0; // Счетчик движений
21int totalMotions = 0; // Общее количество движений
22
23// 🕐 Временные метки для анализа
24unsigned long motionTimes[10]; // История последних движений
25int motionIndex = 0; // Индекс в массиве истории
26
27void setup() {
28 Serial.begin(9600);
29 Serial.println("🚶 Система детекции движения PIR v2.0");
30
31 // 🔧 Настройка пинов
32 pinMode(PIR_PIN, INPUT);
33 pinMode(LED_PIN, OUTPUT);
34 pinMode(EXTERNAL_LED_PIN, OUTPUT);
35 pinMode(BUZZER_PIN, OUTPUT);
36
37 systemStartTime = millis();
38
39 Serial.println("⏳ Ожидание стабилизации PIR датчика...");
40 Serial.println(" (НЕ ДВИГАЙТЕСЬ 60 секунд!)");
41
42 // 🎯 Период стабилизации с индикацией
43 stabilizationPeriod();
44
45 Serial.println("✅ PIR датчик готов к работе!");
46 Serial.println("📊 Формат: Движение | Счетчик | Время | Статус");
47 Serial.println("─────────────────────────────────────────────────");
48}
49
50void loop() {
51 // 📖 Читаем состояние PIR датчика
52 bool currentMotion = digitalRead(PIR_PIN);
53
54 // 🔍 Обрабатываем изменения состояния
55 if (currentMotion != motionDetected) {
56 handleMotionChange(currentMotion);
57 }
58
59 // ⏰ Проверяем таймаут отсутствия движения
60 checkMotionTimeout();
61
62 // 💡 Обновляем индикацию
63 updateIndicators();
64
65 // 📊 Анализируем паттерны движения
66 analyzeMotionPatterns();
67
68 // 🎮 Обрабатываем команды пользователя
69 handleSerialCommands();
70
71 delay(100); // Опрос 10 раз в секунду
72}
73
74// ⏳ Функция стабилизации PIR датчика
75void stabilizationPeriod() {
76 unsigned long startTime = millis();
77
78 while (millis() - startTime < STABILIZATION_TIME) {
79 unsigned long elapsed = millis() - startTime;
80 int progress = (elapsed * 100) / STABILIZATION_TIME;
81
82 // 📈 Показываем прогресс каждые 10 секунд
83 if (elapsed % 10000 == 0 && elapsed > 0) {
84 Serial.printf("⏳ Стабилизация: %d%% (%lu сек)\n",
85 progress, elapsed / 1000);
86 }
87
88 // 💡 Мигание светодиода во время стабилизации
89 bool blinkState = (millis() / 500) % 2;
90 digitalWrite(LED_PIN, blinkState);
91
92 delay(100);
93 }
94
95 digitalWrite(LED_PIN, LOW);
96}
97
98// 🔄 Функция обработки изменения состояния движения
99void handleMotionChange(bool newState) {
100 motionDetected = newState;
101 unsigned long currentTime = millis();
102
103 if (newState) {
104 // 🚶 ДВИЖЕНИЕ ОБНАРУЖЕНО
105 lastMotionTime = currentTime;
106 motionCounter++;
107 totalMotions++;
108
109 // 📝 Записываем время в историю
110 motionTimes[motionIndex] = currentTime;
111 motionIndex = (motionIndex + 1) % 10;
112
113 Serial.printf("🚶 ДВИЖЕНИЕ! Счетчик: %d | Общий: %d | Время: %lu\n",
114 motionCounter, totalMotions, currentTime / 1000);
115
116 // 🎯 Реакция на движение
117 onMotionDetected();
118
119 } else {
120 // 🛑 ДВИЖЕНИЕ ПРЕКРАТИЛОСЬ
121 Serial.printf("🛑 Движение прекратилось | Длительность: %lu мс\n",
122 currentTime - lastMotionTime);
123 }
124}
125
126// 🎯 Функция реакции на обнаруженное движение
127void onMotionDetected() {
128 // 💡 Включаем освещение
129 digitalWrite(EXTERNAL_LED_PIN, HIGH);
130
131 // 🔊 Звуковой сигнал при активированной системе
132 if (systemArmed) {
133 tone(BUZZER_PIN, 1000, 200); // 200мс сигнал 1кГц
134 Serial.println("🚨 ТРЕВОГА! Движение при активированной охране!");
135 }
136
137 // 📊 Анализ активности
138 analyzeActivity();
139}
140
141// ⏰ Функция проверки таймаута движения
142void checkMotionTimeout() {
143 if (motionDetected && (millis() - lastMotionTime > MOTION_TIMEOUT)) {
144 Serial.printf("😴 Период покоя начался (>%d сек без движения)\n",
145 MOTION_TIMEOUT / 1000);
146
147 // 🔄 Сбрасываем счетчик движений
148 motionCounter = 0;
149
150 // 💡 Выключаем освещение
151 digitalWrite(EXTERNAL_LED_PIN, LOW);
152 }
153}
154
155// 💡 Функция обновления индикаторов
156void updateIndicators() {
157 // 🔴 Встроенный светодиод = текущее движение
158 digitalWrite(LED_PIN, motionDetected);
159
160 // 🟢 Внешний светодиод = недавняя активность
161 bool recentActivity = (millis() - lastMotionTime) < MOTION_TIMEOUT;
162 digitalWrite(EXTERNAL_LED_PIN, recentActivity);
163}
164
165// 📊 Функция анализа паттернов движения
166void analyzeMotionPatterns() {
167 static unsigned long lastAnalysis = 0;
168
169 // 📈 Анализируем каждые 30 секунд
170 if (millis() - lastAnalysis >= 30000) {
171 lastAnalysis = millis();
172
173 // 🔍 Анализируем историю движений
174 int recentMotions = countRecentMotions(30000); // За последние 30 сек
175
176 Serial.printf("📊 Анализ активности: %d движений за 30 сек\n", recentMotions);
177
178 // 🎯 Классификация активности
179 if (recentMotions == 0) {
180 Serial.println("😴 Статус: ПОКОЙ");
181 } else if (recentMotions <= 2) {
182 Serial.println("🚶 Статус: НИЗКАЯ АКТИВНОСТЬ");
183 } else if (recentMotions <= 5) {
184 Serial.println("🏃 Статус: СРЕДНЯЯ АКТИВНОСТЬ");
185 } else {
186 Serial.println("💃 Статус: ВЫСОКАЯ АКТИВНОСТЬ");
187 }
188 }
189}
190
191// 📈 Функция подсчета недавних движений
192int countRecentMotions(unsigned long timeWindow) {
193 unsigned long currentTime = millis();
194 int count = 0;
195
196 for (int i = 0; i < 10; i++) {
197 if (motionTimes[i] != 0 &&
198 (currentTime - motionTimes[i]) <= timeWindow) {
199 count++;
200 }
201 }
202
203 return count;
204}
205
206// 🔍 Функция анализа активности
207void analyzeActivity() {
208 // 📊 Частота движений
209 int recentMotions = countRecentMotions(60000); // За минуту
210
211 if (recentMotions > 10) {
212 Serial.println("🎪 Обнаружена высокая активность (возможно праздник)");
213 } else if (recentMotions > 5) {
214 Serial.println("👥 Обнаружена групповая активность");
215 } else {
216 Serial.println("👤 Обнаружена одиночная активность");
217 }
218}
219
220// 🎮 Функция обработки команд через Serial
221void handleSerialCommands() {
222 if (Serial.available()) {
223 String command = Serial.readStringUntil('\n');
224 command.trim();
225 command.toLowerCase();
226
227 if (command == "arm") {
228 systemArmed = true;
229 Serial.println("🛡️ Система охраны АКТИВИРОВАНА");
230 tone(BUZZER_PIN, 800, 100);
231
232 } else if (command == "disarm") {
233 systemArmed = false;
234 Serial.println("✅ Система охраны ДЕАКТИВИРОВАНА");
235 tone(BUZZER_PIN, 400, 100);
236
237 } else if (command == "status") {
238 printSystemStatus();
239
240 } else if (command == "reset") {
241 resetStatistics();
242
243 } else if (command == "help") {
244 printHelp();
245
246 } else {
247 Serial.println("❌ Неизвестная команда. Введите 'help'");
248 }
249 }
250}
251
252// 📊 Функция вывода статуса системы
253void printSystemStatus() {
254 unsigned long uptime = millis() / 1000;
255
256 Serial.println("📊 СТАТУС СИСТЕМЫ ДВИЖЕНИЯ:");
257 Serial.printf("├ Время работы: %lu сек (%lu мин)\n", uptime, uptime / 60);
258 Serial.printf("├ Система охраны: %s\n", systemArmed ? "ВКЛ" : "ВЫКЛ");
259 Serial.printf("├ Текущее движение: %s\n", motionDetected ? "ДА" : "НЕТ");
260 Serial.printf("├ Последнее движение: %lu сек назад\n",
261 (millis() - lastMotionTime) / 1000);
262 Serial.printf("├ Движений в текущем периоде: %d\n", motionCounter);
263 Serial.printf("├ Всего движений: %d\n", totalMotions);
264 Serial.printf("├ Активность за минуту: %d движений\n",
265 countRecentMotions(60000));
266 Serial.printf("└ Средняя частота: %.1f движений/мин\n",
267 (float)totalMotions / (uptime / 60.0));
268}
269
270// 🔄 Сброс статистики
271void resetStatistics() {
272 totalMotions = 0;
273 motionCounter = 0;
274 systemStartTime = millis();
275
276 // 🔄 Очищаем историю
277 for (int i = 0; i < 10; i++) {
278 motionTimes[i] = 0;
279 }
280 motionIndex = 0;
281
282 Serial.println("🔄 Статистика движений сброшена");
283}
284
285// 📋 Справка по командам
286void printHelp() {
287 Serial.println("📋 ДОСТУПНЫЕ КОМАНДЫ:");
288 Serial.println("├ arm - активировать охранную систему");
289 Serial.println("├ disarm - деактивировать охрану");
290 Serial.println("├ status - показать статус системы");
291 Serial.println("├ reset - сбросить статистику");
292 Serial.println("└ help - эта справка");
293}
🎛️ “Настройка чувствительности и фильтрация”
Адаптивные алгоритмы детекции:
1// 🧠 УМНАЯ ОБРАБОТКА СИГНАЛОВ PIR
2
3// 📊 Структура для адаптивных настроек
4struct PIRSettings {
5 int minMotionDuration; // Мин. длительность движения (мс)
6 int maxMotionGap; // Макс. промежуток в движении (мс)
7 int falseAlarmThreshold; // Порог ложных срабатываний
8 bool adaptiveMode; // Режим адаптации
9 unsigned long learningTime; // Время обучения (мс)
10};
11
12PIRSettings settings = {200, 2000, 5, true, 300000}; // 5 мин обучения
13
14// 🎯 Функция умной фильтрации движений
15bool smartMotionFilter(bool rawMotion) {
16 static bool lastState = false;
17 static unsigned long stateChangeTime = 0;
18 static int shortPulseCount = 0;
19 static unsigned long lastShortPulse = 0;
20
21 unsigned long currentTime = millis();
22
23 // 🔄 Обнаружение изменения состояния
24 if (rawMotion != lastState) {
25 unsigned long stateDuration = currentTime - stateChangeTime;
26
27 // 🔍 Анализ предыдущего состояния
28 if (lastState == true) {
29 // Завершилось движение
30 if (stateDuration < settings.minMotionDuration) {
31 // 📊 Слишком короткое движение - возможно помеха
32 shortPulseCount++;
33 lastShortPulse = currentTime;
34
35 Serial.printf("⚠️ Короткий импульс: %lu мс (помеха?)\n", stateDuration);
36
37 // 🚨 Много коротких импульсов = проблема
38 if (shortPulseCount > settings.falseAlarmThreshold &&
39 (currentTime - lastShortPulse) < 10000) {
40 Serial.println("🚨 Обнаружены помехи! Увеличиваю фильтрацию");
41 settings.minMotionDuration += 50; // Увеличиваем порог
42 }
43 }
44 }
45
46 stateChangeTime = currentTime;
47 lastState = rawMotion;
48 }
49
50 // 🎯 Сброс счетчика коротких импульсов
51 if (currentTime - lastShortPulse > 60000) { // Через минуту
52 shortPulseCount = 0;
53 }
54
55 return rawMotion;
56}
57
58// 🤖 Функция машинного обучения паттернов
59void learnMotionPatterns() {
60 static unsigned long learningStart = 0;
61 static int normalMotions = 0;
62 static int falseAlarms = 0;
63
64 if (learningStart == 0) {
65 learningStart = millis();
66 Serial.println("🎓 Начинаю обучение распознаванию движений...");
67 }
68
69 unsigned long learningElapsed = millis() - learningStart;
70
71 if (learningElapsed < settings.learningTime) {
72 // 📚 Период обучения - собираем статистику
73 // (в реальности здесь был бы более сложный алгоритм)
74
75 if (learningElapsed % 60000 == 0) { // Каждую минуту
76 int progress = (learningElapsed * 100) / settings.learningTime;
77 Serial.printf("🎓 Обучение: %d%% | Движений: %d | Помех: %d\n",
78 progress, normalMotions, falseAlarms);
79 }
80 } else {
81 // ✅ Обучение завершено
82 settings.adaptiveMode = false;
83
84 float accuracy = (float)normalMotions / (normalMotions + falseAlarms) * 100;
85 Serial.printf("🎯 Обучение завершено! Точность: %.1f%%\n", accuracy);
86
87 // 🔧 Оптимизируем настройки на основе обучения
88 if (accuracy < 90) {
89 settings.minMotionDuration += 100;
90 Serial.println("🔧 Увеличил фильтрацию для повышения точности");
91 }
92 }
93}
94
95// 📊 Функция анализа качества сигнала
96void analyzeSignalQuality() {
97 static int signalChanges = 0;
98 static unsigned long analysisStart = millis();
99 static bool lastSignal = false;
100
101 bool currentSignal = digitalRead(PIR_PIN);
102
103 if (currentSignal != lastSignal) {
104 signalChanges++;
105 lastSignal = currentSignal;
106 }
107
108 // 📈 Анализируем каждые 30 секунд
109 if (millis() - analysisStart >= 30000) {
110 float changesPerSecond = (float)signalChanges / 30.0;
111
112 Serial.printf("📊 Качество сигнала: %.1f изм/сек", changesPerSecond);
113
114 if (changesPerSecond > 2.0) {
115 Serial.println(" (ШУМНЫЙ - возможны помехи)");
116 } else if (changesPerSecond > 0.5) {
117 Serial.println(" (АКТИВНЫЙ - норма)");
118 } else {
119 Serial.println(" (СТАБИЛЬНЫЙ - отлично)");
120 }
121
122 // 🔄 Сброс для следующего периода
123 signalChanges = 0;
124 analysisStart = millis();
125 }
126}
Блок 3: “Создание охранных и автоматических систем” (16 минут)
🛡️ “Система безопасности с PIR датчиком”
Полноценная охранная система:
1// 🛡️ ОХРАННАЯ СИСТЕМА "УМНЫЙ СТРАЖ" v3.0
2
3// 🎯 Режимы работы системы
4enum SecurityMode {
5 MODE_DISARMED, // Выключена
6 MODE_HOME, // Домашний режим
7 MODE_AWAY, // Режим отсутствия
8 MODE_NIGHT, // Ночной режим
9 MODE_ALARM // Тревога
10};
11
12// 📊 Структура состояния системы
13struct SecuritySystem {
14 SecurityMode currentMode;
15 bool armed;
16 unsigned long armTime;
17 unsigned long lastMotion;
18 int alarmLevel; // 0-5 уровень тревоги
19 bool sirenActive;
20 int motionZones[4]; // 4 зоны контроля
21 String lastAlarmReason;
22};
23
24SecuritySystem security = {MODE_DISARMED, false, 0, 0, 0, false, {0}, ""};
25
26// ⏰ Временные настройки
27const unsigned long ARM_DELAY = 30000; // 30 сек на выход
28const unsigned long ENTRY_DELAY = 15000; // 15 сек на вход
29const unsigned long ALARM_DURATION = 300000; // 5 мин сирена
30const unsigned long MOTION_MEMORY = 60000; // 1 мин память движения
31
32void securitySystemLoop() {
33 // 📖 Читаем датчики
34 bool motionDetected = readAllMotionSensors();
35
36 // 🧠 Обрабатываем состояние системы
37 processSecurityLogic(motionDetected);
38
39 // 🚨 Управляем тревогой
40 handleAlarmState();
41
42 // 💡 Обновляем индикацию
43 updateSecurityIndicators();
44
45 // 📱 Отправляем уведомления
46 sendSecurityNotifications();
47}
48
49// 📖 Функция чтения всех датчиков движения
50bool readAllMotionSensors() {
51 // В реальной системе здесь было бы несколько PIR датчиков
52 bool motion = digitalRead(PIR_PIN);
53
54 if (motion) {
55 security.lastMotion = millis();
56
57 // 📍 Определяем зону срабатывания (упрощенно)
58 int zone = determineMotionZone();
59 security.motionZones[zone]++;
60
61 Serial.printf("🚶 Движение в зоне %d (всего: %d)\n",
62 zone + 1, security.motionZones[zone]);
63 }
64
65 return motion;
66}
67
68// 📍 Функция определения зоны движения
69int determineMotionZone() {
70 // Упрощенная логика - в реальности анализ нескольких датчиков
71 unsigned long time = millis();
72 return (time / 10000) % 4; // Имитация разных зон
73}
74
75// 🧠 Основная логика системы безопасности
76void processSecurityLogic(bool motionDetected) {
77 unsigned long currentTime = millis();
78
79 switch (security.currentMode) {
80 case MODE_DISARMED:
81 // 😴 Система выключена - только мониторинг
82 if (motionDetected) {
83 Serial.println("👁️ Движение зафиксировано (система выключена)");
84 }
85 break;
86
87 case MODE_HOME:
88 // 🏠 Домашний режим - контроль периметра
89 if (motionDetected) {
90 int zone = determineMotionZone();
91 if (zone == 0) { // Входная зона
92 triggerAlarm("Движение во входной зоне (домашний режим)");
93 } else {
94 Serial.printf("🏠 Нормальное движение дома (зона %d)\n", zone + 1);
95 }
96 }
97 break;
98
99 case MODE_AWAY:
100 // 🚶 Режим отсутствия - любое движение = тревога
101 if (motionDetected) {
102 if (currentTime - security.armTime > ARM_DELAY) {
103 startEntryDelay("Движение при отсутствии");
104 } else {
105 Serial.println("⏰ Движение в период выхода (игнорируется)");
106 }
107 }
108 break;
109
110 case MODE_NIGHT:
111 // 🌙 Ночной режим - контроль первого этажа
112 if (motionDetected) {
113 int zone = determineMotionZone();
114 if (zone <= 1) { // Первый этаж
115 startEntryDelay("Движение на первом этаже ночью");
116 }
117 }
118 break;
119
120 case MODE_ALARM:
121 // 🚨 Режим тревоги - продолжаем сирену
122 handleActiveAlarm();
123 break;
124 }
125}
126
127// ⏰ Функция запуска задержки входа
128void startEntryDelay(String reason) {
129 static unsigned long entryDelayStart = 0;
130
131 if (entryDelayStart == 0) {
132 entryDelayStart = millis();
133 security.lastAlarmReason = reason;
134
135 Serial.printf("⏰ ЗАДЕРЖКА ВХОДА: %s\n", reason.c_str());
136 Serial.printf(" У вас %d секунд для отключения\n", ENTRY_DELAY / 1000);
137
138 // 🔊 Предупредительные сигналы
139 for (int i = 0; i < 3; i++) {
140 tone(BUZZER_PIN, 800, 200);
141 delay(300);
142 }
143 }
144
145 // ⏱️ Проверяем истечение времени
146 if (millis() - entryDelayStart >= ENTRY_DELAY) {
147 triggerAlarm(security.lastAlarmReason);
148 entryDelayStart = 0;
149 }
150}
151
152// 🚨 Функция активации тревоги
153void triggerAlarm(String reason) {
154 security.currentMode = MODE_ALARM;
155 security.sirenActive = true;
156 security.alarmLevel = 5;
157 security.lastAlarmReason = reason;
158
159 Serial.printf("🚨 ТРЕВОГА АКТИВИРОВАНА: %s\n", reason.c_str());
160 Serial.println("📱 Отправляется уведомление владельцу");
161
162 // 🔊 Включаем сирену
163 startSiren();
164
165 // 📸 Делаем "фото" (имитация)
166 takeSecurityPhoto();
167
168 // 📱 Отправляем уведомление
169 sendAlarmNotification(reason);
170}
171
172// 📯 Функция управления сиреной
173void startSiren() {
174 // 🔊 Паттерн европейской сирены
175 static unsigned long sirenStart = 0;
176 static bool sirenPhase = false;
177
178 if (sirenStart == 0) {
179 sirenStart = millis();
180 }
181
182 if (security.sirenActive) {
183 unsigned long elapsed = millis() - sirenStart;
184
185 // 🔄 Меняем тон каждые 500мс
186 if (elapsed % 1000 < 500) {
187 tone(BUZZER_PIN, 800); // Высокий тон
188 } else {
189 tone(BUZZER_PIN, 400); // Низкий тон
190 }
191
192 // ⏰ Автоматическое отключение через 5 минут
193 if (elapsed >= ALARM_DURATION) {
194 stopSiren();
195 Serial.println("⏰ Сирена автоматически отключена через 5 минут");
196 }
197 }
198}
199
200// 🔇 Функция остановки сирены
201void stopSiren() {
202 security.sirenActive = false;
203 noTone(BUZZER_PIN);
204
205 if (security.currentMode == MODE_ALARM) {
206 Serial.println("🔇 Сирена остановлена");
207 }
208}
209
210// 📸 Функция "фотографирования" нарушителя
211void takeSecurityPhoto() {
212 Serial.println("📸 Делаю фото нарушителя...");
213 Serial.println(" [В реальной системе здесь подключение камеры]");
214 Serial.println(" Фото сохранено: intruder_2025-05-27_15-46.jpg");
215}
216
217// 📱 Функция отправки уведомлений
218void sendAlarmNotification(String reason) {
219 Serial.println("📱 ОТПРАВКА УВЕДОМЛЕНИЯ:");
220 Serial.printf(" Кому: Владелец дома (+7-XXX-XXX-XXXX)\n");
221 Serial.printf(" Текст: ТРЕВОГА! %s\n", reason.c_str());
222 Serial.printf(" Время: %s\n", getCurrentTime().c_str());
223 Serial.printf(" Фото: attached\n");
224 Serial.printf(" Управление: http://home-security.local/alarm\n");
225}
226
227// 🕐 Функция получения текущего времени
228String getCurrentTime() {
229 unsigned long uptime = millis() / 1000;
230 int hours = (uptime / 3600) % 24;
231 int minutes = (uptime / 60) % 60;
232 int seconds = uptime % 60;
233
234 char timeStr[20];
235 sprintf(timeStr, "%02d:%02d:%02d", hours, minutes, seconds);
236 return String(timeStr);
237}
238
239// 🎮 Функция управления системой
240void handleSecurityCommands(String command) {
241 if (command == "arm home") {
242 armSystem(MODE_HOME);
243 } else if (command == "arm away") {
244 armSystem(MODE_AWAY);
245 } else if (command == "arm night") {
246 armSystem(MODE_NIGHT);
247 } else if (command == "disarm") {
248 disarmSystem();
249 } else if (command == "panic") {
250 triggerAlarm("Кнопка паники нажата");
251 } else if (command == "test") {
252 testAllSensors();
253 } else if (command == "zones") {
254 printZoneStatus();
255 }
256}
257
258// 🛡️ Функция постановки на охрану
259void armSystem(SecurityMode mode) {
260 security.currentMode = mode;
261 security.armed = true;
262 security.armTime = millis();
263
264 String modeNames[] = {"", "ДОМАШНИЙ", "ОТСУТСТВИЕ", "НОЧНОЙ", ""};
265 Serial.printf("🛡️ Система поставлена на охрану: %s\n",
266 modeNames[mode].c_str());
267 Serial.printf("⏰ Задержка выхода: %d секунд\n", ARM_DELAY / 1000);
268
269 // 🔊 Подтверждающие сигналы
270 for (int i = 0; i < mode; i++) {
271 tone(BUZZER_PIN, 1000, 100);
272 delay(200);
273 }
274}
275
276// ✅ Функция снятия с охраны
277void disarmSystem() {
278 SecurityMode oldMode = security.currentMode;
279
280 security.currentMode = MODE_DISARMED;
281 security.armed = false;
282 stopSiren();
283
284 Serial.println("✅ Система снята с охраны");
285
286 if (oldMode == MODE_ALARM) {
287 Serial.println("🔇 Тревога отменена");
288 }
289
290 // 🔊 Подтверждение отключения
291 tone(BUZZER_PIN, 400, 500);
292}
293
294// 🔧 Функция тестирования датчиков
295void testAllSensors() {
296 Serial.println("🔧 ТЕСТИРОВАНИЕ СИСТЕМЫ БЕЗОПАСНОСТИ:");
297
298 // 🚶 Тест PIR датчика
299 Serial.print("🚶 PIR датчик: ");
300 bool motion = digitalRead(PIR_PIN);
301 Serial.println(motion ? "✅ РАБОТАЕТ" : "❌ НЕТ ДВИЖЕНИЯ");
302
303 // 🔊 Тест сирены
304 Serial.println("🔊 Тест сирены...");
305 tone(BUZZER_PIN, 1000, 1000);
306 delay(1100);
307
308 // 💡 Тест индикации
309 Serial.println("💡 Тест светодиодов...");
310 for (int i = 0; i < 3; i++) {
311 digitalWrite(LED_PIN, HIGH);
312 digitalWrite(EXTERNAL_LED_PIN, HIGH);
313 delay(200);
314 digitalWrite(LED_PIN, LOW);
315 digitalWrite(EXTERNAL_LED_PIN, LOW);
316 delay(200);
317 }
318
319 Serial.println("✅ Тестирование завершено");
320}
321
322// 📊 Функция вывода статуса зон
323void printZoneStatus() {
324 Serial.println("📊 СТАТУС ЗОН БЕЗОПАСНОСТИ:");
325
326 String zoneNames[] = {"Входная группа", "Гостиная", "Кухня", "Коридор"};
327
328 for (int i = 0; i < 4; i++) {
329 Serial.printf("├ Зона %d (%s): %d срабатываний\n",
330 i + 1, zoneNames[i].c_str(), security.motionZones[i]);
331 }
332
333 unsigned long timeSinceMotion = millis() - security.lastMotion;
334 Serial.printf("└ Последнее движение: %lu сек назад\n",
335 timeSinceMotion / 1000);
336}
💡 “Система умного освещения с PIR”
Автоматическое управление освещением:
1// 💡 СИСТЕМА УМНОГО ОСВЕЩЕНИЯ "СВЕТОВОД"
2
3// 🌟 Режимы освещения
4enum LightMode {
5 LIGHT_OFF, // Выключено
6 LIGHT_AUTO, // Автоматический режим
7 LIGHT_MANUAL, // Ручное управление
8 LIGHT_ECONOMY, // Экономичный режим
9 LIGHT_PARTY, // Праздничный режим
10 LIGHT_NIGHT // Ночной режим
11};
12
13// 📊 Структура системы освещения
14struct SmartLighting {
15 LightMode currentMode;
16 int brightness; // 0-255
17 bool motionActivated; // Включено движением
18 unsigned long lightOnTime; // Время включения
19 int autoOffDelay; // Задержка автоотключения (сек)
20 bool presenceDetected; // Присутствие человека
21 int lightSensorValue; // Значение датчика света
22};
23
24SmartLighting lighting = {LIGHT_AUTO, 128, false, 0, 300, false, 0};
25
26void smartLightingLoop() {
27 // 📖 Читаем датчики
28 bool motion = digitalRead(PIR_PIN);
29 int lightLevel = analogRead(LIGHT_SENSOR_PIN); // Если есть датчик света
30
31 lighting.lightSensorValue = lightLevel;
32
33 // 🧠 Определяем присутствие
34 updatePresenceDetection(motion);
35
36 // 💡 Управляем освещением
37 controlAutoLighting();
38
39 // 📊 Обновляем статистику
40 updateLightingStats();
41}
42
43// 👁️ Функция определения присутствия
44void updatePresenceDetection(bool motion) {
45 static unsigned long lastMotionTime = 0;
46 static int motionCount = 0;
47 static unsigned long presenceStart = 0;
48
49 if (motion) {
50 lastMotionTime = millis();
51 motionCount++;
52
53 if (!lighting.presenceDetected) {
54 lighting.presenceDetected = true;
55 presenceStart = millis();
56 Serial.println("👤 Присутствие ОБНАРУЖЕНО");
57 }
58 }
59
60 // 📊 Анализ отсутствия движения
61 unsigned long timeSinceMotion = millis() - lastMotionTime;
62
63 if (lighting.presenceDetected && timeSinceMotion > lighting.autoOffDelay * 1000) {
64 lighting.presenceDetected = false;
65 unsigned long presenceDuration = (millis() - presenceStart) / 1000;
66
67 Serial.printf("👻 Присутствие ЗАВЕРШЕНО (длительность: %lu сек)\n",
68 presenceDuration);
69
70 // 📊 Анализ поведения
71 analyzeUserBehavior(presenceDuration, motionCount);
72 motionCount = 0;
73 }
74}
75
76// 💡 Функция автоматического управления освещением
77void controlAutoLighting() {
78 if (lighting.currentMode != LIGHT_AUTO) return;
79
80 // 🌅 Определяем нужность освещения по датчику света
81 bool needLight = lighting.lightSensorValue < 500; // Темно
82
83 // 🎯 Логика включения/выключения
84 if (lighting.presenceDetected && needLight) {
85 // 💡 Включаем свет
86 if (!lighting.motionActivated) {
87 turnOnLight();
88 }
89 } else {
90 // 💤 Выключаем свет
91 if (lighting.motionActivated) {
92 turnOffLight();
93 }
94 }
95
96 // 🌈 Адаптивная яркость
97 adaptBrightness();
98}
99
100// 🔆 Функция включения освещения
101void turnOnLight() {
102 lighting.motionActivated = true;
103 lighting.lightOnTime = millis();
104
105 Serial.printf("💡 Свет ВКЛЮЧЕН (режим: %s)\n", getLightModeString().c_str());
106
107 // 🌅 Плавное включение
108 fadeLight(0, lighting.brightness, 1000); // 1 секунда на включение
109}
110
111// 💤 Функция выключения освещения
112void turnOffLight() {
113 unsigned long onDuration = (millis() - lighting.lightOnTime) / 1000;
114
115 Serial.printf("💤 Свет ВЫКЛЮЧЕН (горел %lu сек)\n", onDuration);
116
117 // 🌇 Плавное выключение
118 fadeLight(lighting.brightness, 0, 2000); // 2 секунды на выключение
119
120 lighting.motionActivated = false;
121}
122
123// 🌈 Функция плавного изменения яркости
124void fadeLight(int fromBrightness, int toBrightness, int duration) {
125 int steps = 50;
126 int stepDelay = duration / steps;
127
128 for (int i = 0; i <= steps; i++) {
129 int currentBrightness = map(i, 0, steps, fromBrightness, toBrightness);
130 analogWrite(EXTERNAL_LED_PIN, currentBrightness);
131 delay(stepDelay);
132 }
133}
134
135// 🎛️ Функция адаптивной яркости
136void adaptBrightness() {
137 if (!lighting.motionActivated) return;
138
139 // 📊 Адаптация к уровню внешнего освещения
140 int targetBrightness;
141
142 if (lighting.lightSensorValue < 200) {
143 targetBrightness = 255; // Очень темно - максимум
144 } else if (lighting.lightSensorValue < 400) {
145 targetBrightness = 200; // Темно - яркий свет
146 } else if (lighting.lightSensorValue < 600) {
147 targetBrightness = 150; // Сумерки - средний свет
148 } else {
149 targetBrightness = 80; // Светло - приглушенный
150 }
151
152 // 🌙 Ночной режим - снижаем яркость
153 if (lighting.currentMode == LIGHT_NIGHT) {
154 targetBrightness /= 3;
155 }
156
157 // 🔄 Плавная адаптация яркости
158 if (abs(lighting.brightness - targetBrightness) > 10) {
159 lighting.brightness = targetBrightness;
160 analogWrite(EXTERNAL_LED_PIN, lighting.brightness);
161
162 Serial.printf("🌈 Яркость адаптирована: %d (освещенность: %d)\n",
163 lighting.brightness, lighting.lightSensorValue);
164 }
165}
166
167// 🧠 Функция анализа поведения пользователя
168void analyzeUserBehavior(unsigned long duration, int motionCount) {
169 float motionRate = (float)motionCount / (duration / 60.0); // движений/мин
170
171 Serial.printf("🧠 Анализ поведения: %.1f движений/мин", motionRate);
172
173 if (motionRate > 5) {
174 Serial.println(" (АКТИВНАЯ работа)");
175 lighting.autoOffDelay = 600; // 10 мин для активной работы
176 } else if (motionRate > 2) {
177 Serial.println(" (ОБЫЧНАЯ активность)");
178 lighting.autoOffDelay = 300; // 5 мин стандартно
179 } else {
180 Serial.println(" (НИЗКАЯ активность)");
181 lighting.autoOffDelay = 120; // 2 мин для низкой активности
182 }
183
184 Serial.printf("🕐 Новая задержка отключения: %d сек\n", lighting.autoOffDelay);
185}
186
187// 📊 Функция получения названия режима
188String getLightModeString() {
189 switch (lighting.currentMode) {
190 case LIGHT_OFF: return "ВЫКЛ";
191 case LIGHT_AUTO: return "АВТО";
192 case LIGHT_MANUAL: return "РУЧНОЙ";
193 case LIGHT_ECONOMY: return "ЭКОНОМ";
194 case LIGHT_PARTY: return "ПРАЗДНИК";
195 case LIGHT_NIGHT: return "НОЧЬ";
196 default: return "НЕИЗВЕСТЕН";
197 }
198}
199
200// 🎮 Функция управления режимами освещения
201void handleLightCommands(String command) {
202 if (command == "light auto") {
203 lighting.currentMode = LIGHT_AUTO;
204 Serial.println("💡 Режим: АВТОМАТИЧЕСКИЙ");
205 } else if (command == "light manual") {
206 lighting.currentMode = LIGHT_MANUAL;
207 Serial.println("💡 Режим: РУЧНОЙ");
208 } else if (command == "light night") {
209 lighting.currentMode = LIGHT_NIGHT;
210 Serial.println("💡 Режим: НОЧНОЙ");
211 } else if (command == "light on") {
212 lighting.currentMode = LIGHT_MANUAL;
213 turnOnLight();
214 } else if (command == "light off") {
215 turnOffLight();
216 } else if (command.startsWith("brightness ")) {
217 int newBrightness = command.substring(11).toInt();
218 setBrightness(newBrightness);
219 }
220}
221
222// 🔆 Функция установки яркости
223void setBrightness(int brightness) {
224 lighting.brightness = constrain(brightness, 0, 255);
225
226 if (lighting.motionActivated) {
227 analogWrite(EXTERNAL_LED_PIN, lighting.brightness);
228 }
229
230 Serial.printf("🔆 Яркость установлена: %d/255\n", lighting.brightness);
231}
Блок 4: “Интеграция с IoT системой школы” (10 минут)
📡 “Отправка данных о движении на сервер”
Мониторинг активности в классе:
1
2### **Блок 4: "Интеграция с IoT системой школы" (10 минут)**
3
4#### **📡 "Отправка данных о движении на сервер"**
5
6**Мониторинг активности в классе:**
7
8Данные о движении, собираемые PIR датчиками, представляют огромную ценность для анализа образовательного процесса. Система отправляет на школьный сервер информацию о:
9
10- **Паттернах активности учеников** - когда класс наиболее и наименее активен
11- **Эффективности уроков** - корреляция между движением и вовлеченностью
12- **Оптимизации расписания** - определение лучшего времени для разных типов занятий
13- **Безопасности** - контроль присутствия и несанкционированного доступа
14- **Энергосбережении** - статистика работы автоматического освещения
15
16**Собираемые метрики:**
17- Количество движений за урок/день
18- Периоды высокой и низкой активности
19- Время присутствия каждого ученика
20- Эффективность систем автоматизации
21- Статистика ложных срабатываний
22
23#### **🖥️ "Веб-дашборд школьной администрации"**
24
25**Административная панель для директора и завучей:**
26
27Школьная IoT платформа предоставляет руководству детальную аналитику по всем классам:
28
29**Панель "Активность по классам":**
30- Сравнение активности разных классов в реальном времени
31- Графики вовлеченности учеников по времени суток
32- Статистика посещаемости на основе датчиков движения
33- Анализ эффективности различных форм обучения
34
35**Панель "Безопасность школы":**
36- Мониторинг всех помещений в режиме реального времени
37- Система оповещений о несанкционированном доступе
38- Контроль работы систем автоматического освещения
39- Статистика энергопотребления по зданию
40
41**Педагогическая аналитика:**
42- Определение оптимального времени для проведения контрольных работ
43- Анализ влияния физической активности на успеваемость
44- Рекомендации по организации перемен и физкультминуток
45- Мониторинг соблюдения санитарно-гигиенических норм
46
47#### **📊 "Большие данные образования"**
48
49**Применение данных PIR в образовательной аналитике:**
50
51Собранные данные используются для:
52
53**Исследований в области педагогики:**
54- Изучение биоритмов учащихся и их влияния на обучение
55- Анализ эффективности различных методов преподавания
56- Исследование влияния физической среды на образовательный процесс
57
58**Оптимизации учебного процесса:**
59- Автоматическое формирование расписания с учетом активности классов
60- Рекомендации по продолжительности уроков для разных возрастов
61- Планирование ремонтов и модернизации аудиторий
62
63**Здоровьесбережения:**
64- Контроль соблюдения норм двигательной активности
65- Автоматические напоминания о необходимости проветривания
66- Мониторинг эргономики учебного пространства
67
68#### **🌐 "Интеграция с городской системой 'Умный город'"**
69
70**Школа как часть цифровой экосистемы:**
71
72Данные школьных PIR датчиков интегрируются с городскими системами:
73
74- **Транспортная система** - прогнозирование загрузки общественного транспорта
75- **Энергосети** - оптимизация электроснабжения образовательных учреждений
76- **Система безопасности** - координация с районными службами охраны
77- **Экологический мониторинг** - анализ влияния школьной активности на окружающую среду
78
79## 🎨 Творческое задание: "Умная система безопасности и комфорта" (12 минут)
80
81### **🛡️ "Создание интеллектуальной системы контроля класса"**
82
83**Техническое задание для команд:**
84
85Команды получают задание создать комплексную систему, которая не просто реагирует на движение, но анализирует поведение и адаптируется к потребностям класса.
86
87**Базовый функционал:**
88- Детекция движения с возможностью различения типов активности
89- Автоматическое управление освещением с учетом времени суток
90- Система безопасности с градацией уровней тревоги
91- Сбор и анализ статистики для оптимизации учебного процесса
92
93**Инновационные возможности:**
94- ИИ-анализ поведенческих паттернов учеников
95- Интеграция с другими системами умного дома
96- Предиктивная аналитика для предотвращения проблем
97- Адаптивное обучение алгоритмов под конкретный класс
98
99### **🎪 "Выставка умных решений"**
100
101**Демонстрация проектов:**
102
103Каждая команда представляет свою систему, демонстрируя:
104
105**Техническое совершенство:**
106- Надежность работы в различных условиях
107- Скорость реакции и точность детекции
108- Энергоэффективность решения
109- Масштабируемость для всей школы
110
111**Практическую применимость:**
112- Решение реальных проблем класса
113- Удобство использования для учителей
114- Безопасность и конфиденциальность данных
115- Экономическую целесообразность внедрения
116
117**Инновационность:**
118- Оригинальность технических решений
119- Креативность в применении PIR технологий
120- Интеграция с современными трендами IoT
121- Потенциал для дальнейшего развития
122
123## 📝 Рефлексия и закрепление (5 минут)
124
125### **🚶 "Викторина движения и безопасности"**
126
127**Интерактивное закрепление знаний:**
128
129Ученики демонстрируют понимание материала через практические действия:
130
131**Физические демонстрации:**
132- Показывают оптимальные траектории движения для PIR датчика
133- Демонстрируют зоны максимальной и минимальной чувствительности
134- Объясняют принципы работы через движение и жесты
135
136**Анализ ситуаций:**
137- Обсуждают этические аспекты мониторинга движения
138- Предлагают решения для повышения конфиденциальности
139- Анализируют баланс между безопасностью и приватностью
140
141### **💭 "Размышления о безопасности"**
142
143**Философские аспекты темы:**
144
145Ученики размышляют о роли технологий в современном мире:
146
147- "PIR датчики изменили мое понимание безопасности, потому что..."
148- "Самое важное в системах автоматизации это..."
149- "В будущем я бы применил эти технологии для..."
150- "Баланс между удобством и приватностью должен быть..."
151
152## 🏠 Домашнее задание
153
154### **🚶 "Домашний исследователь движения"**
155
156**Практические исследования:**
157
158**1. Наблюдение и анализ:**
159- Изучить системы безопасности в своем доме/подъезде
160- Найти PIR датчики в общественных местах (магазины, офисы)
161- Проанализировать эффективность автоматического освещения
162
163**2. Эксперименты с системой:**
164- Протестировать PIR датчик в различных условиях дома
165- Измерить влияние температуры на чувствительность
166- Найти оптимальное размещение для домашнего использования
167
168**3. Творческое применение:**
169- Придумать новые способы использования PIR датчиков
170- Спроектировать систему безопасности для своей комнаты
171- Создать план "умного дома" с автоматизацией
172
173### **📔 "Дневник инженера безопасности"**
📔 МОЙ ДНЕВНИК ИНЖЕНЕРА БЕЗОПАСНОСТИ - УРОК 15
🚶 ГЛАВНЫЕ ОТКРЫТИЯ:
- PIR датчик работает на основе: _______________
- Лучше всего обнаруживает движение: __________
- Мертвые зоны находятся: ___________________
- Время стабилизации нужно потому что: _______
🛡️ МОЯ СИСТЕМА БЕЗОПАСНОСТИ: Дальность обнаружения: _____ метров Время задержки выключения: _____ секунд Количество режимов охраны: _____ штук Самая полезная функция: ____________________
🏠 ДОМАШНИЕ НАБЛЮДЕНИЯ: PIR датчики которые я нашел:
Автоматическое освещение работает:
- В подъезде: ХОРОШО/ПЛОХО/НЕТ
- В магазине: ХОРОШО/ПЛОХО/НЕТ
- В офисе: ХОРОШО/ПЛОХО/НЕТ
💻 ПРОГРАММНЫЕ ДОСТИЖЕНИЯ: Сложность моих алгоритмов: ⭐⭐⭐⭐⭐ Самая трудная функция: _____________________ Что я улучшил в коде: ______________________
🔮 БУДУЩИЕ ПЛАНЫ: Где я применю PIR датчики:
Какую проблему хочу решить: _________________ Мое изобретение с PIR: _____________________
1
2### **🔬 Исследовательское задание (для увлеченных):**
3- Изучить другие типы датчиков движения (ультразвуковые, микроволновые)
4- Найти информацию о системах компьютерного зрения
5- Исследовать применение PIR в автомобильной промышленности
6
7### **🎨 Творческое задание:**
8- Нарисовать план "умной школы" с датчиками движения
9- Создать комикс "День из жизни PIR датчика"
10
11## 📊 Критерии оценивания
12
13### **"Отлично" (5):**
14- Глубоко понимает принципы работы PIR датчиков и инфракрасного излучения
15- Создает многофункциональную систему безопасности с несколькими режимами
16- Программирует адаптивные алгоритмы анализа движения
17- Реализует инновационные функции интеграции с IoT
18- Демонстрирует понимание этических аспектов мониторинга
19- Создает практически применимое решение
20
21### **"Хорошо" (4):**
22- Понимает основы работы PIR датчиков
23- Создает функциональную систему автоматического освещения и охраны
24- Программирует базовые алгоритмы детекции движения
25- Выполняет настройку и калибровку системы
26- Интегрирует систему с внешними сервисами
27
28### **"Удовлетворительно" (3):**
29- Имеет общее представление о датчиках движения
30- С помощью создает простую систему реакции на движение
31- Понимает базовые принципы систем безопасности
32- Участвует в групповой работе над проектом
33
34## 🛠️ Материалы и оборудование
35
36### **Для каждой команды (3-4 человека):**
37- ESP32 DevKit плата
38- PIR датчик движения HC-SR501
39- Светодиоды (белый, красный, зеленый)
40- Резисторы 220 Ом (3 шт)
41- Пьезобузер для звуковых сигналов
42- Макетная плата и провода
43- Мультиметр для диагностики
44
45### **Для демонстраций учителем:**
46- Инфракрасная камера (или тепловизор) для демонстрации ИК-излучения
47- Различные источники тепла для экспериментов
48- Препятствия разных материалов для тестирования проникновения ИК
49- Профессиональный PIR датчик для сравнения характеристик
50
51### **Программное обеспечение:**
52- Arduino IDE с библиотеками для работы с таймерами
53- Serial Plotter для визуализации активности датчика
54- Веб-интерфейс школьного IoT сервера
55- Приложения для анализа данных движения
56
57### **Дополнительные компоненты (для продвинутых проектов):**
58- Несколько PIR датчиков для многозонной системы
59- Реле для управления мощным освещением
60- LCD дисплей для отображения статуса системы
61- SD карта для локального хранения логов
62- Камера модуль для фото при тревоге
63- Датчик освещенности для адаптивного управления
64
65## 🔍 Методические заметки для учителя
66
67### **Подготовка к уроку:**
681. **Стабилизация датчиков:** За час до урока включить все PIR датчики для прогрева
692. **Зонирование класса:** Разметить зоны для тестирования дальности обнаружения
703. **Демонстрационные материалы:** Подготовить источники тепла и препятствия
714. **Безопасность:** Проверить отсутствие острых углов и надежность креплений
72
73### **Возможные сложности:**
74
75**Проблема:** PIR датчик не стабилизируется или дает ложные срабатывания
76**Решение:** Обеспечить 60+ секунд на стабилизацию, экранировать от сквозняков и ИК-источников
77
78**Проблема:** Учащиеся не понимают принцип работы инфракрасного излучения
79**Решение:** Больше наглядных демонстраций с тепловизором, аналогии с живой природой
80
81**Проблема:** Этические вопросы о приватности и слежке
82**Решение:** Обязательно обсудить границы применения, получение согласия, анонимизацию данных
83
84### **Безопасность:**
85- Использование только безопасных источников тепла для демонстраций
86- Контроль правильности подключения 5V питания PIR датчиков
87- Обсуждение этических аспектов использования систем мониторинга
88- Информирование о том, что данные используются только в образовательных целях
89
90### **Дифференциация обучения:**
91- **Для продвинутых:** изучение профессиональных охранных систем, машинное обучение для анализа паттернов
92- **Для начинающих:** готовые алгоритмы, простые схемы подключения
93- **Для визуалов:** тепловизионные изображения, схемы зон обнаружения
94- **Для кинестетиков:** больше движения для тестирования датчиков
95
96### **Связь с реальным миром:**
97- Системы безопасности в банках, музеях, частных домах
98- Автоматическое освещение в общественных зданиях
99- Системы подсчета посетителей в торговых центрах
100- Умные города и IoT инфраструктура
101
102### **Межпредметные связи:**
103- **Физика:** инфракрасное излучение, тепло, оптика
104- **Биология:** терморегуляция живых организмов, органы чувств змей
105- **ОБЖ:** системы безопасности, охрана жилища
106- **Обществознание:** приватность, этика слежения, права человека
107
108### **Развитие проекта:**
109- Интеграция с камерами для распознавания лиц
110- Машинное обучение для классификации типов движения
111- Создание мобильного приложения для управления
112- Интеграция с голосовыми ассистентами