Ciao a tutti, mi hanno prestato un robottino che dovrebbe evitare i muri utilizzando 2 sensori di contatto da riprogrammare perchè non funzionante. Ho già in mente tutto il programma ma il robottino monta due servomotori (o a 360° o comunque modificati per la rotazione continua). come posso utilizzarli come due motori normali? a me non interessa dirgli:gira di tot gradi, mi serve digli:gira fino quando non ti dico di smettere...
spero di essermi spiegato, vi ringrazio anticipatamente,
Luca
eh così sarebbe troppo semplice
allora, sono andato a vedere e sono due servi a rotazione continua. la sigla stampata sopra è HSR-1422CR.
dai motori escono 3+3 fili che, a occhio, vanno 2+2 all'alimentazione e 1+1 a due pin di un atmega328
Prova a dare corrente sul filo rosso ed sul nero, i +5V di arduino... se inizia girare senza fermarsi sono motoriduttori o servi modificati, se si muove ma poi si ferma sono servi normali...
non trovo info a suo riguardo...
Il HSR-1422CR é un Servo per rotazione continua; percui serve l' alimentazione e massa e sul terzo pin un segnale PPM da Arduino. La programmazione la fai usando la libreria servo.h
Ciao Uwe
grazie mille a entrambi. @uwe avevo già guardato un po' di esempi ma non ho capito molto...io mando il segnale ppm (mediante le funzioni di libreria), ma posso invertire la direzione di rotazione?
edit:
negli esempi trovo:
myservo.write(pos);
con questa riga di codice faccio ruotare il servo dell'angolo in gradi memorizzato in pos, ma rispetto alla posizione di partenza oppure a quella che il servo aveva nell'istante precedente?
Un Servo viene pilotato con un impulso di durata da 1mSec a 2mSec ogno 20mSec (50Hz).
Un segnale di 1,5mSec corrisponde a una posizione intermedia (90 gradi) oppure a stop nel caso del Servo a rotazione continua. Un segnale piú corto significa una rotazione in un verso e un segnale piú lungo alla rotazione nel altro verso.
Un segnale PWM con certi valori puó essere visto dal Servo come un segnale PPM.
Per usare un Servo in modo corretto usa la libreria servo.h Servo - Arduino Reference
Nel Tuo caso
myservo.write(0); il Tuo Servo gira in una direzione;
myservo.write(180); nell altra.
intorno 90 é fermo (devi vedere il valore giusto perché c'é un po di tolleranza).
Sul mio semplice robot uso questo codice. Se non è chiaro, chiedi pure
//scritto dal BarbonS®
#include <Servo.h>
Servo left;
Servo right;
byte leftVal; // Variabile motori
int pos = 0; // variable to store the servo position
void setup()
{
Serial.begin(9600);
right.attach(9);
left.attach(10);
}
void loop()
{
if (Serial.available() >0) // Controllo se il buffer di ricezione contiene qualcosa
{
Val = Serial.read();
if (leftVal=='s') { //s come sinistra
left.write(180);
right.write(180);
}
if (leftVal=='d') { //d come destra
left.write(0);
right.write(0);
}
if (leftVal=='c') { //c come centro
left.write(90);
right.write(91);
}
if (leftVal=='a') { //a come avanti
left.write(180);
right.write(0);
}
}
}
uwefed:
Un Servo viene pilotato con un impulso di durata da 1mSec a 2mSec ogno 20mSec (50Hz).
Un segnale di 1,5mSec corrisponde a una posizione intermedia (90 gradi) oppure a stop nel caso del Servo a rotazione continua. Un segnale piú corto significa una rotazione in un verso e un segnale piú lungo alla rotazione nel altro verso.
Un segnale PWM con certi valori puó essere visto dal Servo come un segnale PPM.
Per usare un Servo in modo corretto usa la libreria servo.h Servo - Arduino Reference
Nel Tuo caso
myservo.write(0); il Tuo Servo gira in una direzione;
myservo.write(180); nell altra.
intorno 90 é fermo (devi vedere il valore giusto perché c'é un po di tolleranza).
Non lo utilizzo perchè il movimento che i servi eseguono col mio programma non è autonomo (quindi: 5 secondi avanti, 10 indietro, altri 3 avanti, etc...) ma è comandato dalla seriale (con a vai avanti, con s a sinistra, con d a destra) quindi non serve il delay.