Arduino - Servomotore

Un servomotore è un piccolo dispositivo che ha un albero di uscita. Questo albero può essere posizionato in posizioni angolari specifiche inviando al servo un segnale codificato. Finché il segnale codificato esiste sulla linea di ingresso, il servo manterrà la posizione angolare dell'albero. Se il segnale codificato cambia, la posizione angolare dell'albero cambia. In pratica, i servi vengono utilizzati negli aeroplani radiocomandati per posizionare le superfici di controllo come gli ascensori e i timoni. Sono anche usati in auto radiocomandate, pupazzi e, naturalmente, robot.

I servi sono estremamente utili nella robotica. I motori sono piccoli, hanno circuiti di controllo incorporati e sono estremamente potenti per le loro dimensioni. Un servo standard come il Futaba S-148 ha una coppia di 42 once / pollici, che è forte per le sue dimensioni. Assorbe anche potenza proporzionale al carico meccanico. Un servo leggermente caricato, quindi, non consuma molta energia.

Le viscere di un servomotore sono mostrate nella figura seguente. Puoi vedere i circuiti di controllo, il motore, un set di ingranaggi e il case. Puoi anche vedere i 3 fili che si collegano al mondo esterno. Uno è per l'alimentazione (+ 5 volt), la terra e il filo bianco è il filo di controllo.

Funzionamento di un servomotore

Il servomotore ha alcuni circuiti di controllo e un potenziometro (un resistore variabile, noto anche come pot) collegato all'albero di uscita. Nella foto sopra, il vaso può essere visto sul lato destro del circuito. Questo potenziometro consente al circuito di controllo di monitorare l'angolo di corrente del servomotore.

Se l'albero è all'angolo corretto, il motore si spegne. Se il circuito rileva che l'angolo non è corretto, farà ruotare il motore fino a raggiungere l'angolo desiderato. L'albero di uscita del servo è in grado di viaggiare da qualche parte intorno a 180 gradi. Di solito, è da qualche parte nell'intervallo di 210 gradi, tuttavia, varia a seconda del produttore. Un servo normale viene utilizzato per controllare un movimento angolare da 0 a 180 gradi. Non è meccanicamente in grado di ruotare ulteriormente a causa di un arresto meccanico costruito sull'ingranaggio di uscita principale.

La potenza applicata al motore è proporzionale alla distanza che deve percorrere. Quindi, se l'albero deve ruotare per una grande distanza, il motore funzionerà a piena velocità. Se deve girare solo una piccola quantità, il motore funzionerà a una velocità inferiore. Questo è chiamatoproportional control.

Come si comunica l'angolo di rotazione del servo?

Il cavo di controllo viene utilizzato per comunicare l'angolo. L'angolo è determinato dalla durata di un impulso applicato al cavo di controllo. Questo è chiamatoPulse Coded Modulation. Il servo si aspetta di vedere un impulso ogni 20 millisecondi (0,02 secondi). La lunghezza dell'impulso determinerà di quanto gira il motore. Un impulso di 1,5 millisecondi, ad esempio, farà girare il motore nella posizione di 90 gradi (spesso chiamata posizione neutra). Se l'impulso è inferiore a 1,5 millisecondi, il motore ruoterà l'albero più vicino a 0 gradi. Se l'impulso è più lungo di 1,5 millisecondi, l'albero ruota più vicino a 180 gradi.

Componenti richiesti

Avrai bisogno dei seguenti componenti:

  • 1 × scheda Arduino UNO
  • 1 × servomotore
  • 1 × ULN2003 pilotaggio IC
  • Resistenza 1 × 10 KΩ

Procedura

Seguire lo schema del circuito ed effettuare i collegamenti come mostrato nell'immagine sotto riportata.

Schizzo

Apri il software IDE Arduino sul tuo computer. La codifica nella lingua Arduino controllerà il tuo circuito. Aprire un nuovo file di schizzo facendo clic su Nuovo.

Codice Arduino

/* Controlling a servo position using a potentiometer (variable resistor) */

#include <Servo.h>
   Servo myservo; // create servo object to control a servo
   int potpin = 0; // analog pin used to connect the potentiometer
   int val; // variable to read the value from the analog pin

void setup() {
   myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop() {
   val = analogRead(potpin);
   // reads the value of the potentiometer (value between 0 and 1023)
   val = map(val, 0, 1023, 0, 180);
   // scale it to use it with the servo (value between 0 and 180)
   myservo.write(val); // sets the servo position according to the scaled value
   delay(15);
}

Codice da notare

I servomotori hanno tre terminali: alimentazione, massa e segnale. Il cavo di alimentazione è tipicamente rosso e dovrebbe essere collegato al pin 5V su Arduino. Il filo di terra è tipicamente nero o marrone e deve essere collegato a un terminale dell'IC ULN2003 (10-16). Per proteggere la tua scheda Arduino da eventuali danni, avrai bisogno di un driver IC per farlo. Qui abbiamo utilizzato l'IC ULN2003 per azionare il servomotore. Il pin del segnale è in genere giallo o arancione e dovrebbe essere collegato al pin numero 9 di Arduino.

Collegamento del potenziometro

Un partitore di tensione / divisore di potenziale sono resistori in un circuito in serie che scalano la tensione di uscita a un particolare rapporto della tensione di ingresso applicata. Di seguito è riportato lo schema del circuito:

$$ V_ {out} = (V_ {in} \ times R_ {2}) / (R_ {1} + R_ {2}) $$

V out è il potenziale di uscita, che dipende dalla tensione di ingresso applicata (V in ) e dai resistori (R 1 e R 2 ) nella serie. Significa che la corrente che scorre attraverso R 1 scorrerà anche attraverso R 2 senza essere divisa. Nell'equazione precedente, al variare del valore di R 2 , V out si ridimensiona di conseguenza rispetto alla tensione di ingresso, V in .

Tipicamente, un potenziometro è un divisore di potenziale, che può scalare la tensione di uscita del circuito in base al valore del resistore variabile, che viene scalato utilizzando la manopola. Ha tre pin: GND, Segnale e + 5V come mostrato nello schema seguente -

Risultato

Modificando la posizione NOP della pentola, il servomotore cambierà il suo angolo.