Вопросы по работе библиотеки Servo

AlexeySh
Offline
Зарегистрирован: 16.01.2017

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

Как правильно использовать команду Servo.write() при работе с серво с продолжительным вращением?

В документации по библиотеке Servo на сайте www.arduino.cc написано что, при использовании команды Servo.write() с такими серво параметр 0 означает вращение на полной скорости в одну сторону, 90 - отсутствие вращения, 180 - вращение на полной скорости в другую сторону. Написал код по этому алгоритму работы.

Но вот вчера решил проверить какой тип параметров передается этой команде, так как в документации на сайте об этом решили не писать вообще. Открываю файл с описанием этой библиотеки servo.h и читаю, что значение до 200 используется для угловых серво, а для серво с продолжительным вращением используется значения 1500 +-500

Чему верить? Не хотелось бы потом переписывать весь код программы, а серво ещё не приехало. Поэтому проверить сейчас не могу.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Серво такое есть, надо проверить )))
 

AlexeySh
Offline
Зарегистрирован: 16.01.2017
#include <Servo.h> 

#define servoLeftPin 3

Servo leftServo;

void setup()
{
        leftServo.attach(servoLeftPin);
        leftServo.write(90);              // Серво остановлено
}

void loop()
{
        leftServo.write(0); // Вращение на полной скорости в одну сторону 2 сек
        delay(2000);
        leftServo.write(90);     // Остановка на 2 сек  
        delay(2000);
        leftServo.write(180); // Вращение на полной скорости в другую строну 2 сек
        delay(2000);
        leftServo.write(90);    // Остановка на 5 сек
        delay(5000);
}

Проверьте если не трудно. Спасибо заранее.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

На этом коде не работает, крутит оборота по 2,5 - 3 в одну сторону, а потом в обратную сторону, сильно разбираться не стал, мне серва нужна для имитации аналоговой стрелки на 360 градусов

AlexeySh
Offline
Зарегистрирован: 16.01.2017

То есть крутит не 2 секунды подряд, а немного поворачивает и все? А потом через 4 сек в другую сторону? Если так, значит документация кривая на www.arduino.cc выложена. Должно было 2 сек в одну сторону, потом 2 сек пауза, потом 2 сек в другую сторону, потом 5 сек пауза. И так по кругу.

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

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Сегодня проверю, скажу точно, что и как, через пару часиков

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

скетч работает в точности как написано, то-есть вращение по времени

AlexeySh
Offline
Зарегистрирован: 16.01.2017

Значит все нормально. Спасибо Вам ещё раз за проверку.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

AlexeySh пишет:

Значит все нормально. Спасибо Вам ещё раз за проверку.

Не за что! Не могу представить, как это может пригодиться )))
Точного позиционирования ведь не добиться жеж или...???

AlexeySh
Offline
Зарегистрирован: 16.01.2017

А зачем мне точное позиционирование? Серво подключены к колесам двухколесного робота. Ардуино принимает через RF модуль команды с headset NeuroSky MindWave и управляет перемещением робота. Мне нужно только будет подогнать интервалы включения и скорость вращения серво для адекватной реакции на команды. Делал подобное просто на DC двигателях с управлением через драйверы, там точность оставляет желать лучшего. А с серво точности вполне достаточно. И управление проше получается.

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