Hai mai desiderato dare vita ai tuoi progetti robotici, permettendo loro di muoversi e osservare l’ambiente? Con un semplice kit Pan-Tilt, una scheda Arduino e un po’ di creatività, puoi costruire un sistema di orientamento a due assi perfetto per telecamere, sensori o laser.
In questo post, ti guiderò attraverso l’assemblaggio di un sistema Pan-Tilt utilizzando due servomotori tipo SG90 e ti mostrerò come controllarli con un joystick e un Arduino!

Indice
Kit Pan-Tilt e Servomotori
In un sistema pan-tilt, il servo pan è il motore che controlla il movimento orizzontale (panoramica) della telecamera, ovvero lo spostamento da destra a sinistra e viceversa. In pratica, il servo pan permette di inquadrare l’area desiderata muovendo la telecamera lungo l’asse orizzontale.
Il servo tilt, invece, controlla il movimento verticale (inclinazione) della telecamera, permettendo di inquadrare dall’alto verso il basso e viceversa.
l kit include la struttura in plastica che tiene i due servomotori e che permette di montare una telecamera, un sensore o altro sulla parte superiore, consentendo movimenti di rotazione orizzontale (Pan) e verticale (Tilt).

Il cuore di questo progetto sono i due servomotori tipo SG90 da 9g . Questi motori sono piccoli, leggeri e perfetti per progetti che richiedono movimenti precisi in spazi ridotti.

Sotto la tabella con le sue caratteristiche
| Ingranaggi | In plastica |
| Tensione di esercizio | 4.8 v |
| Intervallo di temperatura: | 0 ℃ _ 55 ℃ |
| Larghezza banda morta: | 1us |
| Lunghezza cavo | 25 cm |
| Peso(g) | 9 |
| Connettore | JR |
| Coppia(kg/cm)(4.8v) | 1.8 |
| Velocità(sec/60deg) | 0.1 |
| A(mm) | 34.5 |
| B(mm) | 22.8 |
| C(mm) | 26.7 |
| D(mm) | 12.6 |
| E(mm) | 32.5 |
| F(mm) | 16 |
nella confezione sono forniti anche le viti di fissaggio e varie ancore
Sotto è visibile la conformazione del connettore del servo dotato di 3 pin (Arancione: segnale, Rosso: alimentazione VCC, Marrone: massa GND).

NOTA: Il kit del Pan e Tilt non comprende i due servomotori che dovranno essere acquistati separatamente.
Dove acquistare il materiale?
I componenti utilizzati in questo progetto Pan-Tilt con Arduino possono essere acquistati presso il sito di Futura elettronica, i loro codici sono:
- Pan/Tilt per servo 9 grammi codice 2846-PANTILT206
- Mini Servo motore 1.2kg/cm ingranaggi plastici 180° codice 7300-SERVO206
- Scheda Uno R3 con Atmega328 codice 1606-UNOR3
- Modulo con Joystick KY-023 codice 1606-XYJOYSTICK
Assemblaggio del sistema Pan-Tilt
L’assemblaggio è piuttosto semplice seguendo le foto sotto riportate per montare i due servomotori sulla struttura di plastica. I motori devono essere posizionati in modo da consentire una rotazione fluida e completa, senza ostacoli. Il servomotore che gestirà il movimento orizzontale (Pan) si trova alla base, mentre quello per il movimento verticale (Tilt) sarà montato sopra il primo.

I vari componenti che formeranno il nostro dispositivo Pan & Tilt

Iniziamo dalla base, e da una delle ancore che dobbiamo modificare

In questo caso dobbiamo tagliare i due lati più lunghi, come nella foto

Andrà posizionata sulla base e fissata con 2 o tre viti.
Attenzione: Non bisogna stringere troppo le viti, vi è il rischio che la plastica si rompa

Ora la base è terminata, e si può passare al supporto del servo PAN

La staffetta e una delle ancore corte va fissata Il con due viti

Ecco nella foto il montaggio completato

Il servomotore del movimento TILT va collegato alla staffa che potrà essere utilizzata in futuro per il fissaggio di telecamere, sensori o laser.

Anche per questo si utilizzeranno due viti autofilettanti

Il servomotore per il movimento PAN va fissato all’interno delle due staffe,
anche in questo caso usando due viti autofilettanti
Azzeramento posizione del servo PAN
Per posizionare un servomotore al centro, è necessario inviare un segnale che corrisponda alla posizione centrale del range di movimento del servo. Questo valore, espresso in gradi, di solito si trova a metà tra il valore minimo e massimo, ad esempio 90 gradi se il servo ha un’escursione da 0 a 180 gradi.

Ecco un esempio di codice Arduino per posizionare un servomotore al centro
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <Servo.h> Servo myservo; // Crea un oggetto servo int pos = 0; // Variabile per memorizzare la posizione void setup() { myservo.attach(3); // Collega il servo al pin 3 } void loop() { pos = 90; // Imposta la posizione a 90 gradi (centro) myservo.write(pos); // Invia il comando al servo delay(15); // pausa per far compiere il movimento } |
#include <Servo.h>: Include la libreria Servo, necessaria per controllare i servomotori. La libreria “servo” è inclusa nell’IDE di Arduino, e non è necessario scaricarla o installarla separatamente.Servo myservo;: Crea un oggettomyservodi tipoServo.int pos = 0;: Dichiara una variabile interapose la inizializza a 0. Questa variabile verrà utilizzata per memorizzare la posizione desiderata del servo.myservo.attach(9);: Collega l’oggettomyservoal pin digitale 3pos = 90;: Imposta la variabileposal valore 90, che rappresenta la posizione centrale per un servo con un’escursione di 0-180 gradi.myservo.write(pos);: Invia il comando al servo per spostarsi alla posizione specificata inpos.delay(15);: Aggiunge un ritardo di 15 millisecondi per dare al servo il tempo di raggiungere la posizione desiderata.

A questo punto si fissa l’albero rotante del servo PAN sulla base con una vite

Non resta che fissare alla staffa, l’albero del servo TILT, anch’esso con una vite.
La posizione in questo caso sarà da trovare in base alla corsa che vorremo far fare al servomotore
Test del nostro Pan & Tilt
Una volta assemblato il tutto, si può procedere ad un primo test.
Per fare questo saranno necessari oltre alla scheda Arduino che abbiamo già utilizzato, un modulo Joystick tipo KY-023.

Collegamenti
I collegamenti del sistema Pan-Tilt con il Joystick ad Arduino sono:
- Servomotore PAN:
- Pin del segnale (Arancione): Pin digitale 9 dell’Arduino
- Alimentazione (Rosso): Pin 5V dell’Arduino
- Massa (Marrone): Pin GND dell’Arduino
- Servomotore TILT:
- Pin del segnale (Arancione): Pin digitale 10 dell’Arduino
- Alimentazione (Rosso): Pin 5V dell’Arduino
- Massa (Marrone): Pin GND dell’Arduino
- Modulo Joystick KY-023:
- VRX (asse X): Pin analogico A0 dell’Arduino
- VRY (asse Y): Pin analogico A1 dell’Arduino
- SW (Pulsante): Pin digitale 2 dell’Arduino
- +5V: Pin 5V dell’Arduino
- GND: Pin GND dell’Arduino
NOTA: Potrebbe essere necessario un alimentatore esterno se i servomotori non si muovono come desiderato, in quanto potrebbero richiedere più corrente di quanta l’Arduino ne possa fornire.
Nel test è stata utilizzata, al posto della scheda Arduino UNO, una scheda KS0486 Keyestudio PLUS completamente compatibile con l’ambiente di sviluppo Arduino IDE. Contiene tutte le funzioni della scheda Arduino UNO R3 e alcuni miglioramenti che ne rafforzano notevolmente la funzione.
Sulla scheda sono presenti dei connettori per collegare direttamente i moduli. È possibile configurare i pin digitali per lavorare a una tensione di 3.3V evitando così di dover ricorrere a un traslatore di livello o l’inserimento di resistenze. La sezione di alimentazione è in grado di erogare 5V 2A.

Foto del dispositivo Pan e Tilt collegato alla scheda e del joystick per controllare il movimento dei due servomotori

Dettaglio della connessione dei due connettori dei servomotori (pin 10 e 11) , e del connettore del pulsante del joystick (Pin 3)

Dettaglio della connessione dei due connettori dei potenziometri VRx e VRy (A0 e A1) e dell’alimentazione +5V e GND.
Sketch di prova
Per la gestione del Pan-Tilt con Arduino, occorre caricare il seguente sketch sull’Arduino IDE. Questo programma legge i valori del joystick e li mappa sull’angolo di rotazione dei servomotori.
Il programma include anche la funzionalità di blocco e sblocco dei servomotori tramite il pulsante del joystick. Cioè una logica che “freeza” la posizione dei servo quando premi il pulsante e la sblocca quando lo premi di nuovo.

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
#include <Servo.h> // Oggetti Servo Servo panServo; //Servo rotazione Servo tiltServo; //Servo inclinazione // Pin per i servomotori const int panPin = 11; const int tiltPin = 10; // Pin per il joystick const int joyXPin = A0; //VRy const int joyYPin = A1; //VRx // Pin per il pulsante del joystick // Assicurati di collegare il pin SW del joystick a questo pin digitale const int joyButtonPin = 3; // Variabili per i valori del joystick e dei servomotori int joyXVal; int joyYVal; int panAngle; int tiltAngle; // Variabili per la gestione del pulsante int lastButtonState = HIGH; // Stato precedente del pulsante bool isLocked = false; // Stato del blocco void setup() { // Collega i servomotori ai loro pin panServo.attach(panPin); tiltServo.attach(tiltPin); // Imposta il pin del pulsante come INPUT_PULLUP // Ciò significa che non è necessaria una resistenza esterna pinMode(joyButtonPin, INPUT_PULLUP); // Inizializza i servomotori a una posizione centrale panServo.write(90); tiltServo.write(90); // Inizializza la comunicazione seriale per il debug (opzionale) Serial.begin(9600); } void loop() { // Leggi lo stato attuale del pulsante int currentButtonState = digitalRead(joyButtonPin); // Controlla se il pulsante è stato premuto (passaggio da HIGH a LOW) if (currentButtonState != lastButtonState && currentButtonState == LOW) { // Inverti lo stato del blocco isLocked = !isLocked; // Stampa lo stato attuale per il debug if (isLocked) { Serial.println("Movimento bloccato!"); } else { Serial.println("Movimento sbloccato!"); } } // Aggiorna lo stato precedente del pulsante lastButtonState = currentButtonState; // Se il sistema non è bloccato, leggi il joystick e muovi i servomotori if (!isLocked) { // Leggi i valori del joystick joyXVal = analogRead(joyXPin); joyYVal = analogRead(joyYPin); // Mappa i valori del joystick (0-1023) all'angolo del servomotore (0-180) panAngle = map(joyXVal, 0, 1023, 0, 180); tiltAngle = map(joyYVal, 0, 1023, 0, 180); // Scrivi l'angolo ai servomotori panServo.write(panAngle); tiltServo.write(tiltAngle); } // Aggiungi un piccolo delay per stabilizzare il movimento delay(15); } |
Una volta caricato il codice, il sistema Pan-Tilt è pronto! Muovendo il joystick, i servomotori si muoveranno in tempo reale, permettendo di controllare la direzione del sensore o telecamera.
Premendo il joystick il movimento si arresta nella posizione assunta sino alla nuova pressione del joystick .
Sotto alcune spiegazione del codice:
- Variabile per il pulsante: la costante
joyButtonPin = 2serve per definire il pin digitale a cui collegare il pulsante del joystick (SW). - Variabili di stato:
lastButtonStatememorizza lo stato del pulsante nel ciclo precedente, eisLockedè una variabile booleana che tiene traccia se il movimento è bloccato o meno. - Setup del pin: Nel
setup(),pinMode(joyButtonPin, INPUT_PULLUP)configura il pin 2 per leggere il segnale del pulsante.INPUT_PULLUPutilizza la resistenza interna dell’Arduino per mantenere il pin a un livello logico alto (HIGH) quando il pulsante non è premuto. Quando il pulsante viene premuto, il pin viene collegato a massa (GND) e il suo stato diventa basso (LOW). - Logica di blocco/sblocco: Nel
loop(), il programma legge continuamente lo stato del pulsante. L’istruzioneif (currentButtonState != lastButtonState && currentButtonState == LOW)rileva il momento esatto in cui il pulsante viene premuto. Quando ciò accade,isLocked = !isLockedinverte il valore della variabileisLocked, bloccando o sbloccando il movimento. - Controllo condizionale: L’istruzione
if (!isLocked)racchiude il codice che legge i valori del joystick e muove i servomotori. Questo significa che il codice all’interno di questo blocco verrà eseguito solo seisLockedèfalse, ovvero quando il movimento è sbloccato. SeisLockedètrue, il codice viene saltato e i servomotori mantengono la loro ultima posizione.
Progetti futuri
Il progetto futuro prevede la gestione dei due servomotori tramite una scheda ESP32-CAM.
Il tutto gestito tramite smartphone

Altri progetti di Dispositivi Pan & Tilt realizzati
Quelli visibili nelle foto sotto sono dispositivi di brandeggio Pan & Tilt, che ho realizzato.
Sono disponibili tre tipologie di realizzazione: una in versione maggiorata e una in versione “ridotta” auto costruite, più una di tipo commerciale, per ognuna sono disponibili i disegni dei particolari e le istruzioni di montaggio.
Per il pilotaggio sono presenti varie opzioni: con apposita tastiera, tramite un piccolo Joystick, un controller Nunchuck,, un radiocomando, oppure installata su un robot e gestita dal programma di controllo.
Versione dispositivo auto costruito – prima versione
La struttura di questo PAN e Tilt è costituita da profili in alluminio connesso con viti. I profilati possono essere facilmente acquistati presso una delle grosse catene di ferramenta.
Per la rotazione sono stati utilizzati dei servomotori analogici prodotti dalla FUTABA modello S148, mentre la telecamera è una semplice CMOS in bianco e nero.
Per maggiori informazioni sul progetto vedete relativo post
Il progetto è descritto in un articolo che è stato pubblicato sul numero 269 di Novembre della rivista Fare Elettronica.
![]() |
![]() |
Per altri miei articoli pubblicati su Fare Elettronica vedete il post Fare Elettronica – articoli di adrirobot
Versione dispositivo auto costruito – seconda versione
Dopo l’esperienza fatta con la versione precedente del sistema di Pan & Tilt per telecamera ho pensato di ridurre le dimensioni del sistema per poterlo utilizzare anche su robot di dimensioni medio piccole.
a struttura è costituita da due particolari (uno in lamiera di ferro, il secondo in alluminio) opportunamente tagliati e piegati. Per la rotazione ho utilizzato dei servo della FUTABA modello S148, mentre la telecamera è una semplice CMOS a colori dotata di trasmettitore incorporato.
Per maggiori informazioni sul progetto vedete relativo post.

Il progetto è descritto all’interno di quello più ampio che descrive il montaggio di un piccolo robot chiamato ArduinoBot. Sono stati pubblicati sui numeri 317, 318, 319, 320 tra il novembre 2011 e il febbraio 2012 sulla rivista Fare Elettronica.
![]() |
![]() |
![]() |
![]() |
| n° 317 | N° 318 | n° 319 | n°320 |
Per altri miei articoli pubblicati su Fare Elettronica vedete il post Fare Elettronica – articoli di adrirobot
Modello commerciale SparkFun
Il dispositivo Pan & Tilt qui descritto è venduto dalla SparkFun codice ROB-10335.
Nel kit sono presenti i componenti riportati a lato, cioè due staffe e tutto l’hardware necessario per il fissaggio per creare un meccanismo pan / tilt con due servomotori. I servomotori devono essere presi a parte, quelli consigliati sono dei servo compatibili con il modello Hitec HS-55 , Sparkfun codice ROB-09065.
Per maggiori informazioni sul progetto vedete relativo post
Il progetto è descritto in un articolo pubblicato sul sito Elettronica Open Source il 28 gennaio 2015.
Il comando del dispositivo è realizzato tramite una scheda Arduino Esplora e un modulo appositamente creato per comandare i servomotori
Ecco i relativi posto che mostrano come sono realizzati:
Per altri miei articoli pubblicato su Elettronica Open Source vedere il post Elettronica Open Source – articoli di adrirobot
















