Pages: [1] 2   Go Down
Author Topic: Chiarimenti su servo motore, software  (Read 1211 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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:
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 266
Posts: 21671
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 266
Posts: 21671
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

???
Mandi il codice?
CIao Uwe
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

#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
}
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7126
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-lol
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7126
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 266
Posts: 21671
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Ciao Uwe
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si am comunque forse non avete capito bene il mio probelma smiley-lol
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 :\
Logged

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,prova così
Code:
#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
« Last Edit: June 28, 2012, 06:52:53 pm by tonid » Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 266
Posts: 21671
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si am comunque forse non avete capito bene il mio probelma smiley-lol
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
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Purtroppo non ho un alimentatore da 1A :\
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7126
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: [1] 2   Go Up
Jump to: