Come impostare un potenziometro su Arduino UNO e far muovere un servo-motore
Un potenziometro è un componente elettrico in grado di far variale la resistenza all’interno di un circuito elettrico, che possiamo eguagliare ad un partitore di tensione. Se collegato ad Arduino possiamo rilevare un segnale analogico ed adoperarlo in progetti per regolare valori o agire su alcuni attuatori, come LED o Servo-motori.
Specifiche
Il potenziometro maggiormente in uso e spesso presente nei kit è il c.d. potenziometro a giro singolo passivo da 10K OHM. La tipicità di questi dispositivi è compiere solo 3/4 di giro, il che suggerisce che non compiono mai un giro intero di 360°, avendo quindi un valore minimo dato dalla posizione iniziale, ed uno valore massimo determinato dalla posizione finale.
Spesso questi dispositivi sono confusi con gli Encoder Digitali Rotativi a causa dalle forma simile; si tratta ovviamente di dispositivi molto differenti. Il modello che esaminiamo è, per l’appunto, il potenziometro a giro singolo con 3 pin: il pin centrale è analogico, mentre i laterali sono rispettivamente i 5V e il GND.
Acquista su Amazon:
- Potenziometro: https://amzn.to/2UkoMxM
- Servo-Motore DS3218: https://amzn.to/3f3oNhG
Acquista su Aliexpress:
- Potenziometro: http://s.click.aliexpress.com/e/_dZkMGyq
- Servo-Motore DS3218: http://s.click.aliexpress.com/e/_d6NeOnG
Collegamento
Come visto in precedenza, disponiamo solo di 3 pin, di cui uno solo è il segnale analogico. Collegare un potenziometro ad Arduino UNO quindi è abbastanza semplice. Nello sketch di prova che vedremo a breve abbiamo collegato anche un servo-motore; abbiamo, pertanto, collegato il servo-motore ad Arduino UNO al pin digitale 3, mentre forniamo sempre i 5V di tensione.
Codice
Programmare un potenziometro è semplicissimo: basta leggere il segnale che arriva dal pin analogico a cui è collegato, poi stampare sul monitor seriale i valori rilevati mentre giriamo il cilindro. Vediamo un esempio:
void setup() { Serial.begin(9600); } void loop() { int potenz = analogRead(A0); Serial.print(potenz); delay (100); }
Proviamo ora a far muovere un servo-motore mentre ruotiamo il cilindro del potenziometro. Potete scaricare lo sketch a questo LINK.
Partiamo sempre dalla libreria necessarie per il servo-motore, spostandoci poi sul VOID SETUP in cui avviamo il monitor seriale e dichiariamo a quale pin digitale colleghiamo il servo-motore.
#include <Servo.h> Servo motor; void setup() { Serial.begin(9600); motor.attach(3); }
Nel VOID LOOP rileviamo il segnale analogico dal pin A0 sulla variabile intera potenz e mappiamola su un’altra variabile intera che chiameremo pos, in cui convertiamo il segnale analogico in gradi; in base alla rotazione del cilindro, il servo-motore si muoverà.
void loop() { int potenz = analogRead(A0); int pos = map (potenz, 0, 1023, 0, 180); motor.write(pos); Serial.print("Gradi = "); Serial.print(pos); Serial.println("°"); delay (10); }