Go Down

Topic: potenziometro pilota servosterzo (Read 118 times) previous topic - next topic

iaccaro

Apr 14, 2019, 08:37 pm Last Edit: Apr 14, 2019, 08:49 pm by iaccaro
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:

Code: [Select]
#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

#1
Apr 14, 2019, 09:13 pm Last Edit: Apr 14, 2019, 09:21 pm by 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.

Code: [Select]
if(media>180)
  {
 
    media=map(media,0,360,0,180);

da valori tra 90 a 180
Code: [Select]
else
  {
   
    media=map(media,0,360,0,-180);

da valori tra 0 a -90


Ciao Uwe

iaccaro

#2
Apr 14, 2019, 09:19 pm Last Edit: Apr 14, 2019, 09:25 pm by iaccaro
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

iaccaro

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.

pgiagno

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.

Ciao,
P.


Go Up