• 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
Servo
#1
Question 
Witam! 
jestem lekko zielony w programowaniu 
Potrzebuje napisać program do sterowania serwami (4 serva) program, który zrobiłem działa ale servo za szybko się przemieszcza 
Prosił bym o pomoc w spowolnieniu tych serw.


moj program:

#include <Servo.h>

Servo servoMain1;
Servo servoMain2;
Servo servoMain3;

void setup()

{
   servoMain1.attach(8);
   servoMain2.attach(9);    
   servoMain3.attach(10); 
}

void loop()
{
   servoMain1.write(45);  
   delay(1000);       
   servoMain1.write(0);  
   delay(1000);          
   servoMain2.write(90);  
   delay(1000);         
   servoMain2.write(135);
   delay(1000);          
   servoMain3.write(180); 
   delay(1000);        
   servoMain3.write(90);  
   delay(1000);          
}
 
Odpowiedź
#2
nie rozumie co znaczy za szybko serwo ma szybko reagować na zmianę kąta
 
Odpowiedź
#3
(16-10-2015, 20:19)adix napisał(a): nie rozumie co znaczy za szybko serwo ma szybko reagować na zmianę kąta

za szybko się "przekręca" wiesz ten ruch jak dostanie komendę
 
Odpowiedź
#4
Każde serwo ma prędkość kątową w specyfikacji, im większa wartość od obecnej tym szybszy ruch serwa , przy użyciu biblioteki servo nie uzyskasz płynności ruchu ponieważ steruje serwem w stopniach (180 kroków) a żeby uzyskać płynność musisz sterować nim poprzez zmianę mikrosekund ( pełna płynność 600 - 2400 ). Nie mówię że nie można ale jest to dosyć upierdliwe i czy warte zachodu , nie wiem czy arduino to pociągnie w czystym c było by to łatwiejsze niestety tutaj ja jestem noga Wink

oczywiście można zrobić tak jak poniżej , jeżeli na płynności ci nie zależy tylko na prędkości

Kod:
#include <Servo.h>

Servo servoMain1;
Servo servoMain2;
Servo servoMain3;

int opoznienie = 15;


void setup()

{
   servoMain1.attach(8);
   servoMain2.attach(9);    
   servoMain3.attach(10);
  
   servoMain1.write(45);  
   servoMain2.write(90);  
   servoMain3.write(180);
  
   delay(3000);
}

void loop()
{
  

  for(int poz = 45; poz > 0; poz-- )
  {                                
    servoMain1.write(poz);            
    delay(opoznienie);                    
  }
  
  for(int poz = 90; poz <= 135 ; poz++)    
  {                                
    servoMain2.write(poz);  
    delay(opoznienie);                    
  }

for(int poz = 180; poz >= 90 ; poz--)    
  {                                
    servoMain3.write(poz);  
    delay(opoznienie);                    
  }
  
  delay(1000);
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#5
ooo właśnie o to mi chodziło wielkie dzięki za pomoc  Wink wgrałem program i wszystko działa jak należy Big Grin 
co do precyzji to mam microservo 9g wiec dużo od niego nie oczekuję
 
Odpowiedź
#6
To się cieszę że mogłem pomóc Wink
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości