🎛️ Аналоговые сигналы и ШИМ
- Понимание различий между аналоговыми и цифровыми сигналами
- Освоение принципов работы ШИМ (PWM)
- Знание ограничений АЦП ESP32 (0-3.3В)
- Навыки подключения и программирования потенциометра
- Умение создавать плавные эффекты освещения
- Практические навыки управления аналоговыми устройствами
- Развитие понимания непрерывных процессов в дискретном мире
- Формирование навыков работы с переменными величинами
- Умение анализировать зависимости между входными и выходными сигналами
- Развитие навыков точной настройки и калибровки
- Понимание красоты плавных переходов в технических системах
- Развитие терпения при настройке чувствительных систем
- Формирование эстетического восприятия технических решений
Учитель демонстрирует два светодиода: один мигает резко (цифровой), другой плавно меняет яркость
🌅 Сравнение двух миров:
💡 ЦИФРОВОЙ СВЕТОДИОД: 💡 АНАЛОГОВЫЙ СВЕТОДИОД:
ВКЛ → ВЫКЛ → ВКЛ 🌟 → 🔅 → 💫 → ✨ → 🌟
Резкие переходы Плавные переходы
Как выключатель Как диммер
🎭 Интерактивная демонстрация “Два языка”:
- Цифровой язык: Дети показывают руками только “вверх” или “вниз”
- Аналоговый язык: Дети плавно поднимают и опускают руки на разную высоту
🎯 Интрига урока: “Сегодня мы научим ESP32 говорить на аналоговом языке и создадим настоящий закат в лампочке!”
🌟 Вызов дня: “К концу урока вы сможете управлять яркостью света поворотом ручки, как настоящий светорежиссер!”
Аналогия с лестницей:
🪜 ЦИФРОВЫЕ СИГНАЛЫ = ЛЕСТНИЦА:
📍 Ступенька 0: 0 Вольт (LOW, ВЫКЛ)
📍 Ступенька 1: 3.3 Вольта (HIGH, ВКЛ)
📍 Между ступеньками: НИЧЕГО НЕТ!
🎯 ПРИМЕРЫ В ЖИЗНИ:
💡 Выключатель света: ВКЛ или ВЫКЛ
🚪 Дверь: ОТКРЫТА или ЗАКРЫТА
🔔 Звонок: ЗВЕНИТ или МОЛЧИТ
📱 Кнопка: НАЖАТА или НЕ НАЖАТА
Аналогия с горкой:
🛝 АНАЛОГОВЫЕ СИГНАЛЫ = ГОРКА:
📈 Плавный подъем от 0В до 3.3В
📉 Любое значение между ними возможно!
🎚️ Бесконечное количество уровней
🎯 ПРИМЕРЫ В ЖИЗНИ:
🌡️ Температура: от -30° до +40° (любое значение)
🔊 Громкость: от тишины до максимума
💡 Яркость: от темноты до яркого света
🚗 Скорость: от 0 до 100 км/ч (плавно)
Эксперимент с мультиметром:
🧪 ЛАБОРАТОРИЯ АНАЛОГОВЫХ СИГНАЛОВ:
Задание 1: Измеряем напряжение батарейки при разряде
- Новая батарейка: _____ В
- Частично разряженная: _____ В
- Почти севшая: _____ В
- Вывод: Напряжение меняется ПЛАВНО!
Задание 2: Измеряем сопротивление при изгибе провода
- Прямой провод: _____ Ом
- Слегка согнутый: _____ Ом
- Сильно согнутый: _____ Ом
- Вывод: Сопротивление тоже аналоговое!
АЦП - переводчик с аналогового на цифровой:
🔄 АЦП (Аналого-Цифровой Преобразователь):
🌊 ВХОД (аналоговый): 📊 ВЫХОД (цифровой):
0.0 В → 0 (в программе)
0.8 В → 1000 (примерно)
1.6 В → 2000 (примерно)
2.4 В → 3000 (примерно)
3.3 В → 4095 (максимум)
🎯 РАЗРЕШЕНИЕ ESP32: 12 бит = 4096 уровней (0-4095)
Каждый уровень = 3.3В / 4096 = 0.0008 В = 0.8 мВ
Фокус с вращающимся пропеллером:
🚁 АНАЛОГИЯ С ПРОПЕЛЛЕРОМ:
- Медленное вращение: видим лопасти (цифровой)
- Быстрое вращение: видим "диск" (псевдо-аналоговый)
💡 ШИМ ДЛЯ СВЕТОДИОДА:
- Медленное мигание: ВКЛ-ВЫКЛ-ВКЛ-ВЫКЛ (видим мигание)
- Быстрое мигание: ВКЛ-ВЫКЛ-ВКЛ-ВЫКЛ (видим тусклый свет)
Понятие через пирог:
🥧 СКВАЖНОСТЬ = ДОЛЯ "ВКЛЮЧЕННОГО" ВРЕМЕНИ:
🟩⬜⬜⬜ 25% скважность:
- ¼ времени ВКЛ, ¾ времени ВЫКЛ
- Результат: 25% яркости
🟩🟩⬜⬜ 50% скважность:
- ½ времени ВКЛ, ½ времени ВЫКЛ
- Результат: 50% яркости
🟩🟩🟩⬜ 75% скважность:
- ¾ времени ВКЛ, ¼ времени ВЫКЛ
- Результат: 75% яркости
🟩🟩🟩🟩 100% скважность:
- Все время ВКЛ
- Результат: 100% яркости
Изучаем команду analogWrite():
// 💡 ПРОГРАММА "ПЛАВНАЯ ЯРКОСТЬ"
// Урок 8: Аналоговые сигналы и ШИМ
int ledPin = 2; // Пин для светодиода
void setup() {
Serial.begin(9600);
Serial.println("🌅 Запуск программы плавного освещения");
pinMode(ledPin, OUTPUT);
Serial.println("💡 Готов к демонстрации ШИМ!");
}
void loop() {
// 🌅 Плавное ВКЛЮЧЕНИЕ (рассвет)
Serial.println("🌅 Рассвет начинается...");
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(ledPin, brightness);
Serial.print("Яркость: ");
Serial.print(brightness);
Serial.println("/255");
delay(20); // Плавность изменения
}
delay(1000); // Пауза на максимальной яркости
// 🌇 Плавное ВЫКЛЮЧЕНИЕ (закат)
Serial.println("🌇 Закат начинается...");
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(ledPin, brightness);
Serial.print("Яркость: ");
Serial.print(brightness);
Serial.println("/255");
delay(20);
}
delay(1000); // Пауза в темноте
}
Практические эксперименты:
🧪 ЭКСПЕРИМЕНТЫ С ШИМ:
Эксперимент 1: Влияние задержки
- delay(50): медленный переход (видим ступеньки)
- delay(20): нормальный переход
- delay(5): быстрый переход (очень плавно)
Эксперимент 2: Разные уровни яркости
- analogWrite(pin, 64): 25% яркости
- analogWrite(pin, 128): 50% яркости
- analogWrite(pin, 192): 75% яркости
- analogWrite(pin, 255): 100% яркости
Эксперимент 3: Частота ШИМ
- Стандартная частота: ~1000 Гц
- Человеческий глаз не видит мигания выше 50 Гц
- ESP32 может работать до 40 МГц!
Устройство и принцип работы:
🔧 ПОТЕНЦИОМЕТР ИЗНУТРИ:
🎚️ Конструкция:
- Резистивная дорожка (например, 10 кОм)
- Подвижный контакт (ползунок)
- 3 вывода: начало, середина, конец
⚡ Принцип работы:
Поворот влево: ползунок ближе к началу → меньше сопротивления
Поворот вправо: ползунок ближе к концу → больше сопротивления
🧮 ДЕЛИТЕЛЬ НАПРЯЖЕНИЯ:
+3.3В → [Верхняя часть] → Ползунок → [Нижняя часть] → GND
Напряжение на ползунке = 3.3В × (положение / максимум)
Схема подключения:
🔗 СХЕМА ПОДКЛЮЧЕНИЯ:
Потенциометр (3 ножки):
📍 Ножка 1 (левая): → +3.3В ESP32
📍 Ножка 2 (средняя): → GPIO 34 (аналоговый вход)
📍 Ножка 3 (правая): → GND ESP32
⚠️ ВАЖНО:
- Используем только аналоговые пины (GPIO 32-39)
- Напряжение должно быть 0-3.3В (не больше!)
- Средняя ножка - это сигнальный выход
// 🎚️ ПРОГРАММА "ЧИТАЕМ ПОТЕНЦИОМЕТР"
int potPin = 34; // Аналоговый пин для потенциометра
int potValue = 0; // Переменная для хранения значения
void setup() {
Serial.begin(9600);
Serial.println("🎚️ Мониторинг потенциометра запущен");
Serial.println("Поворачивайте ручку и наблюдайте изменения!");
}
void loop() {
// 📖 Читаем значение с потенциометра (0-4095)
potValue = analogRead(potPin);
// 🧮 Преобразуем в напряжение (0-3.3В)
float voltage = potValue * (3.3 / 4095.0);
// 📊 Преобразуем в проценты (0-100%)
int percentage = map(potValue, 0, 4095, 0, 100);
// 💬 Выводим все значения
Serial.print("Сырое значение: ");
Serial.print(potValue);
Serial.print(" | Напряжение: ");
Serial.print(voltage, 2);
Serial.print("В | Поворот: ");
Serial.print(percentage);
Serial.println("%");
delay(500); // Обновляем каждые полсекунды
}
Проверка правильности подключения:
🔍 ДИАГНОСТИКА ПОТЕНЦИОМЕТРА:
✅ ПРАВИЛЬНАЯ РАБОТА:
- Крайнее левое положение: 0-50 (почти 0В)
- Среднее положение: 2000-2100 (около 1.65В)
- Крайнее правое положение: 4045-4095 (около 3.3В)
❌ ПРОБЛЕМЫ И РЕШЕНИЯ:
- Значение не меняется: проверить подключение средней ножки
- Только 0 или 4095: перепутаны крайние ножки
- Шумные значения: добавить delay() или усреднение
- Значения больше 4095: проверить напряжение питания!
Полная программа управления:
// 🎛️ АНАЛОГОВЫЙ ДИММЕР v1.0
// Управление яркостью светодиода потенциометром
// 🎯 Настройки пинов
int potPin = 34; // Потенциометр на аналоговом входе
int ledPin = 2; // Светодиод на ШИМ выходе
// 📊 Переменные для значений
int potValue = 0; // Сырое значение потенциометра (0-4095)
int ledBrightness = 0; // Яркость светодиода (0-255)
void setup() {
Serial.begin(9600);
Serial.println("🎛️ АНАЛОГОВЫЙ ДИММЕР ЗАПУЩЕН");
pinMode(ledPin, OUTPUT);
Serial.println("✅ Готов к работе!");
Serial.println("🎚️ Поворачивайте потенциометр для изменения яркости");
}
void loop() {
// 📖 Читаем положение потенциометра
potValue = analogRead(potPin);
// 🔄 Преобразуем диапазон 0-4095 в диапазон 0-255
ledBrightness = map(potValue, 0, 4095, 0, 255);
// 💡 Устанавливаем яркость светодиода
analogWrite(ledPin, ledBrightness);
// 📊 Выводим информацию для отладки
Serial.print("Потенциометр: ");
Serial.print(potValue);
Serial.print(" → Яркость: ");
Serial.print(ledBrightness);
Serial.print("/255 (");
Serial.print((ledBrightness * 100) / 255);
Serial.println("%)");
delay(100); // Небольшая задержка для стабильности
}
Понимание пропорционального преобразования:
🧮 ФУНКЦИЯ map() - ПРОПОРЦИОНАЛЬНЫЙ ПЕРЕВОДЧИК:
map(значение, мин_вход, макс_вход, мин_выход, макс_выход)
🎯 ПРИМЕРЫ:
map(2048, 0, 4095, 0, 255) = 127
map(4095, 0, 4095, 0, 255) = 255
map(0, 0, 4095, 0, 255) = 0
🗣️ НА ПРОСТОМ ЯЗЫКЕ:
"Если потенциометр повернут наполовину (2048 из 4095),
то светодиод должен гореть наполовину ярко (127 из 255)"
🧮 ФОРМУЛА:
выход = (значение - мин_вход) × (макс_выход - мин_выход) / (макс_вход - мин_вход) + мин_выход
Расширенные возможности диммера:
// 🌈 РАСШИРЕННЫЙ ДИММЕР С ЭФФЕКТАМИ
// 🎭 Эффект 1: Инверсная яркость
void inverseMode() {
potValue = analogRead(potPin);
ledBrightness = map(potValue, 0, 4095, 255, 0); // Обратная зависимость
analogWrite(ledPin, ledBrightness);
}
// 🌊 Эффект 2: Плавное следование
void smoothFollow() {
potValue = analogRead(potPin);
int targetBrightness = map(potValue, 0, 4095, 0, 255);
// Плавно приближаемся к целевой яркости
if (ledBrightness < targetBrightness) {
ledBrightness++;
} else if (ledBrightness > targetBrightness) {
ledBrightness--;
}
analogWrite(ledPin, ledBrightness);
delay(10);
}
// ⚡ Эффект 3: Стробоскоп с переменной скоростью
void stroboscope() {
potValue = analogRead(potPin);
int strobeSpeed = map(potValue, 0, 4095, 100, 1000);
digitalWrite(ledPin, HIGH);
delay(strobeSpeed);
digitalWrite(ledPin, LOW);
delay(strobeSpeed);
}
Каждая команда проводит тестирование:
🧪 ЛАБОРАТОРНАЯ РАБОТА "ТОЧНОСТЬ ДИММЕРА":
Тест 1: Линейность отклика
│ Поворот │ Ожидаемая │ Реальная │ Погрешность │
│ потенц. │ яркость │ яркость │ │
├─────────┼───────────┼──────────┼─────────────┤
│ 0% │ 0% │ ___% │ ___% │
│ 25% │ 25% │ ___% │ ___% │
│ 50% │ 50% │ ___% │ ___% │
│ 75% │ 75% │ ___% │ ___% │
│ 100% │ 100% │ ___% │ ___% │
Тест 2: Стабильность работы
- Держим потенциометр в среднем положении 30 секунд
- Записываем разброс значений: мин___ макс___
- Вычисляем стабильность: (макс-мин)/среднее = ___%
Тест 3: Время отклика
- Резко поворачиваем от 0% до 100%
- Засекаем время полного изменения яркости: ___мс
Техническое задание для команд:
🎯 ПРОЕКТ "УМНАЯ ЛАМПА v1.0":
Базовые требования:
✅ Плавная регулировка яркости потенциометром
✅ Индикация уровня яркости в Serial Monitor
✅ Защита от резких изменений (сглаживание)
Дополнительные функции (на выбор):
🌅 Режим "Рассвет" - автоматическое включение
🌙 Режим "Ночник" - минимальная яркость
⚡ Режим "Стробоскоп" - переменная частота
🌈 Режим "Дыхание" - плавная пульсация
🎵 Режим "Музыка" - реакция на звук (симуляция)
Каждая команда создает паспорт лампы:
📄 ПАСПОРТ УМНОЙ ЛАМПЫ
Команда: _________________ Дата: _________
🎯 НАЗВАНИЕ ПРОЕКТА: _____________________
⚙️ ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ:
- Диапазон регулировки: 0-100%
- Время отклика: _____ мс
- Плавность изменения: _____ шагов/сек
- Стабильность: ±____%
🎨 РЕАЛИЗОВАННЫЕ ФУНКЦИИ:
□ Базовое управление яркостью
□ Плавное сглаживание
□ Режим "Рассвет"
□ Режим "Ночник"
□ Режим "Стробоскоп"
□ Режим "Дыхание"
□ Пользовательский режим: _______________
🔧 СХЕМА ПОДКЛЮЧЕНИЯ:
[Рисунок схемы с подписанными компонентами]
💻 КЛЮЧЕВЫЕ ФУНКЦИИ КОДА:
- analogRead() для чтения потенциометра
- analogWrite() для управления яркостью
- map() для преобразования диапазонов
- Дополнительные функции: _______________
🏆 УНИКАЛЬНАЯ ОСОБЕННОСТЬ:
____________________________________
✅ ТЕСТИРОВАНИЕ:
□ Все режимы работают корректно
□ Нет резких скачков яркости
□ Потенциометр откликается по всему диапазону
□ Код работает стабильно
⭐ САМООЦЕНКА КОМАНДЫ: ⭐⭐⭐⭐⭐
Презентация проектов:
- Каждая команда демонстрирует свою лампу (3 минуты)
- Показывает все реализованные режимы
- Объясняет техническое решение
- Отвечает на вопросы жюри (других команд)
Быстрые вопросы с практическими ответами:
❓ ПОКАЖИ НА ПОТЕНЦИОМЕТРЕ:
1. Где будет 50% яркости? (поворот в среднее положение)
2. Как получить минимальную яркость? (поворот влево)
3. Сколько уровней яркости может быть в ШИМ? (покажи пальцами: 2-5-6)
4. Какое максимальное напряжение для АЦП ESP32? (покажи 3 пальца)
🎚️ НА КАКОЙ ПОЗИЦИИ ВЫ НАХОДИТЕСЬ:
┌─────────────────────────────────────┐
│ 0% 25% 50% 75% 100% │
│ │ │ │ │ │ │
│ 😕 😐 🙂 😊 🤩 │
│Ничего Чуть- Понял Все Эксперт│
│не понял чуть основы понял │
└─────────────────────────────────────┘
Поверните воображаемый потенциометр на свой уровень!
Каждый ученик называет одну аналогию:
- “ШИМ как стробоскоп”
- “Потенциометр как руль”
- “АЦП как переводчик”
- “Аналоговый сигнал как горка”
Основное задание:
-
Поиск аналоговых устройств
- Найти дома 5 устройств с плавной регулировкой (диммеры, регуляторы громкости, термостаты)
- Сфотографировать или нарисовать их
- Определить, что они регулируют и как
-
Эксперименты с кодом
- Изменить диапазон map() для разных эффектов
- Добавить свой уникальный режим работы лампы
- Попробовать управлять несколькими светодиодами
-
Дневник аналоговых сигналов
📔 МОЙ ДНЕВНИК АНАЛОГОВЫХ СИГНАЛОВ - УРОК 8
🌊 ГЛАВНЫЕ ОТКРЫТИЯ:
- Аналоговые сигналы: от ___В до ___В
- ШИМ значения: от ___ до ___
- АЦП разрешение: ___ бит = ___ уровней
🎚️ МОЙ ДИММЕР:
Как работает: _________________________
Самая интересная функция: ____________
Где можно применить: __________________
🧮 МАТЕМАТИКА ПРЕОБРАЗОВАНИЙ:
map(1024, 0, 4095, 0, 255) = ___
map(3000, 0, 4095, 100, 200) = ___
🏠 АНАЛОГОВЫЕ УСТРОЙСТВА ДОМА:
1. ________________________________
2. ________________________________
3. ________________________________
💡 ИДЕИ ДЛЯ ПРОЕКТОВ:
1. ________________________________
2. ________________________________
3. ________________________________
- Изучить различия между 8-битным (Arduino) и 12-битным (ESP32) АЦП
- Найти примеры использования ШИМ в реальных устройствах
- Исследовать влияние частоты ШИМ на работу различных устройств
- Создать схему “умного дома” с аналоговым управлением
- Нарисовать комикс “Путешествие аналогового сигнала через АЦП”
- Четко понимает различия между аналоговыми и цифровыми сигналами
- Уверенно программирует ШИМ и работает с АЦП
- Правильно подключает и калибрует потенциометр
- Создает функциональную умную лампу с дополнительными возможностями
- Может объяснить принцип работы функции map()
- Демонстрирует творческий подход к созданию эффектов
- Понимает основы аналоговых сигналов и ШИМ
- Собирает схему по инструкции и модифицирует код
- Создает работающий базовый диммер
- Понимает назначение функции map()
- Участвует в творческих заданиях
- Имеет общее представление об аналоговых сигналах
- С помощью подключает потенциометр
- Использует готовые примеры кода
- Участвует в групповой работе
- ESP32 DevKit плата
- Поворотный потенциометр 10 кОм
- Светодиод любого цвета
- Резистор 220 Ом для светодиода
- Макетная плата
- Провода для соединений
- Мультиметр для измерений
- Осциллограф для показа ШИМ сигналов
- Различные потенциометры (линейные, логарифмические)
- Светодиодная лента для эффектных демонстраций
- Функциональный генератор для сравнения сигналов
- RGB светодиод для продвинутых экспериментов
- Фоторезистор для демонстрации других аналоговых датчиков
- Пьезобузер для звуковых эффектов
- Конденсаторы для сглаживания сигналов
- Наглядность различий - четкое разделение цифрового и аналогового мира
- Безопасность АЦП - постоянное напоминание об ограничении 3.3В
- Практическое применение - связь с реальными устройствами
- Математическое понимание - объяснение функции map() через пропорции
Проблема: Путаница между разрешением АЦП (4095) и ШИМ (255) Решение: Постоянное использование функции map(), создание сравнительной таблицы
Проблема: Нестабильные показания потенциометра Решение: Объяснение необходимости усреднения, добавление delay()
Проблема: Сложность понимания ШИМ Решение: Физические демонстрации с медленным ШИМ, аналогии с пропеллером
Для продвинутых учеников:
- Изучение разных типов потенциометров (линейный/логарифмический)
- Создание более сложных алгоритмов сглаживания
- Работа с несколькими аналоговыми входами
Для начинающих:
- Упрощенная версия без дополнительных эффектов
- Больше времени на понимание базовых концепций
- Готовые шаблоны кода для модификации
- Математика: пропорции, проценты, функции
- Физика: электрические цепи, делители напряжения
- Искусство: эстетика освещения, цветовые эффекты
- Биология: восприятие света человеческим глазом
- Системы освещения в умном доме
- Регуляторы скорости электродвигателей
- Аудиооборудование и микшерные пульты
- Климатические системы с плавной регулировкой