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!
come minimo serve lo sketch (il codice) e il tipo di servo
per inserire lo sketch se non sai come fare leggi qui sotto
#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!
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
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