Hello, Guest!
 
 

 
 
  Objects Tiiips Categories
Azimuth/Elevation Rotator Project for Satellite Reception
"Descrizione"
by Al222 (24887 pt)
2026-May-17 12:37

Progetto rotore Azimut/Elevazione per ricezione satelliti


Scegliere la centralina

Tabella comparativa completa

SoluzioneVantaggiSvantaggiIdeale per
Arduino UNO + PCA9685Più semplice, molto stabile via USB, facile con Hamlib, adatto al primo testNiente Wi-Fi integratoPrima realizzazione del rotore
ESP32 + PCA9685Wi-Fi integrato, più potente, possibile controllo da browser, più flessibilePiù complesso da configurareVersione finale wireless

Tabella costi indicativi

ComponenteArduino + PCA9685ESP32 + PCA9685
Scheda principaleArduino Uno circa 12/29 €  Mega circa 53 €ESP32 circa 8–17 €
Modulo PCA968510–20 €10–20 €
Convertitore 12 V → 5 V5–15 €5–15 €
Cavi, morsetti, fusibili10–20 €10–20 €
Totale senza alimentatore 12 VCirca 55–105 €Circa 35–72 €
Alimentatore 5 V 1 A+ 30–80 €+ 30–80 €

Il PCA9685 non è indispensabile; per solo 2 servomotori, ho optato per partire senza PCA9685e in 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

Il secondo servo ha gli stessi fili:


Filo servo elevazioneCollegamento
GialloArduino D10
Rosso+5 V alimentatore
MarroneGND / 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

Collegare Gpredict a rotctld
Chiudere tutte le finestre di prompt (cmd)

Aprire un solo Prompt e scrivere

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

Poi:

rotctld.exe -m 202 -r COM3 -s 9600 -t 4533 -v
e premere Invio

Deve restare aperto con:

Opened rot model 202, 'EasycommII'

Scaricare e installare la release aggiornata di Gpredict.

eseguire l'exe

in Gpredict dal menu in alto cliccare:

Edit → Preferences

cercare nella finestra delle preferenze una sezione chiamata:

Interfaces

e poi

Rotators

Dentro devi trovare la configurazione dei rotators.

Aggiungere il rotore
In basso ci sono i pulsanti Add, Edit, Delete



Cliccare Add / Add New. Gpredict usa questo percorso: Edit → Preferences → Interfaces → Rotators → Add New

CampoValore
NameArduino AZ-EL
Hostlocalhost
Port4533
Min Az0
Max Az360
Min El0
Max El90

Salvare con OK / Apply.
Chiudere anche la finestra Preferences

Lasciare aperto il Prompt con:

Prima di usare il tracking occorre impostare la propria Ground Station, altrimenti Gpredict calcolerà i satelliti da Copenhagen, Denmark

Quindi:
Edit → Preferences → General
Ground Stations

completare i campi

Confermare con OK, chiudere e riaprire Gpredict.

Aggiornare i TLE (Two-Line Element) sono i dati orbitali aggiornati dei satelliti.

Edit → Update TLE data from network
Poi:
Edit → Update transponder data
Dopo l’aggiornamento, Gpredict userà i dati satellitari aggiornati dalla posizione salvata.

Calibrazione meccanica della direzione.

Gpredict usa questo riferimento:


AzimutDirezione
Nord
90°Est
180°Sud
270°Ovest

Nel nostro sistema il centro dell’azimut è:

Azimuth: 180

Quindi, accendere l'alimentazione 5v, aprire un solo Prompt e scrivere:

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

Poi:

rotctl.exe -m 202 -r COM3 -s 9600

Quando compare:

Rotator command:

scrivere:

P

Poi:

Azimuth: 180
Elevation: 90

Così si porta il rotore al centro, nel caso in cui fosse spostato. Se i servo non si muovono è perché sono già nella posizione giusta.

Ruotare fisicamente tutta la base del rotore in modo che l’antenna punti verso Sud e fissare la base in modo che non si muova.

Poi:

P
Azimuth: 90
Elevation: 90
L’antenna deve andare verso Est.
P
Azimuth: 270
Elevation: 90
L’antenna deve andare verso Ovest.

A questo punto la calibrazione base AZ/EL è corretta.

Azimuth: 180
Elevation: 90

Rotore è in centro.

Premere q

Poi scollegare Arduino dalla USB per evitare errori di memoria e ricollegare Arduino alla USB

rotctld.exe -m 202 -r COM3 -s 9600 -t 4533 -v
Deve restare aperto con:
Opened rot model 202, 'EasycommII'
Aprire Gpredict.
Aprire Antenna Control.
Selezionare Arduino_UNO. Selezionare un satellite con Elevation positiva. Premi Engage. Poi premi Track. Se il rotore si muove verso la posizione del satellite, il collegamento Gpredict → rotctld → Arduino → servi funziona.







...continua domani...

Evaluate