Skip to main content

🐍 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 глупый светодиод”

Демонстрация проблемы:

  1. “Глупый” LED (3 мин):

    • Учитель запускает программу мигающего LED с фиксированным интервалом
    • “Этот LED мигает всегда одинаково, как робот”
    • “Он не знает, нужен ли нам свет или нет”
  2. “Умный” LED (3 мин):

    • Подключается кнопка к Pi
    • Демонстрация: кнопка включает/выключает LED
    • “Теперь LED реагирует на наши команды!”
  3. Проблемный вопрос (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 мин на пару):

  1. Название устройства (15 сек)

    • “Представляем: Умная настольная лампа v1.0”
  2. Демонстрация функций (60 сек)

    • Показать все режимы работы
    • Объяснить логику переключения
  3. Техническая “фишка” (15 сек)

    • Что было самым сложным в реализации
    • Какую проблему решает устройство

Критерии оценки зрителями:

  • 🏆 Самое стабильное устройство (работает без сбоев)
  • 🎨 Самое красивое решение (плавные переходы, хорошая логика)
  • 💡 Самая креативная функция (необычный режим работы)
  • 🔧 Лучшее техническое решение (хорошо написанный код)

🔄 SPRINT RETRO (87-90 мин): Рефлексия и синтез

Техника “Градусник прогресса”:

1🌡️ ОЦЕНИТЕ СВОЙ ПРОГРЕСС:
2❄️ Спринт #3: "Я умею включать Pi и запускать код"
3🌤️ Спринт #4: "Я умею программировать взаимодействие с реальным миром"
4🔥 Спринт #5: "Готов создавать сложные IoT-системы!"

Вопросы для обсуждения:

  1. Какая часть программирования показалась самой интересной? (1 мин)
  2. Что было неожиданно сложным? (1 мин)
  3. Какие идеи для 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. Учащиеся получают все основные навыки для создания интерактивных устройств и готовы к серьезным проектам!

Главный результат: “Я могу создавать устройства, которые реагируют на мир и изменяют его!” 🎛️💡🔧