Как управлять сервоприводом двумя кнопками. Управление сервоприводом SG90 без микроконтроллера. Устройства для швейных машин

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

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

1. Подключение к Ардуино

Итак, как уже говорилось выше, сервопривод славится тем, что может поворачиваться на заданный угол. Как же мы будем указывать ему этот угол? Предлагаю использовать для этой цели переменный резистор, он же — потенциометр. Будем вращать ручку потенциометра, а контроллер будет командовать сервоприводу поворачиваться на соответствующий угол.

У потенциометра есть всего три вывода. Крайние подключим к +5В и земле, а центральный к аналоговому входу A0.

У сервопривода SG90 также имеется три контакта. Обычно они окрашиваются следующим образом:

  • коричневый — земля;
  • красный — питание +5В;
  • оранжевый (или желтый) — сигнальный.

Сигнальный провод подключим в цифровому выходу №8. В итоге, получим такую схему:

Подключать оба устройства к Ардуино Уно удобнее через макетную плату:

2. Программа

Теперь напишем несложную программу, которая свяжет все элементы нашего аппарата строгой логикой. Все что нам требуется от контроллера — это:

  • считывать показания с потенциометра в диапазоне от 0 до 1023;
  • преобразовывать полученное число в угол от 0 до 180 градусов;
  • передавать полученный угол на сервопривод.

Для написания программы используем наш . Задействуем блок сервопривода, блок чтения из аналогового порта и функцию отображения одного диапазона значений в другой.

Нажав в конструкторе кнопку «Arduino», откроем страницу с исходным кодом программы для среды Arduino IDE:

#include Servo servos; void setup(){ } void loop(){ servos.attach(8); servos.write((map(analogRead(A0), 0, 1024, 0, 180))); delay(50); }

Как видно из программы, для управления сервоприводом мы использовали библиотеку Servo . В этой библиотеке есть несколько полезных нам функций:

  • attach(номер_вывода) — инициализация сервопривода;
  • write(угол) — поворот сервопривода на заданный угол;
  • read() — получение текущего угла сервопривода.

Для отображения множества чисел 0 — 1023 в множество 0-180, конструктор применил функцию map . Ту же самую операцию, можно было осуществить с помощью выражения:

int angle = (value / 1023.0) * 180;

Загружаем программу на Ардуино Уно, и смотрим что получилось!

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

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

Совместное применение серводвигателей с радиомодулями примема-передачи не создает никаких трудностей, достаточно на стороне приемника просто подключить к серводвигателю соответствующий разъем, содержащий питающее напряжение и управляющий сигнал, и дело сделано.

Но если мы хотим управлять серводвигателем «вручную», например, с помощью потенциометра, нам необходим генератор импульсного управления. Ниже представлена достаточно простая схема генератора на основе интегральной микросхемы 74HC00.

Данная схема позволяет осуществлять ручное управление серводвигателями путем подачи управляющих импульсов шириной 0,6 до 2 мс. Схему можно применить, например, для поворота небольших антенн, наружных прожекторов, камер видеонаблюдения и т.д.

Управления серводвигателем. Описание контроллера

Основой схемы является микросхема 74HC00 (IC1) представляющая собой 4 логических элемента И-НЕ. На элементах IC1A и IC1B создан генератор, на выходе которого образуются импульсы с частотой 50 Гц. Эти импульсы активируют RS-триггер, состоящий из логических элементов IC1C и IC1D.

С каждым импульсом идущим с генератора выход IC1D устанавливается в «0» и конденсатор С2 разряжается через резистор R2 и потенциометр P1. Если напряжение на конденсаторе С2 снижается до определенного уровня, то RC-цепь переводит элемент в противоположное состояние. Таким образом, мы на выходе получаем прямоугольные импульсы с периодом 20 мс. Ширина импульсов устанавливается потенциометром P1.

Например, сервопривод Futaba S3003 изменяет угол вращения вала на 90 градусов за счет управляющих импульсов продолжительностью от 1 до 2 мс. Если мы изменим ширину импульса от 0,6 до 2 мс, то угол поворота составит до 120 °. Компоненты в схеме подобраны таким образом, что выходной импульс находится в диапазоне от 0,6 до 2 мс, и поэтому угол установки составляет 120 °. Серводвигатель S3003 от Futaby имеет достаточно большой крутящий момент, и ток потребления может составлять от десятков до сотен мА в зависимости от механической нагрузки.

Конструкция

Схема управления серводвигателем собрана на двусторонней печатной плате размером 29 х 36 мм. Монтаж очень простой, так что со сборкой устройства вполне может справиться даже начинающий радиолюбитель.

Учимся управлять сервомотором с использованием Arduino.

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

Необходимые узлы

Для того, чтобы освоить приведенные в статье методики управления сервоприводом вам понадобятся:

1 переменный резистор (потенциометр) на 10 кОм



1 микроконтроллер Arduino Uno



1 конденсатор на 100 мкФ (не обязательно)


Схема подключения для "Sweep" (автоматическое вращение)

Для этого эксперимента вам надо подключить к Arduino только сервомотор.


На сервомоторе 3 контакта. Цвет контактов может отличаться в зависимости от фирмы производителя, но красный - это всегда контакт 5 В. Контакт GND (земля) может быть черным или коричневым. Оставшийся третий контакт - это сигнал, который используется для управления положением ротора сервы. Обычно он желтого или желтого цветов. Этот контакт мы подключаем к цифровому пину 9 на Arduino.

На контактах сервы предусмотрены разъемы, в которые можно установить коннекторы (провода) и соединить из макетной платой, а потом с Arduino.


Серводвигатель дергается

Иногда при подключении сервы не отрабатывают заданные команды или отрабатывают некорректно. Причем происходить это может только при подключении к определенным USB портам. Причина в том, что сервы требуют достаточно большую мощность для питания, особенно в начале движения ротора. Эти резкие скачки потребляемой мощности могут сильно "просаживать" напряжение на Arduino. Может произойти даже перезагрузка платы.

Если подобное происходит, вам надо добавить конденсатор (470 мкФ или больше) между рельсами GND и 5V на вашей макетке.


Конденсатор выполняет роль своебразного резервуара для электрического тока. Когда серводвигатель начинает работать, он получает остатки заряда с конденсатора и от источника питания Arduino одновременно.

Длинная нога конденсатора - это позитивный контакт, она подключается к 5V. Отрицательный контакт часто маркируется символом "-".

Скетч Arduino "Sweep" (автоматическое вращение)

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

Программа основана на стандартном скетче "sweep", который вы можете найти в меню Arduino Examples в папке "servo".

#include <Servo.h>

int servoPin = 9;

int angle = 0; // угол сервы в градусах

servo.attach(servoPin);

// инкремент от 0 до 180 градусов

for(angle = 0; angle < 180; angle++)

servo.write(angle);

// теперь в обратном направлении от 180 до 0 градусов

for(angle = 180; angle > 0; angle--)

servo.write(angle);

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

Управляющие команды для серв подобны встроенным в Arduino, но так как вы используете их далеко не во всех проектах, они хранятся в отдельной библиотеке. Если вы хотите использовать команды из библиотеки для серводвигателей, вам надо включить библиотеку в ваш скетч в Arduino IDE с помощью следующей строки:

#include <Servo.h>

Используем переменную "servoPin" для определения порта, который управляет сервой.

Следующая строка:

инициализирует новую переменную "servo" типа "Servo". Библиотека предоставляет нам новый тип данных наподобие "int" или "float", который отвечает за серву. Таким образом вы можете инициализировать восемь серводвигателей. Например, если у нас две сервы, можно записать следующее:

В теле функции "setup" мы должны согласовать переменную "servo" с пином, который будет управлять серводвигателем, используя команду:

servo.attach(servoPin);

Переменная "angle" используется для указания текущего угла поворота сервы в градусах. В теле функции "loop" мы используем используем два цикла "for". Один - для увеличения угла поворота в одном направлении и второй - для возврата, когда мы совершили поворот на 180 градусов.

