Il Servomotore (servo) è un motore elettrico che ha degli ingranaggi in grado di gestire rotazioni comprese tra 0° a 179°, e per alcuni modelli, tra 0° e 360°. Alcuni di questi motori sono a rotazione continua e quindi effettuano delle rotazioni la cui velocità e verso varia somministrando valori compresi tra 0° e 179° (0° per la massima velocità in un verso, 179° per la massima velocità nel verso opposto, 90 ° per bloccare la rotazione ed i valori intermedi per modificare la velocità). I Servomotori sono molto utilizzati in robotica per i movimenti dei robot. Tra questi il sollevamento di un braccio, la chiusura o l'apertura di una pinza ecc..
Si collega con tre filamenti, di cui due vanno a +5V ed al GND, da attingere ad una alimentazione esterna in quanto quella fornita da Arduino potrebbe non essere sufficiente, e l'altro ad una porta digitale di Arduino (non necessariamente PWM). Esperti di elettrotecnica suggeriscono di inserire tra i due fili di alimentazione del servo un condensatore (di disaccoppiamento) di 100 μF (microfarad) per sopperire ai cambiamenti di tensione che potrebbero avvenire a causa di un eccessivo assorbimento del servo. Il condensatore accumula cariche sulle sue armature interne quando è alimentato, mentre quando la tensione ai suoi estremi cala, le cariche del condensatore fluiscono all'esterno compensando questo calo. Ciò evita problemi di malfunzionamento ad Arduino e rende più fluidi i movimenti del servo.
Occorre però fare attenzione a collegare il filamento catodo del condensatore, riconoscibile dalla barra nera, al polo negativo del servo e quindi al GND e l'altro filamento al polo positivo, e quindi al +5V. Invertendo la polarità del codensatore potrebbe scoppiare.
Ripartiamo dal progetto nel quale pilotavamo la luminosità di un Led con il potenziometro ed apportiamo le poche modifiche necessarie.
Anche per quanto riguarda il codice, attingiamo a quello del progetto citato con qualche modifica.
La prima riguarda soprattutto la necessità di includere un'apposita libreria in grado di gestire i servomotori, dal nome 'Servo.h' e grazie a questa creare una funzione avente un nome a piacere, nel nostro caso 'Servo1' (se abbiamo più servomotori creiamo più funzioni tipo 'Servo 2', "Servo 3' ecc., che gestirà materialmente i movimenti del servo.
La funzione map mapperà i valori provenienti dal potenziomentro (tra 0 e 1023) ricavandone un valore compreso tra 0 e 179 o, in base alla propria preferenza, tra 179 e 0.
Leggere attentamente e comprendere il seguente codice e caricarlo su Arduino:
Una volta caricato, agendo sul potenziometro dovrebbero ruotare gli ingranaggi del servo.
Aprendo il monitor seriale si visualizzeranno sia i valori provenienti dal potenziometro, che quelli inviati sottoforma di angolo, al servo.
Nel prossimo progetto sostituiremo il potenziometro con una fotoresistenza.