Здравствуйте. Не получается заставить работать сервопривод с Arduino UNO. Подключил следующим образом: красный контакт - на 5v, коричневый - gnd, оранжевый - 9-й пин arduino. Загружаю программу из wiki Код (Text): #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); } void loop() { myservo.write(90); // устанавливаем сервопривод в серединное положение delay(500); myservo.write(0); // устанавливаем сервопривод в крайнее левое положение delay(500); myservo.write(180); // устанавливаем сервопривод в крайнее правое положение delay(500); } сервопривод "дергается" каждые секунды 2 на градусов 5-10 в одну сторону и светодиод на arduino моргает. При запуске монитора порта в консоль валятся ошибки: Код (Text): Ошибка в Serial.serialEvent() java.io.IOException: Ошибка ввода/вывода in nativeavailable at gnu.io.RXTXPort.nativeavailable(Native Method) at gnu.io.RXTXPort$SerialInputStream.available(RXTXPort.java:1598) at processing.app.Serial.serialEvent(Serial.java:258) at gnu.io.RXTXPort.sendEvent(RXTXPort.java:774) at gnu.io.RXTXPort.eventLoop(Native Method) at gnu.io.RXTXPort$MonitorThread.run(RXTXPort.java:1644) . Что я не так делаю? Заранее спасибо.
осмелюсь предположить что и Код (Text): delay(500); три раза как то связаны.. 1я итерация: Код (Text): 1 шаг - от 0 до 90 2 шаг - от 90 до 0 3 шаг - от 0 до 180 2я итерация и все следующие Код (Text): 1 шаг - от 180 до 90 2 шаг - от 90 до 0 3 шаг - от 0 до 180 лично меня настораживает 3 шаг в каждой итерации.. название функции из стактрейса (available) наводит на мысль о проверке доступности на запись (Таки придется заглянуть в gnu.io.RXTXPort). Отсюда догадка что время 3 шага больше полсекунды. Модель сервопривода не подскажете? Упс. Недоглядел [offtop] мне показалось или тут был еще один ответ?? [/offtop]
Сервопривод FS5106B Скорость вращения: 0,18 сек/60° при 4,8 В; 0,16 сек/60° при 6 В от 0 до 180 ровно 3 раза по 60°. 0,16 *3 = 0,48 т.е практически полсекунды, а если то 0,18 * 3 = 0,54 больше половины секунды.
Что-то мне вообще непонятно. Попробовал такой скетч Код (Text): #include <Servo.h> Servo myservo; void setup() { Serial.begin(9600); myservo.attach(9); } void loop() { for (int i=0; i<=180; i += 30) { Serial.println(i); myservo.write(i); delay(2000); } } Сервопривод поворачивается на 0 (если он там до этого не был), в монитор порта выводится 0, а потом сервопривод начинает просто "дрыгаться" и никуда не поворачивается. В консоль IDE сыпятся ошибки, как из первого сообщения, в монитор порта ничего не выводится. Еще меня смущает светодиод на arduino. Когда сервопривод начинает "дрыгаться" светодиод странно моргает (уже писал в первом сообщении)
Типичная проблема с питанием. Серва просаживает питание, микроконтроллеру его не хватает, он перезагружается и всё начинается заново. В момент перезагрузки и мигает светодиод. Запитайте Arduino от другого USB-порта. Либо, что лучше, используйте для сервы отдельный источник питания.
Спасибо, попробую. Подвел отдельное питание (6В) - все работает. Единственное, в положении 0 градусов и 180 градусов сервопривод вибрирует. Это нормально?
Крайние положения из-за ограничителя сервомотор может чуть "не доставать". Или значения длин управляющий импульсов неточно соответсвуют значениям по умолчанию библиотеки Servo -- опять же в крайних положениях сервомотор не может достать целевого угла. Попробуйте урезать рабочий интервал на пару градусов с каждой стороны.