Контрол на скоростта на движение, клас серво управление

Серия статии: Arduino с помощта на сервосистеми #5

Нека се опитаме да добавим възможност за по-плавна промяна на позицията на серво, точно както в примера за независимо управление на няколко серво

За да направите това, добавете подходящите променливи и функции, които ги задават.

В допълнение към функцията void MoveTo(int movepos), която вече направихме, нека добавим функцията void MoveTo(int movepos, float movespeed). Те имат едно и също име, но различен брой аргументи. Тази опция се използва вместо посочване на стойностите на липсващите аргументи по подразбиране, когато функционалността зависи силно от броя на аргументите. В този случай извикването на MoveTo(50) ще премести сервото до посочената позиция възможно най-бързо. Но извикването на MoveTo(50, 1.0) ще съответства на плавно движение със скорост от 1 оборот в минута (6 градуса в секунда). Тъй като сервото не ви позволява да променяте скоростта на движение, необходимото завъртане ще бъде разделено на няколко микродвижения от 1 градус, интервалът между които ще бъде такъв, че да осигури зададената скорост. За да определим този интервал, извършваме прости изчисления

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

Не забравяйте да проверите дали необходимото движение е извън зададените граници. Тъй като трябва да извършите една и съща проверка и за двете реализации на функцията MoveTo(), има смисъл да разпределите отделна функция за нея

Връзката е стандартна, към втори и трети цифрови изходи:

контрол

Сега, когато стартирате програмата, първото серво, както в предишния пример, ще вземепосочената позиция. Но вторият ще се върти доста бавно (първоначалната му позиция е 90 градуса, за да се премести в позиция от 150 градуса, трябва да завъртите 60 градуса. Скорост от 0,5 оборота в минута съответства на 3 градуса в секунда, т.е. движението ще отнеме 20 секунди). Въпреки че такова движение не е съвсем гладко, то все пак ви позволява да управлявате по-гъвкаво сервото и само една команда е достатъчна.