Arduino для начинающих. Урок 4. Управление сервоприводом

Share Button
Сервопривод на ардуино

Сервопривод

Продолжаем серию уроков “Arduino для начинающих”Сегодня собираем модель с сервоприводом — это также одна из базовых схем. Сервоприводы используются в робототехнике для управления движениями робота. В посте помимо видео-инструкции листинг программы и схема подключения.

Сервопривод — это мотор, положением вала которого мы можем управлять. От обычного мотора он отличается тем, что ему можно точно в градусах задать положение, в которое встанет вал. Сервоприводы используются для моделирования различных механических движений роботов.

Видео-инструкция сборки модели:

Для сборки модели с сервоприводом нам потребуется:

Arduino с сервоприводом сборка. детали

Компоненты для сборки модели Arduino с сервоприводом

Схема подключения модели Arduino с сервоприводом:

схема_bb

Схема подключения сервопривода на 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 с сервоприводом

Продолжение следует!

Смотрите также:

Учебный курс «Arduino для начинающих»: главная страница.

Посты по урокам:

  1. Первый урок: Светодиод
  2. Второй урок: Кнопка
  3. Третий урок: Потенциометр
  4. Четвертый урок: Сервопривод
  5. Пятый урок: Трехцветный светодиод
  6. Шестой урок: Пьезоэлемент
  7. Седьмой урок: Фоторезистор
  8. Восьмой урок: Датчика движения (PIR) и E-mail
  9. Девятый урок: Подключение датчика температуры и влажности DHT11 или DHT22

Все посты сайта «Занимательная робототехника» по тегу Arduino.

Наш YouTube канал, где публикуются видео-уроки.

Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.

Автор: Александр Гагарин.

Share Button

39 комментариев к статье “Arduino для начинающих. Урок 4. Управление сервоприводом”

  1. Виктор

    16.01.2015

    При съёмке видео отодвиньте человека его от стены. Лучше будет.

    Ответить на этот комментарий
  2. Алексей

    21.01.2015

    на видео ошибка в озвучивании цветов сервопривода: Красный для «земли»….. Красный для питания

    Ответить на этот комментарий
  3. Занимательная робототехника

    02.03.2015

    Пример использования схемы: проект «О’кей Google, Сезам, открой дверь». Реализовано открывание двери с помощью голосовой команды. Чтобы попасть в дом, нужно просто сказать: «Сезам, откройся». Описание здесь.

    Ответить на этот комментарий
  4. Александр

    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 //используем библиотеку для работы с сервоприводом

      Хотя он не должен компилироваться в таком случае

      Ответить на этот комментарий
  5. Владимир

    06.12.2015

    Как управлять сервой arduino которая подключена к роутеру на openwrt через веб-морду?

    Ответить на этот комментарий
  6. Павел

    13.12.2015

    очень хорошие уроки. лучше стандартных. все просто . и как введение для новичка не знакомого с програмированием- всамый раз.я даже некоторые вещи сам без помощи уже могу делать

    Ответить на этот комментарий
  7. Даниил

    12.01.2016

    Помогите пожалуйста с программой(
    Есть 3 сервопривода, запитанных от отдельного источника питания, нужно чтобы при нажатии одной кнопки сработал сперва один серопривод, а потом сразу же другой, при повторном нажатии первый сервопривод остаётся на месте а второй и третий двигаются ( по градусам сам расставлю), а при нажатиина вторую кнопку сервоприводы возвращались в своё изначальное положение.

    Ответить на этот комментарий
  8. Виталий

    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 секунды

    }

    Ответить на этот комментарий
  9. данил

    18.02.2016

    что делать сильно грееься издает звук но не крутится

    Ответить на этот комментарий
  10. dylka

    09.04.2016

    Скажите, а как выбрать сторону вращения сервопривода (по часовой или против). Спасибо!

    Ответить на этот комментарий
    • Cator

      02.05.2016

      Вы задаете угол. Именно поэтому в качестве начального положения для примера лучше задавать 90. Предположим после этой команды серва повернет вправо. Тогда вы можете продолжить поворот вправо задав угол 180 или повернуть влево задав угол 0.

      Ответить на этот комментарий
  11. 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);

    }

    Ответить на этот комментарий
  12. Виталий

    15.05.2016

    Добрый день. сервопривод не вращается. может он не работающий? как проверить? провода других цветов. средний красный, с одной стороны коричневый (подозреваю, аналог черного) с другой оранжевый (аналог желтого). пробовал менять провода местами крайние. тогда плата не включается.

    Ответить на этот комментарий
  13. 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 секунды

      }

      должен ходить по крайним положениям.
      если не работает, обрати внимание на ардуину, не перезагружается ли она.

      Ответить на этот комментарий
  14. Александр

    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); // скорость обмена данными .эта команда не подразумевается сама собой?

      Ответить на этот комментарий
  15. Гена Козак

    29.08.2016

    Молодец, парень!

    Ответить на этот комментарий
  16. Юрий

    11.12.2016

    Добрый день!
    Можно ли подключить 2 сервопривода (слабонагруженных) непосредственно на плату arduino, не используя внешних источников питания? Просто в землю и 5V вставлять по 2 провода?

    Ответить на этот комментарий
  17. Читатель

    16.02.2017

    Научите ребенка правильно выражаться. Что означает «угол наклона вала»?
    И на видео мало что понятно!

    Ответить на этот комментарий
  18. Вова

    17.03.2017

    А сколько серво приводов можно подключить к одной плате? допустим мне нужно три.

    Ответить на этот комментарий
    • nikita

      23.03.2017

      В uno только два разъема питаня +5В, знач ток два серва доступны для подключения, для подключения трех, используй доску расширения

      Ответить на этот комментарий
  19. Николая

    24.04.2017

    Молодец парень!

    Ответить на этот комментарий
  20. Вячеслав

    01.01.2018

    Что делать, если он при любой постановке от 0 до 15 градусов он крутится не переставая все время delay?

    Ответить на этот комментарий
  21. Семён

    06.01.2018

    Доброго времени суток. Нужна помощь: как привязать флажок к кнопке управления сервоприводом, или иной способ чередования команд для сервопривода с одной кнопки

    Ответить на этот комментарий
  22. Борис

    18.01.2018

    Как сделать, чтобы серво выходил на заданный угол и возвращался не через определенное время, а только по команде? Одна команда (один сигнал) встал допустим на угол 90 и в этом положении стоит, пока не поступит другая команда (сигнал) — вернулся на исходную. Реализация в автомобиль (выезжающая камера заднего хода), включил заднюю передачу — серво выдвинул камеру, выключил ЗХ — серво вернул камеру обратно.

    Ответить на этот комментарий
  23. SIM

    09.10.2018

    Всем привет. Подскажите пожалуйста какие параметры импульса у сервы MG995. Она или крутит до бесконечности или до 180 градусов. Мне нужно на 90. Дайте пожалуйста у кого есть скетч. Все перепробовал, ничего не получается, замучился. 5 разных серв и все одно и тоже. Минус Ардуинки и сервы соединен. 9 пин управления. Скетчи стандартные с интернета и библиотека серво.н. Там все работает. А у меня ничего не получается.

    Ответить на этот комментарий
  24. Евгений

    17.12.2018

    При установке servo.write(0); вал начинает вращаться, пока не закончится время таймера. Начинает устанавливаться в фиксированное положение примерно с 7 градусов. Причем устанавливается в начальный угол немного в разные положения в зависимости от конечного.

    Ответить на этот комментарий
  25. Александр

    03.03.2019

    Подскажите новичку — собрал схему с серврприводом — все работает.
    Но после выполнения команды servo.write(0) мотор вибрирует — то есть крутится с меньшей скоростью и в обратном направлении.
    Затем выполняется команда servo.write(180) — нормально выполняется.
    Затем все повторяется.
    Почему мотор не стоит на месте после выполнения команды servo.write(0)?

    Ответить на этот комментарий
  26. Евгений

    17.03.2019

    Не работает, после загрузки скетча появляется звук подключения-отключения нового устройства в windows и постоянно срабатывает, сервопривод вроде шумит но не крутится в чем может быть проблема?

    Ответить на этот комментарий
  27. Олег

    02.03.2020

    Всем привет, задумал проект, заказал плату и сервопривод. Смысл в чем что бы привод поворачивался в одну сторону, потом вернулся назад через несколько секунд и далее повтор через 24 часа. Посмотрел азы программирования и понял, что это совсем не мое)) Прошу оказать содействие в написании «скетча».
    И вообще на сколько это реально или необходимо еще приобрести реле времени.
    Заранее благодарен.

    Ответить на этот комментарий
    • Nick

      31.03.2020

      Да. Реле времени обязательно, Иначе возможен разброс в пределах получаса примерно. Да и после временного отключения энергии время срабатывания сбрасываться может

      Ответить на этот комментарий
  28. Александр

    09.07.2020

    Помогите написать такой же скетч только вместо delay использовать milles. Вроде делаю, с диодами рабоатет millis а с сервой и milles ни как.

    Ответить на этот комментарий
  29. Дарья

    13.10.2020

    добрый день,подскажите пожалуйста,как в программе указать работу от кнопки,которая будет менять угол.Заранее спасибо)

    Ответить на этот комментарий

Оставить комментарий

© 2014-2024 Занимательная робототехника, Гагарина Д.А., Гагарин А.С., Гагарин А.А. All rights reserved / Все права защищены. Копирование и воспроизведение в любой форме запрещено. Политика конфиденциальности. Соглашение об обработке персональных данных.
Наверх