Урок 18/31: Использование серводвигателя с Arduino — набор SunFounder для Arduino
Сервоприводы являются рабочей лошадкой countless проектов робототехники и радиоуправления, обеспечивая точное угловое управление для всего: от рулевых механизмов до роботизированных рук. Это руководство, основанное на Уроке 18 курса SunFounder Arduino Kit, проведет вас через основы использования сервопривода с Arduino. Вы узнаете, как подключить оборудование и управлять положением двигателя двумя различными методами: простым качающимся движением и положением, управляемым ручкой. Знания, которые вы здесь получите, очень практичны и могут быть применены в широком спектре проектов, включая:
- Создание роботизированной руки, которая может захватывать и перемещать объекты с точностью.
- Создание радиоуправляемой машины или лодки с сервоприводом для рулевого управления.
- Разработка солнечного трекера, который следует за солнцем для максимального сбора энергии.
- Создание панорамно-наклонной камеры для наблюдения или фотографии.
- Автоматизация управляющих поверхностей модели самолета, таких как руль направления или элероны.


Обзор оборудования
Прежде чем углубляться в код, важно понять сам сервопривод. Как показано в видео, сервопривод не вращается непрерывно, как стандартный двигатель постоянного тока. Вместо этого он поворачивается на определенный угол, обычно от 0 до 180 градусов. Это делает его идеальным для применений, требующих точного движения. В видео подчеркиваются несколько примеров: от управления радиоуправляемой машиной до управления сложными суставами роботизированной руки (в видео на 00:06).
Сервоприводы бывают разных размеров, при этом физический размер и крутящий момент определяют их цену и применение. Маленький микро-сервопривод идеально подходит для легких моделей, в то время как более крупный и мощный сервопривод необходим для более тяжелых задач, таких как управление «очень мощной или толстой машиной» (в видео на 01:59).
Большинство хобби-сервоприводов имеют три провода в стандартном разъеме. В видео объясняется продуманное конструкторское решение: средний провод всегда является проводом питания (VCC), обычно 5 В. Это функция безопасности, которая защищает устройство от неправильной полярности, если разъем подключен наоборот (в видео на 03:27). Два других провода предназначены для земли (GND) и управляющего сигнала.
Руководство по подключению
Подключение сервопривода к Arduino несложно. В видео представлена четкая демонстрация соединений (в видео на 04:48). Три контакта на разъеме сервопривода подключаются к Arduino следующим образом:
- Сигнальный провод (часто оранжевый или желтый): Подключите его к цифровому ШИМ-контакту на Arduino. В примере используется контакт 9.
- Провод питания (часто красный): Подключите его к контакту 5 В на Arduino.
- Земляной провод (часто коричневый или черный): Подключите его к одному из контактов GND на Arduino.
В видео ведущий использует перемычки типа «папа-папа» DuPont для подключения женского разъема сервопривода к контактным штырькам Arduino (в видео на 05:23).
Программа 1: Управление сервоприводом (Sweep)
Эта первая программа является классическим примером «sweep» (качание). Она предназначена для демонстрации полного диапазона движения сервопривода, перемещая его вперед и назад между 0 и 180 градусами. Это отличный способ проверить правильность подключения и увидеть сервопривод в действии. В видео демонстрируется загрузка этого кода и наблюдение за тем, как сервопривод качается вперед и назад (в видео на 09:21).
Для управления сервоприводом код сначала включает встроенную библиотеку Servo.h, которая упрощает процесс генерации необходимых управляющих сигналов. Затем вы создаете объект сервопривода и даете ему имя, например myservo. В функции setup() вы прикрепляете этот объект к определенному контакту с помощью myservo.attach(9), сообщая Arduino, что сигнальный провод сервопривода подключен к контакту 9.
Волшебство происходит в функции loop(), которая использует два цикла for для перемещения сервопривода. Первый цикл увеличивает переменную положения pos от 0 до 180, перемещая сервопривод на один градус за раз. Второй цикл делает обратное, уменьшая pos от 180 обратно до 0. Ключевая часть — это delay(15) в конце каждой итерации цикла. Эта пауза дает сервоприводу достаточно времени, чтобы физически переместиться в новое положение, прежде чем будет отправлена следующая команда. Без этой задержки сервопривод не смог бы успевать и остановился бы или начал дрожать (в видео на 12:31).
Этот пример идеально подходит для обучения, но в реальном применении вам, скорее всего, потребуется установить сервопривод на определенный угол. Как показано в видео, вы можете изменить код, заменив циклы for одной командой, например myservo.write(90), чтобы переместить сервопривод на 90 градусов и удерживать его там (в видео на 10:09).
Программа 2: Управление сервоприводом (Knob)
Эта вторая программа делает шаг вперед в управлении сервоприводом, вводя потенциометр (ручку) для обеспечения ручного управления положением сервопривода в реальном времени. Это отличный способ понять, как аналоговый вход может быть преобразован в точное физическое движение.
Эта программа развивает предыдущую, добавляя потенциометр. Потенциометр — это переменный резистор, который работает как аналоговый делитель напряжения. Когда вы поворачиваете ручку, он изменяет напряжение на своем выходном контакте. Arduino считывает это напряжение с помощью аналого-цифрового преобразователя (АЦП) на одном из своих аналоговых выводов, преобразуя его в значение от 0 до 1023.
Ключ к этой программе — функция map(). Эта функция масштабирует число из одного диапазона в другой. В данном случае она используется для преобразования сырого значения потенциометра (от 0 до 1023) в значение, подходящее для сервопривода (от 0 до 180 градусов). Код считывает значение потенциометра с помощью analogRead(potpin), масштабирует его с помощью map(val, 0, 1023, 0, 180), а затем отправляет это масштабированное значение на сервопривод с помощью myservo.write(val). Это создает прямую связь, где поворот ручки до средней точки установит сервопривод на 90 градусов и так далее.
Этот метод управления очень интуитивен и является основой для многих человеко-машинных интерфейсов — от простых пультов дистанционного управления до сложных роботизированных контроллеров.
Живая демонстрация проекта
Видео предоставляет живую демонстрацию обеих программ в действии. Для программы развертки вы можете видеть, как рычаг сервопривода плавно движется от 0 до 180 градусов и обратно. Ведущий также показывает, как изменение размера шага в цикле for (например, с 1 градуса до 20 градусов) и времени задержки меняет поведение сервопривода, делая движение быстрее, но менее плавным (на видео в 11:19).
Для программы с ручкой демонстрация показывает, как поворот потенциометра напрямую управляет положением сервопривода в реальном времени. Эта визуальная обратная связь отлично помогает понять взаимосвязь между аналоговым входом и физическим выходом.
Главы
- [00:00] Введение в сервоприводы
- [01:07] Применение сервоприводов
- [02:57] Анатомия сервопривода
- [04:48] Подключение сервопривода к Arduino
- [06:06] Изучение примера кода Sweep
- [09:21] Демонстрация программы Sweep
- [10:04] Установка пользовательского угла сервопривода
- [11:19] Изменение скорости и размера шага Sweep
- [13:15] Пример другого сервопривода
/*
Lesson 18/31: Controlling servo motor (sweep)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
Servo myservo; // create Servo object to control a servo
// twelve Servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the Servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15 ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15 ms for the servo to reach the position
}
}
/*
Lesson 18/31: Controlling servo motor (knob)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
Common Course Links
Common Course Files
Вещи, которые могут вам понадобиться
-
АмазонкаSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Амазонка
-
Амазонка
-
Амазонка
-
Амазонка
Ресурсы и ссылки
-
ДокументацияДокументация для набора 3 в 1 IoT/умный автомобиль/обучающий комплект SunFounderdocs.sunfounder.com
-
Внешний
Файлы📁
Библиотеки Arduino (zip)
-
Исходный код обучающего набора 3-в-1 Smart Car от SunFounder
3in1-kit-main-v2.zip12.80 MB