Урок 89: Использование непрерывного или сервомотора на 360°| Курс Arduino Шаг за Шагом
Вы когда-нибудь хотели вращать двигатель в любом направлении сколько угодно долго, а не просто качать его вперёд-назад, как обычный сервопривод? Именно это предлагает непрерывный или 360-градусный сервопривод. В отличие от стандартного сервопривода, который перемещается на определённый угол (обычно от 0 до 180 градусов), непрерывный сервопривод вращается бесконечно либо по часовой стрелке, либо против часовой стрелки. Это делает его идеальным для создания небольших роботов, камерных платформ или любых проектов, требующих непрерывного управления вращением.
В этом проекте мы создадим систему управления 360-градусным сервоприводом, используя всего три кнопки. Вы сможете управлять сервоприводом, заставляя его вращаться по часовой стрелке, против часовой стрелки или останавливаться в любой момент. Это руководство проведёт вас через подключение, объяснит настраиваемые пользователем части кода и покажет живую демонстрацию работы системы.
Вот несколько практических идей для использования непрерывного сервопривода в ваших собственных проектах:
- Создайте небольшого двухколёсного робота: Используйте два непрерывных сервопривода для привода колёс, что позволит двигаться вперёд, назад и поворачивать.
- Создайте поворотно-наклонную камерную платформу: Используйте один непрерывный сервопривод для медленного бесконечного вращения камеры наблюдения или дикой природы.
- Автоматизируйте конвейерную ленту: Управляйте небольшой конвейерной системой для сортировки или выдачи предметов.
- Разработайте вращающуюся демонстрационную подставку: Покажите 3D-модель или продукт на платформе, которая вращается непрерывно.
Необходимое оборудование
- Плата Arduino (Uno, Nano и т. д.)
- Непрерывный (360-градусный) сервопривод (например, FS90R, DS04-NFC)
- 3 кнопки
- Соединительные провода
- Макетная плата
Руководство по подключению
Подключение для этого проекта простое. Сервопривод имеет три провода: обычно тёмный для земли (GND), средний (часто красный) для питания (5V) и более светлый (оранжевый, жёлтый или белый) для сигнала. Как показано в видео, сервопривод подключается к Arduino следующим образом:
- Земля сервопривода (тёмный провод): Подключите к GND Arduino.
- Питание сервопривода (средний/красный провод): Подключите к 5V Arduino.
- Сигнал сервопривода (светлый провод): Подключите к контакту 9 Arduino.
Для трёх кнопок каждая кнопка имеет две стороны. Одна сторона всех кнопок соединяется вместе, а затем подключается к GND Arduino. Другая сторона каждой кнопки подключается к отдельному цифровому контакту, как описано ниже (в видео на 03:40):
- Кнопка по часовой стрелке (CW): Подключите к контакту 2 Arduino.
- Кнопка стоп: Подключите к контакту 3 Arduino.
- Кнопка против часовой стрелки (CCW): Подключите к контакту 4 Arduino.

