Неправильная работа сервоприводов

Тема в разделе "Arduino & Shields", создана пользователем Retarged, 23 апр 2018.

  1. Retarged

    Retarged Нуб

    Имеются два сервопривода DS3218mg, при повороте выяснилось, что сервы перекручиваются после нужного угла. К примеру, 130 градусов в скетче на деле дают поворот сервы на 180. В чем может быть проблема?
    Arduino UNO + Multiservo Shield, питается все это Кроной 9v через dc-dc lm2596.
    Заранее спасибо!
     
  2. parovoZZ

    parovoZZ Гуру

    В коде проблема. Но так как код не доступен, будем гадать на кофейной гуще.
     
  3. Retarged

    Retarged Нуб

    Как то так
    Код (C++):
    #include <Multiservo.h>
    String readString; // String which stores data about angles;
    int az = 0; // Azimuth
    int alt = 0; // Altitude
    int byte_counter = 0; // Counter of bytes
    Multiservo altitude_servo; // Servo which rotates vertically

    Multiservo azimuth_servo; // Servo which rotates horizontally

    void setup()
    {

        Serial.begin(9600); // Bluetooth connection transmission speed (HC-05 Module)
        azimuth_servo.attach(16); // Pin 18 is busy bt azimuth_servo
        altitude_servo.attach(17); // Pin 17 is busy by altitude_servo
        azimuth_servo.write(90);
        altitude_servo.write(0);
    }

    void loop()
    {
        // ANGULAR VALUES RECEIVING
        while (Serial.available()) {
            char c = Serial.read(); // Reading the string from Bluetooth connection buffer
            if (c == ',') {
                break; // Break then byte is equal to a comma }
                readString += c; // readString = required angle
                byte_counter++; // Symbol counter
                delay(10); // Wait 10 ms for saving in buffer memory
            }
            // ANGLES SETTING UP
            if (readString.length() > 0) {
                int temporary_angle_value = readString.toInt(); // Converting angle in string to int value
                if (byte_counter == 3) {
                    // If byte_counter equals to 3, set up azimuth angle on azimuth servo
                    az = temporary_angle_value;
                }
                if (byte_counter == 6) {
                    // If byte_counter equals to 6, set up altitude angle on altitude servo
                    alt = temporary_angle_value;
                    altitude_servo.write(alt);
                    byte_counter = 0; // Setting counter of bytes to zero for new angles
                }
                readString = ""; // Clearing a buffer work area
            }
        }
     
  4. Guest

    Guest Нуб

    Я думаю проблема в самой серве
     
  5. Guest

    Guest Нуб

    У меня тоже такое было
     
  6. Guest

    Guest Нуб

    Оказалось сама шестерёнка сервы сломалась
     
  7. vvr

    vvr Инженерище

    а что это за питание серв от кроны))))
    эта тема уже тыщи раз обсуждалась.
    не годится крона для нормальной работы.
     
  8. Retarged

    Retarged Нуб

    Та же проблема при питании через li-po аккум 11В со стабилизатором до 5В
     
  9. Drinkes

    Drinkes Нерд

    Проверить сервотестером или напрямую от Ардуино, если норм, то осцилографом мерять длительность импульсов от сервошилда.