Как подключить сервопривод к Ардуино

Сервопривод и его разновидности


Сервопривод регулирует поступление воды в систему

Как говорилось выше, сервопривод – это дополнительное оборудование, которое устанавливается на распределительный коллектор для теплого водяного пола.

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

Механический сервопривод


Данное устройство самый простой вариант 

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

Он имеет не сложную конструкцию и приемлемую стоимость.

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


Механические устройства не совмещены с термодатчиком

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

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

Электронный сервопривод для коллектора


Электронное устройство получает информацию от термодатчика

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


Схема коллектора с сервоприводом

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

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

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

Если они случаются нередко, то стоит дополнительно устанавливать ИБП (индивидуальный блок питания) или свой выбор останавливать на механическом устройстве регулировки подачи теплоносителя. Подробнее о сервоприводах смотрите в этом видео:

Дистанционный сервопривод

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

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

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

Следует знать, что сервоприводы можно классифицировать еще по следующим параметрам:

  • нормально закрытые;
  • открытые.

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

Применение сервоприводов

Сегодня они широко используются в самых разных областях:

  • в робототехнике и при создании манипуляторов; чтобы управлять ими, в свою очередь, берут аппаратно-программные средства ардуино;
  • для реализации системы теплого пола – они помогают автоматически регулировать температуру, понижая или повышая ее по мере необходимости;
  • в автомобилестроении – для интеграции с замками, подачи жидкости на печку, переключения скоростей в АКПП;
  • в грузовом оборудовании – задают режимы захвата, подъема, транспортировки, опускания и отпускания предметов самого разного веса и габаритов.

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

Перейдём к практике

В наборе, который мы с вами распаковывали ранее мне достался сервопривод Tower Pro SG90 — это одна из популярнейших моделей для хобби, поэтому китайцы кладут их во все подобные наборы. Отдельно он стоит 3-4 доллара. 

При всей своей миниатюрности, SG90 достаточно «сильный» и момент на валу аж 1.8 кг/см.

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

Сегодня нам понадобится:

Сервопривод SG90 — 1 штука;
Плата Arduino, любая, у меня есть UNO — 1 штука;
Перемычки или провода для содинения — 5-10 штук;
Потенциометр, например, на 10К (на самом деле его сопротивление не слишком важно) — 1 штука.

Если вы будете питать серву напрямую от платы, то подключайте её к пинам 5V красным проводом, GND – коричневым (черным) проводом, а жёлтый провод — это сигнал, его можно к любому пину, хоть цифровому, хоть аналоговому, хоть с ШИМ, хоть без него.

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

Проверяем работоспособность сервопривода, для этого заходим в Arduino IDE, открываем пример из стандартного набора под названием «Servo→Sweep»

По умолчанию в этом примере выставлено, что сигнальный провод подключается к 9-му пину, если вы подключили к другому – исправьте вот это значение в коде:

Код несложный, привожу его ниже с русскими комментариями.

// Можно создать до 12 таких объектов и подключить столько же приводов

//для объекта myservo  подключен к 9 пину

// чтобы привод повернулся на угол, указанный в pos

В результате сервопривод вращается от одного крайнего положения до другого. Скорость перемещения можно изменять либо путем изменения задержки между шагами (delay), либо путем изменения шага, а именно правкой последнего значения в аргументах цикла — for (pos = 180; pos >= 0; pos -= 1). На видео я показал примеры с разными значениями задержки.

Дальше мы откроем другой из стандартных примеров — knob. Здесь-то нам и понадобится потенциометр. Ниже приведена схема подключения для этого примера.

Разберем код. Первая его часть, где подключается библиотека и назначается пин, к которому подключен управляющий провод сервопривода не изменилась, и её я комментировать не буду.

// к которому подключено потенциометр (пин А0)

// до необходимых нам градусов — от 0 до 180

// значениями, полученными с аналогового входа

Библиотека Servo.h по умолчанию встроена в Arduino IDE, разберем основные её команды:

Servo myservo – вместо «myservo»  может быть любое слово, это название вашего сервопривода.

attach() — привязать переменную, объявленную предыдущей командой к пину. Пример использования ИмяПривода.attach(9) – расшифровывается так: “сервопривод с названием «ИмяПривода» подключен к пину 9”.

Если у вашего привода длины управляющих импульсов отличаются от стандартных 544 и 2400 мкс, то их можно задать через запятую после номера пина, вот так servo.attach(pin, min, max), где servo – имя привода (имя переменной типа Servo), min – длина сигнала для минимального угла поворота (0°) в микросекундах, max – ширина импульса управляющего  сигнала для максимального угла поворота (180°) в микросекундах.

write() — передаём приводу угол поворота в градусах (пример: ИмяПривода.write(180))

writeMicroseconds() — тоже самое, только указывает на длину сигнала в микросекундах.

read() — определяет текущее положение вала;

attached() — Проверяет подключена ли переменная типа Servo к пину с сервоприводом. Синтаксис — Servo.attached().

detach() — отмена команды attach, то есть отсоединяет определенный переменной типа Servo сервопривод от выхода.

Работа схемы

Схема устройства представлена на следующем рисунке.

Первым делом необходимо соединить модуль ESP8266 с платой Arduino. Модуль ESP8266 работает с напряжением 3.3V, поэтому его нежелательно подсоединять к 5V платы Arduino поскольку это может повредить его. Соедините контакты VCC и CH_PD модуля с контактом 3.3V платы Arduino. Контакт RX модуля ESP8266 работает с напряжением 3.3V, поэтому он не будет работать правильно, если мы подсоединим его непосредственно к плате Arduino. Поэтому нам необходимо сделать делитель напряжения, который будет конвертировать 5V в 3.3V. Это можно сделать с помощью последовательного соединения трех резисторов как показано на схеме. Соедините контакт TX модуля ESP8266 с контактом 4 платы Arduino, а контакт RX модуля ESP8266 – с контактом 5 платы Arduino при помощи резисторов.

Wi-Fi модуль ESP8266 обеспечивает нашему проекту доступ в сеть интернет. Он является весьма дешевым, но в тоже время достаточно “мощным” устройством и может подсоединяться к большинству известных микроконтроллеров, поэтому он так часто используется в проектах, связанных с интернетом вещей (IOT).

Затем соединим сервомотор с платой Arduino. Соедините контакты VCC и землю сервомотора к контактам 5V и земле платы Arduino, а сигнальный контакт сервомотора – к контакту 9 платы Arduino.

Внешний вид используемого нами сервомотора показан на следующем рисунке.

Коротко о главном

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

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

Наряду с ним используют смесительный узел.

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

Дополнительно

Выставка домов «Малоэтажная страна» выражает искреннюю благодарность специалистам компании «Миралекс» за помощь в создании материала.

Компания «Миралекс» – поставщик систем водоснабжения и теплоснабжения на любых объектах, от ведущих мировых брендов. Так же компания занимается разработкой и монтажом систем автоматизированного учета потребления энергоресурсов.

Если Вам нужна более подробная консультация, то можете воспользоваться следующими контактами:

Скетч для управления сервоприводом в Arduino

Управление сервоприводом напрямую через изменение в скетче длительности импульсов – достаточно нетривиальная задача, но у нас, к счастью, есть отличная библиотека Servo, встроенная в среду разработки Arduino. Все нюансы программирования и работы с сервоприводами мы рассмотрим в отдельной статье. Здесь же приведем простейший пример использования Servo.

Алгоритм работы прост:

  • Для начала мы подключаем Servo.h
  • Создаем объект класса Servo
  • В блоке setup указываем, к какому пину подключен серво
  • Используем методы объекта обычным для C++ способом. Самым популярным является метод write, которому мы подаем целочисленное значение в градусах (для сервопривода 360 эти значения будут интерпретироваться по-другому).

Пример простого скетча для работы с сервоприводом

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

#include
Servo servo; // Создаем объект
void setup() {
servo.attach(9); // Указываем объекту класса Servo, что серво присоединен к пину 9
servo1.write(0); // Выставляем начальное положение
}
void loop() {
servo.write(90); // Поворачиваем серво на 90 градусов
delay(1000);
servo.write(1800);
delay(100);
servo.write(90);
delay(1000);
servo.write(0);
delay(1000);
}

Скетч для двух сервпоприводов

А в этом примере мы работаем сразу с двумя сервоприводами:

#include
Servo servo1; // Первый сервопривод
Servo servo2; // Второй сервопривод
void setup() {
servo1.attach(9); // Указваем объекту класса Servo, что серво присоединен к пину 9
servo2.attach(10); // А этот servo присоединен к 10 пину
}
void loop() {
// Выставялем положения
servo1.write(0);
servo2.write(180);
delay(20);
// Меняем положения
servo2.write(0);
servo1.write(180);
}

Управление сервоприводом с помощью потенциометра

В этом примере поворачиваем серво в зависимости от значения, полученное от потенциометра. Считываем значение и преобразовываем его в угол с помощи функции map:

//Фрагмент стандартного примера использования библиотеки Servo
void loop() {
val = analogRead(A0); // Считываем значение с пина, к которому подключен потенциометр
val = map(val, 0, 1023, 0, 180); // Преобразуем число в диапазоне от 0 до 1023 в новый диапазон – от 0 до 180.
servo.write(val);
delay(15);
}

Общие принципы работы серводвигателей (сервомоторов)

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

Типы серводвигателей

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

Серводвигатель справа представляет собой так называемый стандартный серводвигатель. Это наиболее распространенный тип серводвигателя. Такие серводвигатели достаточно часто имеют одинаковые размеры и монтажные расстояния между отверстиями. Намного меньший (и более легкий) серводвигатель слева предназначен для летательных аппаратов. Эти серводвигатели называются сервоприводами 9g .

Сервоприводы с более высоким качеством исполнения и более высоким крутящим моментом имеют редуктор с шестернями из металла, а не из нейлона. Большинство серводвигателей работают на номинальном напряжении питания около 5 В при допустимом диапазоне питающих напряжений от 4 до 7 В. Подключение любительских сервоприводов обычно осуществляется через провода, заканчивающиеся 3-контактным разъемом: питание +, питание — и управляющий сигнал.

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

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

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

Блок управления, получив через сигнал управления величину желаемого положения вала, вычитает из него величину действительного его положения и вырабатывает «сигнал ошибки», который может быть положительным или отрицательным. Этот «сигнал ошибки» подается на питание двигателя, заставляя его изменить положение вала в нужном направлении. Чем больше разница между желаемым и действительным положением выходного вала, тем быстрее двигатель будет поворачиваться к желаемой позиции. Чем ближе к нулю становится значение ошибки (рассогласования), тем меньше становится питание двигателя.

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

Управляющий сигнал на серводвигатель — это не напряжение, как можно было бы ожидать, а сигнал широтно-импульсной модуляции (ШИМ). Этот сигнал является стандартным для всех любительских сервомашинок и выглядит так, как показано на следующем рисунке.

Серводвигатель ожидает прихода импульса управления каждые 20 мс. Импульс длительностью 1,5 мс установит серводвигатель в центральное положение, соответствующее повороту выходного вала на 90°. Более короткие импульсы в 1,0 мс установят выходной вал в начальное положение — 0°, а импульсы в 2,0 мс — крайнее положение — 180°. В реальности этот диапазон может быть немного меньше, чем полные 180°, без укорочения импульсов на одном конце и удлинения на другом. Не редкость и ситуация, когда для 0° нужен импульс 0,5 мс, а для 180° — 2,5 мс.

Назначение контактов сервомотора

Представлено на следующем рисунке. Я думаю, здесь все просто и понятно.

1. Red (красный) = Положительное напряжение питания (от 4.8V до 6V)
2. Brown (коричневый) = Ground (земля)
3. Orange (оранжевый) = Control Signal – управляющий сигнал (PWM Pin – контакт ШИМ)

Как собрать

  1. Возьмите Troyka Shield LP и установите сверху на управляющую плату — Arduino или Iskra JS.

  2. Закрепите на обратную сторону управляющей платы с помощью двустороннего скотча два сервопривода спереди — «передние колёса», и два сзади — «задние колёса». Закрепите круглые качельки на валах сервоприводов.

  3. Подключите передние колёса «ServoFordL» и «ServoFordR» через 3-проводные шлейфы к и пину Troyka Shield LP соответственно, а задние колёса «ServoBackL» и «ServoBackR» — к и пину Troyka Shield LP соответственно.

  4. Подключите ИК-приёмник к пину Troyka Shield LP. В итоге должна получиться схема.

  5. Установите Power Shield сверху на Troyka Shield LP.

Технические характеристики

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

Наиболее значимыми характеристиками сервомотора являются:

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


