• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z nierównym chodzeniem serw
#1
Witam. Mam program na Arduino UNO, który ma oddzielnie obsługiwać 2 serwa podpięte pod wyjście 9~ i 10~. Oba serwa działają, jednak zauważyłem że serwo podłączone do wyjścia "10" bardzo nierówno pracuje. Co chwile są jakieś skoki, potrafi się na chwilę zatrzymać, czasami potrafi się też cofnąć. Nie jest to wina samego serwa, ponieważ po zamianie wejść, problem nadal jest z serwem podłączonym do 10. W czym więc tkwi problem? Program został zapożyczony z internetu i delikatnie zmodyfikowany, tak by obsługiwał 2 serwa zamiast jednego.


Kod:
#include <Servo.h> 

Servo myservo;// stworzenie bjektu myservo służącego do kontroli naszego podłączonego serwa 
Servo noservo;// 
int pos = 0; // stworzenie zmiennej służącej do ustawienia początkowej pozycji naszego serwa 

void setup() { 
pinMode(1, OUTPUT); 
pinMode(2, OUTPUT); 
myservo.attach(9); // sterowanie serwem ustawiamy na pinie nr 9 
noservo.attach (10); // 



void loop() { 
for (pos = 0; pos <= 180; pos += 1) { // pętla w której zmienna "pos" przyjmuje wartości od 0 do 180, odpowiadające wychyleniom naszego serwa 
digitalWrite(1, HIGH); 
digitalWrite(2, LOW); 
myservo.write(pos); // serwo wykonuje ruch z pozycji początkowej do swojej pozycji maksymalnej tj. 180 stopni dzięki zmianie wartości zmiennej "pos" 
noservo.write(pos); 
delay(75); // opóźnienie dzięki któremu ruch serwa staje się bardziej płynny i tym samym delikatniejszy dla modułu automatycznego naciągu w naszym zegarku 

for (pos = 180; pos >= 0; pos -= 1) { // analogiczna pętla w której zmienna "pos" przyjmuje wartości od 180 do 0, odpowiadające wychyleniom naszego serwa
digitalWrite(1, LOW); 
digitalWrite(2, HIGH); 
myservo.write(pos); // serwo wykonuje ruch z pozycji maksymalnego wychylenia (tj. 180 st.) do pozycji początkowej 
noservo.write(pos); 
delay(75); // opóźnienie 
}
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości