Имеются два сервопривода DS3218mg, при повороте выяснилось, что сервы перекручиваются после нужного угла. К примеру, 130 градусов в скетче на деле дают поворот сервы на 180. В чем может быть проблема? Arduino UNO + Multiservo Shield, питается все это Кроной 9v через dc-dc lm2596. Заранее спасибо!
Как то так Код (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 } }
а что это за питание серв от кроны)))) эта тема уже тыщи раз обсуждалась. не годится крона для нормальной работы.
Проверить сервотестером или напрямую от Ардуино, если норм, то осцилографом мерять длительность импульсов от сервошилда.