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:
#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
}
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.
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?
#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
}
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
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
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 :\
#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ì Serial - Arduino Reference
leggilo e capirai le differenze.
Per i collegamenti del pot hai sbagliato anche su questo schema,cerca di fare più attenzione,devi solo copiare!
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 :\
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
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.
Scusate l'ignoranza ma sono solo un neofita appassionato che ha cominciato da poco e non ho tutti gli strumenti del mestiere XD
Quindi PaoloP posso prendere un caricatore di un vecchio cellulare e tagliare l'estremità e usare il terminale sulla breadboard per alimentare il servomotore? e la massa la collego comunque sul pin di arduino?
Comunque ho controllato e dho usato Serialprintln e in effetti mi stampa i gradi (grazie tonid) ma non li stampa per tutta la durata del programma da quanto ho visto ma li stampa solo 4 o 5 volte e il servo comunque va a piccolissimi scatti :\ quindi secondo voi è un problema di alimentazione?
Controlla nel datasheet del servo la tensione massima di funzionamento.
Se il caricabatterie è da 5V non ci sono problemi, puoi alimentare il servo direttamente con quello, collegando i due GND.
Occhio a non creare corti o inviare tensioni non volute sui pin di arduino.
Verifica anche la massima corrente erogabile, se maggiore di 500mA va bene, se inferiore è un po' pochina, meno di quanto eroghi la USB: il trasormatore potrebbe scaldarsi.
Caricatore motorola:
Input: 100-240v 50/60 Hz 0.2A
Output: 5.0v 550mA
Va bene? e visto che non vorrei fare casini mi potreste dire con esattezza come collegarlo? ha due fili attaccati, devo connetterli tt e due a v+ oppure uno a v+ e uno a massa?