Hello, Guest!
 
 

 
 
  Objects Tiiips Categories
Progetto rotore Az/El per tracking satelliti - Parte 2
"Descrizione"
by Al222 (24891 pt)
2026-May-23 21:37

Progetto rotore Az/El per tracking satelliti con Azimut 360° reali 

Parte 2 - azimut

In questa Parte 2 facciamo funzionare un servo a 360° effettivi e nella Parte 3 monteremo il servo elevazione.

Qui dobbiamo utilizzare  il software Arduino IDE già caricato nella Parte 1  in C:\Programmi

Tabella costi indicativi

ComponenteArduino
Scheda principaleArduino Mega circa 53
Servo Waveshare ST3215-HS 360°€35
Servo RDS51150 150 kg Digital Metal Robot Servo 180°€55 se 150 kg sono troppi, cercare alternativa
Waveshare Serial Bus Servo Driver Board12 €
Connettori Dupont10–20 €
Alimentatore 12 V 2 A+ 10-25 €
Totale circa €175 






+ un po' di connettori Dupont maschio/maschio e femmina/femmina per i collegamenti

Conviene prendere il pacco da 40, costa 5/6 euro.


Azimut



Collegamenti di base:

Scheda Waveshare → alimentatore 12 V 3 A →  tutti e due i ponticelli gialli in A come da foto sopra

Arduino Mega → USB del PC

GND scheda Waveshare → GND Arduino Mega

Collegare il servo ST3215-HS alla scheda Waveshare col cavo fornito con la scheda

D = dati servo

V = positivo alimentazione servo

G = massa / negativo

A scheda ancora spenta, collegare l’alimentatore 12 V tramite connettore jack

 

 Collegare GND tra Waveshare e Arduino Mega

A scheda ancora spenta con un cavo Dupont maschio-femmina.

GND scheda Waveshare → GND Arduino Mega

Con schede ancora spente, collegare, con cavi Dupont maschio-femmina.

TX Waveshare → TX1 Arduino Mega, pin 18
RX Waveshare → RX1 Arduino Mega, pin 19

Primo test alimentazione

Controllare:

ST3215-HS → connettore D V G
Waveshare TX → Arduino Mega pin 18
Waveshare RX → Arduino Mega pin 19
Waveshare GND → Arduino Mega GND
Ponticelli → A / A

Ora alimentare:

Arduino Mega → USB del PC
Scheda Waveshare → alimentatore 12 V

Scheda Waveshare: LED acceso
Arduino Mega: LED acceso + LED lampeggiante
Servo ST3215-HS: fermo/inattivo 

Installare la libreria Arduino

Per comandare lo ST3215-HS serve la libreria:

SCServo

Scaricarla dalla pagina Waveshare dello ST3215 (https://files.waveshare.com/upload/d/d8/ST_Servo.zip)  

Installazione della libreria SCServo

Aprire il programma Arduino IDE dall’icona sul desktop o dal menu Start.

Andare in:

File → Preferences

Nella riga:

Sketchbook location

impostare la cartella principale degli sketch, ad esempio:

C:\Users\alber\Documenti\Arduino

Attenzione: non bisogna indicare direttamente la cartella libraries.

In Esplora file di Windows, aprire la cartella indicata in Sketchbook location e creare al suo interno la sottocartella:

libraries

Poi copiare dentro la cartella della libreria:

SCServo

Il percorso finale corretto deve essere:

C:\Users\tuo nome\Documenti\Arduino\libraries\SCServo

Dentro la cartella SCServo devono essere presenti direttamente i file della libreria, ad esempio:

SCServo.h
SMS_STS.h
SMS_STS.cpp

Infine chiudere e riaprire il programma Arduino IDE.

Per installare Arduino Mega su una porta COM 

Scollegare il cavo USB di Arduino Mega

Scaricare il driver ufficiale

https://www.wch-ic.com/downloads/ch341ser_exe.html
È il driver ufficiale WCH CH341SER per chip CH340/CH341, compatibile con Windows 10/11. 

Scaricare CH341SER.EXE

Eseguire il file con doppio clic.

Click su INSTALL
attendere la fine dell'installazione e chiudere la finestra.

Ricollegare USB Arduino Mega

In Gestione dispositivi deve comparire sotto:

Porte (COM e LPT)

USB-SERIAL CH340 (COMx)

Dopo questo passaggio, nel programma Arduino IDE è possibile selezionare quella porta COM e caricare il codice.

Carichiamo un codice che porta il servo al centro e poi resta fermo.

Cliccare sull'icona di Arduino IDE, cancellare l'eventuale contenuto e inserire questo codice:

#include


SMS_STS st;


const byte SERVO_ID = 1;


void setup() {

  Serial1.begin(1000000);   // Mega: TX1=18, RX1=19

  st.pSerial = &Serial1;


  delay(1000);


  st.WritePosEx(SERVO_ID, 2048, 1000, 50);  // posizione centrale

}


void loop() {

}

Poi nel menu Sketch > Verify > Compile

compare questo messaggio

poi click sulla freccia a destra per effettuare l'upload del programma

e attribuire un nome al programma (nell'esempio il nome era già stato attribuito nella Parte 1).

Alimentare col 12v la scheda Waveshare per calibrare lo zero azimut.

Prima testiamo tutta la rotazione. 

Nel programma Arduino IDE, sostituire tutto il codice con questo:

#include


SMS_STS st;


const byte SERVO_ID = 1;


void setup() {

  Serial1.begin(1000000);   // Mega: TX1=18, RX1=19

  st.pSerial = &Serial1;


  delay(1000);


  st.WritePosEx(SERVO_ID, 0, 800, 50);      // circa 0°

  delay(3000);


  st.WritePosEx(SERVO_ID, 1024, 800, 50);   // circa 90°

  delay(3000);


  st.WritePosEx(SERVO_ID, 2048, 800, 50);   // circa 180°

  delay(3000);


  st.WritePosEx(SERVO_ID, 3072, 800, 50);   // circa 270°

  delay(3000);


  st.WritePosEx(SERVO_ID, 4095, 800, 50);   // circa 360°

  delay(3000);


  st.WritePosEx(SERVO_ID, 2048, 800, 50);   // ritorno al centro

}


void loop() {

}

Poi nel programma Arduino IDE 

Sketch / Verify / Compile

Se non dà errori, premi:

→ Upload / Carica

Il servo deve fare circa:

0° → 90° → 180° → 270° → 360° → centro

Il test conferma che:

ST3215-HS ruota correttamente su 0–4095
Rotazione 360° funzionante
Arduino Mega comunica con la scheda Waveshare
Serial1, alimentazione e TX/RX sono corretti

Ora possiamo usarlo come servo azimut.

Riferimento da usare:

0     = AZ 0° / Nord
1024  = AZ 90° / Est
2048  = AZ 180° / Sud
3072  = AZ 270° / Ovest
4095  = AZ 360° / Nord

Prossimo passo: caricare il codice EasyComm con:

ST3215-HS = azimut
Servo 25 kg PWM su D10 = elevazione

Codice test azimut da comando seriale

Nel programma Arduino IDE, cancellare tutto e incollare questo codice:

#include 

SMS_STS st;

const byte SERVO_ID = 1;

float azDeg = 180.0;

int azToPos(float az) {
  az = constrain(az, 0.0, 360.0);
  return (int)((az / 360.0) * 4095.0);
}

void moveAzimuth() {
  int pos = azToPos(azDeg);
  st.WritePosEx(SERVO_ID, pos, 1000, 50);
}

void setup() {
  Serial.begin(9600);        // USB PC
  Serial.setTimeout(50);

  Serial1.begin(1000000);    // Arduino Mega: TX1=18, RX1=19
  st.pSerial = &Serial1;

  delay(1000);
  moveAzimuth();

  Serial.println("Test azimut ST3215-HS pronto");
  Serial.println("Scrivi: AZ 0, AZ 90, AZ 180, AZ 270, AZ 360");
}

void loop() {
  if (Serial.available()) {
    String line = Serial.readStringUntil('\n');
    line.trim();
    line.toUpperCase();

    if (line.startsWith("AZ")) {
      azDeg = line.substring(2).toFloat();
      moveAzimuth();

      Serial.print("AZ = ");
      Serial.println(azDeg, 1);
    }
  }
}

Poi nel programma Arduino IDE :

Sketch / Verify / Compila

Se non ci sono errori

→ Upload / Carica

Poi 

Tools → Serial Monitor

Oppure premere l’icona lente in alto a destra.

Nel Serial Monitor 

impostare:

Baud: 9600
Line ending: Newline

Poi inviare questi comandi, uno alla volta e dopo ogni comando premere Invio

ComandoPosizione del servo
AZ 00° Nord
AZ 9090° Est
AZ 180180° Sud
AZ 270270° Ovest
AZ 3600° Nord
     
    Segue Parte 3

Evaluate