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

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/servo-potenziometro-e-switch-di-gabriele.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.