Работа 2. Прибор с обратной связью
1. Задача
Прикажи мотору «крутись 3 секунды, чтобы проехать ровно метр». Он проедет — но то 90 см, то 110. Батарея чуть села, пол чуть скользкий, одно колесо чуть тормозит.
Команда «вслепую» почти никогда не даёт точный результат.
Задача работы: построить устройство, которое держит заданное значение несмотря на помехи — и доказать это графиком, а не словами «вроде работает».
Выбери одно:
| Вариант | Что держим | Чем меряем | Чем действуем |
|---|---|---|---|
| A. Точное перемещение | пройденный путь | энкодер | мотор |
| B. Стабильная скорость | обороты в секунду | энкодер | мотор (ШИМ) |
| C. Термостат | температура | термистор | нагреватель (резистор) |
| D. Слежение за светом | яркость на датчике | фоторезистор | светодиод / серво |
2. Две стратегии управления
Разомкнутое (без обратной связи): «сделай так и надейся». Просто, дёшево, хрупко.
Замкнутое (с обратной связью): «делай, смотри на результат, поправляй». Сложнее, но именно оно даёт точность.
Замкнутый контур — это три шага, которые крутятся непрерывно:
Измерь
Датчик говорит, как есть сейчас.
Сравни с целью
Ошибка равна нулю — мы там, где хотели.
Исправь
Воздействуй так, чтобы ошибка уменьшалась. И снова измерь.
3. От простого к работающему
Ступень 1. Релейное управление («вкл-выкл»)
Самое простое: ошибка положительная — включаем, отрицательная — выключаем.
if (temperature < target) {
heaterOn();
} else {
heaterOff();
}Работает. Но: система будет колебаться вокруг цели — перегрев, остывание, снова нагрев. И на самой границе начнёт быстро щёлкать.
Ступень 2. Гистерезис (лечение дребезга)
Задаём не одну границу, а две:
if (temperature < target - 1.0) heaterOn();
if (temperature > target + 1.0) heaterOff();Теперь в коридоре шириной 2 градуса вокруг цели ничего не переключается — щёлканье прекращается. Ровно так работает термостат холодильника и утюга.
Цена: точность падает до ширины «коридора». Это честный размен, и его надо уметь объяснить.
Ступень 3. Пропорциональное управление
Реагируем соразмерно ошибке: чем дальше от цели, тем сильнее воздействие.
где — ошибка, — коэффициент, который подбирается.
float error = target - measured;
int power = constrain(Kp * error, 0, 255);
analogWrite(MOTOR_PIN, power);Мотор подъезжает к цели, замедляясь. Никаких рывков.
4. Главное: доказать графиком
Утверждение «мой прибор держит температуру» ничего не стоит без данных. Доказательство выглядит так:
График «время → измеряемая величина», на котором видно:
- линию цели;
- как система выходит на цель (быстро? с проскоком?);
- что происходит при возмущении — вы намеренно мешаете: открываете дверцу, дуете на датчик, подтормаживаете колесо рукой;
- как система возвращается к цели после помехи.
Что сравниваем
Обязательный опыт: то же самое без обратной связи.
| Условие | Разомкнутое | Замкнутое |
|---|---|---|
| Без помех | ||
| С помехой | ||
| Разброс за 5 попыток |
Именно эта таблица доказывает, что обратная связь нужна. Без неё вся работа — рассказ.
5. Практика по этапам
Этап 1. Датчик и исполнитель по отдельности (2 урока)
Сначала убедись, что мотор крутится, а энкодер считает. Или что нагреватель греет, а термистор меряет. По отдельности, без всякого управления.
Готово, когда: в мониторе идут показания датчика, и ты можешь включить исполнитель командой.
Этап 2. Разомкнутый вариант (1 урок)
Сделай «вслепую»: включить на N секунд. Проведи 5 попыток, запиши разброс. Это твоя контрольная точка — с ней будешь сравнивать.
Этап 3. Замкнутый контур (3 урока)
Релейное → гистерезис → пропорциональное. На каждой ступени снимай график.
Этап 4. Испытание с возмущением (2 урока)
Мешай системе и записывай, как она справляется. Оформляй доказательство.
6. Типичные проблемы
| Симптом | Причина | Что делать |
|---|---|---|
| Система быстро щёлкает у цели | нет гистерезиса, шум датчика | добавить коридор, усреднить показания |
| Раскачивается всё сильнее | слишком велик | уменьшать, пока не успокоится |
| Ползёт к цели бесконечно | мал / трение | увеличить, добавить минимальное воздействие |
| Показания скачут | шум измерения | скользящее среднее по 5–10 замерам |
| Не доезжает чуть-чуть | мотору не хватает силы на малой ошибке | это ограничение пропорционального закона — обсудить, а не «чинить» |
7. Что сдаём
- Работающее устройство, которое держит заданное значение.
- Три графика: разомкнутое управление, замкнутое, замкнутое с возмущением.
- Таблица сравнения разброса с обратной связью и без.
- Описание настройки: как подбирал или ширину гистерезиса, что пробовал, на чём остановился и почему.
- Защита (5 минут) с демонстрацией: показать вживую, как система отрабатывает помеху.
8. Критерии оценки
| Критерий | На что смотрим |
|---|---|
| Работает | держит цель, восстанавливается после возмущения |
| Доказано | есть графики, есть сравнение с разомкнутым вариантом |
| Настройка осознанна | может объяснить, что делает коэффициент и почему выбрал это значение |
| Понимает ограничения | знает, где его регулятор не справится и почему |
| Защита | демонстрация вживую, а не только рассказ |
9. Куда это ведёт
Ты построил регулятор — узел, который сам поддерживает заданное. Точно так же работают термостат, круиз-контроль, автопилот, стабилизация квадрокоптера и управление температурой в реакторе. Отличается точность и цена ошибки, а принцип «измерь — сравни — исправь» один и тот же.
Следующий шаг, если тема зацепила, — добавить к пропорциональному члену интегральный и дифференциальный, получив классический ПИД-регулятор. Это уже уровень серьёзной автоматики, и он начинается ровно с того, что ты сегодня собрал.