Проблема с сервоприводом FS5106B

Тема в разделе "Arduino & Shields", создана пользователем unk, 18 янв 2013.

  1. unk

    unk Нуб

    Здравствуйте.
    Не получается заставить работать сервопривод с 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)
    . Что я не так делаю? Заранее спасибо.
     
  2. Lizard_2k1

    Lizard_2k1 Нерд

    осмелюсь предположить
    что
    и
    Код (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]
     
  3. Lizard_2k1

    Lizard_2k1 Нерд

    Сервопривод FS5106B
    Скорость вращения: 0,18 сек/60° при 4,8 В; 0,16 сек/60° при 6 В

    от 0 до 180 ровно 3 раза по 60°.
    0,16 *3 = 0,48 т.е практически полсекунды, а если
    то 0,18 * 3 = 0,54 больше половины секунды.
     
  4. unk

    unk Нуб

    Что-то мне вообще непонятно.
    Попробовал такой скетч
    Код (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. Когда сервопривод начинает "дрыгаться" светодиод странно моргает (уже писал в первом сообщении)
     
  5. nailxx

    nailxx Официальный Нерд Администратор

    Типичная проблема с питанием. Серва просаживает питание, микроконтроллеру его не хватает, он перезагружается и всё начинается заново. В момент перезагрузки и мигает светодиод.

    Запитайте Arduino от другого USB-порта. Либо, что лучше, используйте для сервы отдельный источник питания.
     
  6. unk

    unk Нуб

    Спасибо, попробую.

    Подвел отдельное питание (6В) - все работает. Единственное, в положении 0 градусов и 180 градусов сервопривод вибрирует. Это нормально?
     
  7. apomelov

    apomelov Нерд

    Крайние положения из-за ограничителя сервомотор может чуть "не доставать". Или значения длин управляющий импульсов неточно соответсвуют значениям по умолчанию библиотеки Servo -- опять же в крайних положениях сервомотор не может достать целевого угла. Попробуйте урезать рабочий интервал на пару градусов с каждой стороны.