Hello, Guest!
 
 

🔍
REVIEW

Description

Al222
Al222 (25036 pt) 2026-May-21 16:46

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°.


ComponenteArduino
Scheda principaleArduino Uno circa 12/29 €  
Mega circa 53 €
Connettori Dupont10–20 €
Convertitore 12 V → 5 V5–15 €
2 servo10–20 €
Totale senza alimentatore 12 VCirca 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 elevazioneCollegamento
Giallo o BiancoArduino 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