partiamo con un buongiorno a tutti i lettori!
mi chiedevo se fosse possibile(anzhe se non trovo via di uscita) nel creare un servosterzo pilotato da un trimmer:
-che dovrebbe avere valore positivo(0 to 180) per meta giro del servomotore
-e l'altra meta' giro con valori negativi(0 to -180) per l'altra meta giro.. ho provato mettere controlli che evidentemente non funzionano, qualcuno ha una soluzione? allego il code del tentato insueccesso:
#include <Servo.h>
Servo ServoMotore;
int i;
void setup() {// put your setup code here, to run once:
ServoMotore.attach(9);
pinMode(A0,INPUT);
Serial.begin(9600);
}
void loop() { // put your main code here, to run repeatedly:
unsigned long media=0,totale=0;
for(i=0;i<25;i=i+1)
{totale=totale+analogRead(A0);}
media=totale/25;
media=map(media,0,1023,0,360);
if(media>180)
{
media=map(media,0,360,0,180);
ServoMotore.write(media);
delay(20);
}
else
{
media=map(media,0,360,0,-180);
ServoMotore.write(media);
delay(20);
}
Serial.println(media);
delay(50); }
grazie a tutti in anticipo!
ps il progetto voleva essere mirato ad usare un potenziomentro e basta
uwefed:
Non capisco. Hai un servo che puó essere pilotato da 0 a 360 con valori da -180 a 180?
Quanto ne so io il pilotaggio di un servo va da 0 a 180.
Ciao Uwe
ciao uwe, il fatto e' che da in positivo muove di 180°(0 to 180) come valori in ingresso analog
mentre per gli altri 180° torna a posizione 0 e fa(0 to -180) per completare il giro in senso opposto e fare una somma totale di 360°.
ho letto in giro per forum il comando abs che dovrebbe darmi i valori negativi..
-ho provato a moltiplicare *-1
ma niente di tutto cio' mi fa ottenere risultati.
ps il mappare il risultato negativo
es media=map(media,0,360,0,-180) non funziona, se printo il valore escono cose assurde come cifre
uwefed:
Ma che servo hai e con che valori lo puoi pilotare?
Ciao Uwe
dunque il servo e' il TowerPro tm sg90 ma i valori con cui pilotarlo, non li ho controllati, sinceramente non sapevo variassero da servo a servo, ho preso a riferimento semplicemente le informazioni che ho trovato nei vari post.
Il servo SG90 ha una escursione totale di 180°. La libreria Servo.h prevede di pilotare la sua posizione con il comando: "ServoMotore.write(ANGOLO)". ANGOLO può assumere valori da 0° a 180° circa, perché non raggiunge proprio 0° e 180°.
Tu non potrai MAI far compiere un giro completo (360°) a quel servo, ma solo una escursione di 180°. Il tuo potenziometro quindi da una estremità all'altra potrà pilotare il servo e posizionarlo da 0° a 180° (sempre circa).
Ora questi 180° te li puoi giocare come vuoi. Per esempio puoi chiamare la rotazione totale a sinistra del potenziometro -90° e la rotazione totale a destra (sempre di quel potenziometro) +90°.
Mettila come ti pare, ma sono sempre 180° in totale.
Ci sono esempi allegati alla libreria Servo.h, vedi se ce n'è uno che fa per te, oppure specifica meglio cosa vuoi fare.