Progetto rotore Azimut/Elevazione per ricezione satelliti
Parte 1 - far muovere i servo
La prima parte serve, spendendo poco, per prendere familiarità con Arduino, per i collegamenti, per far muovere i servi.
Per il sistema funzionante al 100% con azimut a 360° attendere il completamento della Parte 2.
Tabella costi indicativi per acquistare familiarità, ma occorre un servo più costoso per avere spostamenti di 360°.
| Componente | Arduino |
|---|---|
| Scheda principale | Arduino Uno circa 12/29 € Mega circa 53 € |
| Connettori Dupont | 10–20 € |
| Convertitore 12 V → 5 V | 5–15 € |
| 2 servo | 10–20 € |
| Totale senza alimentatore 12 V | Circa 55–105 € |
| Alimentatore 5 V 1 A | + 30–80 € |
La configurazione minima:
SCHEDA " UNO REV.3" COMPATIBILE CON CAVO USB costo 10 €

+ un po' di connettori Dupont maschio/maschio per i collegamenti
Conviene prendere il pacco da 40, costa 5/6 euro.

![]() | ![]() |
Testiamo un solo servo alla volta.
Collegamenti:
- Cavetto negativo dell'alimentatore 5v al pin femmina GND di Arduino nella sezione POWER (in basso nella foto).
L’alimentatore 5 V alimenta direttamente il servo:
+5 V alimentatore → filo rosso servo -5 V alimentatore → filo marrone servo
Arduino invece manda solo il segnale di comando:
D9 Arduino → filo giallo servo
E serve la massa comune:
GND Arduino → -5 V alimentatore
Quindi Arduino non alimenta il servo: lo comanda soltanto.
Prossimo passo: testiamo solo il servo azimut con Arduino, senza Hamlib.
Prima cosa: servo libero, senza antenna collegata, se possibile.
Caricare sketch (programma) su Arduino
Scarica Arduino IDE (io ho W11): https://www.arduino.cc/en/software/

Lanciare l'exe e controllare che compaia questa finestra

Collegare Arduino al PC con USB: questo serve per selezionare la porta COM e caricare lo sketch cioè il programma che farà muovere il servo.
Sulla scheda Arduino deve lampeggiare un led verde ON e un led giallo accanto alla lettera L; se è così, la scheda funziona.
Adesso dalla finestra Arduino IDE:
Tools → Board → Arduino AVR Boards → Arduino Uno
Poi:
Tools → Port → scegliere la COM che compare.
Nella finestra Arduino cancellare tutto il codice presente
Poi incollare questo codice:
#include
Servo servoAz;
void setup() {
servoAz.attach(9);
// Rotazione in un senso
servoAz.writeMicroseconds(1200);
delay(2000);
// Stop
servoAz.writeMicroseconds(1500);
delay(2000);
// Rotazione nell'altro senso
servoAz.writeMicroseconds(1800);
delay(2000);
// Stop finale
servoAz.writeMicroseconds(1500);
}
void loop() {
// Vuoto: il programma non viene ripetuto
}
Accendere l’alimentatore 5 V del servo.
Premere Upload (freccia verso destra in alto) e il servo dovrebbe eseguire 4 movimenti e fermarsi.
Se il test è OK, Arduino comanda correttamente il servo azimut.
Spegnere l’alimentatore 5 V del servo.
Ora passiamo direttamente allo sketch compatibile Hamlib / EasyComm II.
Caricare questo su Arduino:
#include
Servo servoAz;
Servo servoEl;
const int AZ_PIN = 9;
const int EL_PIN = 10;
const int MIN_US = 800;
const int MAX_US = 2200;
float azDeg = 180.0;
float elDeg = 90.0;
int degToUs(float deg, float minDeg, float maxDeg) {
deg = constrain(deg, minDeg, maxDeg);
return map((int)(deg * 10), (int)(minDeg * 10), (int)(maxDeg * 10), MIN_US, MAX_US);
}
bool parseValue(String line, const char *key, float &value) {
int idx = line.indexOf(key);
if (idx < 0) return false;
int i = idx + strlen(key);
while (i < line.length() && line[i] == ' ') i++;
if (i >= line.length()) return false;
char c = line[i];
if (!(c == '-' || c == '+' || c == '.' || (c >= '0' && c <= '9'))) return false;
value = line.substring(i).toFloat();
return true;
}
void moveServos() {
servoAz.writeMicroseconds(degToUs(azDeg, 0, 360));
servoEl.writeMicroseconds(degToUs(elDeg, 0, 180));
}
void setup() {
Serial.begin(9600);
Serial.setTimeout(50);
servoAz.attach(AZ_PIN);
servoEl.attach(EL_PIN);
moveServos();
}
void loop() {
if (Serial.available()) {
String line = Serial.readStringUntil('\n');
line.trim();
line.toUpperCase();
if (line == "AZ") {
Serial.print("AZ");
Serial.println(azDeg, 1);
return;
}
if (line == "EL") {
Serial.print("EL");
Serial.println(elDeg, 1);
return;
}
if (line == "AZ EL") {
Serial.print("AZ");
Serial.print(azDeg, 1);
Serial.print(" EL");
Serial.println(elDeg, 1);
return;
}
float newAz, newEl;
bool gotAz = parseValue(line, "AZ", newAz);
bool gotEl = parseValue(line, "EL", newEl);
if (gotAz) azDeg = newAz;
if (gotEl) elDeg = newEl;
if (gotAz || gotEl) {
moveServos();
}
}
}
Click sulla freccia destra per fare l'Uploading
Dopo Done uploading:
Accendere l’alimentatore 5 V del servo.Chiudere la finestra di Arduino

Salvare con un nome semplice, per esempio:
Rotore_AZ_EL_EasyComm
Così si potrà riaprirlo e modificarlo in seguito. Dopo il salvataggio, Arduino IDE si chiuderà. Lasciare però Arduino collegato via USB al PC.
Scaricare e testare il software Hamlib
Sul PC scaricare Hamlib dalla pagina ufficiale delle release GitHub. Le release recenti includono anche pacchetti binari Windows a 32 e 64 bit.
Scaricare la versione Windows 64-bit ZIP o installer EXE che installerà il programma Hamlib sul computer.
Dopo l’installazione devono comparire questi programmi nella cartella Program Files o Programmi>bin
rotctld.exe
rotctl.exe
Nella cartella bin nella barra in alto, dove c’è il percorso, scrivere: cmd e premere invio
poi scrivere, inserendo la porta rilevata da Arduino (in questo caso COM4)
rotctld.exe -m 202 -r COM4 -s 9600 -t 4533 -v

Hamlib è avviato correttamente: quindi lasciare questa finestra aperta e
-Aprire un secondo Prompt dei comandi nella stessa cartella bin e scrivere
rotctl.exe -m 2 -r localhost:4533
premere invio

Provare questi comandi uno alla volta:
P 180 90
Questo dovrebbe mettere l’azimut al centro.
Poi:
P 90 90
Il servo azimut dovrebbe muoversi da una parte.
Poi:
P 270 90
Dovrebbe muoversi dall’altra parte.
Per leggere la posizione:
p
Il primo numero è azimut, il secondo è elevazione.
Collegamento servo elevazione (stesso collegamento per azimut ad eccezione del giallo (o bianco) che, per azimut sarà collegato a D9.
| Filo servo elevazione | Collegamento |
|---|---|
| Giallo o Bianco | Arduino D10 |
| Rosso | +5 V alimentatore |
| Marrone | GND / negativo alimentatore 5 V |
Schema:
Arduino D10 → filo giallo servo elevazione +5 V alimentatore → filo rosso servo elevazione -5 V alimentatore → filo marrone servo elevazione
Il GND Arduino deve restare collegato al negativo dell’alimentatore 5 V, come già collegato.
Accendere l'alimentatore 5v
Aprire un prompt di Hamlib in Program files o Programmi

scrivere: cd "C:\Program Files\hamlib-w64-4.7.1\bin"

scrivere(attenzione a inserire il numero giusto della porta COM, in questo caso ho inserito 4, ma dipende dalla configurazione in Arduino): rotctl.exe -m 202 -r COM4 -s 9600

Portiamo i due servo in posizione centrale
scrivere P maiuscola e premere invio
inserire i valori
Azimut 180 (premere invio)
Elevazione 90 (premere invio)
Provare l'azimut
scrivere P maiuscola e premere invio
inserire i valori
Azimut 90 (premere invio)
Elevazione 90 (premere invio)
si deve muovere solo il servo azimut
Provare l'azimut lato opposto
scrivere P maiuscola e premere invio
inserire i valori
Azimut 270 (premere invio)
Elevazione 90 (premere invio)
si deve muovere solo il servo azimut in senso opposto
Posizionare al centro l'azimut
scrivere P maiuscola e premere invio
inserire i valori
Azimut 180 (premere invio)
Elevazione 90 (premere invio)
il servo azimut si posiziona al centro
Provare l'elevazione
scrivere P maiuscola e premere invio
inserire i valori
Azimut 180 (premere invio)
Elevazione 45 (premere invio)
il servo elevazione si deve muovere di 45°
Provare l'elevazione lato opposto
scrivere P maiuscola e premere invio
inserire i valori
Azimut 180 (premere invio)
Elevazione 135 (premere invio)
si deve muovere solo il servo elevazione in senso opposto
Riportare l'elevazione al centro
scrivere P maiuscola e premere invio
inserire i valori
Azimut 180 (premere invio)
Elevazione 90 (premere invio)
il servo elevazione è al centro così come il servo azimut


