Salve a tutti,
spero che qualcuno possa aiutarmi. Ho acquistato un servo analogico HD-1501MG. Sulle specifiche non c'è scritto niente ma dovrebbe ruotare a 360 gradi.
Ho provato con il comando write, scrivendo un semplice sketch di prova:
#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(9);
}
void loop() {
myservo.write(360);
}
Ma non funziona. Così ho provato a scrivere, nella sezione loop, due comandi write in modo da far fare al servo due giri da 180 gradi. In questo modo compie il primo mezzo giro ma poi si ferma senza completare il secondo movimento.
Ho provato anche col comando writeMicroseconds. Ho trovato questo sketch in un vecchio post su questo forum:
#include <Servo.h>
Servo myservo;
void setup()
{
Serial.begin( 9600 );
myservo.attach(9);
}
void loop()
{
for ( int i=1500; i<2500; i+=100 ) {
Serial.println( i );
myservo.writeMicroseconds( i );
delay(1000);
}
delay(2000);
for ( int i=1500; i>500; i-=100 ) {
Serial.println( i );
myservo.writeMicroseconds( i );
delay(1000);
}
}
Come risultato il servo fa sempre un movimento di 180 gradi.
Non sono riuscita a trovare le specifiche di questo servo che confermassero al 100% senza ombra di dubbio che potesse compiere un giro completo, ma mi è stato detto che viene spesso utilizzato come motore per le barche radiocomandate, quindi ne ho dedotto che al 99,9% potesse compiere 360 gradi. A questo punto non so più se sono io che ho fatto un errore enorme nel comprare il servo o è un errore di programmazione. Nel caso di quest'ultima ipotesi, potete aiutarmi? Ho usato sketch sbagliati?
E' un normalissimo servo che al massimo gira per 180°, non è un servo a rotazione continua.
Attenzione che i servo a rotazione continua non puoi controllarli in posizione, solo in velocità e pure questa in modo molto approssimativo.
Grazie mille per le gentilissime risposte!!!
Ma, che sappiate, nel servo a rotazione continua posso cambiare direzione di rotazione?
Sapete mica se esistono servo a rotazione continua con una coppia tra i 13 e i 17 kg*cm? Potreste indicarmi qualche modello se ne conoscete?
Se di un servo a rotazione continua posso regolare solo la velocità di rotazione, quale comando devo usare nello sketch per fargli fare un tot di giri (e/o farlo ruotare per un tot di tempo) e poi stopparlo?
Grazie in anticipo!!!
Servo a rotazione continua, come dice il nome... ruota in continuazione.
I comandi di solito sono la posizione tra 0 e 180 per un servo normale.
Quello a rotazione continua DOVREBBE stopparsi con valore centrale ovvero 90 e girare con velocità variabile a sx o dx con valori tra 0-89 e 91-180
Per sapere quanto è stato in movimento, usa millis(), guarda qui
Leggi millis() quando lo fai partire, leggi millis() quando lo fai fermare e sai quanto ha girato.
Per sapere quanto giri ha fatto, dovresti sapere quanti ne fa in un secondo e poi moltiplicare per il numero di secondi. Oppure mettere qualcosa per misurarli, un sensore ottico o meccanico.
Puoi trasformare un servo normale in un servo a rotazione continua, se cerchi in rete trovi come fare, ma dovrai smontarlo.
Ultima domanda:
all'infuori del numero giri (che grazie alle vostre spiegazioni ho capito come gestire) che farò fare o meno al servo, c'è proprio una stringa, un comando, per dirgli "stop"?
Mi spiego meglio: volevo che il servo si accendesse e spegnesse tramite comando vocale. Per accenderlo non ci sono problemi ma come faccio a fargli capire di stopparsi quando dico "fermo"?
Grazie ancora!!!