Problema con servomotore

Buona sera, sono uno studente che sta lavorando a un plastico per un esame.
ho un problema con un servomotore acquistato su internet: ho preso un codice e inserendolo sul servomotore originale di arduino non ho avuto alcun problema, ma quando lo ho inserito nel secondo servomotore non segue i gradi di rotazione, girando senza criterio alternando le due direzioni... come posso fare per risolverlo? grazie in anticipo! :slight_smile:

come minimo serve lo sketch (il codice) e il tipo di servo

per inserire lo sketch se non sai come fare leggi qui sotto :slight_smile:

#include <Servo.h> 
 
Servo myservo;  
               
 
int pos = 0;    
 
void setup() 
{ 
  myservo.attach(8); 
} 
 
 
void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1)  
  {                                  
    myservo.write(pos);               
                                     
    delay(15);                        
                                     
  } 
  for(pos = 180; pos>=1; pos-=1) 
  {                                
    myservo.write(pos);               
    delay(15);                        
  } 
}

questo è il codice che ha azionato correttamente il primo servomotore

Per il servomotore non so di preciso il modello, non sò se può essere utile ma sopra c'è scritto "MS-R-1.3-9 OLIMEX

Operating Angle: 360degree Link

ma hai provato ad usarlo seguendo uno degli esempi inclusi nella libreria?

quel sistema di comando ad 1 grado alla volta mi pare molto inefficente, tra l'altro con 15 millisecondi di attesa ad ogni passo ci mette 2,7 secondi a fare i 180°...

Va visto se come 360° intendono un servo a rotazione continua

In questo caso da 0 a 89° ruota in un senso, da 91 a 180 nell'altro

d_killer:
ma quando lo ho inserito nel secondo servomotore non segue i gradi di rotazione, girando senza criterio alternando le due direzioni... come posso fare per risolverlo? grazie in anticipo! :slight_smile:

Hai preso un prodotto sbagliato, hai preso, come ha indicato brunello22, un servo a rotazione continua al quale NON si può indicare la posizione, ma solo se ruotare in avanti o indietro, più o meno velocemente.

Devi comprare un VERO servo che NON sia a rotazione continua (NO 360°)

Guglielmo

lo ho usato seguendo la libreria, e ora con un potenziometro riesco a controllarlo... ma solo in una direzione :cry:
conoscete un modo per aggiungerne un altro per farlo ritornare o per stabilire un angolo di rotazione e fissarlo su quel percorso?
Comunque grazie per l' aiuto

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}

T'ho spiegato che quei servo NON sono fatti per essere posizionati dando un angolo ... sono come dei normali motorini che girano a destra e sinistra (più o meno velocemente) o stanno fermi.

NON hai alcun modo di comandarlo ad una certa posizione ...
... salvo non attaccarci un encoder (come si fa con un motore), che ti da la posizione e lo fermi dove vuoi. Ma il gioco NON vale assolutamnete la candela !

Compra un vero servo, te l'ho già detto.

Guglielmo