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

Сервопривод Ардуино (англ. — arduino servo) — устройство с электрическим мотором, которое можно повернуть на определенный угол и оставить в этом положении на определенное время.

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

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

Изначально сервоприводы начали использовать еще задолго до появления Ардуино, скажем так, в мире пультов дистанционного управления (RC), как правило, для управления рулевым колесом игрушечных машинок или крыльями самолетов. Со временем они нашли свое применение в робототехнике, автоматизации и, конечно же, в мире Ардуино.

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

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

Скетч ниже заставит сервопривод переместиться в позицию 0 градусов, подождать 1 секунду, затем повернуться на 90 градусов, подождать еще одну секунду, после повернуться на 180 градусов и перейти в первоначальное положение.

Также дополнительно мы используем библиотеку servo — скачайте ниже или в нашем разделе Библиотеки.

Содержимое zip-файла размещается в папку arduino-xxxx/hardware/liraries.

// Подклоючаем библиотеку Servo #include <Servo.h> // Пин для сервопривода int servoPin = 3; // Создаем объект Servo Servo1; void setup() { // Нам нужно подключить сервопривод к используемому номеру пина Servo1.attach(servoPin); } void loop(){ // 0 градусов Servo1.write(0); delay(1000); // 90 градусов Servo1.write(90); delay(1000); // 180 градусов Servo1.write(180); delay(1000); }

Если сервомотор подключен к другому цифровому контакту, просто измените значение servoPin на значение используемого цифрового вывода.

Помните, что использование библиотеки Servo автоматически отключает функцию PWM для PWM-контактов 9 и 10 на Arduino UNO и аналогичных платах.

Наш код просто объявляет объект и затем инициализирует сервопривод с помощью функции servo.attach(). Мы не должны забывать подключать серво библиотеку. В цикле мы устанавливаем сервопривод на 0 градусов, ждем, а затем устанавливаем его на 90, а затем на 180 градусов.

Второй скетч для варианта с Arduino Diecimilia ниже.

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

Сам код такой:

#include <Servo.h> Servo servo1; Servo servo2; void setup() { pinMode(1,OUTPUT); servo1.attach(14); //analog pin 0 //servo1.setMaximumPulse(2000); //servo1.setMinimumPulse(700); servo2.attach(15); //analog pin 1 Serial.begin(19200); Serial.println(«Ready»); } void loop() { static int v = 0; if ( Serial.available()) { char ch = Serial.read(); switch(ch) { case ‘0’…’9′: v = v * 10 + ch — ‘0’; break; case ‘s’: servo1.write(v); v = 0; break; case ‘w’: servo2.write(v); v = 0; break; case ‘d’: servo2.detach(); break; case ‘a’: servo2.attach(15); break; } } Servo::refresh(); }

Стандартные методы серво-библиотеки

attach(int)

Соединение пина и сервопривода. Вызывает pinMode. Возвращает 0 при ошибке.

detach()

Отсоединение пина от сервопривода.

write(int)

Установка угла сервопривода в градусах, от 0 до 180.

read()

Возвращает значение, установленное write(int).

attached()

Возвращает 1, если серво в настоящее время подключен.

Дополнительные примеры скетчей

Следующий код позволяет вам контролировать серводвигатель на пине 2 с помощью потенциометра на аналоговом 0.

#include <SoftwareServo.h> SoftwareServo myservo; // create servo object to control a servo int potpin = 0; // analog pin used to connect the potentiometer int val; // variable to read the value from the analog pin void setup() { myservo.attach(2); // attaches the servo on pin 2 to the servo object } void loop() { val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180) myservo.write(val); // sets the servo position according to the scaled value delay(15); // waits for the servo to get there SoftwareServo::refresh(); }

Следующий код — это поворот (пинг/понг) на выводе A0 с переменной скоростью.

#include <SoftwareServo.h> SoftwareServo myservo; // create servo object to control a servo #define pinServo A0 int speed = 1; int limits = {30,150}; // set limitations (min/max: 0->180) boolean refresh = false; // toggle refresh on/off void setup() { Serial.begin(9600); // attaches the servo on pin to the servo object myservo.attach(pinServo); // init angle of servo inbetween two limitations myservo.write((limits-limits)/2); } void loop() { // refresh angle int angle = myservo.read(); // change direction when limits if (angle >= limits || angle <= limits) speed = -speed; myservo.write(angle + speed); // set refresh one time / 2 refresh = refresh ? false : true; if (refresh) SoftwareServo::refresh(); Serial.print(«Angle: «); Serial.println(angle); }

Дополнительные возможности

Управление сервоприводами на Ардуино очень простое и мы можем использовать еще несколько интересных фишек.

Контроль точного времени импульса

Ардуино имеет встроенную функцию servo.write(градусы), которая упрощает управление сервомоторами. Однако не все сервоприводы соблюдают одинаковые тайминги для всех позиций. Обычно 1 миллисекунда означает 0 градусов, 1,5 миллисекунды — 90 градусов, и, конечно, 2 миллисекунды означают 180 градусов. Некоторые сервоприводы имеют меньший или больший диапазон.

Для лучшего контроля мы можем использовать функцию servo.writeMicroseconds(микросекунды), которая в качестве параметра принимает точное количество микросекунд. Помните, 1 миллисекунда равна 1000 мкс.

Несколько сервоприводов

Чтобы использовать более одного сервопривода в Ардуино нам нужно объявить несколько серво-объектов, прикрепить разные контакты к каждому из них и обратиться к каждому индивидуально. Итак, нам нужно объявить объекты — столько сколько нам нужно:

// Создаем объекты Servo Servo1, Servo2, Servo3;

Затем нам нужно прикрепить каждый объект к сервомотору. Помните, что каждый сервопривод использует отдельный пин:

Servo1.attach(servoPin1); Servo2.attach(servoPin2); Servo3.attach(servoPin3);

В конце концов, мы должны обращаться к каждому объекту индивидуально:

Servo1.write(0); // Задать для Servo 1 позицию в 0 градусов Servo2.write(90); // Задать для Servo 2 позицию в 90 градусов

Подключение. Земля сервоприводов идёт на GND Arduino, питание на 5В или VIN (в зависимости от входа). И, в конце концов, каждый привод должен быть подключен к отдельному цифровому выводу.

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

Управление мышью

Чтобы управлять серво с помощью мыши, вот простой код:

/** * Servocontrol (derived from processing Mouse 1D example.) * * Updated 24 November 2007 */ // Use the included processing code serial library import processing.serial.*; int gx = 15; int gy = 35; int spos=90; float leftColor = 0.0; float rightColor = 0.0; Serial port; // The serial port void setup() { size(720, 720); colorMode(RGB, 1.0); noStroke(); rectMode(CENTER); frameRate(100); println(Serial.list()); // List COM-ports //select second com-port from the list port = new Serial(this, Serial.list(), 19200); } void draw() { background(0.0); update(mouseX); fill(mouseX/4); rect(150, 320, gx*2, gx*2); fill(180 — (mouseX/4)); rect(450, 320, gy*2, gy*2); } void update(int x) { //Calculate servo postion from mouseX spos= x/4; //Output the servo position ( from 0 to 180) port.write(«s»+spos); // Just some graphics leftColor = -0.002 * x/2 + 0.06; rightColor = 0.002 * x/2 + 0.06; gx = x/2; gy = 100-x/2; }

Вам не обязательно использовать этот код, вы также можете отправлять команды на плату arduino с серийного монитора Arduino IDE. Позиция сервопривода от 0 до 180 — это команды 0 и 180 сек соответственно.

В основном этот код берет позицию mouseX (от 0 до 720) и делит на 4, чтобы получить угол для сервопривода (0-180). Наконец, значение выводится на последовательный порт с префиксом ‘s’.

Примечание: «s» на самом деле должен быть суффиксом, но поскольку это повторяется, это не имеет значения для результата.

Не забудьте сначала проверить с помощью println(Serial.list ()) COM-порт, который следует использовать.

Сервоприводы с непрерывным вращением

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

Например, функция Servo1.write(0) заставит сервомотор вращаться против часовой стрелки на полной скорости. Функция Servo1.write(90) остановит двигатель, а Servo1.write(180) будет вращать вал по часовой стрелке на полной скорости.

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

Устройство сервомотора (servo)

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

Что такое сервопривод. Схема устройства сервопривода

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

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

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

Схема подключения сервопривода к Arduino обычно следующая: черный провод присоединяем к GND, красный провод присоединяем к 5V, оранжевый/желтый провод к аналоговому выводу с ШИМ (Широтно Импульсная Модуляция). Управление сервоприводом на Ардуино достаточно просто, но по углам поворота сервомоторы бывают на 180° и 360°, что следует учитывать в робототехнике.

Для занятия нам понадобятся следующие детали:

  • Плата Arduino Uno / Arduino Nano / Arduino Mega;
  • Макетная плата;
  • USB-кабель;
  • 1 сервопривод;
  • 1 потенциометр;
  • Провода «папа-папа» и «папа-мама».

Схема подключения сервопривода к Ардуино UNO

В первом скетче мы рассмотрим как управлять сервоприводом на Arduino с помощью команды myservo.write(0). Также мы будем использовать стандартную библиотеку Servo.h. Подключите сервомашинку к плате Ардуино, согласно схеме на фото выше и загрузите готовый скетч. В процедуре void loop() мы будем просто задавать для сервопривода необходимый угол поворота и время ожидания до следующего поворота.

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

#include <Servo.h> // подключаем библиотеку для работы с сервоприводом Servo servo1; // объявляем переменную servo типа «servo1» void setup() { servo1.attach(11); // привязываем сервопривод к аналоговому выходу 11 } void loop() { servo1.write(0); // ставим угол поворота под 0 delay(2000); // ждем 2 секунды servo1.write(90); // ставим угол поворота под 90 delay(2000); // ждем 2 секунды servo1.write(180); // ставим угол поворота под 180 delay(2000); // ждем 2 секунды }

Пояснения к коду:

  1. Стандартная библиотека Servo.h содержит набор дополнительных команд, которая позволяет значительно упростить скетч;
  2. Переменная Servo необходима, чтобы не запутаться при подключении нескольких сервоприводов к Ардуино. Мы назначаем каждому приводу свое имя;
  3. Команда servo1.attach(10) привязывает привод к аналоговому выходу 10.
  4. В программе мы вращаем привод на 0-90-180 градусов и возвращаем в начальное положение, поскольку процедура void loop повторяется циклично.

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

Подключение сервопривода и потенциометра к Ардуино Уно

Ардуино позволяет не только управлять, но и считывать показания с сервопривода. Команда myservo.read(0) считывает текущий угол поворота вала сервопривода и его мы можем увидеть на мониторе порта. Предоставим более сложный пример управления сервоприводом потенциометром на Ардуино. Соберите схему с потенциометром и загрузите скетч управления сервоприводом.

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

#include <Servo.h> // подключаем библиотеку для работы с сервоприводом Servo servo; // объявляем переменную servo типа «servo» void setup() { servo.attach(10); // привязываем сервопривод к аналоговому выходу 10 pinMode(A0, INPUT); // к аналоговому входу A0 подключим потенциометр Serial.begin(9600); // подключаем монитор порта } void loop() { servo.write(analogRead(A0)/4); // передает значения для вала сервопривода Serial.println (analogRead(A0)); // выводим показания потенциометра на монитор Serial.println (analogRead(A0)/4); // выводим сигнал, подаваемый на сервопривод Serial.println (); // выводим пустую строчку на монитор порта delay(1000); // задержка в одну секунду }

  1. В этот раз мы присвоили имя для сервопривода в скетче, как servo;
  2. Команда servo.write(analogRead(A0)/4) передает значения для вала сервопривода — получаемое напряжение с потенциометра мы делим на четыре и оправляем данное значение на сервопривод.
  3. Команда Serial.println (servo.read(10)) считывает значение угла поворота вала сервопривода и передает его на монитор порта.

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

Подключение сервоприводов к Arduino

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

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

Используемые компоненты (купить в Китае):

• Управляющая плата

Arduino UNO 16U2, либо более дешевая Arduino UNO CH340G,

Arduino Nano CH340G, либо Arduino MEGA 16U2, либо более дешевая Arduino MEGA CH340G,

• Сервоприводы

Сервопривод SG90

Сервопривод MG995

Сервопривод MG996

• Соединительные провода

Соединительные провода папа-папа

Полезная вещь для проверки сервориводов

Тестер сервоприводов

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

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

Как видно из картинке, импульс шириной в 544мкс выставит выводной вал в положение 0°, 1520мск соответствует углу в 90°, а 2400мкс соответствует 180°.

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

Для подключения к контроллеру от сервопривода тянется 3 провода обжатых стандартным 3 пиновым разъемом с шагом 2.54мм . Цвета проводов могут варьироваться. Коричневый или черный — земля (GND), красный — плюс источника питания (VTG), оранжевый или белый — управляющий сигнал (SIG).

У старых Ардуин, укомплектованных мегой 8, имеется всего три ШИМ вывода (digital 9,10,11), у Ардуин укомплектованных мегой 168 или 328 их 6 (digital 3,5,6,9,10,11). Семейство Arduino MEGA имеет на своем борту целых 14 ШИМ выводов.

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

GND на любой из GND пинов­­­ ардуино

VTG на + 5 вольт на ардуино

SIG на ШИМ (PWM) вывод ардуино

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

• ​ Вариант 1

Можно приобрести блок питания на 5 или 6 вольт, в зависимости от напряжения питания вашего сервопривода и питать сервопривод от него.

В случае, если под рукой нет стабилизированного источника питания на 5Вольт, но имеется любой другой источник питания (блок, аккумулятор, сборка из батареек) с напряжением 6-12В, то из него можно легко получить требуемое напряжение для сервопривода. Поможет нам в этом стабилизатор. Рассмотрим самый простой L7805/L7806, требующий минимум деталей внешней обвязки.

Стабилизатор имеет 3 ноги:

1 — Вход. На него подается напряжение от 6 или 7(в зависимости от модели) до 12Вольт

2 — Общий минус

3 — Выход 5 или 6 вольт (в зависимости от модели)

7805 отечественный аналог КР142ЕН5А — выходное напряжение 5Вольт.

7806 отечественный аналог КР142ЕН5Б — выходное напряжение 6Вольт.

Как видно из рисунка необходима установка конденсаторов, можно и без них, но выходное напряжение будет не стабильным. Рекомендуемые номиналы конденсаторов: на входе 0.33 мкФ, на выходе 0.1 мкФ. Я всегда ставлю два электорлита по 100мкФ. Чем больше — тем лучше.

P.S. Не забудьте соединить земли источников питания

Программный код управления

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

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

пример программного кода:

//Тестировалось на Arduino IDE 1.0.1 // добавляем библиотеку для работы с сервоприводами #include <Servo.h> // для дальнейшей работы назовем 9 пин как servoPin #define servoPin 9 // 544 это эталонная длина импульса при котором сервопривод должен принять положение 0° #define servoMinImp 544 // 2400 это эталонная длина импульса при котором сервопривод должен принять положение 180° #define servoMaxImp 2400 Servo myServo; void setup() { myServo.attach(servoPin, servoMinImp, servoMaxImp); // устанавливаем пин как вывод управления сервоприводом, // а также для работы сервопривода непосредственно в диапазоне углов от 0 до 180° задаем мин и макс значения импульсов. // импульсы с большей или меньшей длиной восприниматься не будут. // для сервоприводов даже одной партии значения длин импульсов могут отличаться, может быть даже и 584-2440. // поэкспериментируйте и найдите идеальные длины импульсов конкретно для вашего сервопривода. } void loop() { // устанавливаем качалку сервопривода в положение 0°(т.к.импульс равен 544мкс) myServo.writeMicroseconds(servoMinImp); delay(2000); // в данной функции можно задавать длины импульсов непосредственно числами. // 90°(т.к.vимпульс равен 1520мкс) myServo.writeMicroseconds(1520); delay(2000); // 180°(т.к. импульс равен 2400мкс) myServo.writeMicroseconds(servoMaxImp); delay(2000); }

• ​ Вариант 2

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

пример программного кода:

//Тестировалось на Arduino IDE 1.0.1 #include <Servo.h> Servo myservo; void setup() { // устанавливаем пин как вывод управления сервой myservo.attach(9); } void loop() { // устанавливаем угол 0° myservo.write(0); delay(2000); // устанавливаем угол 90° myservo.write(90); delay(2000); // устанавливаем угол 180° myservo.write(180); delay(2000); }

Также вам могут понадобиться следующие команды:

myservo.read();
Считывает текущий угол поворота сервопривода, возвращает значение типа int — угол от 0 до 180 градусов.

myservo.attached();
Проверяем, привязан ли сервопривод. Возвращает логическое значение bool.

myservo.detach();
Отключает сервопривод от пина.

Скачать библиотеку Servo.h

Данная библиотека автоматически устанавливается вместе с Arduino IDE. Но вы можете отдельно Для установки библиотеки просто распакуйте zip архив в папку «C:\Program Files (x86)\Arduino\libraries» или в то место, где у васт установлена среда разработки Arduin IDE. Если у вас запущена программа Arduino IDE, то для работы с новой библиотекой её необходимо перезапустить.

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

Для использование библиотеки Servo необходимо подключить ее в свой скетч и создать переменную типа servo. Сделать это очень просто:

1 2 3 4 5 6 7 8 9 10 11 #include <Servo.h> Servo myservo; void setup() { // CODE… } void loop() { // CODE… }

attach()

Указывает вывод к которому подключен сервопривод.

Синтаксис, параметры, возвращаемые значения, пример

Синтаксис

servo.attach(pin, min, max);

Параметры

pin — Обязательный параметр. Цифровой пин к которому подключен сигнальный провод сервопривода.
min — Необязательный параметр. Ширина импульса в микросекундах, соответствующая минимальному (угол 0 градусов) положению сервопривода. (по умолчанию 544)
max — Необязательный параметр. Ширина импульса в микросекундах, соответствующая максимальному (угол 180 градусов) положению сервопривода.

Возвращаемые значения

Нет

1 2 3 4 5 6 7 8 9 10 11 #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); } void loop() { // CODE… }

write()

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

Синтаксис, параметры, возвращаемые значения, пример

servo.write(angle);

angle — Обязательный параметр. Устанавливает угол от 0 до 180 градусов. При использовании сервопривода постоянного вращения значение 90 используется для неподвижного состояния. Значение 0 для максимальной скорости кручения в одну сторону, а 180 для максимальной скорости кручения в другую сторону.

Нет

1 2 3 4 5 6 7 8 9 10 11 12 #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); myservo.write(90); // Поворачивает сервопривод на среднее положение } void loop() { // CODE… }

writeMicroseconds()

Поворачивает сервопривод на угол заданный в микросекундах. С сервоприводами постоянного вращения работает по таком же принципу как и функция write().

Синтаксис, параметры, возвращаемые значения, пример

servo.writeMicroseconds(ms);

ms — Обязательный параметр. Значение в микросекундах

Нет

1 2 3 4 5 6 7 8 9 10 11 12 #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); myservo.writeMicroseconds(1500); // Поворачивает сервопривод на среднее положение } void loop() { // CODE… }

read()

Возвращает текущее положение сервопривода.

Синтаксис, параметры, возвращаемые значения, пример

servo.read();

Нет

Int от 0 до 180.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <Servo.h> Servo myservo; void setup() { Serial.begin(9600); // Открываем последовательный порт myservo.attach(9); int position = myservo.read(); // Считываем положение сервопривода Serial.print(«Текущее положение сервопривода: «); Serial.println(position); // Отправляем значение угла на запись в последовательный порт } void loop() { // CODE… }

attached()

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

Синтаксис, параметры, возвращаемые значения, пример

servo.attached();

Нет

boolean true — если пин был указан и false — если нет

1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <Servo.h> Servo myservo; void setup() { Serial.begin(9600); // Открываем последовательный порт if(!myservo.attached()) { myservo.attach(9); // Указываем пин если этого не было сделано раньше } } void loop() { // CODE… }

detach()

Отсоединяет экземпляр класса от пина. При отсоединения всех сервоприводов, заблокированные ШИМ выводу снова станут доступны.

Синтаксис, параметры, возвращаемые значения, пример

Servo.detach()

Нет

Нет

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <Servo.h> Servo myservo; void setup() { Serial.begin(9600); // Открываем последовательный порт myservo.attach(9); // Указываем пин если этого не было сделано раньше int position = myservo.read(); // Считываем положение сервопривода Serial.print(«Текущее положение сервопривода: «); Serial.println(position); // Отправляем значение угла на запись в последовательный порт myservo.detach(); // Освобождаем пин, к которому был подключен сервопривод } void loop() { // CODE… }

3Скетч для управления коллекторным двигателем

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

int Speed = 0; const int IA1 = 5; // Управляющий вывод 1 const int IA2 = 6; // Управляющий вывод 2 void setup() { pinMode(IA1, OUTPUT); pinMode(IA2, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { String s = Serial.readString(); Speed = s.toInt(); // преобразуем считанную строку в число } if (Speed > 0) { // если число положительное, вращаем в одну сторону analogWrite(IA1, Speed); analogWrite(IA2, LOW); } else { // иначе вращаем ротор в другую сторону analogWrite(IA1, LOW); analogWrite(IA2, -Speed); } }

Максимальная скорость вращения – при наибольшем значении напряжения, которое может выдать драйвер двигателя. Мы можем управлять скоростью вращения, подавая напряжения в диапазоне от 0 до 5 Вольт. Так как мы используем цифровые ножки с ШИМ, напряжение на них регулируется командой analogWtirte(pin, value), где pin – номер вывода, на котором мы хотим задать напряжение, а аргумент value – коэффициент, пропорциональный значению напряжения, принимающий значения в диапазоне от 0 (напряжение на выводе равно нулю) до 255 (напряжение на выводе равно 5 В).

This entry was posted in Ремонт. Bookmark the <a href="https://kabel-house.ru/remont/upravlenie-servoprivodom-arduino/" title="Permalink to Управление сервоприводом ардуино" rel="bookmark">permalink</a>.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *