Go Down

Topic: Chiarimenti su servo motore, software (Read 1 time) previous topic - next topic

toti94

Ragazzi sono arrivato all'esercizio sui servo motori ma non mi è molto chiara una cosa, perchè il servo si sposta a piccolissimi scatti e va prima a destra poi a sinistra senza che io muova il potenziometro?
il codice è questo:
Code: [Select]

#include <Servo.h>
Servo motore;  //Nome del servo motore
int valore;   //valore del potenziometro
int pot=0;    //pin del potenziometro
int gradi;    // gradi del servo
void setup ()
{
  motore.attach(9);  //mettiamo il servo sul pin  9
}
void loop ()
{
  valore= analogRead(pot); // leggiamo il valore del pot
  gradi= map(valore,0,1023,0,179);  // cambiamo la scala dal pot al servo
  motore.write (gradi);  // facciamo girare il servo
  delay(10);  //aspettiamo un po' prima di ricominciare
}

mentre l'hardware è questo:

uwefed

I motorini del servomotore spesso assorbono parecchia corrente che porta a avere problemi a Arduino. Siccuramente non sbagli se alimenti il Servo da un altra fonte di energia.

poi apurato che non é un problema di alimentazione:
Per capire se il problema é la lettura del potenziometro o il pilotaggio del servo stampa i valori della variaile gradi sulla seriale e guardali sul termianle del IDE.

Ciao Uwe

toti94

Ho provato ma com'è possibile che la variabile gradi che è un int assuma il valore di "GGGG" oppure "RRRR" O.o' sul serial monitor mi ha stampato solo questi due risultati dopo di che non stampava più nulla O.o?

uwefed


toti94

#include <Servo.h>
Servo motore;  //Nome del servo motore
int valore;   //valore del potenziometro
int pot=0;    //pin del potenziometro
int gradi;    // gradi del servo
void setup ()
{
  motore.attach(9);  //mettiamo il servo sul pin  9
  Serial.begin (9600);
}
void loop ()
{
  valore= analogRead(pot); // leggiamo il valore del pot
  gradi= map(valore,0,1023,0,179);  // cambiamo la scala dal pot al servo
  Serial.write (gradi);
  motore.write (gradi);  // facciamo girare il servo
  delay(10);  //aspettiamo un po' prima di ricominciare
}

PaoloP

I collegamenti su Fritzing sono errati.
Il potenziometro è collegato su  ambo i pin esterni a GND.
Va uno a GND e l'altro a 5V.

toti94

Quindi il filo del cursore è il centrale? quindi devo connettere l'arancione su 5v, il rosso sul pin digitale 9 e il marrone a massa?
MA questo però non risolve il fatto della variabile gradi XD

PaoloP

--> http://www.mauroalfieri.it/elettronica/tutotorial-arduino-servo-2.html

toti94

I collegamenti li ho rifatti e mi sembrano giusti ( in effetti il servo si muove anche se poco e a scatti).
Lo sketch mi sembra uguale a quello del link solo con i nomi dell variabili diversi, inotlre sul serial monitor non mi stampa neanche più il valode dei gradi

uwefed

al posto di
"Serial.write (gradi);"
usa
"Serial.println(gradi,DEC);"

http://arduino.cc/en/Serial/Write

Ciao Uwe

toti94

Si am comunque forse non avete capito bene il mio probelma XD
Quando giro il potenziometro il servo o gira pianissimo a scatti, direi 5-7 gradi con pause di mezzo secondo, cambiando direzione improvvisamente, oppure non fa proprio nulla :\

tonid

#11
Jun 29, 2012, 01:41 am Last Edit: Jun 29, 2012, 01:52 am by tonid Reason: 1
Ciao,prova così
Code: [Select]

#include <Servo.h>
Servo motore;  //Nome del servo motore
int valore;   //valore del potenziometro
int gradi;    // gradi del servo
void setup ()
{
 Serial.begin(9600);
 motore.attach(9);  //mettiamo il servo sul pin  9
}
void loop ()
{
 valore= analogRead(A0); // leggiamo il valore del pot che è collegato al pin A0
 gradi= map(valore,0,1023,0,179);  // converti la lettura di tensione a 10bit in gradi di rotazione del servo (180)
 motore.write (gradi);  // facciamo girare il servo
 delay(10);  //aspettiamo un po' prima di ricominciare
 Serial.println(gradi,DEC);
}

Se poi al posto dei gradi vuoi vedere la lettura del pot metti ''valore,DEC''
Le differenze tra Serial.write e Serial.println ecc..le trovi quì  http://arduino.cc/en/Reference/Serial
leggilo e capirai le differenze.
Per i collegamenti del pot hai sbagliato anche su questo schema,cerca di fare più attenzione,devi solo copiare!  :smiley-eek:

uwefed


Si am comunque forse non avete capito bene il mio probelma XD
Quando giro il potenziometro il servo o gira pianissimo a scatti, direi 5-7 gradi con pause di mezzo secondo, cambiando direzione improvvisamente, oppure non fa proprio nulla :\

Potrebbe essere un problema di corrente; alimentalo non da Arduino ma con un alimentatore che da almeno 1A.
Collega la massa di Arduino e quella del servo.
Ciao Uwe

toti94

Purtroppo non ho un alimentatore da 1A :\

PaoloP

Puoi alimentare il servo con un alimentatore esterno, quelli vecchi per cellulare dovrebbero andare bene, io ad esempio ne ho un cassetto pieno.
L'Arduino lo alimenti tramite USB.
Ricorda di collegare i due GND per avere lo stesso riferimento.

Go Up