Рис. 6. Усилие на валу

  • Скорость вращения – показывает, сколько поворотов вала может совершить устройство за единицу времени.
  • Величина питающего напряжения – чаще всего электроснабжение сервопривода выполняется постоянным током, хотя встречаются модели и с переменным током выходного напряжения. Подключение питания к сервоприводу осуществляется тремя проводами: питающим, управляющим и общим.
  • Угол вращения сервопривода – поворот выходного элемента, как правило, выпускается на 180° и 360°.
  • Скорость поворота – подразделяется на сервоприводы с постоянным вращением и с переменной частотой.

Сервопривод постоянного вращения

Сервоприводы обычно имеют ограниченный угол вращения 180 градусов, их так и называют «сервопривод 180°».

Но существуют сервоприводы с неограниченным углом поворота оси. Это сервоприводы постоянного вращения или «сервоприводы 360°».

Сервопривод постоянного вращения можно управлять с помощью библиотек или . Отличие заключается в том, что функция задаёт не угол, а скорость вращения привода:

Функция Arduino Сервопривод 180° Сервопривод 360°
Servo.write(0) Крайне левое положение Полный ход в одном направлении
Servo.write(90) Середнее положение Остановка сервопривода
Servo.write(180) Крайне правое положение Полный ход в обратном направлении

Для иллюстрации работы с сервами постоянного вращения мы собрали двух мобильных ботов — на Arduino Uno и Iskra JS. Инструкции по сборке и примеры скетчей смотрите в статье собираем ИК-бота.

Примеры работы с Arduino

Схема подключения

Многие сервоприводы могут быть подключены к Arduino непосредственно. Для этого от них идёт шлейф из трёх проводов:

  • красный — питание; подключается к контакту 5V или напрямую к источнику питания

  • коричневый или чёрный — земля

  • жёлтый или белый — сигнал; подключается к цифровому выходу Arduino.

Для подключения к Arduino будет удобно воспользоваться платой-расширителем портов, такой как Troyka Shield. Хотя с несколькими дополнительными проводами можно подключить серву и через breadboard или непосредственно к контактам Arduino.

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

Ограничение по питанию

Обычный хобби-сервопривод во время работы потребляет более 100 мА. При этом Arduino способно выдавать до 500 мА. Поэтому, если вам в проекте необходимо использовать мощный сервопривод, есть смысл задуматься о выделении его в контур с дополнительным питанием.

Рассмотрим на примере подключения 12V сервопривода:

Ограничение по количеству подключаемых сервоприводов

На большинстве плат Arduino библиотека Servo поддерживает управление не более 12 сервоприводами, на Arduino Mega это число вырастает до значения 48. При этом есть небольшой побочный эффект использования этой библиотеки: если вы работаете не с Arduino Mega, то становится невозможным использовать функцию analogWrite() на 9 и 10 контактах независимо от того, подключены сервоприводы к этим контактам или нет. На Arduino Mega можно подключить до 12 сервоприводов без нарушения функционирования ШИМ/PWM, при использовании большего количества сервоприводов мы не сможем использовать analogWrite() на 11 и 12 контактах.

Пример использования библиотеки Servo

servo_example.ino// подключаем библиотеку для работы с сервоприводами#include <Servo.h> // создаём объект для управления сервоприводомServo myservo; void setup() { // подключаем сервопривод к 9 пину myservo.attach(9);}  void loop() { // устанавливаем сервопривод в серединное положение myservo.write(90); delay(500); // устанавливаем сервопривод в крайнее левое положение myservo.write(); delay(500); // устанавливаем сервопривод в крайнее правое положение myservo.write(180); delay(500);}

По аналогии подключим 2 сервопривода

2servo_example.ino// подключаем библиотеку для работы с сервоприводами#include <Servo.h> // создаём объекты для управления сервоприводамиServo myservo1;Servo myservo2; void setup() { // подключаем сервоприводы к 11 и 12 пину myservo1.attach(11); myservo2.attach(12);}  void loop() { // устанавливаем сервопривод в серединное положение myservo1.write(90); myservo2.write(90); delay(500); // устанавливаем сервопривод в крайнее левое положение myservo1.write(); myservo2.write(); delay(500); // устанавливаем сервопривод в крайнее правое положение myservo1.write(180); myservo2.write(180); delay(500);}

Библиотека Servo не совместима с библиотекой VirtualWire для работы с приёмником и передатчиком на 433 МГц.

Альтернативная библиотека Servo2

Библиотеки для управления сервоприводами (Servo) и для работы с приёмниками / передатчиками на 433 МГц VirtualWire используют одно и то же прерывание. Это означает, что их нельзя использовать в одном проекте одновременно. Существует альтернативная библиотека для управления сервомоторами — Servo2.

Все методы библиотеки Servo2 совпадают с методами Servo.

Пример использования библиотеки Servo

servo2_example.ino// подключаем библиотеку для работы с сервоприводами// данная библиотека совместима с библиотекой «VirtualWire»// для работы с приёмником и передатчиком на 433 МГц#include <Servo2.h> // создаём объект для управления сервоприводомServo2 myservo; void setup() { // подключаем сервопривод к 9 пину myservo.attach(9);}  void loop() { // устанавливаем сервопривод в серединное положение myservo.write(90); delay(500); // устанавливаем сервопривод в крайнее левое положение myservo.write(); delay(500); // устанавливаем сервопривод в крайнее правое положение myservo.write(180); delay(500);}

Примеры работы для Espruino

В качестве мозга для работы с Multiservo Shield v1 рассмотрим платформы из семейства Espruino, например Iskra JS.

Подключение и настройка

Для старта необходимо и .

Аппаратная часть

На низком уровне драйвер сервоприводов общается с управляющей электроникой по интерфейсу I²C.

Подробнее про I²C в Espruino

  1. Установите Multiservo Shield сверху на Iskra JS методом бутерброда.
  2. Соедините плату Iskra JS с компьютером по USB.
  3. Подключите силовое питание к драйверу сервоприводов через силовой клеммник. Диапазон входного напряжение должен соответствовать рабочему напряжению будущих сервоприводов, т.е. сколько приложили на силовой клеммник, столько и поступит на линию питания сервоприводов. В качестве источника питания рекомендуем взять:

    1. Сборку из батареек AA:
    2. Стационарный блок питания:

Программная часть

  1. Заведите Iskra JS.

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

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

Рассмотрим базовый пример — подключим один сервопривод к 7 пину Multiservo Shield и заставим его плавно вращаться от 0 до 180 градусов.

Код для Iska JS

multiservo-sweep.js
// Настраиваем шину I2C
PrimaryI2C.setup({sda SDA, scl SCL, bitrate 400000});
 
// Создаем новый объект Multiservo
var multiservo = require('@amperka/multiservo').connect(PrimaryI2C);
 
// Создаем новый объект сервопривода
// подключенны к контакту 7
var servo = multiservo.connect(7);
 
 
// Создаём объект анимация
// для плавного изменения параметров вращения мотора
var animServo = require('@amperka/animation').create({
  // Начальное значение в градусах
  from ,
  // Конечное значение в градусах
  to 180,
  // Продолжительность полного перехода
  // за 5 секунд мотор пройдёт диапазон значений от 0 до 180
  duration 5,
  // Шаг обновления: каждые 20 мс
  updateInterval 0.02
}).queue({
  // Начальное значение в градусах
  from 180,
  // Конечное значение в градусах
  to ,
  // продолжительность полного перехода
  // за 5 секунд мотор пройдёт диапазон значений от 180 до 0
  duration 5
});
 
// Обработчик анимации
animServo.on('update', function(val) {
  servo.write(val);
});
 
// Запускаем анимацию
setInterval(() => {
  animServo.play();
}, 1000);

После прошивки устройства вал мотора будет плавно перемещаться от 0 до 180 градусов и так по кругу.

Виды сервоприводов для коллектора теплого водяного пола

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

Нормально открытый сервопривод – устройство обеспечивает продвижение теплоносителя в обычном состоянии. Т.е. при отсутствии напряжения внутренний клапан находится в состоянии «Открыто».

Нормально закрытый сервопривод – устройство, у которого обычное состояние клапана находиться в режиме «Закрыто», следовательно, при отсутствии напряжения, теплоноситель не поступает.

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

Переделка сервопривода в серво непрерывного вращения

Как описывалось выше, сервопривод управляется импульсами переменной ширины, которые задают угол поворота. Текущее положение считывается с потенциометра. Если рассоединить вал и потенциометр, серводвигатель будет принимать положение движка потенциометра как в средней точке. Все эти действия приведут к тому, что будет убрана обратная связь. Это позволяет управлять скоростью и направлением вращения по сигнальному проводу, и создать серво непрерывного вращения

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

Чтобы произвести вышеописанные действия, придется разобрать устройство и внести изменения в конструкцию.

В Ардуино IDE нужно создать небольшой скетч, который поставит качалку в среднее положение.

#include
Servo myservo;
void setup(){
myservo.attach(9);
myservo.write(90);
}
void loop(){
}

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

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

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

Исходный код программы

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

Arduino

volatile int i=0; // объявляем переменную целого типа для хранения значения угла поворота оси серводвигателя
#include <Servo.h> // подключаем заголовочный файл для управления серводвигателем
Servo servo; // указываем имя для нашего серводвигателя
void setup()
{
pinMode(3, OUTPUT); // устанавливаем контакт 3 на вывод данных
pinMode(0, INPUT);// устанавливаем контакт 0 на ввод данных
pinMode(1, INPUT);// устанавливаем контакт 1 на ввод данных
}

void loop()
{
servo.write(i); // устанавливаем позицию оси сервомотора в ‘i’ градусов

if (digitalRead(0)==LOW)
{
if (i<180)
{
i++; // если кнопка, подключенная к pin0, нажата и угол поворота (в градусах) меньше 180
delay(30);
}
}
if (digitalRead(1)==LOW)
{
if (i>0)
{
i–; // если кнопка, подключенная к pin1, нажата и угол поворота (в градусах) больше 0
delay(30);
}
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

volatileinti=;// объявляем переменную целого типа для хранения значения угла поворота оси серводвигателя

#include <Servo.h> // подключаем заголовочный файл для управления серводвигателем

Servoservo;// указываем имя для нашего серводвигателя

voidsetup()

{

pinMode(3,OUTPUT);// устанавливаем контакт 3 на вывод данных

pinMode(,INPUT);// устанавливаем контакт 0 на ввод данных

pinMode(1,INPUT);// устанавливаем контакт 1 на ввод данных

}

voidloop()

{

servo.write(i);// устанавливаем позицию оси сервомотора в ‘i’ градусов

if(digitalRead()==LOW)

{

if(i<180)

{

i++;// если кнопка, подключенная к pin0, нажата и угол поворота (в градусах) меньше 180

delay(30);

}

}

if(digitalRead(1)==LOW)

{

if(i>)

{

i–;// если кнопка, подключенная к pin1, нажата и угол поворота (в градусах) больше 0

delay(30);

}

}

}

Код Ардуино

Теперь перейдем к нашему скетчу:

#include <Wire.h>
#include <MPU6050.h>
#include <Servo.h>   

Servo sg90;          
int servo_pin = 2;

MPU6050 sensor ;
int16_t ax, ay, az ;
int16_t gx, gy, gz ;

void setup (){ 
sg90.attach ( servo_pin );

Wire.begin ( );

Serial.begin  (9600); 

Serial.println  ( "Initializing the sensor" ); 

sensor.initialize ( ); 

Serial.println (sensor.testConnection ( ) ? "Successfully Connected" : "Connection failed"); 
delay (1000); 

Serial.println ( "Taking Values from the sensor" );
delay (1000);
}
void loop (){ 

sensor.getMotion6 (&ax, &ay, &az, &gx, &gy, &gz);
ax = map (ax, -17000, 17000, 0, 180) ;
Serial.println (ax);
sg90.write (ax); 
delay (200);
}

Заключение

Таким образом, мы можем вручную задавать положение вала сервопривода. Но на этом сфера его применения не заканчивается. Сервоприводы используются повсеместно, например, для привода дроссельной заслонки в автомобилях, в системах отопления, которые управляются автоматически, в различной бытовой технике и на производстве. Как отмечалось в начале статьи, они используются наряду с шаговыми двигателями и могут применяться в ЧПУ-станках и 3D-принтерах. Считается, что шаговые двигатели обеспечивают более точное позиционирование, но на практике всё зависит от конкрентных шагового двигателя и сервопривода которые сравнивают, а также от системы, которая ими управляет. Как и обещал прикладываю видео, на котором показано всё что было описано в этой статье.

Предыдущая
ArduinoКак управлять шаговым двигателем через Arduino

Спасибо, помогло!Не помогло

Поделитесь в социальных сетях:FacebookTwitterВКонтакте
Напишите комментарий