«

»

Gen 17

Stampa Articolo

DF15HSR 360 gradi arduino

I servo che ho utilizzato per i miei tutorial fino ad oggi sono sempre stati servo in grado di compiere movimenti di massimo 180°, oggi ho provato il il servo DF15HSR 360 gradi arduino.

DF15HSR 360 gradi arduino

Il DF15HSR è un servo a rotazione continua ed unisce i vantaggi dei servo tradizionali sia dal punto di vista del controllo mediante un unico cavo oltre all’alimentazione e della riduzione meccanica che aumenta la coppia a scapito della velocità.

Controllo DF15HSR con un solo cavo e PWM

I motori DC o CC li puoi controllare con arduino attraverso una motor shield che funziona da ponte H e ti permette mediante 2 pin di definire verso e velocità del motore.

Il DF15HSR 360 gradi arduino è già dotato del circuito di controllo e mediante un unico cavo segnale collegato ad un pin PWM arduino puoi regolare verso e velocità.

DF15HSR 360 gradi arduino collegamenti

Il produttore riporta la seguente frase:

NOTE: ALL 360 degree rotation motors are modified from standard servo, it does not have position control and feedback. The PWM signal is only for controlling the speed of the motor, not the position.

Ossia i servo a 360° usano il controllo PWM per regolare la velocità ed il verso e non a posizione come avviene per i servo tradizionali a 180°.

Riduzione meccanica

I motoriduttori presentano il vantaggio di erogare una coppia elevata a scapito della velocità originale del motore.

Il DF15HSR 360 gradi arduino è già dotato di una coppia elevata grazie ai suoi ingranaggi, il produttore riporta 15.1Kg/cm a 7,4v ( tensione di alimentazione )

Accessori nella confezione

Nella confezione del servo DF15HSR 360 gradi arduino sono inclusi oltre al servo 4 rotelle di cui 2 da applicare sull’alberino rotante e 2 applicabili dalla parte opposta e non connesse a nessun ingranaggio.

Inoltre il servo viene fornito con due coperchi di ricambio in cui quello da montare opposto all’alberino del servo presenta un piolo in cui puoi installare le 2 rotelle accessorie.

DF15HSR 360 gradi arduino parti

Questa configurazione è utile nei casi in cui vuoi montare il servo per lavorare con una squadra a U in cui può esserti utile avere due punti di fissaggio del servo.

Collega il DF15HSR 360 gradi arduino

Puoi collegare il servo ad arduino ai 5v o al Vin ( alimentando arduino con una batteria da 7,4v ) ed il pin di segnale o controllo ad uno dei pin PWM:

Nella figura il segnale è connesso al pin 10 e l’alimentazione ai +5v e Gnd.

Lo sketch di controllo del DF15HSR 360 gradi arduino

#include <Servo.h>

Servo myservo;

void setup()
{
   Serial.begin( 9600 );
   myservo.attach(10);
}

void loop()
{
   for ( int i=1500; i<2500; i+=100 ) {
     Serial.println( i );
     myservo.writeMicroseconds( i );
     delay(1000);
   }

   delay(2000);

   for ( int i=1500; i>500; i-=100 ) {
     Serial.println( i );
     myservo.writeMicroseconds( i );
     delay(1000);
   }
}

Avrai notato che il DF15HSR 360 gradi arduino usa la classe servo.h di arduino, tuttavia il controllo del servo con il metodo write della classe Servo.h non genera il controllo desiderato.

Lo sketch usa il metodo writeMicroseconds() per impostare i microsecondi di impulso che il pin invia all’elettronica del servo.

L’impulso recepito dal servo varia dai 500 ai 2500 microsecondi in cui il punto centrale o di stop è a 1500 microsecondi; inviando al servo da 500 a 1500 miscosecondi il servo ruota in un senso, inviando da 1500 a 2500 il servo ruota nel verso opposto.

linea 08: usa il metodo attach dell’istanza myservo per definire a quale pin hai collegato il servo, nell’esempio il pin 10;

