Pages: [1]   Go Down
Author Topic: myservo.write() & myservo.writeMicrosecond()  (Read 534 times)
0 Members and 1 Guest are viewing this topic.
Italy
Offline Offline
Full Member
***
Karma: 1
Posts: 145
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao

Stavo giocando con un semplice servo motore usando lo sketch
Code:

#include <Servo.h>

Servo myservo; 

int angle = 0;


void setup()
{
  myservo.attach(9,550,6330);
}                                                           
void loop()
{
  for(angle = 0; angle < 180; angle +=1)
  {
    myservo.write(angle);
    delay(20);
  }
  for(angle = 180; angle >= 1; angle -=1)
 {
  myservo.write(angle);
 delay(20);
 }
}

e fin qui tutto ok. Poi mi sono chiesto se era possibile far ruotare con velocità diversa l'elica a seconda se si va da 0 a 180 o viceversa.

Allora mi sono cimentato nell'usare il comado
Code:
myservo.writeMicroseconds(us)

e ovviamente qui sono sorti i primi problemi. Sì che ruotavano con velocità differenti ma avevano un comportamento anomalo. Arrivata a "fine corsa" l'elica invece di tornare subito dietro stava ferma diversi secondi.

e variando us ( argomento dentro write.Microseconds ) il servo andava a piccoli scatti vibrando notevolmente.

Perchè tale comportamento anomalo? Come risolvo?

Grazie
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 252
Posts: 21283
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Con myservo.write() dai come valore un angolo da 0 a 180 gradi che in linea di massima corrisponde al angolo di rotazione del servo.
Con myservo.writeMicrosecond() dai come valore il tempo in µsecondi del impulso dove 1000 corrisponde a 0 di myservo.write() e 2000 a 180.

Dovresti darci lo sketch con myservo.writeMicrosecond() per poterti dire qualcosa.

Ciao Uwe
Logged

Italy
Offline Offline
Full Member
***
Karma: 1
Posts: 145
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Praticamento lo sketch che ho usato è il seguente.
Ho dovuto scrivere myservo(9,550,6330) affinchè avessi una rotazione di 180 gradi.

E questo sketch funziona in modo anomali


Code:
#include <Servo.h>

Servo myservo; 

int angle = 0;


void setup()
{
  myservo.attach(9,550,6330);
}                                                           
void loop()
{
  for(angle = 0; angle < 180; angle +=1)
  {
    myservo.write(angle);
myservo.writeMicrosecond(700);   
    delay(20);
  }
  for(angle = 180; angle >= 1; angle -=1)
 {
  myservo.write(angle);
myservo.writeMicrosecond(2000); 
 delay(20);
 }
}
Logged

Italy
Offline Offline
Full Member
***
Karma: 1
Posts: 145
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

up
Logged

Pages: [1]   Go Up
Jump to: