Проект 4: Управление сервоприводом
Введение
Сервопривод — мотор с точным позиционированием от 0 до 180 градусов. В роботе Фобо он поворачивает ультразвуковой датчик для сканирования окружения.
Программа: Тест сервопривода
Робот собран в Проекте 1, сервопривод SG92R подключен к D9.
1// Подключаем библиотеку для работы с сервоприводом
2#include <Servo.h>
3
4// Создаем объект для управления сервоприводом
5Servo myServo;
6
7// Указываем, к какому пину подключен сервопривод
8// На Sensor Shield сервопривод подключен к D9
9const int servoPin = 9;
10
11void setup() {
12 // Подключаем сервопривод к пину 9 (D9 на Sensor Shield)
13 myServo.attach(servoPin);
14
15 // Запускаем монитор порта для вывода информации
16 Serial.begin(9600);
17 Serial.println("=== Тест сервопривода ===");
18 Serial.println("Сервопривод начинает движение...");
19}
20
21void loop() {
22 // Поворачиваем сервопривод от 0 до 180 градусов
23 Serial.println("Поворот вправо (0 -> 180):");
24 for(int angle = 0; angle <= 180; angle += 10) {
25 myServo.write(angle); // Устанавливаем угол
26 Serial.print(" Угол: ");
27 Serial.print(angle);
28 Serial.println("°");
29 delay(100); // Небольшая задержка для плавного движения
30 }
31
32 delay(1000); // Пауза 1 секунда
33
34 // Поворачиваем сервопривод обратно (от 180 до 0 градусов)
35 Serial.println("Поворот влево (180 -> 0):");
36 for(int angle = 180; angle >= 0; angle -= 10) {
37 myServo.write(angle); // Устанавливаем угол
38 Serial.print(" Угол: ");
39 Serial.print(angle);
40 Serial.println("°");
41 delay(100);
42 }
43
44 delay(1000); // Пауза 1 секунда перед повтором
45}
Ключевые команды:
#include <Servo.h>— подключает библиотеку (встроена в Arduino IDE)myServo.attach(9)— подключает сервопривод к пину D9myServo.write(angle)— поворачивает на угол 0-180°
Загрузка и тест
Загрузите код (без батарей!)
Откройте Serial Monitor (9600 baud)
Сервопривод плавно поворачивается 0→180→0 градусов, цикл повторяется
Эксперименты
1. Скорость: Измените delay(100) на 50 (быстрее) или 200 (медленнее)
2. Диапазон: Вместо 0-180, попробуйте 45-135 градусов
3. Управление с клавиатуры (калибровка центра):
Этот эксперимент поможет найти точный центр вашего сервопривода. Не всегда 90° = центр! У некоторых серво центр может быть 85°, 95° или другой угол.
Почему это важно: В Проектах 6-7 датчик должен смотреть строго вперёд. Если 90° не центр, робот будет смотреть немного в сторону.
Как откалибровать:
Загрузите код ниже
Попробуйте углы: 85, 90, 95, 100
Найдите угол, при котором датчик смотрит строго вперёд (параллельно роботу)
Запишите этот угол — он понадобится в Проектах 6-7!
1#include <Servo.h>
2
3Servo myServo;
4const int servoPin = 9; // D9 на Sensor Shield
5
6void setup() {
7 myServo.attach(servoPin);
8 Serial.begin(9600);
9 Serial.println("=== Управление сервоприводом ===");
10 Serial.println("Введите угол от 0 до 180 и нажмите Enter:");
11}
12
13void loop() {
14 // Проверяем, есть ли данные в мониторе порта
15 if (Serial.available() > 0) {
16 // Читаем введенное число
17 int angle = Serial.parseInt();
18
19 // ВАЖНО: Очищаем буфер от символа новой строки
20 while (Serial.available() > 0) {
21 Serial.read();
22 }
23
24 // Проверяем, что угол в допустимых пределах
25 if (angle >= 0 && angle <= 180) {
26 myServo.write(angle);
27 Serial.print("✓ Сервопривод повернут на ");
28 Serial.print(angle);
29 Serial.println("°");
30 } else {
31 Serial.println("✗ Ошибка! Введите угол от 0 до 180");
32 }
33 }
34}
Введите угол 0-180 в Serial Monitor, нажмите Enter.
Примечание
Пример калибровки: Если вы нашли, что центр = 95°, то в Проектах 6-7 используйте:
const int SERVO_CENTER = 95; // Вместо 90
headServo.write(SERVO_CENTER); // Датчик смотрит прямо
Поиск неисправностей
Сервопривод дергается/гудит: Недостаточно тока от USB — это нормально. Питание от батарей (в следующих проектах) решает проблему.
Не двигается: Проверьте подключение G-V-S к разъему D9.
Поворот не 180°: Некоторые сервоприводы имеют диапазон 160-170° — это нормально.
Применение в роботе Фобо
Сервопривод поворачивает ультразвуковой датчик RCWL-9610A для сканирования окружения:
0° — смотрит влево
90° (или ваш откалиброванный угол) — смотрит прямо вперёд
180° — смотрит направо
ВАЖНО: Обязательно откалибруйте центр (эксперимент 3) перед Проектами 6-7! Если датчик смотрит не прямо, робот будет двигаться неправильно.
Используется в Проектах 6-7 (следование за рукой, объезд препятствий).
Заключение
🎉 Вы научились управлять сервоприводом!
Что дальше: Проект 5 (ультразвуковой датчик RCWL-9610A), Проект 6 (следование за рукой), Проект 7 (объезд препятствий).