Gabriele è un appassionato arduino, e non solo, che ha realizzato uno progetto “Gestione Servo potenziometro e switch”.
L’evoluzione di questo primo esperimento sarà una Testa Mobile simile a quella utilizzata nelle discoteche.
Gabrile ha voluto condividere questo suo progetto sul blog.
Non mi dilungherò eccessivamente sulla descrizione in quanto Gabriele ha realizzato lo sketch e sopratutto la descrizione, le foto ed i collegamenti ed, infine, un video della testa mobile.
Materale utilizzato
Per riprodurre questo progetto la lista dei cmponenti necessari è:
- 2 resistenze da 330 ohm
- Un deviatore
- Cavi vari
- Un servomotore
- Basetta sperimentale
- Potenziometro da 10k
- Arduino uno rev3
Sono componenti comunemente reperibili presso un negozio di elettronica o un rivenditore di articoli di robotica ed arduino.
Schema collegamenti Gestione Servo potenziometro e switch
Ecco lo schema elettrico del progetto “Gestione Servo potenziometro e switch”:
Gabriele ha anche realizzato la versione Fritzing dello schema:
Sketch del progetto
// Software sperimentale di Carluccio Gabriele // Gestione servo tramite potenziometro e switch #include <Servo.h> int pos = 0; int potpin = 0; int val; Servo myservo; const int Puls1 = 10; const int Puls2 = 11; void setup() { myservo.attach(9); pinMode(Puls1, INPUT); pinMode(Puls2, INPUT); digitalWrite(Puls1, HIGH); digitalWrite(Puls2, HIGH); } void loop() { if (digitalRead(Puls1) == LOW) { val = analogRead(potpin); val = map(val, 0, 1023, 0, 179); myservo.write(val); delay(15); } if(digitalRead(Puls2) == LOW) { for(pos = 180; pos>=1; pos-=1) { myservo.write(pos); delay(15); } } }
linea 04: include la libreria esterna Servo che contiene una classe Servo , e crea l’oggetto myservo di tipo Servo, ossia inizializza la classe.
linea 07: imposta una nuova variabile di tipo integer potpin che indica a quale pin è collegato il potenziometro, in questo caso è il pin 0 ossia il primo pin analogico, il segnale letto da questo pin avrà valori che variano da 0 a 1023 dove 0 indica la minima resistenza e 1023 la massima;
linea 08: imposta la variabile val senza darle alcun valore, questa variabile sarà poi utilizzata per memorizzare il valore letto sul pin 0 analogico;
linee 12-23: collega i due deviatori rispettivamente ai pin 10 ed 11 di arduino;
linea 15: definisci la funzione setup(), fondamentale per lo sketch;
linea 16: utilizza il metodo attach() per impostare il pin per comunicare con il servo è il pin 9;
linee 17-18: imposta in INPUT mode i pin relativi agli switch;
linee 19-20: imposta ad HIGH il valore dei due pin collegati agli switch;
linea 25: leggi il valore proveniente dal potenziometro e lo memorizzi nella variabile val i valori. Come sai tali valori saranno da 0 a 1023 in funzione della rotazione dell’albero;
linea 26: la funzione map() esegue una mappatura tra valori minimi e massimi, nell’esempio gli dici che la variabile val contiene il valore da mappare e che l’intervallo 0-1023 (secondo e terzo parametro) deve essere mappato sull’intervallo 0-179 (quarto e quinto parametro). Per chiarire meglio ecco un esempio: immagina di leggere dal potenziometro il valore 512, non puoi passarlo direttamente al server in quanto il range di funzionamento è 0-179 gradi, per cui un valore 512 posizionerebbe il servo al 180 grado, ma farebbero altrettanto tutti i valori da 180 a 1023 non riuscendo ad ottenere il risultato sperato. Devi convertire proporzionalmente il valore con la seguente equazione:
1023:179 = 512:x
da cui
x = (512 x 179 ) / 1023 = 89,58 arrotondando 90°,
per eseguire ad ogni ciclo di esecuzione questo calcolo usi la funzione map() che fa tutto, arrotondamenti incusi.
linea 27: posiziona il servo con il metodo write() della classe Servo;
linea 28: imposta un tempo di 15 millisecondi prima di ripartire con il ciclo loop(), questo tempo serve mediamente al servo per raggiungere la posizione desiderata;
linea 31: se il pulsante dello swith 2 è ON servo esegue un movimento preimpostato nel programma, ovvero si muoverà da 180° fino ad arrivare a 0°, e viceversa da 0° fino a 180°, muovendosi di un grado alla volta;
linea 32: programma il movimento automatico del servo da 180 a 0;
Video del progetto
Come ti ho detto Gabriele ha anche reallizzato un video del suo progetto:
Buon divertimento !!!
Prima di inserire un commento, per favore, leggi il regolamento
8 pings
Skip to comment form