Объяснение кода
Код разработан так, чтобы его было легко настраивать. Самая важная часть, которую вам нужно будет отрегулировать, — это массив sc[], который содержит конкретные значения ШИМ, отправляемые на сервопривод для управления его действиями. Эти значения не универсальны и должны быть откалиброваны для вашего конкретного сервопривода (в видео на 12:23).
int sc[]={106, 58, 0};// команды сервопривода по порядку
//CCW, STOP,CW
Этот массив является основой калибровки. Значения используются в следующем порядке:
- sc[0] = 106: Это значение отправляется, чтобы заставить сервопривод вращаться против часовой стрелки.
- sc[1] = 58: Это значение "стоп". Из-за внутренней схемы точное значение, которое останавливает двигатель, варьируется. Вы можете обнаружить, что ваш сервопривод медленно вращается даже при отправке этой команды, и вам нужно будет немного отрегулировать это число, чтобы найти истинное значение "полной остановки" для вашего двигателя.
- sc[2] = 0: Это значение заставляет сервопривод вращаться по часовой стрелке на максимальной скорости.
Вы можете регулировать значения в массиве sc[], чтобы изменить скорость вращения. Например, установка sc[0] на 70 сделает вращение против часовой стрелки медленнее. Чем ближе значение к значению "стоп" (58), тем медленнее будет вращаться двигатель в этом направлении. Значения, более удалённые от 58, увеличат скорость до максимального предела.
Есть также несколько других ключевых переменных, которые вам может потребоваться изменить. servoPin установлен на 9, и это должен быть контакт с поддержкой ШИМ на вашем Arduino. Контакты кнопок определены в начале кода и могут быть изменены при необходимости.
int servoPin = 9;// этот контакт должен быть одним из тех, что с ШИМ ~
#define STOPpin 3 // контакт кнопки для СТОП
#define CWpin 2 // контакт кнопки для CW
#define CCWpin 4 // контакт кнопки для CCW
Наконец, массив scText[] содержит строки, которые выводятся в монитор последовательного порта для отладки. Вы можете изменить их, если хотите отображать другие сообщения.
Как использовать код
Загрузите предоставленный код на вашу плату Arduino. Откройте монитор последовательного порта (установите 9600 бод), чтобы видеть сообщения о состоянии. Теперь вы можете управлять сервоприводом с помощью трёх кнопок:
- Нажмите и удерживайте кнопку CW: Сервопривод начнёт вращаться по часовой стрелке. Монитор последовательного порта отобразит "CW" и отправляемое значение.
- Нажмите и удерживайте кнопку CCW: Сервопривод начнёт вращаться против часовой стрелки. Монитор последовательного порта отобразит "CCW" и отправляемое значение.
- Нажмите кнопку Стоп: Сервопривод попытается остановиться. Монитор последовательного порта отобразит "Stop".
Если ваш сервопривод не останавливается полностью при нажатии кнопки «Стоп», вам потребуется откалибровать значение sc[1] в массиве sc[]. Попробуйте немного изменить значение (например, с 58 на 54 или 52) и повторно загрузите код, пока двигатель не будет оставаться полностью неподвижным.
Живая демонстрация
В видео ведущий демонстрирует всю систему. Вы можете видеть, как сервопривод вращается в обоих направлениях в зависимости от нажатий кнопок. Также показан вывод Serial Monitor, отображающий текущее состояние («CW», «Stop» или «CCW») и конкретное значение, отправляемое на сервопривод. Это отличный инструмент для отладки и поиска идеальных значений калибровки для вашего конкретного двигателя. Демонстрация также показывает, как изменение значений в массиве sc[] напрямую влияет на скорость двигателя — от медленного движения до максимальной скорости вращения.
Заключение
Этот проект предлагает простой и эффективный способ управления сервоприводом непрерывного вращения. Понимая процесс калибровки значения «стоп», вы сможете обеспечить точное управление в своих собственных проектах робототехники и автоматизации.
Главы видео
- [00:05] Введение в сервопривод непрерывного вращения
- [02:02] Обзор аппаратной части сервопривода
- [02:40] Схема подключения и соединения
- [05:07] Объяснение кода: переменные и настройка
- [08:03] Объяснение кода: логика основного цикла
- [09:56] Функция servoCommand()
- [10:54] Живая демонстрация и вывод Serial Monitor
- [12:23] Калибровка скорости сервопривода и значений остановки
++
/*
* S05-13 Servo with 3 push buttons
* Demonstration of Controlling a Continuous Servo (360 servo)
* This code allows you to control a 360-degree servo using push buttons
*
* Modified by Ahmad Shamshiri for Robojax Robojax.com
* on Jan 17, 2019 at 22:42 in Ajax, Ontario, Canada
Watch the video instruction for this sketch: https://youtu.be/hVe4TSRV4ww
Watch Introduction to 360 Servo video with code: https://youtu.be/b_xvu6wWafA
You can get the wiring diagram from my Arduino Course at Udemy.com
Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place
visit my course now http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
Original code by BARRAGAN <http://barraganstudio.com>
*
* Code is available at http://robojax.com/learn/arduino
* 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 downloaded 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 servoPin = 9;// this pin must be one of those with PWM ~
#define STOPpin 3 // push button pin for STOP
#define CWpin 2 // push button for CW
#define CCWpin 4 // push button for CCW
int sc[]={106, 58, 0};// servo commands are in order
//CCW, STOP,CW
String scText[]={"CCW","Stop","CW"};// define texts for 3 actions
int statusText;
int CWBS, CCWBS, SBS;
//CW button status (CWBS)
//CCW button status (CCWBS)
//stop button status (SBS)
void setup() {
Serial.begin(9600);
pinMode(STOPpin,INPUT_PULLUP);// set pin for push button STOP
pinMode(CCWpin,INPUT_PULLUP);// set pin for push button CCW
pinMode(CWpin,INPUT_PULLUP);// set pin for push button CW
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
myservo.write(sc[1]);// send STOP command
statusText=1;// initial value is STOP
}
void loop() {
CCWBS = digitalRead(CCWpin);// read status of button CCW
SBS = digitalRead(STOPpin);// read status of button STOP
CWBS = digitalRead(CWpin);// read status of button CW
if(CCWBS ==LOW)
{
servoCommand(0);
}else if(SBS ==LOW)
{
servoCommand(1);
}else if(CWBS ==LOW)
{
servoCommand(2);
}
Serial.println(scText[statusText]);
delay(50);
}// loop
void servoCommand(int n)
{
statusText = n;
myservo.write(sc[n]);
Serial.print("Going to ");
Serial.print(scText[n]);
Serial.print( "(");
Serial.print(sc[n]);
Serial.println(")");
}
Вещи, которые могут вам понадобиться
-
Амазонка360 Degree Servo motor on Amazonlink.amazon
-
eBay360 Degree Servo motor on eBayebay.us
-
АлиЭкспресс360 Degree Servo motor on AliExpresss.click.aliexpress.com
-
АлиЭкспресс360 Degree Servo motor on AliExpress-2s.click.aliexpress.com
Ресурсы и ссылки
-
Внутренний
Файлы📁
Другие файлы
-
Технический паспорт мотора SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB