2° esempio SERVO MOTORE + SLIDEPOT

Per sviluppare questo progetto occorre costruire il circuito (serve un servo motore e un potenziometro a cursore) visualizzato nella seguente immagine:

Ecco l'immagine del circuito

Codice Sorgente

Obiettivo progetto: Costruire un programma che consenta di pilotare l'angolo del braccio di un servo motore mediante un potenziometro a cursore.

soluzione:

Occorrerà quindi decodificare il valore in input (range da 0 a 1023), relativo allo stato del potenziometro a cursore, con il corrispondente angolo (range da 0 a 179) del braccio del servo motore. La funzione map(valore,A,B,c,d), che riscala il primo argomento valore, appartenente all'intervallo [A,B] all'interno dell'intervallo [c,d], ci consentirà di effettuare la decodifica richiesta.  Il seguente sketch rappresenta una delle possibili soluzioni al nostro progetto

/* -----------------------------------------------------------------------------------
 Esempio creato partendo dal codice: Sweep di pubblico dominio.
 Muove a sinistra e destra di 180 gradi il servomotore
----------------------------------------------------------------------------------- */
#include <Servo.h> 
#define PotPin 0  // Pin analogico collegato al potenziometro
Servo myservo;    // Creo un oggetto Servo per controllare il motore 
  
int valpot;       // variabile utilizzata per leggere il pin del potenziometro
int valmot;       // variabile utilizzata per indicare l'angolo del servo motore

void setup() 
{ 
   Serial.begin(9600);
   myservo.attach(9);  // attacco il Servo al pin 9 (imposto angolo)
} 
  
void loop() 
{ 
   valpot = analogRead(PotPin);            // legge il valore sul potenziometro (tra 0 e 1023) 
   valmot = map(valpot, 0, 1023, 0, 179);  // lo riscala per utilizzarlo come angolo del Servo (valore tra 0 e 179) 
   myservo.write(valmot);                  // setta la posizione del servo 
}