Arduino для начинающих. Урок 4. Управление сервоприводом
Продолжаем серию уроков “Arduino для начинающих”. Сегодня собираем модель с сервоприводом — это также одна из базовых схем. Сервоприводы используются в робототехнике для управления движениями робота. В посте помимо видео-инструкции листинг программы и схема подключения.
Сервопривод — это мотор, положением вала которого мы можем управлять. От обычного мотора он отличается тем, что ему можно точно в градусах задать положение, в которое встанет вал. Сервоприводы используются для моделирования различных механических движений роботов.
Видео-инструкция сборки модели:
Для сборки модели с сервоприводом нам потребуется:
- плата Arduino
- 3 провода “папа-папа”
- сервопривод
- программа Arduino IDE, которую можно скачать с сайта Arduino.
![Arduino с сервоприводом сборка. детали](http://edurobots.org/wp-content/uploads/2014/04/arduino-servoprivod-600x300.jpg)
Компоненты для сборки модели Arduino с сервоприводом
Схема подключения модели Arduino с сервоприводом:
![схема_bb](http://edurobots.org/wp-content/uploads/2014/04/схема_bb1.jpg)
Схема подключения сервопривода на Arduino
Для работы этой модели подойдет следующая программа (программу вы можете просто скопировать в Arduino IDE):
#include <Servo.h> //используем библиотеку для работы с сервоприводом
Servo servo; //объявляем переменную servo типа Servo
void setup() //процедура setup
{
servo.attach(10); //привязываем привод к порту 10
}
void loop() //процедура loop
{
servo.write(0); //ставим вал под 0
delay(2000); //ждем 2 секунды
servo.write(180); //ставим вал под 180
delay(2000); //ждем 2 секунды
}
Последние четыре команды программы задают угол поворота вала сервопривода и время ожидания (в миллисекундах) до следующего поворота. Эти цифры можно поменять — в видео во втором варианте мы поставили 0-1000-90-1000, что означает поворот на 90 градусов с ожиданием в 1 секунду (1000 миллисекунд), возврат обратно и т.д. (процедура loop повторяется циклично).
Кроме того, в этом уроке мы впервые используем библиотеки.
Библиотека — это набор дополнительных команд, который позволяет вводить программу в упрощенном формате. Здесь мы используем библиотеку для работы с сервоприводами Servo.h.
Так выглядит собранная модель Arduino с сервоприводом:
![Arduino сервопривод подключение Arduino сервопривод подключение](http://edurobots.org/wp-content/uploads/2014/04/arduino-servo-done-600x435.jpg)
Собранная модель Arduino с сервоприводом
Продолжение следует!
Смотрите также:
Учебный курс «Arduino для начинающих»: главная страница.
Посты по урокам:
- Первый урок: Светодиод
- Второй урок: Кнопка
- Третий урок: Потенциометр
- Четвертый урок: Сервопривод
- Пятый урок: Трехцветный светодиод
- Шестой урок: Пьезоэлемент
- Седьмой урок: Фоторезистор
- Восьмой урок: Датчика движения (PIR) и E-mail
- Девятый урок: Подключение датчика температуры и влажности DHT11 или DHT22
Все посты сайта «Занимательная робототехника» по тегу Arduino.
Наш YouTube канал, где публикуются видео-уроки.
Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.
Автор: Александр Гагарин.
Виктор
16.01.2015
При съёмке видео отодвиньте человека его от стены. Лучше будет.
Алексей
21.01.2015
на видео ошибка в озвучивании цветов сервопривода: Красный для «земли»….. Красный для питания
Занимательная робототехника
02.03.2015
Пример использования схемы: проект «О’кей Google, Сезам, открой дверь». Реализовано открывание двери с помощью голосовой команды. Чтобы попасть в дом, нужно просто сказать: «Сезам, откройся». Описание здесь.
Александр
20.11.2015
Есть переделанный сервопривод для вращения по кругу на 360 градусов, как подредактировать скетч чтобы через каждые 90 градусов останавливался на 3 сек. Пока что он крутится без остановки.
#include
Servo myservo;
void setup()
{
// устанавливаем пин как вывод управления сервой
myservo.attach(10);
}
void loop()
{
// устанавливаем угол 0°
myservo.write(0);
delay(3000);
// устанавливаем угол 90°
myservo.write(90);
delay(3000);
// устанавливаем угол 180°
myservo.write(180);
delay(3000);
// устанавливаем угол 270°
myservo.write(270);
delay(3000);
}
Slaveg
17.08.2017
Похоже забыл подключить соурц файл с кодом для севопривода:
#include //используем библиотеку для работы с сервоприводом
Хотя он не должен компилироваться в таком случае
Владимир
06.12.2015
Как управлять сервой arduino которая подключена к роутеру на openwrt через веб-морду?
Павел
13.12.2015
очень хорошие уроки. лучше стандартных. все просто . и как введение для новичка не знакомого с програмированием- всамый раз.я даже некоторые вещи сам без помощи уже могу делать
Даниил
12.01.2016
Помогите пожалуйста с программой(
Есть 3 сервопривода, запитанных от отдельного источника питания, нужно чтобы при нажатии одной кнопки сработал сперва один серопривод, а потом сразу же другой, при повторном нажатии первый сервопривод остаётся на месте а второй и третий двигаются ( по градусам сам расставлю), а при нажатиина вторую кнопку сервоприводы возвращались в своё изначальное положение.
Виталий
18.01.2016
Небольшая доработка скетча под управление двумя сервами. Вторую серву подключаем к 8му порту.
#include //используем библиотеку для работы с сервоприводом
Servo servo; //объявляем переменную servo типа Servo
Servo servo1; //объявляем переменную servo типа Servo1
void setup() //процедура setup
{
servo.attach(10); //привязываем привод 1 к порту 10
servo1.attach(8); //привязываем привод 2 к порту 8
}
void loop() //процедура loop
{
servo.write(0); //ставим вал под 0
servo1.write(0); //ставим вал под 0
delay(2000); //ждем 2 секунды
servo.write(30); //ставим вал под 30
servo1.write(180); //ставим вал под 180
delay(2000); //ждем 2 секунды
servo.write(60); //ставим вал под 60
servo1.write(0); //ставим вал под 0
delay(2000); //ждем 2 секунды
servo.write(90); //ставим вал под 90
servo1.write(180); //ставим вал под 180
delay(2000); //ждем 2 секунды
servo.write(120); //ставим вал под 120
servo1.write(0); //ставим вал под 0
delay(2000); //ждем 2 секунды
servo.write(150); //ставим вал под 150
servo1.write(180); //ставим вал под 180
delay(2000); //ждем 2 секунды
servo.write(180); //ставим вал под 180
servo1.write(0); //ставим вал под 0
delay(2000); //ждем 2 секунды
servo.write(90); //ставим вал под 90
servo1.write(90); //ставим вал под 90
delay(2000); //ждем 2 секунды
}
Ярослав
30.01.2018
int n = 0;
servo.write(n+30); //ставим вал под 0
n = 0;
servo1.write(n+180); //ставим вал под 0
n = 0;
delay(2000); //ждем 2 секунды
данил
18.02.2016
что делать сильно грееься издает звук но не крутится
dylka
09.04.2016
Скажите, а как выбрать сторону вращения сервопривода (по часовой или против). Спасибо!
Cator
02.05.2016
Вы задаете угол. Именно поэтому в качестве начального положения для примера лучше задавать 90. Предположим после этой команды серва повернет вправо. Тогда вы можете продолжить поворот вправо задав угол 180 или повернуть влево задав угол 0.
Lukeriya
09.05.2016
Нужна помощь с кодом! SOS
Здраствуйте!
Необходимо, чтобы система работала: два сервопривода, лента из светодиодов с силовым ключом, фоторезистор, Ардуино уно. Нужно чтобы работа светодиодов и сервоприводов зависела от фоторезистора (в темноте ничего не работает, при попадании минимального света на фоторезистор и светодиоды, и сервоприводы начинают одновременно работать). Сервоприводы должны поворачиваться с 0 на 180 с делэем в 1-2сек, светодиоды просто загораются на максимальную мощность (всё снова перестает работать, когда становится темно). Каждый элемент подпитан отдельной батарейкой ( Ардуино — 9v, светодиоды — 6v, сервоприводы — 6v).
Написан код, но система не работает так, как нужно, срабатывают только светодиоды.
int led = 12; //переменная с номером пина светодиода
int ldr = 0; //и фоторезистора
#include
Servo myservo, myservo2;
void setup()
{
pinMode(led, OUTPUT);
myservo.attach (7);
myservo.attach (8);
}
void loop()
{
if (analogRead(ldr) < 100) digitalWrite(led, HIGH);
else digitalWrite(led, LOW); //иначе выключаем
if (analogRead(ldr) < 100) myservo.write(180), myservo2.write(180);
else myservo.write(0), myservo2.write(0);
}
Виталий
15.05.2016
Добрый день. сервопривод не вращается. может он не работающий? как проверить? провода других цветов. средний красный, с одной стороны коричневый (подозреваю, аналог черного) с другой оранжевый (аналог желтого). пробовал менять провода местами крайние. тогда плата не включается.
Denis
16.05.2016
Кинь фото и модель сервопривода
Vitaliy
19.05.2016
Tower Pro
Micro Servo 9g
SG 90
не вижу где и как можно вложить файл :(
а так один в один как на фотке выше синенький
Denis
19.05.2016
Тогда проверяем, чтобы точно было подключение:
коричневый — земля
красный — 5в
желтый — 10 пин.
код:
#include //используем библиотеку для работы с сервоприводом
Servo servo; //объявляем переменную servo типа Servo
void setup() //процедура setup
{
servo.attach(10); //привязываем привод к порту 10
}
void loop() //процедура loop
{
servo.write(0); //ставим вал под 0
delay(2000); //ждем 2 секунды
servo.write(180); //ставим вал под 180
delay(2000); //ждем 2 секунды
}
должен ходить по крайним положениям.
если не работает, обрати внимание на ардуину, не перезагружается ли она.
Александр
01.08.2016
Правильно ли я объединил уроки с патенциометром и сервоприводов?
#include // используем библиотеку
#define p_X 0 // пин Х подключен к А0
Servo S; // объявляем переменную S
int X; // Объявляем переменную X
void setup ( ) //настройки
{
Serial.begin(9600); // скорость обмена данными
S.attach (10); // привязываем привод к 10
}
void loop( ) // основная программа
{
X = analogRead(p_X) / 4; //считываем данные
S.write (X); // ставим вал под значение Х
delay(25); // задержка 25 мс
}
Сергей
01.08.2016
Программа в целом верна. Но в строке
«X = analogRead(p_X) / 4; //считываем данные»
можно делить не на 4, а умножать на 180 и делить на 1024
т.е. «X = analogRead(p_X) *180/ 1024; //считываем данные».
т.к. у сервопривода диапазон значений до 180
всем привет!
22.09.2016
всем привет!подскажите обязательно ли писатьSerial.begin(9600); // скорость обмена данными .эта команда не подразумевается сама собой?
Гена Козак
29.08.2016
Молодец, парень!
Юрий
11.12.2016
Добрый день!
Можно ли подключить 2 сервопривода (слабонагруженных) непосредственно на плату arduino, не используя внешних источников питания? Просто в землю и 5V вставлять по 2 провода?
Александр
25.12.2016
Читайте пост Виталия от 18.01.2016
Читатель
16.02.2017
Научите ребенка правильно выражаться. Что означает «угол наклона вала»?
И на видео мало что понятно!
Вова
17.03.2017
А сколько серво приводов можно подключить к одной плате? допустим мне нужно три.
nikita
23.03.2017
В uno только два разъема питаня +5В, знач ток два серва доступны для подключения, для подключения трех, используй доску расширения
Николая
24.04.2017
Молодец парень!
Вячеслав
01.01.2018
Что делать, если он при любой постановке от 0 до 15 градусов он крутится не переставая все время delay?
Семён
06.01.2018
Доброго времени суток. Нужна помощь: как привязать флажок к кнопке управления сервоприводом, или иной способ чередования команд для сервопривода с одной кнопки
Борис
18.01.2018
Как сделать, чтобы серво выходил на заданный угол и возвращался не через определенное время, а только по команде? Одна команда (один сигнал) встал допустим на угол 90 и в этом положении стоит, пока не поступит другая команда (сигнал) — вернулся на исходную. Реализация в автомобиль (выезжающая камера заднего хода), включил заднюю передачу — серво выдвинул камеру, выключил ЗХ — серво вернул камеру обратно.
SIM
09.10.2018
Всем привет. Подскажите пожалуйста какие параметры импульса у сервы MG995. Она или крутит до бесконечности или до 180 градусов. Мне нужно на 90. Дайте пожалуйста у кого есть скетч. Все перепробовал, ничего не получается, замучился. 5 разных серв и все одно и тоже. Минус Ардуинки и сервы соединен. 9 пин управления. Скетчи стандартные с интернета и библиотека серво.н. Там все работает. А у меня ничего не получается.
Евгений
17.12.2018
При установке servo.write(0); вал начинает вращаться, пока не закончится время таймера. Начинает устанавливаться в фиксированное положение примерно с 7 градусов. Причем устанавливается в начальный угол немного в разные положения в зависимости от конечного.
Александр
03.03.2019
Подскажите новичку — собрал схему с серврприводом — все работает.
Но после выполнения команды servo.write(0) мотор вибрирует — то есть крутится с меньшей скоростью и в обратном направлении.
Затем выполняется команда servo.write(180) — нормально выполняется.
Затем все повторяется.
Почему мотор не стоит на месте после выполнения команды servo.write(0)?
Евгений
17.03.2019
Не работает, после загрузки скетча появляется звук подключения-отключения нового устройства в windows и постоянно срабатывает, сервопривод вроде шумит но не крутится в чем может быть проблема?
Олег
02.03.2020
Всем привет, задумал проект, заказал плату и сервопривод. Смысл в чем что бы привод поворачивался в одну сторону, потом вернулся назад через несколько секунд и далее повтор через 24 часа. Посмотрел азы программирования и понял, что это совсем не мое)) Прошу оказать содействие в написании «скетча».
И вообще на сколько это реально или необходимо еще приобрести реле времени.
Заранее благодарен.
Nick
31.03.2020
Да. Реле времени обязательно, Иначе возможен разброс в пределах получаса примерно. Да и после временного отключения энергии время срабатывания сбрасываться может
Александр
09.07.2020
Помогите написать такой же скетч только вместо delay использовать milles. Вроде делаю, с диодами рабоатет millis а с сервой и milles ни как.
Дарья
13.10.2020
добрый день,подскажите пожалуйста,как в программе указать работу от кнопки,которая будет менять угол.Заранее спасибо)