servo.write(angle);

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

Схема подключения сервы с потенциометром ("Knob")

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

Надо просто добавить на макетную плату потенциометр и проводник от контакта сигнала с потенциометра на пин A0 на Arduino.


Скетч Arduino "Knob" (управление сервой с помошью потенциометра)

Программа, в которой положение выходного вала сервы контролируется углом поворота ручки потенциометра даже проще, чем рассмотренный ранее автоматический поворот и возврат в исходное положение.

#include <Servo.h>

int servoPin = 9;

servo.attach(servoPin);

int reading = analogRead(potPin); // от 0 до 1023

int angle = reading / 6; // от 0 до 180

servo.write(angle);

В скетче добавлена переменная с именем "potPin".

Для того, чтобы вывести вал сервы в положение, мы считываем значение с контакта Arduino A0. Значение с этого контакта будет находится в диапазоне между 0 и 1023. Так как серва может поворачиваться только на 180 градусов, нам надо масштабировать полученные значения. Разделив значения с контакта A0 на 6 мы получаем угол в диапазоне от 0 до 170, что нас вполне устраивает.

Сервомоторы - общая информация

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

Положение выходного вала сервомотора определяется длиной импульса. Серва может получать импульсы каждые 20 миллисекунд. Если импульс high длится 1 миллисекунду, угол поворота сервы будет равен нулю. Если 1.5 миллисекунды, тогда серва выйдет в свое центральное положение, а если 2 миллисекунды - выйдет в положение, которое соответствует 180 градусам.


Крайние положения сервомоторов могут отличаться. Кроме того, многие сервы могут поворачиваться на 170 градусов. Есть и "continuous" сервы, которые совершают оборот на полные 360 градусов.

Внутри сервы

На видео, которое приведено ниже, показано, что происходит внутри сервомотора.

Будьте аккуратны. Если вы разберете серву подобным образом, есть вероятность, что собрать обратно ее не получится.

Дальнейшие эксперименты с сервой и Arduino

Откройте скетч "sweep" и попробуйте сократить задержки с 15 миллисекунд до, скажем, 5 миллисекунд. Обратите внимание, насколько быстрее начали вращаться сервы.

Попробуйте изменить скетч "knob". Вместо того, чтобы ориентироваться на значения с потенциометра, реализуйте управление сервой с помощью значений, которые вы указываете в окне серийного моитора Arduino IDE.

Небольшая подсказка: для того, чтоьы скетч считывал значения угла с серийного монитора, вы можете использовать функцию Serial.parseInt(). Эта функция парсит (считывает) числовые значения с серийного монитора.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Опубліковано 25.07.2012

Сервомашинки или сервоприводы нашли широкое применение не только в роботостроении, моделизме, но и в различных отраслях промышленности и приборостроении.

Как устроена сервомашинка

Большинство сервоприводов используют три провода для работы. Провод для питания, обычно 4.8В или 6В, общий провод (земля) и сигнальный провод. Управляющий сигнал передает информацию о требуемом положении выходного вала. Вал связан с потенциометром, который определяет его положение. Контроллер в сервоприводе по сопротивлению потенциометра и значению управляющего сигнала определяет, в какую сторону требуется вращать мотор, чтобы получить нужное положение выходного вала. Чем выше напряжение питания сервопривода, тем быстрее он работает и больший момент развивает.

Характеристики сервоприводов

Размер и вес

Размеры бывают: “микро”, “мини”, “стандартный” и “гигант”. В пределах каждого класса размеры могут немного меняться. Средние размеры сервоприводов для справки:

  • Микро: 24мм x 12мм x 24мм, вес: 5-10 г.
  • Мини: 30мм x 15мм x 35мм, вес 25 г.
  • Стандарт: 40мм x 20мм x 37мм, вес: 50-60 г.

Скорость

