«

»

Nov 13

Stampa Articolo

Gestione Servo potenziometro e switch di Gabriele

Gabriele è un appassionato arduino, e non solo, che ha realizzato uno progetto “Gestione Servo potenziometro e switch”.

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”:

schema servo collegamenti

Gabriele ha anche realizzato la versione Fritzing dello schema:

schema fritziong servo e switch

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 !!!

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/servo-potenziometro-e-switch-di-gabriele.html

8 comments

Vai al modulo dei commenti

  1. Gabriele Carluccio

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

    1. Mauro Alfieri

      Ottimo Gabriele 🙂

      Mauro

  2. Santo

    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 =)

    1. Mauro Alfieri

      Ciao Santo,
      a quale linea di codice ti riferisci?
      l’= singolo o doppio ha significati differenti in funzione della sua posizione nello sketch.

      Mauro

  3. donato

    salve si può avere u’n progetto completo intendo schema di collegamento e codice per muovere due arduini con joystick funzionante

    1. Mauro Alfieri

      Ciao Donato, non mi é chiaro a quale progetto tu ti riferisca.

  4. Domenico

    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.

    1. Mauro Alfieri

      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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>