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 !!!
8 commenti
Vai al modulo dei commenti
Grazie Mauro,
Spero di riuscire ad ultimare il progetto nelle vacanze di natale, inserendo un led di potenza, con qualche gioco di luce, nuovi schemi più completi, cercando di realizzare un video più dettagliato. 😉
Autore
Ottimo Gabriele 🙂
Mauro
Complimenti Gabriele, molto interessante.
Una cosa però mi è poco chiara, perdonatemi l’ignoranza ma non ho ancora ben capito quando utilizzare negli Sketch solo “=” oppure “==”. Me lo potreste spiegare? grazie =)
Autore
Ciao Santo,
a quale linea di codice ti riferisci?
l’= singolo o doppio ha significati differenti in funzione della sua posizione nello sketch.
Mauro
salve si può avere u’n progetto completo intendo schema di collegamento e codice per muovere due arduini con joystick funzionante
Autore
Ciao Donato, non mi é chiaro a quale progetto tu ti riferisca.
Salve, trovo difficoltà a realizzare un mio progetto, dove due sensori lm35 mi facciano muovere un servomotore tale da aprire e chiudere una piccola finestra. i sensori devono rilevare una temperatura esterna e una interna, ad una soglia di 20°C, e in questo caso la temperatura scende, le finestre si devono chiudere.
Grazie per l’attenzione.
Autore
Ciao Domenico,
ti consiglio di leggere e comprendere le spiegazioni relative ai miei articoli sui sensori di temperatura.
Ti consiglio anche di leggere il mio corso arduino base gratuito o di partecipare ad uno dei miei prossimi corsi in aula in cui apprendere le basi.