Здравствуйте, Решил повторить один проект из интернета, сделать кормушку для котейки. Она срабатывает по времени и от нажатии кнопки. Тут все нормально Но возникла одна проблема в работе сервопривода MG996R. Для выдачи порции сервопривод должен проделать несколько итераций. Обычно он срабатвывает нормально, но иногда сервопривод начинает тормозить во время движения, как будто ему не хватает мощности. Вот видео: Сревопривод должен все время открываться на полную (как в первые секунды видео), но потом он замедляется и не поворачивается полностью, а иногда вообще может не повернуться. Питание идет от сети, через понижающий преобразователь dc-dc XL4015. На него из блока питания 12V, 2.3A подается питание, снижается до 7В и подается напрямую на серву, минуя ардуино нано. Подскажите, в чем может быть проблема? Спасибо. Вот код проекта: Код (C++): #include <Wire.h> #include <DS3231.h> #define DS3231_I2C_ADDRESS 0x68 DS3231 rtc(SDA, SCL); byte decToBcd(byte val) // Convert normal decimal numbers to binary coded decimal { return( (val/10*16) + (val%10) ); } byte bcdToDec(byte val) // Convert binary coded decimal to normal decimal numbers { return( (val/16*10) + (val%16) ); } #include <Servo.h> Servo feedServo; #define ctsPin 3 // button #define PIN_SERVO 5 Time t; int feed1hour = 01; int feed1minute = 45; int feed2hour = 07; int feed2minute = 45; int feed3hour = 13; int feed3minute = 45; int feed4hour = 19; int feed4minute = 45; int feedQty = 4; int feedRate = 800; //a pwm rate the triggers forward on the servo 75 int feedReversal = 300; void setup(){ Serial.begin(9600); rtc.begin(); //setDS3231time(00,07,03); // set the initial time here: DS3231 seconds, minutes, hours, day, date, month, year pinMode(ctsPin, INPUT); } void setDS3231time(byte second, byte minute, byte hour) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.endTransmission(); } void loop() { t = rtc.getTime(); //timeCheck(); //Manual feed button int ctsValue = digitalRead(ctsPin); if (ctsValue == HIGH){ feed(); } if (t.hour == feed1hour && t.min == feed1minute && t.sec == 0) { feed(); } else if (t.hour == feed2hour && t.min == feed2minute && t.sec == 0) { feed(); } else if (t.hour == feed3hour && t.min == feed3minute && t.sec == 0) { feed(); } else if (t.hour == feed4hour && t.min == feed4minute && t.sec == 0) { feed(); } } void feed() { feedServo.attach(PIN_SERVO); for(int i = 0; i<10; i++) { feedServo.write(360); delay(1000); feedServo.write(10); delay(1200); } feedServo.write (60);//500 feedServo.detach(); } void timeCheck (){ Serial.print(t.hour); Serial.print("-"); Serial.print(t.min); Serial.print("-"); Serial.println(t.sec); delay (1000); }