Arduino и серва FS5106B

Тема в разделе "Arduino & Shields", создана пользователем Refresh, 14 окт 2013.

  1. Refresh

    Refresh Нуб

    Добрый вечер, сегодня взял у вас две сервы FS5106B. Обе вроде работают, правда при удержании угла звук как у трансформатора и вибрируют, но это ладно. Написал скеч, что бы при нажатии кнопки серва поворачивался на 0 градусов, если сейчас стоит 180 и наоборот. Срабатывает это через раз, хотя кнопку притянул к земле, а так же поставил тестовый светодиод, который загорается при нажатии(может дело в помехах, забыл взять триггер Шмитта ). Но основная проблема, что при работе этого кода с участием одной из этих серв Arduino уходит в перезагрузку (перед этим гул в серве мелено уменьшается). Если надо могу приложить код, фото схемы, и видео.
     
  2. Refresh

    Refresh Нуб

    UPD. Теперь и со второй сервой проблемы:
    Треск при повороте к 0 градусам, треск начинает с 3 градусов (т.е. в самом конце поворота к 0).
    Гул и вибрация пропадает, когда выставил ее на 90 градусов(без нагрузки),
    Заметно греется низ сервы.

    Я не претендую на какие-то сверх требования к этой серве, т.к. есть более дорогие и качественные аналоги, но она же должна хоть как-то нормально работать =)
     
  3. Megakoteyka

    Megakoteyka Оракул Модератор

    А схема подключения и код будут?
     
  4. Refresh

    Refresh Нуб

    Код выложил на Pastebin, на мой взгляд там читать легче( http://pastebin.com/zqm0ThcW).
    Принципиальная схема и собранная на плате:
    [​IMG]

    [​IMG]

    [​IMG]

    Видео:
    Когда снимал видео, вторая серва перестала трещать при приближении к 0. Но начала первая, это слышно.

     
  5. Megakoteyka

    Megakoteyka Оракул Модератор

    Для начала добавьте отладочный вывод в монитор:
    Код (Text):
    Serial.print("...");
    Некоторые сервы нервно себя ведут в крайних положениях, попробуйте 10 и 170, например.
     
  6. Refresh

    Refresh Нуб

    Добавил вывод в порт в тело условия:
    Код (Text):
    if (digitalRead(pinSwitch) == HIGH){
        Serial.print("1");
        ......
     
    Светодиод загорается, но "1" не всегда выводится, но это, наверное можно списать на помехи. Можно попробовать использовать аналоговый вход и смотреть "величину сигнала".

    По Вашему совету сделал 170 и 10, серва перестала жужать и вибрировать. Спасибо, запомню это. Это болезнь всех серв или бюджетников? Серва #2 вроде при этих условиях нормально работает, у сервы #1, жужание начинается с 165 градусов. Очень жаль, что сервы так работают, это считается браком?
     
  7. Refresh

    Refresh Нуб

    Подключил кнопку к аналоговому порту, помех нет, когда кнопка не нажата analogRead(); возвращает 0, при нажатии 1023, что логично. Но я понял в чем ошибка(буквально сейчас), в неправильном коде функции loop. У меня есть код:
    Код (Text):
    if (a180 == true){
        myservo1.write(160);
        delay(2000);
      }else{
        myservo1.write(10);
        delay(2000);
      }
    Причина - delay(2000);, который выполняется в любом случае.

    Но насчет серв вопрос еще открыт =)
     
  8. Megakoteyka

    Megakoteyka Оракул Модератор

    Вместо delay() используйте millis() и переменную для хранения времени начала отсчета.
    Сильно дорогие сервы не трогал, но обычные, вроде "авиамодельных", этим часто страдают. У меня 4 сервы из самолета - нервничают как хотят ))
    Просто учитывайте это в механике и не используйте крайние положения.
    Не думаю, что из-за этого их по гарантии заменят :)
    По сервам лучше покурить робофорум - там они должны быть обсосаны со всех сторон.
     
    Refresh нравится это.
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    Кнопку всегда читайте библиотекой Debounce, она уберет дребезг и станет гораздо лучше)
     
    Refresh нравится это.
  10. Refresh

    Refresh Нуб

    Учту Ваши советы, спасибо!
     
  11. Megakoteyka

    Megakoteyka Оракул Модератор

    Всегда пожалуйста :)
     
  12. Refresh

    Refresh Нуб

    Сейчас попробовал двумя сервами под нагрузкой управлять, сервы питаются от Arduino. Arduino в ребут уходит, когда обе сервы с нагрузкой крутятся. Попробоватл мультиметром мерить напряжение вывода 5v на Aurdino, перед ребутом падение до 3 вольт. Запитал сервы отдельно, китайским БП с возможностью установки напряжения, у него тоже падение напряжение происходит, чуть ли не до 1,5 вольт (с 5,5В). Могу предположить, что это косяки китайского БП, надо брать лабораторный =) Как я понимаю нет смысла управлять сервой через транзистор(если питать их от другого БП), или все же есть? Да и вообще как-то странно, что бы питать серву отдельно, везде читал, что напрямую с ножки МК можно.
     
  13. Megakoteyka

    Megakoteyka Оракул Модератор

    А китайский БП сколько тока умеет выдавать?
    Arduino питается от USB?
    Говорят, что данные сервы жрут до 400мА. USB выдает до 500мА.
     
  14. Refresh

    Refresh Нуб

    Каюсь, самое очевидное не догадался проверить. Китайский БП, если верить кривой наклейке на корпусе, должен выдавать до 500мА. Обе сервы у меня под нагрузкой, поэтому в худшем случае жрут 800мА, при этом питаются от Arduino, которая подключена к USB. Запитал одну серву от китайского БП, другую оставил питаться от Arduino. В итоге при предельных нагрузках китайский БП не справляется, падение напряжение с 5,5В до 1,5В =) В той теме, которую вы указали, 18 серв потребляют 7 ампер, как я понимаю батарейки с такой нагрузкой не справятся, или я ошибаюсь?
     
  15. Megakoteyka

    Megakoteyka Оракул Модератор

    Возьмите Li-Po аккумулятор для авиамодели, например, - они дофига ампер умеют выдавать.