Проект 4: Управление сервоприводом

Введение

Servo SG92R

Сервопривод — мотор с точным позиционированием от 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) — подключает сервопривод к пину D9

  • myServo.write(angle) — поворачивает на угол 0-180°

Загрузка и тест

  1. Загрузите код (без батарей!)

  2. Откройте Serial Monitor (9600 baud)

  3. Сервопривод плавно поворачивается 0→180→0 градусов, цикл повторяется

Эксперименты

1. Скорость: Измените delay(100) на 50 (быстрее) или 200 (медленнее)

2. Диапазон: Вместо 0-180, попробуйте 45-135 градусов

3. Управление с клавиатуры (калибровка центра):

Этот эксперимент поможет найти точный центр вашего сервопривода. Не всегда 90° = центр! У некоторых серво центр может быть 85°, 95° или другой угол.

Почему это важно: В Проектах 6-7 датчик должен смотреть строго вперёд. Если 90° не центр, робот будет смотреть немного в сторону.

Как откалибровать:

  1. Загрузите код ниже

  2. Попробуйте углы: 85, 90, 95, 100

  3. Найдите угол, при котором датчик смотрит строго вперёд (параллельно роботу)

  4. Запишите этот угол — он понадобится в Проектах 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 (объезд препятствий).