🐍 Python для IoT - от кнопок до датчиков
📋 Паспорт спринта
| Параметр | Значение |
|---|---|
| Предмет | Интернет вещей (элективный курс) |
| Класс | 9 класс |
| Спринт № | 4 из 36 |
| Тип занятия | Практический программистский спринт |
| Продолжительность | 90 минут |
| Формат | Интерактивное программирование с немедленной обратной связью |
🎯 Цели спринта (Sprint Goals)
Основная цель:
Освоить основы программирования GPIO на Python для чтения входных сигналов и управления выходными устройствами
Конкретные результаты спринта:
- Понимают разницу между входными (INPUT) и выходными (OUTPUT) GPIO пинами
- Программируют чтение состояния кнопок с обработкой дребезга
- Создают интерактивные программы: кнопка управляет светодиодом
- Реализуют ШИМ (PWM) для плавного управления яркостью LED
- Понимают принципы подтяжки резисторов (pull-up/pull-down)
- Создают первую полноценную IoT-программу с логикой и взаимодействием
🔄 Sprint Retrospective предыдущего спринта (0-5 мин)
Проверка домашней лаборатории:
1🏠 СТАТУС ДОМАШНИХ Pi:
2- "Поднимите руку, кто успешно подключился к Pi из дома"
3- "У кого возникли проблемы с SSH? Какие?"
4- "Кто попробовал дополнительные задачи?"
5- "Самое интересное открытие в работе с Pi дома?"
Техническая готовность:
- Быстрая проверка: все ли Pi загружаются и доступны по SSH
- Есть ли у всех доступ к GPIO компонентам
- Работают ли программы с прошлого спринта
Мостик к новой теме: “На прошлом спринте мы научились управлять LED. Сегодня научим Pi СЛУШАТЬ нас через кнопки и РЕАГИРОВАТЬ умнее!”
🕐 Sprint Timeline (90 минут)
⚡ SPRINT START (0-8 мин): “Умный vs глупый светодиод”
Демонстрация проблемы:
-
“Глупый” LED (3 мин):
- Учитель запускает программу мигающего LED с фиксированным интервалом
- “Этот LED мигает всегда одинаково, как робот”
- “Он не знает, нужен ли нам свет или нет”
-
“Умный” LED (3 мин):
- Подключается кнопка к Pi
- Демонстрация: кнопка включает/выключает LED
- “Теперь LED реагирует на наши команды!”
-
Проблемный вопрос (2 мин):
1🤔 "Чем отличается IoT-устройство от обычной электроники? 2Почему 'умность' - это взаимодействие?"
📚 THEORY BLOCK (8-25 мин): Основы взаимодействия с GPIO
Микро-блок 1 (8-13 мин): INPUT vs OUTPUT - “уши и рот” компьютера
1📤 OUTPUT (ВЫХОД):
2Компьютер → Внешний мир
3• LED (свет)
4• Мотор (движение)
5• Динамик (звук)
6• Реле (включение приборов)
7
8📥 INPUT (ВХОД):
9Внешний мир → Компьютер
10• Кнопки (нажатие)
11• Датчики (температура, свет)
12• Микрофон (звук)
13• Камера (изображение)
14
15🧠 ЛОГИКА:
16if input_changed:
17 do_something_with_output
Аналогия с человеком:
- OUTPUT = руки, рот (мы воздействуем на мир)
- INPUT = глаза, уши, кожа (мы чувствуем мир)
- GPIO пины = нервная система Pi
Микро-блок 2 (13-18 мин): Подтяжка резисторов - решение “висящих” пинов
1⚡ ПРОБЛЕМА "ВИСЯЩЕГО" ПИНА:
2Когда кнопка не нажата, пин не подключен ни к чему
3→ Пин читает случайные значения (0 или 1)
4→ Программа работает непредсказуемо
5
6🔧 РЕШЕНИЕ - ПОДТЯЖКА:
7Pull-UP: пин подтягивается к +3.3V через резистор
8• Кнопка НЕ нажата: пин читает 1 (HIGH)
9• Кнопка нажата: пин читает 0 (LOW)
10
11Pull-DOWN: пин подтягивается к земле через резистор
12• Кнопка НЕ нажата: пин читает 0 (LOW)
13• Кнопка нажата: пин читает 1 (HIGH)
14
15💡 В Pi подтяжка встроенная программно!
Микро-блок 3 (18-25 мин): ШИМ (PWM) - аналоговые значения из цифровых
1🔲 ОБЫЧНЫЙ GPIO:
2Только ВКЛ (1) или ВЫКЛ (0)
3LED либо горит на 100%, либо не горит
4
5🌊 PWM (Pulse Width Modulation):
6Быстрое включение/выключение создает иллюзию аналогового сигнала
7
8Примеры:
9• 0% скважность → LED выключен
10• 50% скважность → LED горит в полсилы
11• 100% скважность → LED горит на полную
12
13ПРИМЕНЕНИЯ:
14• Регулировка яркости LED
15• Управление скоростью моторов
16• Генерация звука
Псевдокод PWM:
1pwm_pin = setup_pwm(pin=18, frequency=1000)
2for brightness in range(0, 101):
3 pwm_pin.duty_cycle = brightness # 0-100%
4 sleep(0.05) # плавное изменение
☕ BREAK (25-30 мин): Техническая пауза
🛠️ ПРАКТИЧЕСКИЙ БЛОК (30-80 мин): Программирование взаимодействий
Этап 1: Настройка оборудования (30-40 мин)
Подключение компонентов:
1🔌 СХЕМА ПОДКЛЮЧЕНИЯ:
2LED: GPIO 18 → Резистор 330Ом → LED → GND
3Кнопка: GPIO 2 → Кнопка → GND (pull-up включен программно)
4
5⚠️ БЕЗОПАСНОСТЬ:
61. Выключить Pi перед подключением
72. Проверить полярность LED
83. Обязательно использовать резистор
94. Аккуратно вставлять провода в breadboard
Этап 2: Задание “Кнопка читает состояние” (40-50 мин)
Цель: Научиться читать состояние кнопки и выводить результат
Алгоритм программы:
1🔄 ПСЕВДОКОД:
2setup_gpio()
3button_pin = 2 (с pull-up резистором)
4
5while True:
6 button_state = read_pin(button_pin)
7 if button_state == 0: # кнопка нажата (pull-up)
8 print("Кнопка НАЖАТА!")
9 else:
10 print("Кнопка отпущена")
11 sleep(0.1) # небольшая задержка
Ожидаемый результат:
- При нажатии кнопки в терминале появляется сообщение
- Программа работает стабильно без ложных срабатываний
Этап 3: Задание “Кнопка управляет LED” (50-60 мин)
Цель: Создать интерактивную систему: кнопка включает/выключает LED
Алгоритм программы:
1🔄 ПСЕВДОКОД:
2setup_gpio()
3button_pin = 2
4led_pin = 18
5led_state = False
6
7while True:
8 if button_pressed() and not previous_button_state:
9 led_state = not led_state # переключить состояние
10 set_led(led_pin, led_state)
11 print(f"LED теперь: {'ВКЛ' if led_state else 'ВЫКЛ'}")
12
13 previous_button_state = button_pressed()
14 sleep(0.05) # защита от дребезга
Ожидаемый результат:
- Каждое нажатие кнопки переключает LED
- Нет ложных срабатываний от дребезга контактов
- Система реагирует быстро и предсказуемо
Этап 4: Задание “Плавная регулировка яркости” (60-70 мин)
Цель: Использовать ШИМ для плавного изменения яркости LED
Алгоритм программы:
1🔄 ПСЕВДОКОД:
2setup_gpio()
3setup_pwm(pin=18, frequency=1000)
4brightness = 0
5direction = 1 # 1 = ярче, -1 = тусклее
6
7while True:
8 set_pwm_duty_cycle(brightness)
9
10 brightness += direction * 2 # шаг изменения
11
12 if brightness >= 100:
13 direction = -1 # начать затемнение
14 elif brightness <= 0:
15 direction = 1 # начать осветление
16
17 sleep(0.05) # скорость изменения
Ожидаемый результат:
- LED плавно меняет яркость от 0% до 100% и обратно
- Переход выглядит естественно без рывков
- Понимание принципов PWM на практике
Этап 5: Задание “Умная лампа с кнопкой” (70-80 мин)
Цель: Объединить все навыки в полноценном IoT-устройстве
Алгоритм программы:
1🔄 ПСЕВДОКОД:
2setup_gpio()
3modes = ["ВЫКЛ", "ТУСКЛО", "ЯРКО", "МИГАНИЕ"]
4current_mode = 0
5
6while True:
7 if button_pressed():
8 current_mode = (current_mode + 1) % len(modes)
9 print(f"Режим: {modes[current_mode]}")
10 wait_for_button_release()
11
12 if current_mode == "ВЫКЛ":
13 led_off()
14 elif current_mode == "ТУСКЛО":
15 led_pwm(30) # 30% яркости
16 elif current_mode == "ЯРКО":
17 led_pwm(100) # 100% яркости
18 elif current_mode == "МИГАНИЕ":
19 led_blink(frequency=2) # 2 раза в секунду
20
21 sleep(0.1)
Ожидаемый результат:
- Кнопка переключает между 4 режимами работы
- Каждый режим работает корректно
- Система запоминает текущий режим
- Полноценное IoT-устройство готово!
🎯 DEMO TIME (80-87 мин): Презентация умных устройств
Формат: “Выставка IoT-устройств”
Структура демо (1.5 мин на пару):
-
Название устройства (15 сек)
- “Представляем: Умная настольная лампа v1.0”
-
Демонстрация функций (60 сек)
- Показать все режимы работы
- Объяснить логику переключения
-
Техническая “фишка” (15 сек)
- Что было самым сложным в реализации
- Какую проблему решает устройство
Критерии оценки зрителями:
- 🏆 Самое стабильное устройство (работает без сбоев)
- 🎨 Самое красивое решение (плавные переходы, хорошая логика)
- 💡 Самая креативная функция (необычный режим работы)
- 🔧 Лучшее техническое решение (хорошо написанный код)
🔄 SPRINT RETRO (87-90 мин): Рефлексия и синтез
Техника “Градусник прогресса”:
1🌡️ ОЦЕНИТЕ СВОЙ ПРОГРЕСС:
2❄️ Спринт #3: "Я умею включать Pi и запускать код"
3🌤️ Спринт #4: "Я умею программировать взаимодействие с реальным миром"
4🔥 Спринт #5: "Готов создавать сложные IoT-системы!"
Вопросы для обсуждения:
- Какая часть программирования показалась самой интересной? (1 мин)
- Что было неожиданно сложным? (1 мин)
- Какие идеи для IoT-устройств появились? (1 мин)
📝 Sprint Backlog (Домашнее задание)
Основное задание: “Персональный IoT-гаджет”
User Story: Как творческий разработчик, я хочу создать собственное IoT-устройство, которое решает реальную проблему в моей жизни.
Уровень 1: Функциональный гаджет (базовый)
1🎯 СОЗДАЙТЕ УСТРОЙСТВО НА ВЫБОР:
2
31. "УМНЫЙ НОЧНИК"
4 - Кнопка переключает: ВЫКЛ → ТУСКЛО → ЯРКО → АВТО-ВЫКЛ через 30 сек
5 - Дополнительно: разные цвета LED (если есть RGB)
6
72. "СИСТЕМА ОПОВЕЩЕНИЯ"
8 - Длинное нажатие: SOS сигнал (3 коротких + 3 длинных + 3 коротких)
9 - Короткое нажатие: обычное мигание
10
113. "ТАЙМЕР ПОМИДОРА" (Pomodoro Timer)
12 - Нажатие запускает 25-минутный таймер
13 - LED показывает прогресс (яркость уменьшается)
14 - В конце - мигание "время вышло"
15
164. "СЧЕТЧИК СОБЫТИЙ"
17 - Каждое нажатие увеличивает счетчик
18 - LED мигает столько раз, сколько нажатий было
19 - Долгое нажатие сбрасывает счетчик
Уровень 2: Улучшенная версия (продвинутый)
1🚀 ДОПОЛНИТЕ ВАШЕ УСТРОЙСТВО:
2
31. Добавьте вторую кнопку для дополнительных функций
42. Реализуйте сохранение состояния в файл
53. Добавьте звуковые сигналы (если есть buzzer)
64. Создайте "режим настройки" (например, изменение времени таймера)
75. Добавьте индикацию состояния батареи (симуляция)
Уровень 3: Интернет-интеграция (исследователь)
1🌐 ПОДКЛЮЧИТЕ К СЕТИ:
2
31. Отправка уведомлений на email при срабатывании
42. Веб-интерфейс для управления устройством
53. Логирование всех событий с timestamp
64. API для интеграции с другими системами
75. Мобильное приложение (Telegram бот)
Требования к проекту:
1📋 ОБЯЗАТЕЛЬНЫЕ ЭЛЕМЕНТЫ:
2✅ Минимум 1 кнопка + 1 LED
3✅ Минимум 3 различных режима работы
4✅ Обработка дребезга кнопки
5✅ Использование PWM хотя бы в одном режиме
6✅ Понятный код с комментариями
7✅ Демонстрационное видео (30-60 сек)
8
9📝 ДОКУМЕНТАЦИЯ:
10✅ Описание проблемы, которую решает устройство
11✅ Инструкция по использованию
12✅ Схема подключения компонентов
13✅ Объяснение алгоритма работы
Формат отчета:
1ПРОЕКТ: [Название вашего устройства]
2=====================================
3
4👤 АВТОР: [ваше имя]
5📅 ДАТА: [дата завершения]
6
7🎯 ПРОБЛЕМА:
8[Какую реальную проблему решает ваше устройство?]
9
10⚙️ ФУНКЦИИ:
11[Список всех режимов работы и их описание]
12
13🔌 ОБОРУДОВАНИЕ:
14[Список компонентов и схема подключения]
15
16💻 АЛГОРИТМ:
17[Краткое описание логики работы программы]
18
19🎬 ДЕМОНСТРАЦИЯ:
20[Ссылка на видео или описание тестирования]
21
22🔍 СЛОЖНОСТИ:
23[Что было трудно реализовать и как решили]
24
25🚀 РАЗВИТИЕ:
26[Какие улучшения планируете добавить]
📊 Sprint Metrics (Оценивание)
Критерии оценки практической работы:
| Критерий | Отлично (5) | Хорошо (4) | Удовлетворительно (3) |
|---|---|---|---|
| Программирование | Все задания работают, код структурирован | Основные задания работают, мелкие ошибки | Простые задания работают |
| Понимание GPIO | Объясняет INPUT/OUTPUT, PWM, подтяжку | Понимает основные концепции | Базовое понимание |
| Обработка входов | Стабильная работа с кнопками, без дребезга | Работает с небольшими проблемами | Основная функциональность есть |
| Техническое творчество | Добавляет собственные улучшения | Выполняет задания с модификациями | Следует инструкциям |
| Отладка и тестирование | Самостоятельно находит и исправляет ошибки | Решает проблемы с помощью | Нужна существенная помощь |
Формирующее оценивание:
- Code Quality: Читаемость и структура программ
- Problem Solving: Подход к решению технических проблем
- Hardware Understanding: Понимание электронных компонентов
- Creativity: Оригинальность в решениях
- Persistence: Настойчивость при отладке
Sprint Badges:
- 🎛️ GPIO Master - за успешную работу со всеми типами пинов
- 🐍 Python Programmer - за качественный и понятный код
- 🔲 PWM Expert - за освоение аналогового управления
- 🎯 Interaction Designer - за создание интуитивных интерфейсов
- 🔧 Hardware Debugger - за успешное решение технических проблем
- 💡 IoT Inventor - за творческий подход к проектам
- 🏆 Demo Star - за лучшую презентацию устройства
🎒 Sprint Resources
Технические требования:
Для каждой пары:
- Raspberry Pi 4 (настроенный с прошлого спринта)
- Breadboard (макетная плата)
- Компоненты для GPIO:
- 2-3x LED разных цветов
- 2x кнопки (тактовые переключатели)
- 5x резисторы 330 Ом (для LED)
- 2x резисторы 10 кОм (для кнопок, если нужно)
- 10x соединительные провода папа-мама
- 10x соединительные провода мама-мама
Дополнительное оборудование (опционально):
- RGB LED для продвинутых заданий
- Buzzer для звуковых сигналов
- Потенциометр для аналогового ввода
- Мультиметр для диагностики
Программное обеспечение:
1📦 PYTHON БИБЛИОТЕКИ:
2✅ RPi.GPIO (основная работа с пинами)
3✅ gpiozero (упрощенная работа с компонентами)
4✅ time (задержки и таймеры)
5✅ threading (для продвинутых задач)
Методические материалы:
- Справочник GPIO пинов Raspberry Pi
- Шпаргалка по библиотеке RPi.GPIO
- Примеры схем подключения компонентов
- Гид по отладке GPIO проблем
- Калькулятор резисторов для LED
Резервные планы:
Если компоненты не работают:
- Запасные LED, кнопки, резисторы
- Мультиметр для диагностики
- Симуляция в программе (виртуальные компоненты)
Если Pi не загружается:
- Запасные SD карты с системой
- Работа через симулятор GPIO на ПК
- Парная работа с работающими Pi
Если нет достаточно компонентов:
- Работа в группах по 3-4 человека
- Поочередное использование оборудования
- Больше времени на симуляцию и планирование
🔧 Sprint Facilitation Tips
Подготовка оборудования:
За день до спринта:
- Проверить работу всех Pi
- Протестировать GPIO компоненты
- Подготовить запасные детали
- Создать готовые схемы для демонстрации
Перед началом:
- Разложить компоненты по наборам
- Подготовить схемы подключения на доске
- Проверить освещение для работы с мелкими деталями
Управление практикумом:
Безопасность работы:
1⚠️ ПРАВИЛА РАБОТЫ С ЭЛЕКТРОНИКОЙ:
21. Всегда выключать Pi перед изменением схемы
32. Проверять полярность LED перед подключением
43. Использовать резисторы с LED (защита от сгорания)
54. Аккуратно вставлять провода в breadboard
65. Не замыкать пины питания напрямую
Поддержка отладки:
1🔍 АЛГОРИТМ ДИАГНОСТИКИ:
21. Проверить физические подключения
32. Проверить код на синтаксические ошибки
43. Добавить print() для отладки
54. Измерить напряжения мультиметром
65. Заменить подозрительные компоненты
Типичные проблемы:
Проблема: LED не загорается Диагностика: Полярность? Резистор? Напряжение на пине? Решение: Проверить схему → заменить LED → проверить код
Проблема: Кнопка срабатывает хаотично Причина: Дребезг контактов или отсутствие подтяжки Решение: Добавить программную задержку → включить pull-up
Проблема: PWM не работает плавно Причина: Неправильная частота или диапазон значений Решение: Изменить частоту PWM → проверить диапазон duty cycle
Проблема: Программа зависает Причина: Бесконечный цикл без задержек Решение: Добавить sleep() → проверить условия выхода из циклов
Мотивация и поддержка:
Для разных типов учащихся:
- Перфекционисты: “Сначала сделайте рабочую версию, потом улучшайте”
- Торопыги: “Тестируйте каждый шаг отдельно”
- Неуверенные: “Отлично! Теперь попробуйте добавить…”
- Опытные: Дополнительные вызовы и исследовательские задачи
Празднование успехов:
- Первое успешное чтение кнопки
- Первое переключение LED кнопкой
- Первый рабочий PWM
- Завершение полноценного устройства
🔗 Связь со следующими спринтами
Sprint #5 Preview: “Библиотеки gpiozero: программирование как конструктор”
Логический переход:
- “Сегодня мы писали много низкоуровневого кода”
- “Следующий раз изучим готовые библиотеки для быстрой разработки”
- “От ручного управления пинами к объектно-ориентированному программированию”
Подготовка к проекту “Умная лампа”:
1Спринт #4 → Спринт #5 → Проект "Умная лампа"
2Основы GPIO → Продвинутые библиотеки → Комплексная система
3Простые взаимодействия → Сложная логика → Завершенное устройство
4Обучение → Практика → Творчество
Развитие навыков:
- Техническая база: Уверенная работа с GPIO и электроникой
- Программистские паттерны: Обработка событий, состояния, циклы
- Системное мышление: Планирование и структурирование кода
- Творческий подход: От технической задачи к пользовательскому опыту
📈 Sprint Success Metrics
Спринт считается успешным, если:
- ✅ 90%+ учащихся создали работающие интерактивные устройства
- ✅ Понимают разницу между INPUT и OUTPUT программированием
- ✅ Успешно используют PWM для аналогового управления
- ✅ Могут отлаживать простые hardware/software проблемы
- ✅ Проявляют творчество в домашних проектах
Индикаторы технического роста:
- Самостоятельно находят и исправляют ошибки в схемах
- Понимают важность обработки дребезга и других edge cases
- Предлагают улучшения и дополнительные функции
- Связывают технические возможности с реальными применениями
- Уверенно работают с документацией библиотек
Признаки готовности к сложным проектам:
- Структурируют код в логические блоки
- Тестируют функциональность по частям
- Понимают принципы взаимодействия hardware/software
- Могут объяснить свой код другим учащимся
🚀 Этот спринт - ключевая веха в превращении из “пользователей” в “создателей” IoT. Учащиеся получают все основные навыки для создания интерактивных устройств и готовы к серьезным проектам!
Главный результат: “Я могу создавать устройства, которые реагируют на мир и изменяют его!” 🎛️💡🔧