Скорость сервоприводов измеряется временем поворота качалки сервопривода на угол 60 градусов при напряжении питания 4.8В и 6В. Например, сервопривод с параметром 0.22с/60° при 4.8В поворачивает вал на 60 градусов за 0.22с при напряжении питания 4.8В. Это не так быстро, как может показаться. Наиболее быстрые сервоприводы имеют время перемещения от 0.06 до 0.09с.

Угол поворота

Сервоприводы могут иметь угол поворота вала 60, 90, 180 градусов. Угол поворота ограничивается электроникой и механически. Существуют сервоприводы без ограничения, т.е. вращающиеся на 360 градусов. Если у Вас имеется сервопривод с рабочим диапазоном 60 градусов, то расширить его можно только изменив конструкцию сервомашинки. Иногда можно увеличить диапазон специальным образом исказив управляющий сигнал. Но это нестандартный и ненадежный способ.

Момент на валу

Момент сервопривода измеряется по весу груза в кг, который сервопривод может удерживать неподвижно на качалке с плечом 1 см. Указывают две цифры, для напряжения питания 4.8В и 6В. Например, если указано, что сервопривод развивает 10кг/см, значит, что на качалке длиной 1см сервопривод может развить усилие 10 кг, прежде чем остановится. Для качалки в 2см такой сервопривод сможет развить усилие 5кг, а на 5мм 20кг.

Цифровые и аналоговые сервоприводы

Цифровые и аналоговые сервоприводы механически не отличаются друг от друга. У них те же корпуса, моторы, шестеренки и даже потенциометры. Все дело в способе управления мотором. Цифровые сервоприводы более точны и, как правило, имеют меньшее время реакции. Но они потребляют больше энергии, чем аналоговые сервоприводы. Управляющий сигнал для аналоговых и цифровых сервоприводов одинаков.

Управляющий сигнал

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

Таким образом, для управления сервоприводом нам потребуется формировать ШИМ с частотой 50 герц. При этом для положения “0” длительность импульса должна составлять 1000 микросекунд, а для положения “максимум” – 2000 микросекунды. Среднее положение – 1500 микросекунд.

Финалом наших изысканий будет плата сервотестера, работающая с двумя сервоприводами. Светодиоды отображают режим сервотестера. Формировать ШИМ будем использовать аппаратные возможности микроконтроллера ATMega8, а задающий сигнал будем формировать с учетом положения потенциометра.
Управляющие сигналы для сервоприводов формируются на ногах OC1A , OC1B .
Режимы переключаются кнопкой. Три светодиода отображают режим работы сервотестера.

  • Режим 1 – положение сервомашинок задается потенциометром
  • Режим 2 – задается среднее положение сервоприводов
  • Режим 3 – задающий сигнал циклически изменяется от одного крайнего положения к другому.

Питание сервотестера осуществляется от батарей напряжением 6..12В.

Исходный код

#include #include #include //=================================== АЦП ================================== //Инициализация АЦП: void adc_init(void){ ADCSRA = _BV(ADEN) | _BV(ADPS0) | _BV(ADPS1) | _BV(ADPS2); // prescaler = 128 } //Чтение канала АЦП: uint32_t adc_read(uint8_t ch){ ADMUX = _BV(REFS0) | (ch & 0x1F); // set channel (VREF = VCC) ADCSRA &= ~_BV(ADIF); // clear hardware "conversion complete" flag ADCSRA |= _BV(ADSC); // start conversion while(ADCSRA & _BV(ADSC)); // wait until conversion complete return ADC; // read ADC (full 10 bits); } int main() { char mode=0; // Режим - по умолчанию 0 int direct=0; uint16_t adc_result; #define ICR_MAX F_CPU/50 // ICR1(TOP) = fclk/(N*f) ; N-Делитель; f-Частота; 1000000/1/50 = 20000 #define OCR_MIN ICR_MAX/20 #define OCR_MAX ICR_MAX/10 #define OCR_CENTER (ICR_MAX/4/10)*3 // На порту кнопки включаем подтягивающий резистор DDRB &= ~(1<<4); PORTB |= (1<<4); // Настраиваем порт светодиодов DDRC = (1<<1) | (1<<2) | (1<<3); PORTC |= (1<<(mode+1)); // Настраиваем PWM на таймере 1 (выход на ногах PB1, PB2) TCCR1A = 0; // Отключаем PWM пока будем конфигурировать ICR1 = ICR_MAX; // Частота всегда 50 Гц // Включаем Fast PWM mode via ICR1 на Таймере 1 без делителя частоты TCCR1A = (1< 2) { mode = 0; } // Включаем нужный светодиод PORTC &= ~((1<<1) | (1<<2) | (1<<3)); PORTC |= (1<<(mode+1)); } switch (mode){ case 0:{ // Задаем положени сервомеханизма, в зависимости от положения потенциометра adc_result adc_result=adc_read(0); OCR1A = OCR_MIN+(adc_result * (OCR_MAX-OCR_MIN)/1024); OCR1B = OCR1A; break; } case 1:{ // Задаем центральное положение сервомеханизма direct=0; OCR1A = OCR_CENTER; OCR1B = OCR1A; break; } case 2:{ // Циклическое изменение положения сервомашинки if (direct==0){ OCR1A++; OCR1B++; if (OCR1A >= OCR_MAX) { direct=1; } } if (direct==1){ OCR1A--; OCR1B--; if (OCR1A <= OCR_MIN) { direct=0; } } _delay_ms(1); break; } } } }

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

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


Устройство сервопривода

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

Управление происходит через печатную плату, к которой подключен мотор постоянного тока и потенциометр (датчик). Внутри блока управления также находятся шестерни редуктора.



Фактически сам привод представляет собой электрический мотор с редуктором, именно электромотор преобразует электричество в механическое действие. Но скорость вращения мотора не всегда подходит для достижения поставленных целей. Чтобы было возможно управлять вращением мотора, используется редуктор. В итоге он понижает скорость вращения выходного вала до нужного значения. Потенциометр контролирует получаемый на выходе результат.


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





Принцип работы

При включении электромотора запускается вращение выходного вала. К нему можно подключить или присоединить то, чем в дальнейшем планируется управлять.


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


Основные технические характеристики сервопривода

Крутящий момент (Усилие на валу) . Измеряется в кг/см. Представляет собой произведение силы на длину рычага. На практике крутящий момент отвечает за ускорение выходного вала и его способность преодолевать сопротивление вращению. Чем выше крутящий момент, тем больше возможностей у мотора реализовать свой потенциал.


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


Угол поворота . Это максимальный угол, на который может повернуться выходной вал. Наиболее распространенные значения для этой характеристики: 180° и 360°.


Габариты сервопривода . Сервоприводы бывают маленькие, стандартные и большие. Стандартные сервоприводы самые недорогие. При отклонении габаритов от стандартных значений цена, как правило, меняется пропорционально такому отклонению.


Материал шестерней . Шестерни редуктора производятся из пластика, карбона, металла. Пластиковые шестерни легкие, но не предназначены для серьезных нагрузок. Карбоновые шестерни более прочные, но и более дорогие. Металлические шестерни – самые тяжелые, идеально подходят для максимальных нагрузок.




Виды сервоприводов

Сервоприводы бывают цифровые и аналоговые.

По внешнему виду они почти не отличаются друг от друга. Основное отличие заключается в принципе управления мотором. У аналоговых сервоприводов управление происходит с помощью специальной микросхемы, цифровые сервоприводы обладают микропроцессором. Микросхема и микропроцессор способны принимать и анализировать управляющие импульсы. Только на микросхему они обычно поступают с частотой 50 Гц, а на микропроцессор – с частотой 200 Гц и более. В результате этого цифровой сервопривод мобильнее и четче реагирует на управляющий сигнал.



Цифровые сервоприводы – это новый шаг в развитии техники, и они характеризуются рядом преимуществ. К таким преимуществам относятся: высокая точность позиционирования, возможность более быстрого управления приводом, возможность поддержания постоянного крутящего момента.


Подключение к Arduino

