🎛️ Управление и регулирование
Теория управления для роботов
Вы командуете: “Поверни на 90°”. Мотор крутится… но как узнать, что он повернул именно на 90°? Что если нагрузка больше? Что если батарея села?
Теория управления решает эту проблему: робот измеряет результат и корректирует свои действия.
Что вы узнаете
Почему робот без датчиков — это “слепой” робот. Как измерить результат и использовать его для коррекции.
Для кого: 5-7 класс и старше
Главный инструмент управления в робототехнике. Как настроить, чтобы робот не раскачивался и быстро достигал цели.
Для кого: 7-9 класс и старше
Почему иногда робот начинает “вибрировать” или раскачиваться всё сильнее. Как избежать нестабильности.
Для кого: 9-11 класс
Главная идея
БЕЗ обратной связи:
[Команда: 90°] → [Мотор] → [???]
Никто не проверяет!
С обратной связью:
[Команда: 90°] → [Сравнение] → [Регулятор] → [Мотор] → [Энкодер]
↑ ↓ ↓
└──────── [Ошибка] ←────────────────────────────────┘
"Сейчас 85°, нужно ещё 5°"
Аналогия: душ с регулировкой температуры
Без обратной связи:
- Открыли кран на “тёплую” позицию
- Вода может быть холодной (давление упало) или горячей (кто-то смыл унитаз)
- Вы этого не знаете, пока не зайдёте в душ
С обратной связью:
- Открыли кран
- Потрогали воду — холодная!
- Добавили горячую
- Потрогали — горячая!
- Убавили горячую
- Потрогали — в самый раз! ✓
Вы — PID-регулятор! Вы измеряете (рука), сравниваете с желаемым (комфортная температура) и корректируете (кран).
Где это используется?
| Система | Что регулируется | Датчик |
|---|---|---|
| Робот по линии | Положение над линией | ИК-датчики |
| Квадрокоптер | Углы наклона | Гироскоп |
| Манипулятор | Угол поворота | Энкодер |
| 3D-принтер | Позиция сопла | Концевики + шаговый мотор |
| Термостат | Температура | Термодатчик |
| Круиз-контроль | Скорость | Спидометр |
Быстрый старт: простейший регулятор
// Пропорциональный регулятор (только P)
int target = 100; // Целевое значение (например, расстояние)
void loop() {
int current = analogRead(SENSOR_PIN); // Текущее значение
int error = target - current; // Ошибка
int output = error * 2; // Управляющее воздействие (Kp = 2)
motor.write(output);
}
Это уже работает! Но для точного управления нужен полноценный PID — читайте дальше.
