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

23 комментария к статье “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);
    }

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

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

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

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

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