Для достижения самых разных целей робототехники к программируемому контроллеру Arduino может быть подключен сервопривод. Подключение осуществляется через кабели, которые выходят из сервопривода. Обычно это три кабеля: красный; коричневый или черный; желтый, оранжевый или белый.





Красный кабель отвечает за питание сервопривода. Коричневый - за заземление. Желтый – подключается непосредственно к плате Arduino и предназначен для передачи управляющего сигнала.

Подключение сервопривода к плате Arduino производится через ШИМ-выводы.



Итак, черный провод подключается к любому GND-пину.

Красный кабель питания (VTG) - к соответствующему выводу для подключения питания.

Белый сигнальный кабель – к ШИМ-выводу.


Питание сервоприводов

Большинство плат Arduino рассчитано на 500 мА. Исходя из этого, сервопривод является достаточно энергоемким компонентом, так как потребляет более 100 мА. Если в ходе проекта требуется использование мощного сервопривода или нескольких сервоприводов, то необходимо позаботиться об их дополнительном питании. Проблема дополнительного питания сервоприводов может быть решена следующим образом:

Обеспечить питание сервопривода от дополнительно приобретенного блока питания, например, 5 или 6 В;

При отсутствии блока питания с нужным напряжением, можно использовать стабилизатор.

Напрямую к Arduino можно подключать только маломощный сервопривод. В противном случае пользователя ожидают разные побочные эффекты: от перезагрузки платы до перегорания отдельных компонентов.


Количество сервоприводов

Количество подключаемых к плате Arduino сервоприводов ограничено. Большинство моделей Arduino предусматривает подключение 12 сервоприводов, Arduino Mega позволяет подключить до 48 сервоприводов.





Управление сервоприводом


Библиотека Servo

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

На сегодняшний день уже написаны программы для самых разных целей. Библиотеки можно подобрать по ссылке .

На платах Arduino за исключением модели Arduino Mega обращение к библиотеке отключает функцию analogWrite(PWM) на пинах 9 и 10. Наличие подключения сервопривода или отсутствие такового при этом роли не играет. На платах Arduino Mega можно подключить до 12 сервомоторов без отключения функции PWM.


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



Вызывается она через #include . После подключения библиотеки становится возможным пользоваться списком, содержащихся в ней функций. С функциями библиотеки можно ознакомиться через меню «Файл/примеры». Для каждого сервопривода создается свой «объект» (servo), который прикрепляется к соответствующему цифровому пину. После этого программируемый контроллер Arduino готов отправлять управляющие сигналы на конкретный сервопривод. Передача сигналов производится постоянно, даже при «простое» сервопривода. Для приостановки передачи сигналов нужно отправить команду вручную.


Управляющий сигнал

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

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


Управляющие команды

Управление сервоприводом через библиотеку основано на следующих командах:

Если в работе сервопривода возникают нарушения, то, как правило, об этом говорят соответствующие шумы: жужжание, потрескивание и прочее. Ниже рассмотрим основные причины таких шумов.


Невозможность поворота на заданный угол

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


Настройки начальной и конечной позиции

Иногда необходимо подкорректировать координаты начальной или конечной позиции. Это нужно когда значения датчика и фактического положения выходного вала расходятся относительно конечной позиции последнего. Например, выходной вал находится в конечной позиции, но датчик считает, что он еще ее не достиг и пытается заставить выходной вал продолжить движение. Возникает характерный шум. В этом случае начальная позиция не обязательно должна начинаться с 0°С, а конечная не обязательно должна заканчиваться на 180°C. Эти предельные значения можно немного сдвинуть на 5-10°C, и проблема будет решена.




Заключение

На сегодняшний день сервопривод – это необходимый элемент в робототехнике, с помощью которого воплощаются многие творческие проекты. Этот умный управляемый моторчик предназначен для моделирования движения. Пользоваться его функциями достаточно просто, уже написано множество программ, которые могут быть использованы в качестве трафарета для воплощения собственных идей. Сервопривод подключается к программируемому контроллеру Arduino. Все тонкости этого процесса подробно освещены как в этой статье, так и в других статьях, выложенных в сети.

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