linea 13: il ciclo for inizia da 1500 e incrementa, di 100 in 100, il valore di i fino a 2500 microsecondi;

linea 14: scrivi sul monitor seriale il valore calcolato;

linea 15: invia al servo i microsecondi da applicare per la rotazione;

linea 16: attendi 1 secondo ogni ciclo for prima di incrementare il valore di i di 100, tutto il ciclo for durerà circa 10 secondi = (2500-1500)/100 = 10

linee 21-25: esegui un ciclo simile a quello precedente con la differenza che parti da 1500 microsecondi e decrementi di 100 fino a 500 microsecondi.

Il video

Lo sketch usato incrementa di 100 in 100 il valore in microsecondi tra 1500 e 2500 e tra 1500 e 500 tuttavia come vedi nel filmato la velocità del servo non cambia:

Buona progettazione.

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/df15hsr-360-gradi-arduino.html

30 comments

Vai al modulo dei commenti

  1. Carlo

    Grazie per l’articolo, che tempismo.
    Utilizzando un servo normale con fine corsa,
    Mi permette di controllare i due finecorsa rispettivamente 500 e 2500
    Mi sfugge come potrei controllare la velocità del servo.
    grazie
    Carlo

    1. Mauro Alfieri

      Ciao Carlo,
      i servo “normali” immagino intendi i servo 0-180°, come descritto nell’articolo tali servo non sono controllabili in velocità ma in angolazione ( gradi ).
      Se vuoi regolare la velocità del servo da 180° puoi farlo impostando un delay tra un grado ed il successivo ottenendo un movimento a scatti ma più lento.

      Ti consiglio di leggere qualcuno dei miei articoli sul controllo dei servo.

      Mauro

      1. Antonio Papa

        Salve Sig. Mauro
        Ho bisogno di avere info dettagliate su prodotto che mi occorre.
        Le invio mio recapito telefonico 366504xxxx
        Oppure se mi invia suo recapito via email la contatto io direttamente.

        Antonio

        1. Mauro Alfieri

          Buongiorno Sig. Antonio Papa,
          innanzitutto le sconsiglio di lasciare recapiti email e di cellulare nei commenti del blog, è peggio che scriverli in tutti i bagni degli autogrill d’Italia.
          Se il suo progetto ha a che fare con il DF15HSR e desidera delle delucidazioni può usare i commenti al blog per chiederle.
          Se interessato a commissionarmi un progetto usi pure la casella info del blog per scrivermi una email.

  2. Santo

    Non ho ben capito se il servo in questione ha un’elettronica di bordo in grado di leggere un segnale PWM o se dipende tutto dal controllore esterno (in questo esempio l’arduino).
    Supponendo che sia valida la prima ipotesi: dallo sketch mi pare di capire che il motore gira in un verso fino a quando il segnale PWM ha una frequenza compresa tra 2000 Hz (500 us) e 667 Hz (1500 us); mentre gira nell’altro verso se la frequenza è compresa tra 667 Hz (1500 us) e 400 Hz (2500). A 667 Hz esatti il motore rimane fermo.
    Ho commesso qualche errore in questo ragionamento?
    Se ho ragionato in modo corretto vuol dire che la velocità del motore non cambia col variare della frequenza applicata al motore, giusto?

    Ti ringrazio in anticipo per la risposta.
    Santo

    1. Mauro Alfieri

      Ciao Santo,
      quasi tutto corretto, il servo ha una elettronica interna sua che interpreta il segnale PWM proveniente da arduino o altra fonte.

      Unico neo nel tuo ragionamento riguarda la questione frequenze, il PWM arduino ha una frequenza costante per ciascun pin PWM quello che cambia é la lunghezza dell’impulso in microsecondi.

      Il resto tutto perfetto.

      Mauro

  3. simone

    Bell’articolo come sempre
    Volevo chiederti se è possibile utilizzare i servo a rotazione continua per la mano robotica con i sensori di flessione, perchè ne ho un paio in casa e così non devo acquistarli.
    E’ inoltre possibile adattare il code o cambia completamente?
    Ti ringrazio per la eventuale risposta.
    Simone

    1. Mauro Alfieri

      Ciao Simone,
      i servo a rotazione continua che conosco io non possono essere controllati per gradi ma solo per velocità e questo li rende non adatti al progetto che vuoi realizzare.

  4. gerardo

    salve Mauro,
    vorrei realizzare un braccio meccanico ma non so se utilizzare dei servo normali o quelli a rotazione continua .

    1. Mauro Alfieri

      Ciao Gerardo,
      è molto legato al tipo di movimento ed alla meccanica che hai realizzato.
      In generale è più semplice usare i servo 0-180° in quanto i servo da 360° non sono controllabili in gradi ma solo in velocità.

  5. Pantaleo

    Ciao Mauro

    Prima di tutto complimenti per il sito e ottime spiegazioni!!!
    Ho iniziato da pochi giorni a farmi una cultura su Arduino in quanto non sapevo nulla sull’argomento, mi sei stato molto utile!

    Ho in mente un progetto in cui mi necessita un servo a rotazione continua.
    Sul sito hobbyking.com ne ho trovati alcuni con una coppia adeguata per la mia idea ma non riesco a capire se sono a 360°.
    Quindi volevo chiederti se esiste un modo per capirlo dalle caratteristiche li riportate o se quando non è specificato sia da 0° a 180° .

    grazie in anticipo e scusa la mia ignoranza 🙂

    Pantaleo

    1. Mauro Alfieri

      Ciao Pantaleo,
      solitamente il produttore del servo o il rivenditore scrive nelle caratteristiche del servo anche l’ampiezza del movimento.
      Quando acquisto del materiale do più importanza alla documentazione che rilasciano che al resto in quanto rischio di trovarmi con componenti inutilizzabili.
      Solitamente i servo sono da 180° per cui se non specificato è possibile che si riferisca all’ampiezza standard ( 0-180 )

      1. Pantaleo

        ok grazie.
        Come pensavo deve essere il sito che è carente nel dare info sui prodotti che vende.
        Mi potresti consigliare un sito migliore, magari uno già usato da te?

        1. Mauro Alfieri

          Ciao Pantaleo,
          io acquisto spesso da robot-domestici.it ed ho riscontrato che anche in mancanza di informazioni sulla scheda tecnica puoi chiedere ai loro tecnici.
          A volte mi girano le richieste di clienti se è materiale che io ho già acquistato e provato 🙂

  6. Pantaleo

    comunque i servo che avevo scelto sono questi (magari sai darmi qualche info in più):

    TGY-1270HV Metal gear Digital Servo w/ Heat Sink 40kg / .18sec / 170g (UK Warehouse)

    Turnigy S8166M Servo 154g / 33kg / .21sec (UK Warehouse)

    BLS-31A High Voltage (7.4V) Brushless Digital Alloy Gear Servo – 31kg / 0.14s / 74g (UK Warehouse)

    Mi Digital HV High Torque Metal Gear Servo 31kg / 0.15 / 60g (UK Warehouse)

    BLS-3114 Brushless Digital Alloy Gear Servo – 31kg / 0.14s / 7.4V (High Voltage) (UK Warehouse)

    SM-S8330M 137g / 30kg / .22 sec (UK Warehouse)

    grazie ancora
    Pantaleo

    1. Mauro Alfieri

      Ciao Pantaleo,
      in nessuno di quei servo vedo indicati i gradi di movimento.

  7. mario

    devo fare una normalissima stanga quindi farla alzarsi di 90° e abbassarsi ma ho un servo con rotazione continua (360°) come posso fare?

    1. Mauro Alfieri

      Ciao Mario,
      per stanga intendi una sbarra?
      Se si, con un servo a rotazione continua, di quelli che conosco io, non puoi perché non sono controllabili in gradi ma solo in velocità.

  8. Max

    ciao mauro, ho provato un servo MG995 360° e provando lo stesso sketch il servo ruota sempre nella stessa direzione. pare che riavvia la scheda alla fine del primo ciclo. dal pc si sente il suono per lo scollegamento di una periferica. come mai? Funzionano in modo differente?
    grazie

    1. Mauro Alfieri

      Ciao Max,
      alcuni servo assorbono più corrente di quanta arduino ed il Pc sia in grado di erogare.
      Ti consiglio di alimentare esternamente il servo con una sorgente a 6v max, trovi un articolo sul blog in cui descrivo come fare.

  9. Donato

    Ciao Mauo,
    Ho un servo motore (TowerPro MG995) e lo vorrei comandare in gradi, cioè vorrei fare uno sketch in modo che, in base al tasto premuto il servo si sposta in una posizione prefissata.
    Es:
    Tasto 1 = posizione 90 gradi
    Tasto 2 = posizione 180 gradi
    Tasto 3 = posizione 270 gradi
    Tasto 4 = posione 360 gradi
    Mi può essere di aiuto?

    1. Mauro Alfieri

      Ciao Donato,
      certo, posso aiutarti, leggi i miei articoli sui servo e su come si controllano con i pulsanti, troverai di certo uno o più sketch che assolvono a quanto tu vuoi realizzare.

      1. donato

        Grazie mille Mauro,
        Ho solo un dubbio che non riesco a colmareIl tower pro Mg995 come deve essere comandato in gradi?
        Ho letto alcuni commenti che dicono che questo tipo di motore non può essere comandato in gradi ma in velocità perchè è un servo a rotazione continua, è vero?

        1. Mauro Alfieri

          Ciao Donato,
          i servo a rotazione continua sono più complessi da controllare rispetto ai servo 0-180°
          Mi sono sempre riproposto di realizzare un tutorial dedicato a questi servo.
          In generale il loro controllo deve avvenire in Microsecondi, seguendo le specifiche del produttore, e non in gradi.

  10. donato

    Mauro sei veramente gentile e i tuoi articoli sono veramnte perfetti.
    Quindi cosa mi consigli di non lavorare con questo servo?

    1. Mauro Alfieri

      Ciao Donato,
      no, anzi ti consiglio di sperimentare e capire come funziona prima di usarlo.
      Poi valuterai se va bene per il tuo progetto oppure no, dipende da cosa desideri realizzare.

  11. federico

    Complimenti Mauro le tue guide sono oro per me che sto iniziando ad usare arduino da pochi giorni !
    ne approfitto per chiederti un consiglio..
    dovrei realizzare un piccolo piatto rotante (10cm di diametro), roba piccola, e vorrei farlo ruotare a distanza di secondi (ora non ho idea ben precisa,forse 10 secondi) di 30° fino a raggiungere il giro completo di 360°
    questo servo fa per me?
    come strutturare il codice?
    grazie e buona giornata

    1. Mauro Alfieri

      Ciao Federico,
      per un progetto come il tuo io preferirei usare uno stepper che puoi controllare in passi.
      I sevo di questo tipo non possono essere controllati per gradi, come vedi dall’articolo.

      Puoi leggere il mio articolo sulle principali differenze tra i motori in modo da comprendere meglio le differenze tra i motori e le loro caratteristiche.
      Inoltre, se non ricordo male ho trattato un progetto di photo-lazy che dovrebbe essere molto simile al tuo obiettivo.

  12. Fabio

    Ciao Mauro,
    sto utilizzando un servo a rotazione continua per un mio progetto e il problema che dovrei risolvere è questo:
    quando vado a scollegare arduino dalla presa usb e poi lo riattacco il servo mi scatta leggermente(credo per via dei 5V di alimentazione),
    ma visto che ho bisogno che il servo mi compia un preciso movimento e che quindi non mi si muova dalla posizione in cui si trova,sapresti
    come risolvere il problema??
    Grazie infinite e buona giornata.

    1. Mauro Alfieri

      Ciao Fabio,
      i servo tradizionali a rotazione continua non possono essere controllati in posizione ed usarli controllandoli sul tempo non garantisce la posizione.
      Esistono dei servo a rotazione continua che puoi controllare anche in posizione.
      In alternativa puoi usare un encoder o un microswitch di finecorsa.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>