Tutorial Arduino e i servo

In questo weekend mi sono giunte alcune richieste di informazioni in merito a come pilotare dei servo motori ad uso modellistico con Arduino.

schema Arduino e servomotoreSono contento delle richieste e spero che arivino sempre più numerose perchè sono di aiuto non solo per chi formula le richeste ma per tutti gli appassionati di questo fantastico sistema.
Un altro motivo per cui nasce questo tutorial è legato al motivo per cui anche io mi sono avvicinato a questa piattaforma: i servo, ne possedevo alcuni da una fervida attività aeromodellistica in età adolescenziale e avrei sempre voluto riutilizzarli in qualche progetto, ma la difficoltà maggiore è sempre stata realizzare circuiti che potessero essere abbastanza versatili da non concludere la loro utilità in un singolo progetto.
Oggi posso dire che qello che cercavo era Arduino e per fortuna Massimo Banzi l’ha creato per tutti noi.

Passiamo al tutorial

Se vuoi pilotare dei servo prima di tutto devi sapere che la complessità dell’opera nasce dalla necessità di utilizzare un duty-cycle per impartire comandi a questi meravigliosi oggetti in grado di trasformare la volontà elettronica in movimento. Arduino dispone, secondo i modelli, di uscite PWM ossia pin digitali in grado di generare un duty-cycle utilizzabile per far muovere un servo, puoi trovare una panoramica sull’argomento in questo mio articolo.

Il modo più semplice per pilotare i servo è utilizzare una classe, che traduca angoli in segnali e ti eviti di dover impazzire con i duty-cycle e i calcoli dei tempi; la classe è la Servo descritta in modo egregio nella pagina uficiale presente sul sito.
Questa classe ti mette a disposizione alcuni metodi che semplificano di molto l’obiettivo:

attach(): permette di specificare su quale pin è connesso il nostro servo e legarlo all’oggetto Servo;
attached(): controlla che un oggetto di tipo Servo sia collegata ad un pin;
detach(): rimuove il collegamento tra l’oggetto Servo e il pin a cui era legata;
read(): legge la posizione angolare del nostro servo, restituisce l’ultimo valore passato con write();
write(): impartisce al servo l’angolo a cui posizionarsi, su servo a rotazione continua imposta la velocità di rotazione 0=velocità massima in un senso, 90=fermo, 180=velocià massima nella direzione inversa;
writeMicroseconds(): imposta la velocità di rotazione del servo, in un servo standard il valore va da 1000 a 2000, in un servo a rotazione continua si comporta allo stesso modo della write().

Ora dovresti avere le idee più chiare su cosa poter fare con questa classe, passiamo a realizzare uno sketch di esempio, immaginiamo di aver collegato il nostro servo come nella seguente figura:

schema Arduino e servomotore

il servo ha il positivo e il negativo collegati rispettivamente al +5v e Gnd di Arduino e il segnale al pin 9.

E’ importante che tu tenga conto che la classe Servo può utilizzare 12 pin digitali di Arduino e non solo le uscite di tipo PWM, questo disabilita la funzione analogWrite() normalmente utilizzabile con le uscite PWM di Arduino, l’uso di questo comando l’ho descritto in questo articolo.

Il primo esempio è quello scritto da BARRAGAN e riportato sul sito arduino.cc:

// Sweep
// by BARRAGAN 
// This example code is in the public domain.

#include <Servo.h>

Servo myservo;

int pos = 0;

void setup()
{
  myservo.attach(9);
}

void loop()
{
  for(pos = 0; pos < 180; pos += 1)
  {
    myservo.write(pos);
    delay(15);
  }
  for(pos = 180; pos>=1; pos-=1)
  {
    myservo.write(pos);
    delay(15);
  }
}

Osservando riga per riga lo sketch Sweep, questo il nome dell’esempio, trovi:

linea 5: include la Libreria Servo.h quella contenete la classe di cui ho parlato sopra;
linea 7: crea l’oggetto di tipo Servo, myservo sarà l’oggetto su cui opererai;
linea 10: inizializza una variabile di tipo intero pos il cui valore sarà la posizione da impartire al servo;
linea 12: crea la funzione setup() in cui esegue i comandi di inizializzazione;
linea 14: ecco il primo metodo che hai visto in questo articolo: attach(), questo metodo lega l’oggetto myservo al pin a cui abbiamo collegato il nostro servo, in questo caso il pin 9;
linea 17: crea la funzione loop() utilizzata ciclicamente da Arduino;
linea 19: imposta un ciclo con valori che vanno da 0 a 180, sarano i gradi di spostamento del nostro servo;
linea 21: con il metodo write() passi all’oggetto myservo la posizione che deve raggiungere, essendo il ciclo impostato per crescere con valori compresi tra 0 e 180 il servo si sposterà gradualmente dalla sua posizione 0° alla posizione 180°;
linea 22: imposta un ritardo di 15 millesimi di secondo per ogni ciclo del for, rallenta la rotazione inviando al servo uno spostamento di un grado ogni 15 millesimi di secondo, impiegherai 2,7 secondi per compiere il movimento completo da 0° a 180° (180 x 15 = 2700/1000 = 2,7 sec);
linee 24-28: eseguono lo stesso pricipio appena esposto per il ciclo for da 0 a 180, ma in senso opposto ossia partendo da 180 e scalando fino a 0.

Questo primo esempio dovrebbe aveti chiarito un po di dubbi sul funzionamento della classe Servo e dei servo motori in generale, almeno per quello che riguarda Arduino.

Nei prossimi articoli ti mostrerò alcuni esempi più complessi o di uso differente della classe stessa.

Buon lavoro.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/tutorial-arduino-servo.html

357 commenti

3 ping

Vai al modulo dei commenti

    • Giuseppe il 7 Dicembre 2011 alle 19:33
    • Rispondi

    Ciao Mauro avrei una domanda da porti… io devo realizzare con arduino un modellino di cancello automatico a sbarra. Mi consigli di prendere un servomotore o un motore passo passo. Nel caso di servomotore mi consigli un servo analogico o digtale? Gli acquisti li farei su robot-italy… magari se puoi, dammi una dritta anche su un sito più economico! 🙂

    Grazie mille

    1. Ciao Giuseppe,
      nel tuo modellino puoi utilizzare antrambe le soluzioni, io se dovessi scegliere utilizzerei un servo analogico xchè è più semplice da programmare e non hai bisogno di alcun circuito esterno per utilizzarlo, i motori passo passo devono averne a causa dell’alimentazione.
      Il servo inoltre è più forte, sposta più peso anche se probabilmente nel tuo utilizzo è trascurabile il peso del cancello a sbarra.
      Io quando devo realizzare solo un esperimento e non voglio spendere troppo cerco su ebay, dipende da quanto tempo hai a disposizione e sei disposto ad attendere, a volte si trovano ottimi affari a pochi euro comprese le spese di spedizione.
      Secondo me un microserver può esserti più che sufficente, controlla che offra la forza che ti occorre.

      Ciao

        • Pasquale il 10 Novembre 2014 alle 19:01
        • Rispondi

        Buonasera, Le scrivo perché avrei la necessità di pilotare un servo(modellismo) che deve muoversi per un angolo di max 35°/45° nei sensi orario e antiorario in maniera autonoma. In pratica ho una videocamera che deve ispezionare un locale ed avrei pensato appunto alla soluzione Arduino. Mi scuso se sono stato poco chiaro, ho poca esperienza in campo elettronico e leggendo sui vari forum Lei sembra essere la mia soluzione. 🙂

        1. Ciao Pasquale,
          nel blog trovi tutti gli articoli in cui descrivo e spiego come fare.
          Hai già provato a leggere il mio corso gratuito on-line?

    • Andrea il 28 Febbraio 2012 alle 14:19
    • Rispondi

    Allora ho provato con questo servo (http://www.robot-italy.com/product_info.php?cPath=85_28&products_id=1853)ma non funge.
    Si muove di (credo) un grado ogni +- un secondo. Piccola (forse) anomalia che prima di muoversi i led di arduino (duemilanove) lampeggiano per qualche frazione di secondo.

    Grazie mille.

    • Andrea il 28 Febbraio 2012 alle 18:47
    • Rispondi

    Credo di aver capito che mi hanno mandato un servo rotto; in pratica quello sfarfallio dei led di arduino è dovuto ad un reset di arduino. Il fatto si ripete anche se io scrivo uno sketch dovo solo mi collego al servo (come esegue la funzione attach si resetta, se metto un delay prima dell’attach non si resetta fino alla fine del delay).

    Questo è quello che mi pare di aver capito dalle mille prove che ho fatto.

    Ora devo solo decidere se farmelo cambiare (purtroppo ho tagliato i file per comodità) o se aprirlo e vedere se c’è qualche cosa che non va.

    Grazie mille della tua attenzione. ciao ciao

    1. Ciao Andrea, ho visto il link. Se non ho letto male le caratteristiche è un servo da 180gradi, non uno a rotazione continua. Inizialmente il tuo progetto di mensola mobile doveva spostarsi di parecchio ed eri arrivato all’idea di trasmissione a cinghia. Con un servo da 180 gradi l’escursione è poca.

      In ogni caso, forse non tutte le noie vengono x nuocere, se non puoi fartelo cambiare verifica che non ci siano rotture meccaniche e se la rottura è elettrica cogli l’occasione per sopperire con arduino.

      Se hai voglia ti aiuto!!! Mi piacciono le sfide 🙂

      Mauro

    • Andrea il 28 Febbraio 2012 alle 22:41
    • Rispondi

    Per prima cosa, ancora una volta ti ringrazio per la tua attenzione.Per seconda: si avevo pensato ad una rotazione continua ma poi mi sono accorto che lo spostamento era di soli 10/12 cm e lo posso fare anche con uno di 180° (almeno ne ho guadagnato in forza quelli a rotazione continua che avevo trovato erano tutti molto piu deboli).
    Per terza cosa: oggi dopo un miliardo di tentativi ho fatto questo, ho collegato il servo ad un alimentatore 6v che avevo a casa e magia ha almeno cominciato a fare rumore (per dire la verita un bel po di rumore); appena collegato fa piccoli movimenti (5/6 gradi); appena avvio arduino continua a fare rumore ma nessun movimento. da cosa può dipendere?forse un problema di corrente?
    Cmq mi hanno gentilmente fatto capire che non me lo cambiano quindi si devo cercare di farlo funzionare ma questi nuovi sviluppi mi fanno ben sperare.

    Ancora una volta grazie.

    • Andrea il 28 Febbraio 2012 alle 22:43
    • Rispondi

    Ops mi sono dimenticato: se meto l’alimentatore a 4.6v fa lo stesso del 6v ma naturalmente con meno vigore (anche nel suono)

    1. Questo è normale, a 6v cambia anche la coppia sviluppata.

      Se usi un alim esterno ricorda che il negativo dell’alimentatore e di arduino devono essere collegati assieme.

      Per provare se tutto funziona collega il servo al pin 9 e nella funzione loop lascia solo: myservo.write(0); delay(1000); myservo.write(90); delay(1000); myservo.write(180); delay(1000);

      Dovresti vedere il servo compiere:
      – posizione 0
      -attesa 1 sec
      – posizione 90 gradi
      – attesa 1 sec
      – posizione 180 gradi
      – attesa 1 sec

      E poi tutto ricomincia. Questo test ti dice se il servo funziona o meno.

      Mauro

    • Andrea il 29 Febbraio 2012 alle 11:00
    • Rispondi

    Che pollo che sono!!!!!!!Ieri sera ero troppo cotto e mi sono dimenticato di attaccare la massa e gnd!!!!!che pollo!!!!!!

    Cmq ancora non mi spiego perchè con l’alimentazione di arduino non va. Dovrebbero essere 5v e io ho testato che a 4.6v funziona (con l’alimentatore esterno)….bho

    Cmq grazie mille!!!!!!!
    Ogi dovrebbere arrivare le guide. Appena riesco a montare tutto ti mando foto e schemi.

    Ancora grazie!!!!!

    1. La stanchezza fa anche a me brutti scherzi. Per l’alimentazione potrebbe dipendere dal modo in cui alimenti arduino, magari non è un problema di tenzione 4,6 o 6v ma di corrente ( mA ) arduino non eroga grandi correnti, poi se lo alimenti con la Usb del pc potrebbe dipendere anche da quest’ultimo.

      Che guide hai acquistato?

      Mauro

        • Vincenzo il 9 Agosto 2012 alle 20:53
        • Rispondi

        Salve e complimenti per il blog!
        Ho provato anch’io a pilotare un servo con arduino UNO rev3 ed ho riscontrato gli stessi problemi di Andrea!

        Volevo chiedere se, alimentando arduino con un alimentatore esterno il problema potrebbe risolversi oppure devo comunque alimentare il servo con un alimentatore da 4.8-6V ?

        Vi ringrazio

        1. Ciao Vincenzo,
          i problemi di alimentazione possono essere risolti alimentando arduino con un alimentatore adeguato.
          Se opti per un 6v potresti pensare di prendere l’alimentazione dei servo direttamente dal Vin così avresti i 6v diretti senza passare dai 5v stabilizzati.

          Una curiosità: che tipo di servo stai usando, quanti e quanto assorbe ciascun servo?

          Mauro

    • Andrea il 2 Marzo 2012 alle 11:06
    • Rispondi

    Ho acquistato due guide telescopiche della Accuride (circa 40€)….dovrebbero andar bene, alla fine il servo è da 24kg di potenza.
    Ho letto su internet che se il valore della forza del servo è applicato ad un braccio di 10 cm è di 10 volte inferiore, è vero?

    Ciao ciao

    1. Penso che quello a cui tu ti stia riferendo sono i principi delle leve di fisica. La forza che sviluppa il servo è misurata all’albero o al max alla squadretta in dotazione. Tuttavia per ottenere più o meno forza puoi studiare una leva differente e ottenere un incremento e non un decremento delle prestazioni del server.

      Mauro

    • Giovanni il 24 Maggio 2012 alle 22:03
    • Rispondi

    Ciao Mauro e complimenti per il blog, veramente molto utile, ne approfitto per chiederti un’info.. Stò cercando di costruire un rover molto semplice a 2 ruote motrici collegate a due servo a rotazione continua, più una terza ruota centrale solo di appoggio.
    Dal momento che utilizzerò arduino per pilotare i due servo, desideravo chiederti come fare, volendo far procedere in linea retta il rover, a far girare i due servo alla stessa identica velocità… posso usare il comando write() per entrambi i servo impostandolo magari a un valore di 40 nel primo e 140 nel secondo (dal momento che sono montati in maniera speculare), così facendo sono sicuro che girano alla stessa velocità facendomi procedere il rover perfettamente dritto ?

    1. Ciao Giovanni,
      i servo motori per loro stessa natura costruttiva non possono variare la loro velocità con i comandi PWM, almeno che quelli da te utilizzati non sia dei servi particolari che io non ho mai visto.
      Solitamente chi utilizza i servo come sistema motorio dei rover sceglie una delle 2 strade:
      1. separa il potenziometro dall’ingranaggio a cui è connesso e lo posiziona a circa 1/2 corsa, usando write() con valori bassi x un senso e alti per l’altro senso di marcia;
      2. elimina completamente l’elettronica ed utilizza una motor shiled ( tipo la fe o altra ) sfruttando gli ingranaggi e la variazione di velocità;

      Il mio consiglio, se devi usarlo con la seconda soluzione, è di utilizzare dei motoriduttori e la motor shield così da poterne regolare la velocità.

      Mauro

    • Artemis il 3 Giugno 2012 alle 12:49
    • Rispondi

    Ciao Mauro,
    ti chiedo un consiglio.Vorrei direzionare un puntatore laser usando un servomotore, ho comprato senza documentarmi tanto un servo a rotazione continua della parallax(http://www.parallax.com/Store/Microcontrollers/BASICStampModules/tabid/134/ProductID/102/List/1/Default.aspx?SortField=UnitCost,ProductName)e forse ho sbagliato.L’ho comandato come si deve,l’ho tarato,ho giocato con il suo potenziometro e con la durata degli impulsi ma non riesco ad ottenere la giusta risoluzione, o meglio:inizialmente funziona alla perfezione(gli do in ingresso l’angolo e lo rispetta ma poi qunado torna indietro sbaglia anche se di poco ma ai prossimi comandi l’errore aumenta e quindi perdo il suo controllo). Cosa mi consigli per avere una buona risoluzione?Mi basterebbe anche solo 1Grado.Forse un servo (0-180)?
    Grazie
    Buona Domenica

    1. Ciao,
      avrei bisogno di conoscere alcune tue esigenze per poterti aiutare:
      1. Il movimento deve essere di 360′ o minore?
      2. vuoi utilizzare necessariamente un potenziometro?
      3. dovrei vedere il tuo codice per capire se ci sono istruzioni che influenzano gli errori di cui parli.

      Se riesci a fornirmi queste info cerco di darti i consigli giusti.

      Oggi esce un mio articolo che insegna a pilotare i servo con i pulsanti, magari è un primo passo, se non ricordo male, esiste una libreria apposita per i servo parallax a 360 gradi.

      Mauro

    • Artemis il 4 Giugno 2012 alle 19:30
    • Rispondi

    1. il movimento deve essere: il motore si trova fermo a 90gradi cosi da potergli far fare +90orario e -90antiorario.

    2.Vorrei potergli dare solo l’angolo di rotazione.

    3.Questo è il codice che ho scritto:

    #include
    Servo servo;
    #define servoPin 9
    #define servofermo 90

    void setup()
    {
    servo.attach(servoPin);
    fermo();
    }
    void loop()
    {
    giroOrario(360);
    fermo();
    delay(1000);
    giroAntiOrario(360);
    fermo();
    delay(1000);
    }

    //————– GIRA IN SENSO ORARIO —————–
    void giroOrario(float gradi)
    {
    gradi = map(gradi, 1, 360, 1, 1300);
    servo.write(10); // lo fa girare in senso orario
    delay(gradi);
    }
    //————– GIRA IN SENSO ANTIORARIO ————–
    void giroAntiOrario(float gradi)
    {
    gradi = map(gradi, 1, 360, 1, 1335);
    servo.write(170); // lo fa girare in senso antiorario
    delay(gradi);
    }
    //————— FERMA IL MOTORE ———————-
    void fermo()
    {
    servo.write(servofermo); // il valore di 90 corrisponde aal’impulso di 1.5ms come da datasheet
    }

    I valori di 1300 e 1335 li ho trovati facendo un sacco di prove,cioè ho montato il laser nel motore e ho fatto due tarature:
    1)Taratura giro orario:
    gli facevo fare un giro di 360gradi e vedevo dove puntava il laser (pausa) un’altro giro e verificavo se puntava nello stesso punto,se non era preciso allora aumentavo o diminuivo il valore del ritardo e infine ho trovato che il valore di 1300 era quello più preciso,cioè dopo 10giri il laser puntava sempre allo stesso punto.
    2)Taratura giro AntiOrario:
    stessa cosa e ho trovato il valore di 1335.

    Grazie Mauro

    1. Ciao Artemis,
      ho letto il tuo codice, purtroppo non ho mai lavorato con servo a 360° per cui prendo pre buone le tue prove empiriche per stabilire i gradi di rotazione, tuttavia trovo che ci sia qualcosa di errato se i valori sono 1300 in un senso e 1335 nell’altro partendo dal principio che sei a 90° in partenza.
      L’errore potrebbe non essere di codice, ma di assemblaggio o del servo stesso.
      Ho trovato questa libreria specifica per il servo che stai utilizzando: http://code.google.com/p/arduino-parallax-continuous-rotation-servo-library/
      magari funziona meglio della classica Servo.h che è ideale per i 180° ma non so come si comporta sui 360°.

      Spero di esserti stato utile, se qualche altro appassionato vuole contribuire non esitate 🙂

      Mauro

    • Artemis il 4 Giugno 2012 alle 20:15
    • Rispondi

    Forse sbaglio qualcosa nel codice? Cmq ho letto che i servo a rotazione continua sono un po limitati a mantenere la posizione, in caso mi consiglieresti un buon servo anzi 2 perchè vorrei muovere il laser lungo i due assi (x,y) e con una buona precisione. Grazie ancora per la tua disponibilità

    1. In un precedente commento mi dicevi che il tuo intento è un movimento di 180° quindi un +90 0 -90.
      Mi sai dire di quanta forza in termini di Kg hai bisogno? quanto pesa il puntatore che vuoi spostare? il servo sposta solo il puntatore?

      Mauro

    • Artemis il 5 Giugno 2012 alle 19:44
    • Rispondi

    Ciao Mauro,
    si il movimento deve essere +90 0 -90.
    Non ho un bilancino,considera che è un comune laser da 4 euro(cinesi) quindi credo un 70g circa. Ti spiego meglio cosa voglio fare:

    Consideriamo momentaneamente un solo motore che mi permette di ruotare il laser verticalmente:
    1) posiziono il (laser+servo) su un asta ad una altezza “y”.
    2)Poi attraverso un sensore ad ultrasuoni posto ai piedi dell’asta che sostiene il (laser+servo) rileva un oggetto a distanza “x”.
    3)Ho a disposizione due cateti,applico un po di geometria: pitagora ==> z=sqrt(x*x+y*y)
    posso calcolare l’angolo ANGOLO=acos(x/z);

    faccio ruotare il motore di questo angolo e così dovrei puntare il mio oggetto.

    ps: proverò a vedere come si usa questa libreria.

    Domanda:dato che tu hai molta esperienza con i servo normali sai dirmi se sono abbastanza precisi nel raggiungere un angolo, ritornare indietro,raggiungerne un’altro nella parte opposta, etc…
    Grazie tante Mauro

    1. il progetto mi sembra interessante, il modo con cui hai deciso di calcolare la distanza mi fa intendere che ci stai lavorando da un po’ è una sorta di puntatore laser con rilevazione a ultrasuoni 🙂 il tuo ragionamento è corretto.
      i servo sono normalmente precisi sulla posizione, io ho esperienza con diverse marche e tutte mi hanno sempre dato risultati eccellenti, sopratutto nel raggiungere un punto angolare prestabilito, certo ci sono servo con differenti precisioni e velocità e devi scegliere quello più adatto alle tue esigenze, ma dalla mia esperienza se lo posizioni a 90° poi lo sposto di un angolo X e successivamente lo riposto a 90° ritorna esattamente in posizione. Questo vale anche per più posizioni prima di tornare ai 90°.

      Nel tuo sketch l’imprecisione potrebbe anche essere dettata dal fatto che ti sposti con il delay e questo potrebbe non essere precisissimo.

      Mauro

    • Artemis il 5 Giugno 2012 alle 23:12
    • Rispondi

    Ho provato la classe ContinuousRotationServo e direi che semplifica tanto il codice, ecco qui:

    #include

    ContinuousRotationServo Servo;
    int distance;

    void setup()
    {
    Servo.begin(9); //Il servo è collegato al pin 9
    Serial.begin(9600);
    }

    void loop()
    {
    Servo.rotateLeft(50,67);
    Servo.noMovement(500);

    Servo.rotateRight(50,67);
    Servo.noMovement(500);
    }

    Con questo codice il motore fa un giro orario di 360° poi si ferma e ne fa uno antiorario sempre di 360, apparentemente sembra che mi mantenga la posizione ma poi al solito si sballa tutto di qualche centimetro(o meglio gradi).
    Poi ho pensato di utilizzare la funzione map per mappare i gradi:
    –> float gradi=map(gradi,1,360,1,67);
    però ho notato che questa funzione approssima ad intero il numero che mappa e questo magari contribuisce alla non precisione dei movimenti. Sono caduto in un semplice problema: Come potrei fare ad avere un numero in virgola?Ho provato a farmi la funzione io ma ho riscontrato il seguente problema:
    ad esempio faccio float costante= 67/360 e questo se lo stampo mi da 0.00 (perchè lo aprossima?).

    Cmq questo servo a rotazione continua mi sta facendo impazzire. Stavo per volerlo bene ma adesso mi sa che lo impiegherò in futuro per altro

    ps: ho trovato questa coppia di servi ( http://www.robot-italy.com/product_info.php?cPath=11_20&products_id=378 ) che ne pensi? Possono andare nel mio caso?

    1. Ciao Artemis,
      il servo con rotazione continua non sembra indicato per quello che vuoi realizzare, come ti scrivevo ieri non li ho mai provati, da quello che scrivi il problema sembra proprio il servo.
      La funzione map è approssimata all’intero e nel tuo caso non è ideale.
      La formula che scrivi è corretta: float costante = (67/360) il valore che ottieni è < di 0 -> 0,1861111 non so come la classe possa interpretare tale valore.

      I servo che hai individuato sono degli Hitec HS-422 e solitamente funzionano egregiamente, considera che anche loro lavorano con uno scatto pari al grado, sotto penso non siano in grado di garantire la precisione del movimento.

      Forse per quello che vuoi fare tu e per il tipo di precisione che ti occorre è un motore passo passo, con anche qualche riduzione meccanica xchè un nema 17 ha circa 200 passi per giro -> 360/200 = 1,8° non so se tale precisione può essere accettabile per te.
      Resta vero che con un passo-passo lo sketch diventa decisamente più complesso.

      Mauro

    • vale il 29 Giugno 2012 alle 18:14
    • Rispondi

    puoi fare un tutorial completo per fare un drone??

    1. Ciao Vale,
      bellissima idea, a che tipo di durone saresti interessato?
      Non ti prometto nulla, i drop sono molto complessi.

      Mauro

    • mohamed il 18 Luglio 2012 alle 13:29
    • Rispondi

    ciao mauro,
    da quello che ho capito, i servi a rotazione acontinua vengono comandati dando il verso e la velocità di rotazione servo.write().
    questo significa che io posso dargli anche l’angolo di qcui girare; basta che divido l’angolo per la velocità e trovo per quanto tempo devo farlo ruotare giusto?
    e poi i servi a rotazione continua hanno uno Zero? se si, questo significa ke posso sapere in qualsiasi momento a che posizione si trova il servo?

    1. Ciao Mohamed,
      purtroppo non possiedo e non ho mai lavorato con questo tipo di servo.
      Pubblico il tuo commento nella speranza che qualche appassionato con più esperienza in questo ambito possa aiutarti.

      Mauro

        • mohamed il 19 Luglio 2012 alle 13:11
        • Rispondi

        grazie.

    • Gianfranco il 1 Novembre 2012 alle 13:30
    • Rispondi

    Gentile Mauro,

    come ti scrivevo via mail, voglio utilizzare Arduino per scopo modellistico. Il mio obiettivo è pilotare due servomotori per muovere le sbarre di un passaggio a livello in scala 1:87. In particolare, vorrei fargli fare una rotazione di 80-85 gradi che, cosa importantissima, deve compiere in 8 secondi. Questo è un video esplicativo dell’asticella del passaggio a livello che mi sono autocostruito e che devo muovere:

    http://tinypic.com/player.php?v=npnyf5&s=6

    Via e-mail mi consigliavi di utilizzare Arduino Leonardo. Ok, va bene!

    Aggiungo le seguenti domande:
    1. ho visto che il Leonardo, per essere collegato al PC, necessita di un cavo micro usb usb. Va bene già quello per collegare un classico samsung galaxy al pc, giusto?

    2. ti voglio dire che su un forum di fermodellismo mi stanno “distruggendo” l’idea arduino definendola come un dispositivo per bambini (per il nostro scopo); sicuramente c’è qualche “commerciale” che tira vento al suo mulino (nel nostro ambito esistono decoder autocostruiti gestiti in digitale – credo inviando un segnale PWM – che permettono di avere alte prestazioni, e costano circa 20-30 per gestire solo 4 uscite), ma forse mi dicevano che Arduino potrebbe non farcela ad arrivare a queste prestazioni (appunto rotazione di 80-85° in 8 secondi) forse perchè arduino non ha il duty cycle variabile o una cosa del genere. Cosa mi sai dire?
    Se vuoi posso mandarti via mail il topic di questo forum…..

    3. che tipo di servomotore ci occorre? (so che ne esistono digitali ed analogici.

    Intanto ti ringrazio ancora!!
    Gianfranco

    1. Ciao Gianfranco,
      bellissimo il tuo passaggio a livello davvero ben costruito.
      In merito alle tue domande:

      1) si io utilizzo il medesimo cavetto del Samsung Galaxy
      2) Non so cosa spinga ad affermare ciò, quello che posso dirti è che non mi è chiaro quanti gradi deve compiere il servo:
      2a) 5° = 80°-85° mi sembra un po’ poco vista la tua realizzazione
      2b) 165° = 80+85° ossia prendi come riferimento il 90esimo grado e ti sposti 80° orari e 85° antiorari o viceversa
      Arduino riesce a raggiungere prestazioni decisamente maggiori sui servo, guarda ad esempio questo video:
      http://www.youtube.com/watch?v=VYJubohI5kE&feature=g-upl
      I servo compiono 0-180° in molto meno di 8 secondi e sono 2 controllati via WiFi e altri apparati molto più lenti di Arduino.

      3) io uso quelli analogici, per sceglierli è importante che sia in grado di compiere 180° in 8 secondi, ce ne sono moltissimi tipi a costi sui 20 euro, non andrei su quelli troppo economici perchè sono lenti nei movimenti e poco precisi per cui potresti ottenere degli sfarfallii non dovuti al PWM di Arduino ma all’imprecisione del server.

      Spero do averti aiutato, sia chiaro sentiti libero di acquistare un apparato dedicato come consigliato sui forum specialistici.

      Mauro

        • Gianfranco il 1 Novembre 2012 alle 22:44
        • Rispondi

        No aspetta mauro, non mi sono spiegato bene. :)))
        Non intendevo dire 80 meno 85 gradi….intendevo, piu nel dettaglio, questo:

        fase 1: il passaggio a livello è in situazione di riposo, ovvero con le sbarre alzate, in una direzione che è quasi ortogonale al piano; dico quasi ortogonale nel senso che con il piano forma un angolo, diciamo, di 85°.

        fase 2: arriva il treno, quindi si devono abbassare le sbarre. A questo punto, la sbarra deve compiere un movimento rotatorio dall’alto verso il basso pari proprio a -85°, in modo che sia esattamente parallelo al piano, ovvero che col piano, formi un angolo pari a 0°. Questo movimento deve compierlo in 8 secondi.

        fase 3: il treno è passato, e la sbarra deve tornare alla fase 1. Anche questo movimento deve compierlo in 8 secondi.

        Quindi in poche parole l’angolo totale di rotazione è di 85°.
        Non so se è piu chiaro ora….

        ps. ma arduino si puo usare sia con servo analogici che con servo digitali? Quale sarebbe la differenza tra le due tipologie nell’utilizzo con arduino?

        Grazie ancora!!!!!

        1. Ciao Gianfranco,
          ora mi è davvero chiaro quello che devi realizzare, Arduino può farlo e 8 secondi sono anche troppi dovrai fargli compiere 10° circa al secondo quindi calcolare il tempo di delay tra un grado ed il successivo secondo la formula 8000 ( 8s in millisecondi ) / 85° => 94,11 millisecondi che puoi arrotondare a 94 o 95 millisecondi a tua scelta.

          Sul tipo di servo Arduino può pilotare entrambi ma io ho usato solo servo analogici e che ricordi sono anche quelli che costano meno.
          I servo digitali sono molto precisi ma forse eccessivi per l’uso a te necessario.

          Mauro

            • Gianfranco il 2 Novembre 2012 alle 13:58

            Ok Mauro grazie.

            Senti, una cosa al volo prima di tutto, ma per i servo motori (o per una classe di essi) occorre mettere un circuito di protezione contro gli eccessivi assorbimenti di corrente che potrebbero bruciare arduino?

            Sò che per i motori passo passo è sicuramente necessario e in tal caso ho visto utilizzare un MOSFET.

            Grazie mille…

            • Gianfranco il 5 Novembre 2012 alle 20:11

            Ciao Mauro, ma per ottenere il movimento di 85° in 8 secondi, la parte di codice che hai scritto dovrebbe essere modificata come segue o sbaglio?


            for(pos=0; pos< =84; pos+=1) { myservo.write(pos); delay(100); }


            for(pos=84; pos>=0; pos-=1)
            {
            myservo.write(pos);
            delay(100);
            }

            dove:
            – 84 sta per una rotazione di 85° (il for parte da zero)
            – delay(100) sta per un ritardo di 100ms per ogni scatto, per cui: 84*100ms = 8400ms = 8.4s

            Che ne dici?

            grazie mille

          1. Ciao Gianfranco,
            corretto !!!
            giusto per chiarezza nel codice ti consiglio di scrivere la condizione del for in questo modo:


            for( int pos=0; pos< =84; pos++ ) { ... }


            for( int pos=84; pos>=0; pos-- ) {
            ...
            }

            In questo modo ottieni una rotazione da 0 a 84 ( 85° in tutto ) sia in senso orario sia in senso antiorario in 85*100millisecondi = 8,5 secondi.

            Mauro

    • Maurizio il 10 Gennaio 2013 alle 23:13
    • Rispondi

    Salve Signor Mauro, ho trovato per caso il suo blog e devo dire che è interessantissimo!!
    Tengo a precisare che sono completamente ignorante per quanto riguarda arduino, anche se lo conoscevo da tanto tempo, ma visto che ora ho necessità d’usarlo chiedo a lei come potrei fare a realizzare questo circuito con i servomotori:

    http://www.youtube.com/watch?v=sQnFuCkTGYU
    http://www.youtube.com/watch?v=4oEpHHu5Z18

    Sarebbe così gentile da dirmi che pezzi servirebbero, e come poterli programmare con arduino?
    Un’altra domanda, sarebbe possibile programmare arduino e comandarlo con un remoto senza averlo attaccato al pc? se si come si potrebbe alimentare?
    Grazie mille per l’attenzione, e scusi per le tante domande.

    Maurizio

    1. Ciao Maurizio,
      grazie per i complimenti.
      I componenti che ti servono sono mostrati nel secondo video che mi hai inviato: arduino e servomotori.

      In merito alla programmazione di Arduino da remoto immagino che ciò che vorresti fare è fargli compiere i movimenti senza attaccarlo al Pc perchè la programmazione vera e propria di arduino da remoto è fattibile ma con conoscenze avanzate.

      Ti consiglio di leggere alcuni dei miei tutorial sui servo e sull’alimentazione di arduino per capire come fare, il progetto è molto interessante e per nulla complesso con un po’ di buona volontà puoi trovare nel blog tutto quello che ti occorre.

      Quando lo avrai realizzato se ti va mandami le tue foto ed il filmato mi farebbe piacere pubblicarlo.

      Mauro

    • Maurizio il 11 Gennaio 2013 alle 11:54
    • Rispondi

    Grazie mille per la risposta, quale arduino mi consiglierebbe di acquistare per questo lavoro?
    Ho notato che la scheda ha anche l’alimentazione a 12v, sarebbe possibile alimentare la scheda con pacco batterie ricaricabili da 12v e comandare i servo tutti da bottone,(premo una volta e apro il casco premo una seconda volta e si chiude) una volta che viene programmato con il pc?
    La scheda mi servirebbe mobile, in quanto deve essere parte di un costume, e andrà a celarsi all’interno del casco stesso, per questo mi servirebbe sapere come comandare i servo tramite bottone e se è possibile alimentarlo come sopracitato.
    Grazie mille

    Maurizio

    1. Ciao Maurizio,
      per il tuo progetto va bene sia la UNO, Leonardo o Mini scegli tu in funzione dello spazio a disposizione.
      Per l’alimentazione Arduino puoi alimentarlo a 12 ma i servo di solito non superano i 6v a meno di servo speciali.

      Quello che vuoi realizzare è molto semplice, leggi i tutorial sui servo e bottoni e vedrai che con poche righe di codice realizzi quello che ti occorre.

      Mauro

        • Maurizio il 11 Gennaio 2013 alle 15:12
        • Rispondi

        Grazie mille per la risposta, un’ultima cosa poi la stresso più 🙂 Che tipo di servo mi consiglia?, non vorrei spendere tanti soldi, anche perche le prestazioni del servo stesso non mi interessano più di tanto, l’importante che sia veloce e che non mi si rompa subito 🙂 E dove li potrei acquistare.
        Grazie mille per il suo tempo.

        Maurizio

        1. Ciao Maurizio,
          prima di tutto non mi stai stressando.
          Io compro da robot-domestici.it, dal catalogo puoi scegliere il servo che ritieni più opportuno, penso che la scelta dovresti farla in funzione della forza/peso che devi spostare, quella puoi calcolarla solo tu con il modello alla mano.

          Mauro

    • Michele il 15 Gennaio 2013 alle 00:25
    • Rispondi

    Ciao Mauro,sono Michele mi permetto di darti del tu , anche se non ti conosco di persona. Ti ringrazio per le risorse che metti a disposizione e per il tempo che dedichi a chi ti chiede aiuto. Volevo chiederti se potevi aiutarmi nel mio progetto. Vorrei motorizzare una piccola parabola , quelle che si usano in campeggio , di solito sono montate su dei cavalletti. Io vorrei installarla fissa sul tetto del mio camper, un po per i costi stratosferici di quelle in commercio, gia belle e pronte, e un po per la curiosita di usare Arduino, non si sa mai puo sempre venir bene per altri scopi, ho deciso di impegnare un po del mio tempo libero . La struttura che regge e muove la parabola , a mio avviso dovrebbe quasi lavorare come un braccio robotico, anzi con meno movimenti. Io avrei pensato di acquistare Arduino Uno rev3, e 3 servo motori,che devo ancora scegliere dato che ho appena trovato un’annucio su Ebay , per il kit della parabola, è sto verificando le caratteristiche ed il peso non è specificato. Pensi che mi stia muovendo nella giusta direzione? non solo negli acquisti ma anche per tutto il progetto.
    Grazie Michele

    1. Ciao Michele,
      Il tu è doveroso tra appassionati, ottimo progetto.
      I miei dubbi riguardano l’utilizzo di servomotori che potrebbero non essere sufficientemente potenti, a meno di non spendere cifre interessati.
      Come mai vuoi utilizzare 3 servo? sono 3 gli assi in cui posizionarla?

      Mauro

    • Michele il 15 Gennaio 2013 alle 13:52
    • Rispondi

    Ciao Mauro, grazie per l’ospitalità e per l’appassionato, è un aggettivo che vorrei meritarmi ma ho scoperto questo lato “semplice” e quasi alla portata di “tutti” da poche settimane. Comunque l’utilizzo dei servomotori è un’idea che mi sono fatto dai vari video e tutorial che ho trovato in rete, fra questi anche i tuoi , credo di aver capito che si riesce a comandare piu motori usando solo Arduino , senza usare schield, a me sembrava potessero andare bene come “forza” per muovere la parabola , che non ha grandi dimensioni circa 35 cm , non ero e non sono sicuro che siano la scelta giusta , non ho asperienza a riguardo, il mio dubbio piu forte è: sono in grado di tenere in posizione la parabola per piu giorni? o al minimo soffio di vento devo fare la ricerca del satellite?..bho!!! Perchè 3 servomotori? Effettivamente ne dovrebbero bastare 2 , 1 per la base rotante e 1 per il movimento verticale della parabola, però per non danneggiarsi quando il camper è in movimento sarebbe meglio che prendesse una posizione piu raccolta e quindi piu protetta. Cosa mi consiglieresti tu? sia per il modello di Arduino da usare che per il tipo di servomotori, motori o quello che tu giudichi piu idoneo.
    Ciao e grazie ancora.
    Ora scappo a lavorareeeee….
    Michele

    1. Ciao Michele,
      non saprei dirti quanta forza ti occorre, dipende dal peso e dalla meccanica della parabola. Sono dati che puoi misurare solo quando avrai montato la parabola.
      I meccanismi di cui mi parli penso utilizzino dei motoriduttori ossia dei motori in cc con una coppia elevata da ingranaggi di riduzione.

      Sul controllo dei servo è vero che puoi evitare i driver di controllo ma è pur vero che la parabola è una vela e in caso di vento oppongono resistenza solo se alimentati, i motoriduttori solitamente offrono una adeguata resistenza anche se non alimentati.

      Valuta la scelta in funzione del tipo di parabola ed anche dei gradi di libertà che deve avere.

      Mauro

    • Michele il 15 Gennaio 2013 alle 23:11
    • Rispondi

    Ciao Mauro, effettivamente prima dovrei avere la parabola cosi da poter capire quale peso dobbiamo manovrare, anche se credo non superi i 2kg. Cercando meglio nei tuoi tutorial ho gia trovato molte risposte alle mie curiosita, Se ho dei dubbi io ne approfitto….ciao ciao GRAZIE

    • Bruschetta il 26 Gennaio 2013 alle 18:01
    • Rispondi

    Ciao vorrei farti una domanda …
    sai come fare un test per sapere se in un particolare pin il servo è realmente collegato?

    ciao

    1. Ciao Bruschetta,
      cosa intendi per realmente collegato?
      Se il servo é analogico e intendi rilevarlo da un pin non penso sia possibile, nessuno dei servi analogici che conosco inviano segnali sui pin PWM, sono solo ricevitori di segnali.
      Puoi provare ad inviare un segnale PWM sul pin che presumi connesso e verificare il movimento.

      Mauro

        • Bruschetta il 27 Gennaio 2013 alle 20:36
        • Rispondi

        Ciao Mauro,

        prima di tutto ti ringrazio …

        … ti spiego prevemente il mio problema … sto cercando di progettare un sistema automatizzato per acquari …

        ci saranno enne attrezzature (es. servi, sonde, galleggianti, ecc.) che verranno collegati ad un controller che dovrà gestire il setting dei vari parametri (nel caso dei servi … Angolazione min. e angolazione max) …

        Su quest’ultimo si protranno collegare fino a 5 servi … quindi il controller dovrebbe capire quanti servi vi sono collegati … un sistema tipo Plug and Play per capirsci …

        grazie anticipatamente per la risposta.

        Ciao
        Andrea

        1. Ciao Bruschetta,
          purtroppo che io sappia i servo analogici non lo fanno, quelli digitali con bus seriale potrebbero, ma non ne ho mai provati e ostano un po’ di più.

          Bello il tuo progetto, se ti va di pubblicarlo una volta concluso mi farebbe piacere offrirti lo spazio di un articolo.

          mi viene in mente di suggerirei un menù configurabile con un LCD, probabilmente hai già previsto l’uso di un display per visualizzare i dati dell’acquario potresti usare il menù per aggiungere i togliere servo/sonde/funzionalità.

          Mauro

    • Bruschetta il 28 Gennaio 2013 alle 15:43
    • Rispondi

    Certamente, ne sarei lieto … L’impresa non è semplice …

    Per quanto riguarda il display … Si ho previsto un menù che gestirà il setting dei parametri che verranno memorizzati nella eprom …

    Sto cercando la soluzione migliore in quanto nel mondo degli acquari i costi delle attrezzature sono altissimi e vorrei realizzare un qualcosa da mettere in commercio che abbia i seguenti requisiti:

    – basso costo (cosa più importante)
    – altamente dinamico … Tutta l’attrezzatura potrà essere acquistata anche un po’ per volta … Il sistema man mano riconoscerà il nuovo oggetto ( sensore, galleggiante, ecc.) e lo gestirà in automatico …

    Spero di riuscire nell’intento …

    Una domanda … Mi hanno detto che i servo della hitec digitali fanno a caso mio … Però non riesco a trovare in rete un esempio di come programmarli con arduino … Hai qualche link da darmi?

    Per adesso ti ringrazio molto dell’aiuto e, se ti fa piacere, ti tengo aggiornato su tutti gli sviluppi 🙂

    Ciao
    Andrea

    • Simone il 21 Febbraio 2013 alle 19:19
    • Rispondi

    Salve … avrei un dubbio… utilizzando lo stesso programma d’esempio il mio servo motore fa uno scatto ogni secondo rendendo impossibile il suo utlizzo n progetto che dovrei fare…
    sapresti aiutarmi??

    arduino: nano v 3.0
    servo:
    dati tecnici xt-mini-blu
    Trasmissione: plastica
    peso: 9 g/031oz
    Tempo di azione / 60 °: 0.13s
    ripristino kg forza / cm: 1.0
    Dimensioni: 22.3x11x26
    tensione nominale 4.8volt
    Trasmissione: plastica

    1. Ciao Simone,
      mi sembra un problema del servo.
      Leggendo le caratteristiche che mi invii è uno di quelli piccolini con trasmissione plastica da pochi euro, correggimi se sbaglio, stando a queste ultime dovrebbe eseguire 60° in 0.13s, tradotto, non è una scheggia ma neppure così lento.

      Due ipotesi:
      1. prova ad aumentare il delay tra un grado ed il successivo e verificare se migliora o peggiora
      2. prova con un altro servo, delle stesse dimensioni ma con caratteristiche costruttive differenti.

      Da esperienza su 10 servo simili al tuo che ho provato:
      3 non hanno mai girato
      4 fanno di testa propria
      2 sono un po’ lenti
      1 ha funzionato per un po e poi …

      Ecco perché uno per i miei esperimenti servo di marca, so che costruttivamente sono validi e l’errore può essere solo nel mio sketch 🙂

      Mauro

        • Simone il 22 Febbraio 2013 alle 15:45
        • Rispondi

        Allora…il servo funziona se alimento l’arduino con il computer e utilizzo il pin 5v come alimentazione del servo, mentre se alimento il servo con un pin digitale in output come valore alto non funziona

        controllando con un tester in entrambi i casi arrivano al servo circa 4,65v

        cosa potrebbe essere?

        1. Ciao Simone,
          è un problema di assorbimento, le uscite Arduino sono limitate in corrente e probabilmente il tuo servo ne richiede di più.
          Ti conviene alimentare il tuo servo con una sorgente esterna eliminando anche il collegamento ai +5v di Arduino.

          Mauro

            • Simone il 22 Febbraio 2013 alle 15:55

            provo subito e ti faccio sapere 😀 grazie ^^

            • Alex il 16 Gennaio 2016 alle 21:58

            Ciao carissimo,

            sto studiano pain piano tutti i tuoi interessantissimi articoli su arduino.

            Mi accodo a questa domanda per avere un chiarimento….. x alimentare un servo a parte, quindi bypassare arduino, basta che i due fili che rimangono, dei tre disponibili del cavo che di solito si connette alla Rx, li attacco ad una batteria?

            Grazie
            Ale

          1. Ciao Alex,
            per alimentare i servo in modo indipendente da arduino puoi leggere la mia guida “Servo con alimentazione esterna” che trovi sul blog.
            Ho descritto in quella guida sia lo schema di collegamento sia le motivazioni tecniche.

    • giuseppe il 24 Febbraio 2013 alle 19:46
    • Rispondi

    ciao Mauro, posseggo un arduino uno ,lo vorrei utilizzare per far ruotare 5 servi a velocità differenti non ho trovato nessun eempio per regolare la velocita dei servi , mi faresti un esempo per farlo.
    grazie x la tua disponibilità
    giuseppe

    1. Ciao Giuseppe,
      la velocità di rotazione dei servo io la gestisco di solito con dei delay(), tuttavia il comando delay, per sua natura, ferma l’eseguzione dello sketch; per cui ti trovi che ad ogni delay tutto è fermo anche se per millisecondi.

      Questo rende difficile gestire 5 servo con 5 velocità differenti, potresti provare con millis() e valutare le differenze ad ogni loop();

      Mauro

    • Paolino il 14 Marzo 2013 alle 17:07
    • Rispondi

    Ciao, anzitutto scusa la mia ignoranza ma solo da pochi giorni mi sono “avvicinato” ad Arduino.
    Utilizzando lo sketch “SWEEP” presente degli esempi di Arduino ho potuto verificare come far muovere un servo tra 0° e180° in maniera continua ed anche come farlo muovere utilizzando un potenziometro.
    Come posso attivare il movimento del servo solo a seguito del cambiamento di stato di una uscita digitale?
    Come posso bloccarne il movimento dopo il primo ciclo (0° – 180° – 0°)?.
    Grazie per l’attenzione che vorrai dedicarmi.

    Paolo

    1. Ciao Paolo,
      ti consiglio di leggere il corso Arduino on-line che trovi nel blog, ci sono tutorial es esempi molto simili a quello che desideri realizzare
      Mauro

    • Stefano il 16 Marzo 2013 alle 20:53
    • Rispondi

    Sempre più appassionato di Arduino ho preso un Servo…ma l’ho preso a rotazione continua (dopo un tot di googlare ho scoperto che gli occorre un alimentazione esterna).. Stesso servo indicato nel video, stesso problema. Ma l’entusiasmo è molto e non vedo ora di proseguire.
    Grazie ancora per il tuo entusiasmante blog
    PS hai avuto modo di leggere le mille milla domande che ti ho lasciato by mail?

    Stefano

    1. Ciao Stefano, eccellente !!!
      Ti ho risposto sul blog mettendo ogni domanda negli articoli correlati.

      Se non hai ricevuto notifica te le metto tutte in una email.

      Mauro

        • Stefano il 17 Marzo 2013 alle 15:47
        • Rispondi

        Gentilissimo come sempre!! Corro a leggere! grazie infinite
        Stefano

    • Nicola il 17 Marzo 2013 alle 18:45
    • Rispondi

    Buonasera, ho letto con interesse gli argomenti trattati, le domande e le competenti e puntuali risposte per cui sono sicuro che qui potrò trovare i suggerimenti necessari alla realizzazione del progetto che ho in mente.
    Sono appassionato di fotografia e vorrei realizzare un dispositivo che mi possa permettere il capovolgimento della tank che contiene i chimici per lo sviluppo ed il fissaggio. Per la parte meccanica, telaio, trasmissione ecc. ho già buttato giù qualche schizzo e non ci sarebbero problemi. Dove casca l’asino, cioè io è sulla parte elettronica. Mi spiego, ho pensato di utilizzare un servomotore opportunamente comandato da una scheda Arduino da dove mi sia possibile impostare la durata complessiva del funzionamento. Potrebbe andare anche una rotazione completa invece della rotazione in entrambi i sensi di 180°. Tale rotazione o ribaltamento dovrebbe essere a step di 5/6 secondi ogni minuto per una durata da impostare all’avvio.
    La potenza del motore, la cui alimentazione deve essere in DC 12V per motivi di sicurezza, lavorando in ambiente umido, dovrebbe permettere tale rotazione ad una tank, opportunamente fissata su braccio con due collari, che piena pesa intorno ai 1.000 g. (meglio eccedere).
    In rete ho visto dei servomotori su questo sito http://www.robotstore.it/open2b/var/catalog/product/files/1.pdf, il problema è che non saprei quale scegliere che soddisfi l’esigenza di cui sopra. Ovvero quale coppia (Kgf cm mN m) possa essere efficace per far ruotare la tank fissata sul braccio.
    Sperando in una risposta e riservandomi di essere più preciso ad eventuali domande, Vi saluto cordialmente, ringraziandovi.

    N.P.

    1. Ciao Nicola,
      il tuo progetto é interessante.
      Premetto che non sono un fotografo e non so cosa sia una tank, cercando su google ho visto qualcosa, ma avrei bisogno di maggiori info:
      – che dimensioni ha la tua?
      – quanto pesa a pieno carico?
      – che tipo di movimento deve fare?

      In particolare sull’ultima domanda non ho capito, nella tua spiegazione, se deve oscillare da 0 a 180 gradi o ruotare di 360.
      Inoltre mi parli di step al secondo, immagino uno step tu intenda 1grado, parlando di servo, ma il link che mi hai inviato non é un servo, é un motoriduttore ed ha caratteristiche differenti dai servo.

      Se puoi dammi qualche info in più sul funzionamento del sistema ed io cerco di darti qualche dritta precisa su cosa acquistare e che articoli leggere per costruire il tuo progetto.

      Mauro

        • Nicola il 18 Marzo 2013 alle 10:28
        • Rispondi

        Ciao Mauro, grazie per la risposta che mi permetterà di essere, spero, più preciso sperando che mi perdonerai una scarsa padronanza dei termini tecnici.
        Una tank è un recipiente a tenuta di luce che accoglie la pellicola da sviluppare ed i chimici necessari.
        Quella che uso ha un volume di circa 700 ml. per cui piena peserà intorno ai 700 g. (facciamo un Kg. tanto per arrotondare). Le sue dimensioni sono all’incirca 12 cm. di diametro x 17 cm. di lunghezza.
        Per step, intendevo le pause tra una rotazione e l’altra dopo la prima che deve durare un minuto.
        Ecco come dovrebbe funzionare:
        1) Imposto la durata complessiva del ciclo, p. es. 18 minuti.
        2) Start
        3) Il motore gira per 1 minuto
        4) Pausa per 1 minuto
        5) Ripresa della rotazione: Il motore deve compiere 2 giri in 5/6 secondi.
        6) come al punto 4
        7) come al punto 5
        ………
        Fine ciclo dopo 18 minuti.

        Le rotazioni devono interrompersi con la tank sempre nella stessa posizione, ovvero 0° (quella iniziale).

        L’inversione del moto non è necessaria, preferisco propendere per la rotazione completa, da preferire a quella alternata, perchè sollecita di meno la struttura di sostegno.

        Ora le cose da tenere presente, fondamentali per questa operazione, sono:
        1) Velocità di rotazione possibilmernte regolabile che deve essere di un giro completo in 3/4 secondi per cui in 1 minuto deve compiere 15 giri circa.
        2) Potenza del motore che tramite una cinghia dentata deve far ruotare la tank che pesa più o meno 1 Kg. e quindi vincere la resistenza dovuta al peso. Ho visto in catalogo alcuni servomotori ma non so quale è la coppia che dovrebbero generare per far ruotare la tank.
        3) Alimentazione del motore in DC a 12 V.
        4) display Arduino per la lettura delle impostazioni (tempo complessivo impostato – velocità in numero di giri al minuto)

        Ciao e grazie mille.

        Nicola

        1. Ciao Nicola,
          ora il progetto mi è più chiaro.
          Io ti consiglio di utilizzare un motore passo-passo simile a quello utilizzato per il progetto Dolly Photo:

          https://www.mauroalfieri.it/elettronica/dolly-photo-conclusione.html

          trovi il kit completo con display, pulsanti ecc.. sul sito indicato nell’articolo.
          Il motore sviluppa una coppia di 2.3kg*cm che mi sembra sufficente al tuo scopo, se poi usi una trasmissione a cinghia puoi moltiplicare o demoltiplicare la coppia con delle pulegge ad hoc.

          Lo sketch puoi provare a modificare quello del dolly o scriverne uno tuo.

          Mauro

            • Nicola il 18 Marzo 2013 alle 15:16

            Ciao Mauro e grazie per l’esauriente,e rapida ed utilissima risposta risposta.
            Per ora mi metto al lavoro per progettare la struttura di sostegno dell’ambaradan 🙂

            Nicola

    • andrea il 10 Aprile 2013 alle 19:01
    • Rispondi

    Ciao , ho un servo 180 gradi e vorrei sapere come una volta che gira in senso orario e antiorario si possa fermare la rotazione ,facendo fermare del tutto il servo !

    1. Ciao Andrea,
      se imposti l’angolo tra 0 e 180° ( 10,20,30 … ) il servo deve fermarsi correttamente al grado che hai impostato.

      Mauro

    • Matteo il 10 Maggio 2013 alle 23:07
    • Rispondi

    Ciao Mauro, volevo farti i complimenti per il blog molto fornito e curato. Inoltre ti volevo chiedere: non ho ben capito se il servo va collegato ad un pin digitale o analogico. Puoi illuminarmi?

    1. Ciao Matteo,
      i servo possono essere collegati ai pin digitali marcati come PWM ( su arduino uno 3,5,6,9,10,11) se sono di tipo analogico.

      Mauro

        • matteo il 13 Maggio 2013 alle 21:13
        • Rispondi

        ok, è chiaro, grazie 🙂
        sto lavorando ad un progetto di una mano (con forse anche tutto il braccio) che copia i movimenti di chi indssa un guanto con sensori
        ti interesserebbe pubblicarlo quando sarà finito?

        1. Ciao Matteo,
          Sicuramente, sto raccogliendo tanti progetti fatti da appassionati ed ogni venerdì ne pubblicherò uno, diciamo una specie di giorno dell’appassionato.

          Per la ano é certamente un bel progetto, hai letto del mio progetto con Federico Ciccarese? O degli altri progetti pubblicati puoi prendere spunto sia per la meccanica sia per i codici.

          Che sensori pensi di utilizzare?

          Mauro

    • Marco il 16 Maggio 2013 alle 12:56
    • Rispondi

    salve mauro,
    volevo comunicarti il mio problema riguardante il funzionamento del servomotore a rotazione continua sms4303r tramite arduino, dopo che copio il tuo sketch tale e quale, mando la verifica e il caricamento ad arduino con il programma, il servo mi gira in continuazione senza mai fermarsi..
    inizialmente il mio progetto era realizzare un inseguitore solare con arduino, ma mi si è presentato questo problema e allora ho provato a scollegare il circuito e a montare solamente il servo per capire piu o meno il funzionamento, ma il discorso non cambia…
    ho provato diversi sketch anche quelli del sito ufficiale per servi a rotazione continua.
    hai qualche dritta o dici che è un problema hardware o software?
    grazie e buon lavoro

    1. Ciao Marco,
      i servo a rotazione continua sono differenti da quelli presentati nella maggior parte dei miei articoli io uso dei semplici 180°.
      Ti servono librerie e sketch adatti.

      Ho acquistato un servo della parallax a rotazione continua, tuttavia non l’ho ancora testato.
      Il modello in mio possesso può solo regolare il verso e la velocità con il PWM, i gradi no.

      Mauro

    • Matteo il 17 Maggio 2013 alle 14:57
    • Rispondi

    Ciao Mauro
    Per la mano pensavo di usare dei sensori di flessione
    Ti ho proposto il mio progetto perché qui sul blog non ho ancora visto nessuna mano che copia il movimento

    1. Ciao Matteo,
      é molto interessante, io steso avevo in mente l’uso di tali sensori, ad oggi non li ho ancora provati e non ne conosco la precisione.

      Come pensi di provvedere?

      Mauro

    • Matteo il 17 Maggio 2013 alle 16:43
    • Rispondi

    Inoltre io volevo aggiungere anche il resto del braccio

    1. Ciao Matteo,
      comprendo e condivido.
      Sarà di certo il passo successivo.

      Mauro

    • riccardo il 18 Maggio 2013 alle 14:11
    • Rispondi

    Buongiorno,
    premettendo che sono un neofita in questo ambito e mi scuso anticipatamente per le “cavolate” che potrei scrivere,vi chiedo di aiutarmi.
    Ho collegato una scheda arduino uno al mio pc tramite porta usb,ho seguito lo schema elettrico riportato da voi sopra per far funzionare un servomotore,ho inserito i dati sul pc ma mi da’ un errore dove c’e’ scritto “Servo myservo;”e naturalmente il servo non si muove.
    cosa sbaglio?
    il servo e’ un emax es3001.
    grazie

    1. Ciao Riccardo,
      leggendo la spiegazione riportata in ogni articolo puoi risolvere facilmente i tuoi dubbi.
      Nel tuo caso l’errore é dovuto probabilmente alla mancanza della libreria Servo.
      Solitamente questa libreria é inclusa nell’IDE arduino, nel tuo caso non lo è.

      Hai due strade:

      1. Prova a re installare l’IDE arduino
      2. Scarica questa libreria dal sito Arduino ed installala

      Mauro

    • riccardo il 20 Maggio 2013 alle 21:21
    • Rispondi

    grazie mille Mauro ho re installato tutto e funziona

    1. Ottimo Riccardo,
      sei pronto per iniziare a sperimentare con arduino.

      Mauro

    • Matteo il 20 Maggio 2013 alle 22:58
    • Rispondi

    Ciao Mauro,
    Mi sembra di aver capito che questi sensori variano la resistenza a seconda di quanto sono piegati
    Inoltre avrei bisogno di un consiglio sui sensori da utilizzare per misurare i movimenti del polso ma soprattutto della spalla
    Avevo pensato a degli accelerometri, ma non li ho mai usati e non ho ancora ben capito la distinzione tra gli assi Y e Z 😀
    attendo consigli

    1. Ciao Matteo,
      per i sensori di flessione anche io ho dedotto dai datasheet che variano la resistenza in funzione della flessione, ma non li ho mai provati.
      Per l’accelerometro ho scritto un articolo in merito.

      Ti chiedo di commentare gli articoli dedicati alla mano ed all’accelerometro per avre una visione più precisa di quello di cui stiamo parlando ed aiutare anche chi legge i commenti a capire la discussione.

      Mauro

    • andrea il 26 Maggio 2013 alle 16:00
    • Rispondi

    Ciao mauro vorrei sapere se nella programmazione del servo, sia possibile una volta che compia la rotazione avanti e indietro fermarlo del tutto e poi farlo ripartire . Perché stò facendo vari tentati e nn ci riesco ,il servo è là prima volta che lo uso…. potresti aiutarmi??? grazie !

    1. Ciao Andrea,
      il servo funziona per gradi, se gli dici vai al grado 10 lui si posiziona al 10mo grado e si ferma.

      Mauro

    • andrea il 28 Maggio 2013 alle 10:50
    • Rispondi

    ciao , io stò utilizzando il servo con la programmazione che hai fatto tu sopra quella all’inizio della pagina, però ho provato a variare i gradi , ad esempio anziché 180 ho messo 90 ma ruota sempre allo stesso modo, riesco solo a farlo ruotare solo avanti e indietro , la rotazione è completa , sapresti dammi una risposta?? grazie !

    1. Ciao Andrea,
      stai usando per caso un servo a 360 gradi rotazione continua?
      In tal caso è possibile che il tuo servo possa regolare con il PWM solo la velocità di rotazione ed il verso, non i gradi.

      Mauro

    • andrea il 28 Maggio 2013 alle 19:27
    • Rispondi

    ciao Mauro , penso propio che sia quel tipo di servo visto che cambiando i valori nella programmazione di arduino il servo non li riconosce, cmq il programma in alto all’inizio della pagina , e corretto da utlizzare per quel tipo di servo??

    1. Ciao Andrea,
      tutti gli articoli che ho scritto sui servo di riferiscono a servo 0-180°
      I servo a rotazione continua non li ho ancora provati.

      Mauro

    • andrea il 29 Maggio 2013 alle 18:05
    • Rispondi

    Ciao cmq il servo con la programmazione sopra funziona !

    1. Ciao Andrea,
      l’unico sketch di questo articolo ti funziona correttamente?
      Allora il problema devi cercarlo tra le modifiche che hai eseguito.

      Mauro

  1. Ciao
    ho costruito una installazione con un servo a rotazione continua che muove un led
    ora vorrei sapere se fosse possibile rallentare questa rotazione
    di cosa c’è bisogno? di un potenziometro?
    grazie
    Michele

    1. Ciao Michele,
      come avrai letto nei commenti non ho ancora avuto modo di provare un servo a rotazione continua, mi sono documentato e per alcuni variando il PWM fai variare la rotazione.

      Il potenziometro ti serve se vuoi controllare la velocità di rotazione mentre gira.

      Mauro

    • claudio il 11 Agosto 2013 alle 13:13
    • Rispondi

    ciao Mauro e complimenti per il blog su arduino.

    mi sto appassionando ad arduino e ho comprato il kit per iniziare
    sono arrivato all’esempio con il servo dato nel kit e ho provato l’esempio che riporti in questo blog
    funziona e sto provando soluzioni diverse
    ho però un problema che non capisco
    trasferisco il programma sulla scheda e tutto va bene, scollego la usb che funge da alimentazione
    faccio i collegamenti
    ricollego la usb e durante il funzionamento del programma caricato sento il classico rumore di windows quando si collega un dispositivo
    al secondo tentativo compare un messaggio di errore che il sistema non trova più la com3 (settata all’istallazione di arduino su XP)
    e rimane solo una com1 che non funziona
    se esco dal programma e collego la scheda senza collegamenti si ristabilisce la com3
    cosa sbaglio?
    grazie dell’attenzione
    claudio

    1. Ciao Claudio,
      il fenomeno che descrivi nella mia esperienza mi é accaduto in due occasioni:

      1) i collegamenti del servo erano errati, i colori dei fili non corrispondevano all’attesa e mandavano in corto arduino che si disconnette

      2) il servo assorbe più corrente di quanta la porta USB può erogare e quindi Windows la disconnette per non bruciare il Pc

      Ciao

        • claudio il 15 Agosto 2013 alle 17:39
        • Rispondi

        Grazie Mauro della cortese e sollecita risposta.

        Per i collegamenti ho faticato a capire; sto utilizzando il servo presente nello starter kit (quello con anche il libro primi passi con arduino) e sono andato a tentativi.
        Il servo ha i seguenti colori: centrale rosso, laterali giallo e marrone.
        il collegamento che ha funzionato (dando però i problemi che ti dicevo) è:
        rosso al positivo di arduino
        giallo come segnale
        marrone al negativo
        Il servo non ha schemi; ha un adesivo sul fianco con la scritta:
        GOTECK
        GS-9018
        Micro servo
        mi piacerebbe approfondire l’uso dei motori con arduino ma non mi fido ad usare questo
        ha qualcosa da consigliarmi che posso prendere da futura shop o altri fornitori economici?
        se invece è un problema di corrente pensavo di acquistare un alimentatore cosa ne dici e quale mi consigli?

        grazie ancora
        ciao

        1. Ciao Claudio,
          Io acquisto il materiale su robot-domestici.it che offre grande varietà di prodotti e tanti kit interessanti.

          In merito al tuo servo é uno dei più classici presenti negli starter kit con arduino ed io stesso ho avuto modo di provare un po’, uno l’ho utilizzato per il beginner robot ( leggi beginner robot l’evoluzione ) tuttavia di tutti quelli che ho provato non tutti si sono rivelati funzionanti al 100% alcuni non sono riuscito a farli spostare di un grado.

          Per i collegamenti dei fili sono corretti, prova ad alimentare il servo con 4 pile da 1,5v ( le comuni stilo o AA ) e ricorda che SOLO il terminale Gnd delle pile e di arduino devono essere collegati insieme.

          Mauro

            • claudio il 17 Agosto 2013 alle 11:30

            Grazie Mauro,

            seguirò i tuoi consigli.
            A presto

            Claudio

    • Dario il 3 Settembre 2013 alle 23:28
    • Rispondi

    Salve io ho arduino 1 e mi serve un circuito per gestire un servo o più servi con un interruttore per ognuno che mi manda il servo ad un lato o l’altro.praticamente per uno scambio fermodellismo , in più collegati al servo 2 led (rosso e verde).se magari ha un circuito ed il listato grazie.dario.

    1. Ciao Dario,
      Ho già pubblicato degli articoli sui passaggi a livello ferro modellistici, prova a dare uno sguardo a quelli.

      Se nessuno soddisfa il tuo problema inviami una email alla casella info del blog con tutti i dettagli di ciò che ti occorre: numero di servo, numero di interruttori, led, descrizione delle funzioni che vorresti, gradi dei servo, ecc… ed io posso farti avere un preventivo per il progetto.

      Mauro

    • Lorenzo il 20 Settembre 2013 alle 17:18
    • Rispondi

    Ciao, io ho arduino 1e volevo avere delle informazioni riguardo ai servo motori. le mie richieste sono semplicemente due:

    1) arduino con la funzione write() della libreria servo è in grado di pilotare sia i servi analogici che digitali ??
    2)ciascuno dei due tipi di servo motori può essere “attaccato” a qualsiasi piedino ??

    grazie in anticipo, Lorenzo.

    1. Ciao Lorenzo,
      I servo analogici devono essere collegati ad un pin PWM ed il metodo write serve a controllare questo tipo di servo.

      Purtroppo non possiedo servo digitali da testare con Arduino, se lo fai tu e vuoi condividere i tuoi esperimenti il blog é a disposizione.

      Mauro

    • Mario il 23 Settembre 2013 alle 12:17
    • Rispondi

    Ciao Mauro,
    ne approfitto per rinnovarti i complimenti.
    Ti scrivo perchè non riesco a far funzionare nè il primo servo che ho comprato col primo kit, nè con un secondo comprato pensado che il primo fosse rotto: quando provo lo sketch SWEEP dagli esempi e collego il servo vedo che ruota a scatti in un senso unico, con salti di svariati gradi, fino ad arrivare al fondo corsa dove sento che arriva un impulso ma l’albero si blocca. Questo succede anche quando carico lo sketch preso dal sito di arduio:

    #include

    Servo myservo;

    void setup()
    {
    myservo.attach(9);
    myservo.writeMicroseconds(1500); // set servo to mid-point
    }

    void loop() {}

    Se capisco bene questo dovrebbe semplicemente posizionare l’albero sulla sua posizione mediana, invece il servo si comporta esattamente come descritto prima. E in più: quando poi cerco di caricare un qualsiasi altro sketch leggo che la porta COM è occupata (ed in effetti sparisce dall’IDE), e devo scollegare arduino, chiudere l’IDE e riaprirlo, poi ricollegare arduino e solo allora torno a vedere la COM a disposizione, e caricare..

    1. Ciao Mario,
      il modello del secondo servo acquistato é identico al primo?
      É possibile che questo tipo di servo non sia in grado di funzionare con arduino o semplicemente ha bisogno di impulsi di altro tipo per funzionare, dovresti cercare le specifiche del produttore e verificare se ti riporta come controllarlo.

      Mauro

    • lorenzo ilariucci il 13 Novembre 2013 alle 11:45
    • Rispondi

    Ciao Mauro

    Io ho un servomotore a rotazione continua ma quando lo installo su arduino si accende ma non gira.
    Vorrei farlo girare in senso orario e antiorario all’infinito! come faccio?

    1. Ciao Lorenzo,
      differenziamo i problemi in:
      1. non gira
      2. vorrei farlo girare all’infinito

      per il punto 1. potrebbe dipendere da:

      a. alimentazione non sufficente. Soluzione alimenta il tuo servo con una sorgente esterna
      b. sketch non corretto. Purtroppo per questo non posso aiutarti non avendo mai provato servo a rotazione continua.

      per il punto 2. si ripropone il punto b. visto sopra, prova a cercare il tuo modello di servo e verifica se qualche appassionato arduino ha già rilasciato qualche sketch adatto.

      Mauro

    • capric70 il 20 Novembre 2013 alle 20:01
    • Rispondi

    Ciao Mauro e complimenti per la tua professionalità.
    Ti volevo chiedere come programmare Arduino per far aggiornare l’IP in automatico (manda un refresh dell’IP a NO-IP ogni 5min.) su NO-IP (ho un sistema DVR-telecamere) visto che non voglio lasciare il PC acceso con lanciato il programmino di update client di NO-IP. Grazie anticipatamente……

    1. Ciao Capric70,
      se dovessi realizzare un progetto simile protenderei per un TPLink-3020, un Aerduino Yun o una Raspberry.
      Tutti e tre i dispositivi sono già dotati di scheda di rete, linux e consumi ridotti.

      Sul TPLink e Arduino Yun dovresti compilarti il software rilasciato da no-ip.info perchè non creado esista pacchettizzato per openWRT.
      Su Raspberry puoi installare il pacchetto rilasciato per Debian.

      Mauro

        • capric70 il 21 Novembre 2013 alle 15:56
        • Rispondi

        Ti ringrazio per la risposta, il fatto è che già mi trovo in possesso sia della scheda arduino che quella ethernet w5100 ed ho gia provato a programmarla per tale progetto ma sono arrivato al punto di far aggiornare l’ip ad ogni riavvio di arduino (RESET) e non in automatico (ciclicamente ogni 5 min. circa). Ti allego il codice da me provato “.
        Mi puoi aiutare a renderlo automatico?

        Scusa se non sono stato molto chiaro prima.

          • capric70 il 21 Novembre 2013 alle 16:01
          • Rispondi

          Scusami un’altra domanda . Posso collegare eventualmente il TPLink direttamente al mio modem/router Linksys tramite LAN, se e si funzionerebbe evitando di tenere il PC acceso? grazie di nuovo e complimenti per la professionalità

          1. Ciao Capric70,
            se mi avessi detto di avere un router Linksys ti avrei suggerito di installarci su openWRT direttamente e usare le funzioni di aggiornamento di no-ip direttamente dal router 🙂
            In questo modo non solo risparmi il costo del TPLink-3020 ma puoi usare Arduino per altri ottimi scopi.

            Mauro

        1. Ciao Capric70,
          innanzitutto ti invito a leggere alla fine di ogni articolo l’avviso che chiede di non incollare codici nei commenti.
          Se sei già riuscito a fare la parte più complessa non ti resta che aggiungere un delay che esegua il codice ogni 5 min il delay sarà:

          1000 x 60 x 5 = 300000 min
          Mauro

    • capric70 il 21 Novembre 2013 alle 18:15
    • Rispondi

    Ciao Mauro, scusami ma non ho letto bene le regole, si ho un Linksys wag200g, non sono informato su come installare “openWRT”, mi potresti delucidare in merito?, e visto che non sono molto afferrato con la programmazione di arduino , come pensavi di completare il codice (dove inserire il delay consigliato), in attesa ti ringrazio sempre….

    1. Ciao Capric70,
      OpenWRT dispone di un sito ben fatto in cui trovi tutte le informazioni che ti occorrono, incluso firmware già pronti per molti router, cerca OpenWRT in google.

      Per il delay io lo inserirei alla fine di ogni ciclo di loop() considerando che ciascun ciclo effettua un aggiornamento del tuo Ip.

      Mauro

    • Simone il 16 Dicembre 2013 alle 14:52
    • Rispondi

    ciao
    ho visto che utilizzi Arduino Uno ma ci provo magari riesci a chiarirmi dei dubbi.
    volevo pilotare un servo HItech H3003 con Arduino Due. bene verificando il mio codice con il tuo sembrerebbe tutto ok, sol oche avviando il tutto il servo comincia a ruotare in un senso arrivando a fine corsa e provando ad andare altro………. non riesco a capire dove sia il problema.

    1. Ciao Simone,
      potrebbe dipendere dal tipo di segnale output dell’arduino due che é a 3,3v contro i 5v dell’arduino uno.

      Il PWM sarà senza dubbio differente e potrebbe non essere ben interpretato dal servo.

      La mia é solo un’ipotesi non possedendo il servo che darai utilizzando.

      Mauro

        • Simone il 17 Dicembre 2013 alle 08:10
        • Rispondi

        ci avevo pensato anche io a questo, forse è il caso che mi procuro un convertitore di segnale e riprovo

        1. Ciao Simone,
          dovresti trovare un convertitore che accetti in input un segnale 0-3,3v ed in output produca un segnale 0-5v in PWM.

          Mauro

            • Simone il 21 Dicembre 2013 alle 12:24

            ok risolto.
            il mio problema era nelle masse con non erano in comune tra il servo e quella dell’arduino :(, lo so errore stupido.

            grazie del supporto e delle info

          1. Ciao Simone,
            sono cose che capitano 🙂

            Mauro

    • gialuc il 26 Dicembre 2013 alle 14:58
    • Rispondi

    ciao, il codice ha un errore forse ve ne siete gia accorti
    qui…
    riga 5: include ??? (cosa?)
    se si vuole usare la libreria servo…
    versione corretta :

    #include

    1. Grazie Gianluc,
      a volte il copia e incolla mi frega, correggo prima possibile 🙂

      Mauro

    2. Grazie Gianluca,
      a volte il copia e incolla frega anche me 🙂
      Correggo appena possibile.

      Mauro

  2. Salve
    Sonno Carlo
    Complimenti per i Tutorial, sono da poco alle prese con ARDUINO,
    Vorrei capire come controllare un servo lavorando con servo.writeMicroseconds(uS) .
    Non riesco a trovare una linea guida .
    Ha qualche suggerimento in merito
    grazie
    Carlo

    1. Ciao Carlo,
      sarà un caso ma proprio oggi ho pubblicato un articolo in merito … coincidenza strana perché scrivo gli articoli settimane prima della loro pubblicazione.
      Ti invito alla lettura.

      Mauro

    • Pasquale il 20 Gennaio 2014 alle 16:06
    • Rispondi

    #include
    Servo myservo;
    int pos = 0;

    void setup()
    {
    myservo.attach(9);
    }

    void loop()
    {
    for(pos = 0; pos =1; pos-=1)
    {
    myservo.write(pos);
    delay(15);
    }
    }

    • Pasquale il 20 Gennaio 2014 alle 16:07
    • Rispondi

    Ciao, Mauro quel codice che hai scritto non me lo legge arduino ,mentre quello che ho scritto sopra si è simile al tuo !!!!

    • volpato il 31 Gennaio 2014 alle 15:42
    • Rispondi

    Ciao Mauro, complimenti per il tuo sito, io che sono alle prime armi con Arduino l’ho trovato estremamente utile! Sto realizzando un robot domestico, pezzo dopo pezzo e quando il tempo me lo permette. Desideravo chiederti una dritta su quali servi utilizzare per far azionare le braccia robotiche considerando che pesano circa 1kg l’una.
    ti ringrazio

    1. Ciao Volpato,
      grazie per i complimenti.
      I servo che di solito uso e si trovano in commercio a meno di 20€ sul sito robot-domestici sono con ingranaggi in metallo e con una coppia di 15Kg/cm
      Per capire se sono adatti al tuo progetto dovrai eseguire opportuni calcoli di meccanica che io non sono in grado di fare o semplicemente provare 🙂

      Mauro

    • volpato il 31 Gennaio 2014 alle 18:14
    • Rispondi

    Ciao Mauro, ok provo a vedere che test riesco a fare!
    ti ringrazio !
    ciaooo

    1. Ottimo Volpato

    • davide il 4 Febbraio 2014 alle 15:46
    • Rispondi

    Buongiorno signor Mauro, sono alle prime armi con la scheda arduino e ci sto già litigando
    ho bisogno del suo aiuto per comprendere meglio il funzionamento della programmazione
    ho eseguito il listato qui sopra da lei esposto ed è tutto ok , in più ho aggiunto la possibilità di vedere tramite monitor virtuale i gradi del servo variare in funzione del movimento.
    ora il problema è, che io vorrei inserire che ad un grado che gli imposto ad esempio 50 gradi mi fa accendere un led per un tempo che gli imposto,poi si spegne , senza però ad andare a modificare il movimento del servo ci sto impazzedo a trovare la soluzione ma non ho le dovute conoscenze grazie mille anticipatamente
    Davide

    1. Ciao Davide,
      prova a leggere il mio tutorial sull’uso del comando millis()

      Mauro

        • davide il 4 Febbraio 2014 alle 16:26
        • Rispondi

        GRAZIE !!!!!!! Mauro
        stasera ci provo!!!!!
        sei il numero 1
        grazie per la rapidità alla quale mi hai risposto fossero tutti così rapidi in italia saremmo lo stato numero 1 al mondo

        1. Grazie Davide, io ci provo, non sempre riesco ad essere così rapido 🙂
          Informami su come sono andati i tuoi test.

          Mauro

    • Daniele il 18 Marzo 2014 alle 15:02
    • Rispondi

    Ciao Mauro e complimenti per il tuo blog è molto bello e dettagliato.
    Ho un problema, io avrei bisogno di arduino per utilizzarlo con delle batterie da 12 volt ricaricabili, ho bisogno che quando scendano sotto i 10,8 volt il circuito si interrompa automaticamente e non attinga più energia dalle batterie perchè sennò diventano poi inutilizzabili. Ora, qual è il linguaggio di programmazione e quali sono i collegamenti da fare e che materiali bisogna utilizzare? Si può utilizzare anche un relè? In attesa di tue risposte ti mando i miei saluti più sinceri!
    Daniele.

    1. Ciao Daniele,
      arduino da solo non è in grado di rilevare i tempi di scarica delle batterie ha sempre bisogno di shield aggiuntive in grado di restituire i valori di soglia che possono far scattare un relè o altro meccanismo che interrompa l’erogazione della tensione e della corrente.

      Per scegliere che tipo di shield siano necessarie e quali collegamenti eseguire avrei bisogno di più dettagli sul tipo di batterie e sull’utilizzo che ne devi fare.
      Inoltre mi occorre del tempo per progettare il circuito, lo sketch e definire tutto il progetto.
      Posso farlo su commissione se ti interessa, inviami una email alla casella info del portale con tutti i dettagli in tuo possesso e vedrò come posso aiutarti e che costi avrebbe realizzare il progetto.

    • ricky73 il 6 Aprile 2014 alle 15:10
    • Rispondi

    buon giorno scusa il disturbo .
    Ho costruito un’armatura di airon man da intossare, e la devo ultimare aggiungendo la parte eletronica .
    E da qui in poi inizia l’impossibile x me .
    Gli ultimi servo che ho acquistato, x motivi di uno sforzo maggiore, gli ho presi via cina a causa del costo proibitivo che ho trovato con marche profesionali, ma non riesco a pilotarli x tutti i 180° fanno un percorso da 0°/ 130° e non riesco ad arrivare a 180° con arduino ,mentre a ruotarlo a mano riesco a portarlo oltre .
    Ho riscontrato lo stesso problema con dei servo xo analogici mi puoi consigliare come posso risolvere il problemino
    marca e modello servo HDKJ D3615

    1. Ciao Ricky purtroppo non conosco quei servo, devi verificare con il costruttore se siano compatibili con arduino e se rilascia una adeguata documentazione o delle librerie di controllo. Probabilmente non funzionano allo stesso modo dei sevo tradizionali standard per modellismo.

    • Simone il 11 Maggio 2014 alle 22:41
    • Rispondi

    Ciao! sto realizzando un robot e ho scritto il codice dei servi che vengono messi in movimento con un pulsante. Vorrei però che quando lascio il pulsante se il movimento dei sevi non ha ancora completato tutto il codice, si fermino in quella posizione e non terminino il codice… non so se mi sono spiegato.. come posso fare? grazie in anticipo

    1. Ciao Simone,
      potresti far in modo che l’incremento dei gradi avvenga solo quando il pulsante è premuto altrimenti resta fisso.

        • Simone il 13 Maggio 2014 alle 21:07
        • Rispondi

        Grazie mille. Più precisamente come faccio incrementare i gradi solo quando premo il pulsante?

        1. Ciao Simone,
          è molto semplice, trovi tantissimi esempi nel blog, ad esempio ogni volta che uso un menu o imposto data ed ora.
          Ti invito a leggere quelle descrizioni perchè più dettagliate, nei commenti non riesco a spiegare altrettanto bene.

          In pratica è un if che controlla la pressione del pulsante e ha come effetto l’incremento di una variabile, diciamo gradi, con una delle seguenti sintassi:

          gradi = gradi +1;
          oppure
          gradi++;

            • Simone il 14 Maggio 2014 alle 16:32

            Grazie ancora ma se go capito bene purtroppo questo non risolve il mio problema, in quanto i miei servo devono fare un movimento più volte… Non devono solo incrementare. In pratica sto facendo un robot con 4 zampe che fanno lo stesso movimento coordinato ogni passo… Io vorrei che i servo si muovessero solo mentre premo il pulsante (che sarà collegato al robot con il bluetooth) , mentre ora ogni volta che premo i servo fanno tutto il giro completo…

    • Giacomo il 11 Giugno 2014 alle 01:29
    • Rispondi

    Salve, ho realizzato un robot che muove gli arti superiori riproducendo gli stessi movimenti di chi si trova di fronte al kinect, sono arrivato a mandare gli angoli di cui ho bisogno all’arduino UNO, ma quando vado ad assegnarli le “braccia” del robot fanno il primo movimento poi si bloccano, il problema può dipendere dal fatto che io assegno i valori direttamente ai servi senza nessuno step?! cioè potrebbe dipendere dalla velocità?!

    1. Ciao Giacomo mi piacerebbe pubblicare il tuo progetto con tutte le foto, video, descrizione dei sw e sketch per condividerlo con altri appassionati.
      Se ti va mandami tutto sulla casella info del blog ed io provvederò anche a cercare di comprendere cosa causa il blocco dei servomotori.

    • Maurizio il 15 Giugno 2014 alle 22:10
    • Rispondi

    Ciao Mauro. Per simulare l’apertura e la chiusura di una saracinesca, che tipo di servo potrei utilizzare? Ho utilizzato un SM-S2309S, ma ovviamente gira solo di 180°. Avevo pensato ad un servo a rotazione continua, ma come imposto la durata della rotazione in un senso? Devo inserire un delay() con la durata che mi serve?
    Mi era stato consigliato un HSR-1425CR, ma non riesco a trovarlo disponibile da nessuna parte, sapresti consigliarmi un altro modello? sempre che un servo a rotazione continua faccia al caso mio.

    Grazie mille per l’aiuto!

    1. Ciao Maurizio,
      i servo a rotazione continua sono più adatti ad altri scopi che per il tuo progetto.
      Io ti consiglierei un motoriduttore dc ( corrente continua ) se hai bisogno di coppia elevata e puoi mettere dei finecorsa per stabilire quando é chiusa o aperta al massimo.
      Se invece vuoi fare una cosa nuova e la simulazione serve ad altri scopi che non siano la messa in produzione del modello ti consiglio un motore passo-passo con cui puoi evitare i sensori di finecorsa ed usare i passi per definire la posizione della saracinesca.

      Se proprio vuoi usare un servo puoi modificare il tuo SM-S2309S trasformandolo in un rotazione continua, trovi molti tutorial sul web.

        • Maurizio il 16 Giugno 2014 alle 08:45
        • Rispondi

        Innanzitutto grazie per la risposta. Ho provato a modificare l’S2309S, ma non riesco a modificare la parte elettronica, credo utilizzerò un motore passo-passo, come mi hai consigliato. Un motore del genere potrebbe andare bene?

        http://www.ebay.it/itm/261460744457

        Non ho bisogno di molta potenza, il motore dovrebbe alzare ad abbassare un leggerissimo calendario

        1. Ciao Maurizio,
          non lo conosco e dalla scheda non si deduce molto, assicurati che il venditore ti dia lo schema di collegamento.

    • Luciano il 5 Luglio 2014 alle 11:13
    • Rispondi

    Salve, piano piano grazie a lei ed al suo blog mi sto appassionando sempre di più ad arduino.

    Per questo progetto dispongo di un SG90 come Micro Servo che mi hanno mandato con lo starter kit da lei suggerito.

    Quando vado a verificare lo sketch però mi dà questo messaggio di errore:
    Arduino:1.5.5 (Mac OS X), Scheda:”Arduino Uno”

    sketch_jul05a.ino:5:10: error: #include expects “FILENAME” or
    sketch_jul05a:7: error: ‘Servo’ does not name a type
    sketch_jul05a.ino: In function ‘void setup()’:
    sketch_jul05a:13: error: ‘myservo’ was not declared in this scope
    sketch_jul05a.ino: In function ‘void loop()’:
    sketch_jul05a:20: error: ‘myservo’ was not declared in this scope
    sketch_jul05a:25: error: ‘myservo’ was not declared in this scope

    Che può essere?

    Grazie in anticipo

    1. Ciao Luciano, ti sei dimenticato di includere la classe Servo.h, come leggi nell’errore esso è chiaro e parlante: #include expects “FILENAME”
      Manca la parte del nome file da includere.

    • Gabriele il 18 Luglio 2014 alle 11:17
    • Rispondi

    Ho copiato il programma che tu proponi all’interno del blog per controllare se il Servo funzioni

    [ codice rimosso in automatico ]

    Le prime volte si muove correttamente, dopo pochi secondi il movimento si infiacchisce finché non gira più. Ogni volta che il motore compie uno scatto il computer fa un suono come se avvertisse che un cavo USB è stato inserito. Puoi darmi qualche consiglio?

    1. Ciao Gabriele, in primo luogo ti chiedo di rispettare le regole del blog, se leggi in fondo ad ogni articolo ci sono poche semplici regole ed una é di non pubblicare codici nei commenti, peggio se il codice pubblicato é già presente nel mio articolo.

      Dalla tua descrizione il problema é di alimentazione e probabilmente dopo qualche secondo il servo richiede più corrente di quella che il computer eroga ed il sistema di protezione usb del Pc ti disconnette arduino e la porta usb, se continui rischi di bruciare la porta usb del computer.

    • Michele il 11 Settembre 2014 alle 17:23
    • Rispondi

    Scusa la domanda, sono alle prime armi. Generalmente i servo richiedono un tempo ciclo di 20-25ms mentre mi sembra che le uscite di Arduino abbiano tempi molto più bassi. Dobbiamo fare qualcosa per modificare questo tempo oppure come da default va già bene?

    1. Ciao Michele, cosa intendi con tempo di ciclo ?

        • Michele il 15 Settembre 2014 alle 12:33
        • Rispondi

        intendo il periodo. se non sbaglio, viene dato un impulso (di ampiezza variabile) ogni 20-25ms.

        1. Ciao Michele, quello che chiami periodo è meglio noto come duty cycle e varia da 0 a 100% dove per i servo si riferisce ad una variazione da 1500ms a 2500ms che si traduce in gradi 0-180°
          Per esempio 2000ms = 90°

            • Michele il 15 Settembre 2014 alle 20:54

            il duty cycle non il tempo che l’impulso rimane ON rispetto al tempo che rimane OFF, in percentuale? per ms intendi microsecondi? comunque questi impulsi ogni quanto tempo devono essere emessi? ci pensa già la libreria servo di arduino a darli al tempo esatto su qualunque pin PWM si utilizzi?

          1. Ciao Michele,
            il periodo massimo del duty cycle è dato dalla frequenza, se vuoi cambiarla in arduino puoi farla usando i prescaler.
            Ti invito a leggere l’articolo in cui ho descritto come fare.

    • Robert il 12 Settembre 2014 alle 07:51
    • Rispondi

    mi sono iscritto perché ho trovato molto interessane quello che scrive, e avrei bisogno di approfondire argomenti su Arduino.

    saluti a presto Giuliano Mugnai

    1. Ciao Giugliano o Robert, non so quale sia il tuo nome 🙂 immagino il primo.
      Grazie per il tuo commento.
      Hai già letto il mio corso gratuito on-line?

    • Robert il 13 Settembre 2014 alle 15:47
    • Rispondi

    Salve è la prima volta che scrivo, ho un motore brushless da 500 watt (cosi dicono) ed un regolatore da 40 A.

    Attacco tutto e do alimentazione non si muove nulla il motore fischia che sembra un treno ma non si muove.

    So che va dato un segnale al filo bianco del regolatore ma non ho idea che tipo di segnale ?

    grazie e saluti Giuliano Mugnai

    NB. la prossima volta ti o le faccio sapere chi grossomodo sono.

    1. Ciao Robert,
      purtroppo come avrai letto nel blog io non ho mai trattato motori brushless e non saprei aiutarti.
      Lascio la tua richiesta nel blog perché qualche altro appassionato, più ferrato di me, possa aiutarti.

    • Robert il 16 Settembre 2014 alle 22:09
    • Rispondi

    Salve quello che avevo bisogno è l’uscita PWM di arduino ed il motore va che segnale è quello che esce da
    arduino.

    saluti Giuliano

    1. Ciao Robert,
      sui pin 3,5,6,9,10 ed 11 di arduino hai il segnale PWM, se vuoi maggiori dettagli sul tipo, frequenza e controllo ti consiglio di leggere la pagina del manuale sul sito ufficiale arduino.cc

    • Robert il 17 Settembre 2014 alle 17:11
    • Rispondi

    Grazie mauro secondo mio modesto avviso quel servo che stai presentando va bene anche per il motore, ora
    provo poi ti faccio sapere.

    saluti giuliano

    1. Ok Robert.

    • Giorgio il 26 Settembre 2014 alle 17:23
    • Rispondi

    Ciao Mauro
    Vorrei sapere se è possibile controllare più servomotori (2, 4,6) con uno stesso Pin per fargli fare a tutti i servo lo stesso movimento.
    Ciao Grazie

    1. Ciao Giorgio,
      tecnicamente penso sia possibile, anche se non ho mai provato a collegare più servo sul medesimo pin.
      Certo devi alimentarli esternamente tutti altrimenti non riuscirai a far funzionare tutto e ti consiglio di provare con servo molto precisi e tutti delle medesime caratteristiche, marca e modello per evitare che differenze meccaniche influenzino il tuo progetto in modo negativo.

    • emanuele il 7 Ottobre 2014 alle 23:56
    • Rispondi

    ciao, ho visto che sei abbastanza pratico e volevo farti delle domande … io non sono neanche alle prime armi sull argomento della programmazione di arduino e diciamo sull elettronica in generale, ma vedendo alcuni tutorial su come costrure dei robottini mi e diciamo venuta questa passione …. ho visto che ci sono kit starter arduino uno su ebay per iniziare a fare circuiti elettricci con resistenze transistor condensatori led ecc, ma vorrei sapere da te cosa mi consigli di fare prima che io acquisti quel kit perche il mio obbiettivo e la costruzione di un robottino quadrupede ed un drone da portare agli esami avendo io 18 anni. consigliami. grazie 😉

    1. Ciao Emanuele,
      io ti consiglio di leggere quanto più materiale su arduino e sulla programmazione trovi in internet, partendo magari dal mio corso arduino on-line in cui la sequenza degli articoli è organizzata come precorso formativo.
      In merito agli acquisti io consiglio di rivolgersi, sopratutto per chi è alle prime armi, ai negozi on-line specializzati che oltre al materiale di buona qualità offrono supporto se ti arriva qualche componente difettoso e la documentazione dei componenti.
      Mi è già capitato che qualche neofita abbia acquistato da rivenditori dubbi e si sia trovato con materiale non funzionante o totalmente differente da quello usato nei tutorial, praticamente non ne ha potuto far nulla.
      Penso che se tu chiedessi come regalo, per natale o compleanno, dei kit di elettronica sarebbero solo felici di poterteli regalare.

      Due anni fa alcuni studenti del 5° anno di un liceo di Milano per natale si sono fatti regalare un mio corso in aula più starter kit e ci siamo divertiti molto. Oggi uno di quegli studenti è campione di robotica a squadre e spesso mi scrive per ringraziarmi per quei giorni di corso.

  3. ciao
    una domanda, forse stupida, ad un certo punto dell’articolo dici:

    “E’ importante che tu tenga conto che la classe Servo può utilizzare 12 pin digitali di Arduino e non solo le uscite di tipo PWM, questo disabilita la funzione analogWrite() normalmente utilizzabile con le uscite PWM di Arduino”

    per cui in uno stesso progetto non posso includere dei servo e dei led rgb?

    Grazie

    1. Ciao Roberto,
      non è affatto stupida la domanda.
      La funzione analogWrite() la puoi usare con i pin PWM di arduino.
      Tuttavia se usi la classe servo collegata al pin PWM 3, ad esempio, non potrai usare il medesimo pin per collegare un led o altro attuatore.
      Questo è vero non solo a livello elettrico in quanto avresti anomalie se collegassi un servo ed un led sul medesimo pin, ma anche a livello sw in quanto la libreria Servo.h inibisce il corretto funzionamento del pin su cui la utilizzi.

    • mario il 24 Ottobre 2014 alle 18:18
    • Rispondi

    salve come posso realizzare una stanga con un servo a rotazione continua(360°) ?
    grazie in anticipo ..

    1. Ciao Mario,
      cos’è una stanga ?

    • Giorgia il 25 Ottobre 2014 alle 20:46
    • Rispondi

    Ciao Mauro,
    Per la mia tesi di laurea dovrò realizzare una lampada da giardino ad energia solare, Il design è basato sulla caratteristica dei fiori notturni di schiudersi all’imbrunire. Per riprodurre questo effetto pensavo di utilizzare un sensore crepuscolare per far accendere al tramonto la luce led all’interno dei petali, ed aprire i petali con dei bracci meccanici controllati tramite servo motori con Arduino.
    Il punto è che non so che meccanismo creare per far aprire i petali.
    Cosa mi consigli?

    Grazie

    1. Ciao Giorgia,
      bellissimo progetto e mi piacerebbe pubblicarlo quando lo avrai realizzato.
      Il sensore crepuscolare è senza dubbio un modo semplice e preciso per rilevare la luminosità ambientale.
      Per il movimento dei petali puoi usare un servomotore, magari mini servo, a cui connettere delle leve a loro volta collegate ai petali, a mio avviso un solo servo potrebbe essere sufficiente, dipende da quanti petali ha il fiore che stai realizzando.

  4. buongiorno, io sto costruendo un robottino con puntatore laser (arduino uno) sono presenti 2 servo uno per l’asse x e uno per l’asse y, ho qualche problema sul fatto che i servo devono girare o a destra di 90° o a sinistra di 90° e ugualmente anche quello per l’asse y, come faccio a impostare la posizione di partenza dei servo su 90° ???

    1. Ciao Daniele,
      ti consiglio di leggere altri articoli sui servo, che trovi nel blog, troverai che una cosa molto semplice, basta nella setup() impostare il grado di partenza se ci metti 90 partirai da 90°

    • Rolando il 19 Dicembre 2014 alle 01:13
    • Rispondi

    Salve Sig. Alfieri sono un novello in arduino quindi cerco di capire qualche cosa per il momento oltre a eseguire piccoli progetti ho provato a implementare lo skech riguardo i servo per modellismo ma ottengo solo errore di implementazione come mai e che significano?
    servo2.ino:In function ‘void loop()’ :
    servo2. ino:13:36 error expected ‘ ; ‘ befor ‘)’ token
    servo2 ino:14:3:error expected primary- expression before ‘ ) ‘ token

    e tanti altri

    in questi casi ?

    1. Ciao Rolando,
      se leggi l’errore che l’IDE ti da puoi correggere l’errore:
      servo2. ino:13:36 error expected ‘ ; ‘ befor ‘)’ token

      Significa che hai dimenticato un ; o qualche altro elemento sintattico, verifica nel codice cosa manca.

    • roberto il 6 Gennaio 2015 alle 09:57
    • Rispondi

    Ciao Mauro,premetto che di elettronica non capisco molto.Vorrei usare un motore a 12v di tergicristallo ed usarlo per lo sterzo di un atv e comandarlo tramite radiocomando della mia auto rc.Quale sistema di controllo posso acquistare ?
    Grazie.

    1. Ciao Roberto,
      non so cosa sia un ATV ma di certo un motore per tergicristallo da solo non è controllabile da un radiocomando RC in quanto questo tipo di radiocomandi presuppone un servo come interfaccia.
      A meno di non realizzare tu l’elettronica che interfaccia il motore alla ricevente Rc aggiungendovi un metodo di feedback da parte del motore, ad esempio un encore o un potenziometro meccanicamente connessi all’albero del motore dubito che quello che tu voglia ottenere sia semplice

    • roberto il 7 Gennaio 2015 alle 22:07
    • Rispondi

    CIao Mauro
    ti ringrazio per la risposta e mi scuso ma non mi sono spiegato molto bene,pensavo di usare un telaio di un quadriciclo a motore per bambini e radiocomandarlo usando la ricevente della mia auto rc.Il problema che ho riscontrato è nello sterzo, i comuni servocomandi non hanno abbastanza forza.Ho pensato di usare un motoriduttore affiancato ad una scheda per controllo motori .Se collego il motore a questo sistema di controllo e lo alimento con una batteria a 12 v 6 A pensi possa andare bene questo prodotto?

    Il Pololu Simple Motor Controller 18v7 è una soluzione semplice ed immediata per il controllo di comunissimi motori DC. La Pololu mette a disposizione un software gratuito, il “Simple Motor Control Center”, che permette una connessione rapida della scheda per il controllo dei motori tramite connessione USB.

    Questa scheda supporta 4 differenti interfacce di comunicazione:
    •connessione USB, che permette di stabilire una connessione diretta con il PC,
    •connessione seriale TTL, che permette di connettere la scheda con sistemi preesistenti,
    •connessione analogica, per poter usare la scheda con potenziometri o joystick resistivi,
    •connessione tramite radio comando (RC), per riuscire ad utilizzare la scheda come se fosse un ESC (electronic speed control).

    Questa scheda per il controllo dei motori è stata progettata per operare con tensioni nel range 5.5 – 30V ed è in grado di fornire una corrente continua fino a 7A (con picchi >30A) senza surriscaldarsi.

    .
    Specifiche
    •Tensione (MAX): 30V
    •Tensione (consigliata): 24V
    •Corrente (max): 7A
    •Protezione su inversione di polarità: NON presente
    •Frequenza (MAX) del PWM: 21.77kHz
    •Dimensione: 53 x 28 mm

    GRAZIE

    1. Ciao Roberto,
      questa scheda sembra molto interessante ed adatta al tuo scopo.
      Purtroppo non avendola mai testata ne so quanto te in merito all’effettiva validità ai fini del tuo progetto.

    • nello il 28 Gennaio 2015 alle 11:28
    • Rispondi

    Ciao Mauro,
    sono uno studente e quest’anno devo affrontare l’esame di maturità. Sto preparando un progetto appunto e ho scelto di realizzare una casa domotica. Sto utilizzando arduino uno e un servo motore per fare l’apertura di un cancello. Ho un problema però. Dopo aver raggiunto l’apertura di 140 gradi il servo motore subito si richiude. Vorrei fare un ritardo per evitare questo ,ma non sono molto bravo a realizzarlo. Gradirei una mano se è possibile. Un’altra cosa vorrei anche aprire il cancello con un pulsante, come posso fare? Grazie mille per l’attenzione. Attendo ansiosamente una tua risposta.☺

    1. Ciao Nello,
      nel sito trovi tanti articoli che puoi leggere per capire come si legge un pulsante e come si ritarda la chiusura del cancello, ti consiglio di leggerli.
      In particolare il ritardo con arduino si realizza con semplice delay();

    • nello il 30 Gennaio 2015 alle 22:19
    • Rispondi

    Grazie Mauro darò un’occhiata☺ però il problema con il servomotore è che se aumento il delay ci mette più tempo per aprirsi il cancello , e fin qua va bene. Però quando arriva all’apertura totale si richiude di colpo. Posso usare una condizione per evitare questo? Ceh voglio che arrivata all’apertura che mi serve aspetti un paio di secondi prima di chiudersi.

    1. Ciao Nello, metti un delay dopo l’apertura del cancello e non sul servo.

    • Antonio il 25 Febbraio 2015 alle 23:30
    • Rispondi

    Ciao Mauro penso che solo tu mi puoi dare una mano, in poche parole ho collegato il mio servo ad arduino solo che sto avendo pochi problema ne ho provati 3 finora ma solo 1 funziona ma non è abbastanza forte per il mio progetto:

    Il primo servo che ho provato è stato questo:

    Modulation: Analog
    Torque: 4.8V: 41.7 oz-in (3.00 kg-cm)
    6.0V: 50.0 oz-in (3.60 kg-cm)
    Speed: 4.8V: 0.19 sec/60°
    6.0V: 0.16 sec/60°

    Il secondo che ho provato è un micro servo da 1,6kg e 4,8v e funziona tutto bene.

    poi ho provato questo:
    Informazioni base:
    Modulazione: analogico
    Coppia: 4.8v 3,20kg-cm
    Velocità: 4.8v 0,18 sec/ 60°
    Dimensioni:
    Altezza: 35mm
    Larghezza: 20mm
    Lunghezza: 40mm
    Ingranaggi in plastica

    Ma il problema che mi dà è che vibra di continuo sembra impazzito.

    Ultima cosa il problema si presenza non con il tuo codice ma quando ci collego lo schermo e un piccolo tasteranno per far muovere il servo con un codice, mi saprei dare un consiglio su come far funzionare questi benedetti servi?

    Grazie e ciao.

      • Antonio il 26 Febbraio 2015 alle 03:04
      • Rispondi

      Un piccolo aggiornamento sono riuscito a far muovere il mio servo( il sono i gradi impostati nel codice come li ho mossi si è mosso) solo che ora il problema che mi dà è il seguente se imposto la posizione iniziale a 30° e la posizione finale a 170° funziona se imposto invece 0° come posizione iniziale e 170° la finale mi arriva a 170° ma poi non torna indietro dopo aver dato il comando dovrebbe rimanere nella posizione finale per 5 secondi e dopo tornare alla posizione iniziale ma se imposto 0/10/15° il servo non torna in posizione mi potresti dare qualche consiglio.

      Grazie e buona giornata

      1. Ciao Antonio,
        il problema potrebbe essere meccanico, di alimentazione o di sketch. Se usi l’esempio di servo controllato da potenziometro che trovi nell’ide il problema si presenta lo stesso?

    1. Ciao Antonio,
      innanzitutto evita di incollare la tua casella di email nei commenti, io la vedo già dal campo apposito che compili, rischi di trovarti ricco di spam con i bot che ogni giorno scansionano il mio blog alla ricerca di email da intasare.
      Ogni servo è a se stante per comportamento meccanico ed elettronico e va studiato caso per caso.
      In generale i maggiori problemi sorgono con l’alimentazione, alcuni servo sono molto onerosi dal punto di vista della corrente ed arduino non è in grado di erogarla, per cui ti consiglio come primo approccio di alimentare il servo con una sorgente a 6v esterna, puoi leggere come fare su uno dei miei articoli dedicati ai servo con alimentazione esterna.

        • Antonio il 26 Febbraio 2015 alle 12:36
        • Rispondi

        Mauro grazi della risposta, già alimento il servo con una corrente esterna, uso un trasformatore da 5v dal momento che il servo può andare dai 4,8 ai 6v mi sono trovato questo da 5v e sto usando questo. Comunque il problema è abbastanza strano infatti il servo sembra come se non riuscisse a mantenere bene la posizione iniziale, ho fatto 2 video per farti vedere il problema:
        Non so se li posso mettere in caso non possa mi scuso, e ti chiedo di rimuoverli:

        In questo primo video si vede il funzionamento del servo e il problema che dà in posizione 0 (0=30°), ovviamente il servo è alimentato a 5v e c’è il gnd in comunque con arduino cioè il gnd del trasformatore è collegato anche al gnd di arduino.

        http://youtu.be/YCvwfxlqKpY

        Mentre in questo secondo video ho alimentato il servo a 6v su tuo consiglio ma come potrai vedere la vibrazione aumenta in posizione 0
        http://youtu.be/an9YWFl-XDE

        Che mi consigli di fare per risolvere questo inconveniente, io avevo anche pensato di mettere un relè che si attivasse con l’apertura della porta e si disattivasse con la chiusura così da non tenere il servo alimentato e da evitare quel brutto rumore ma mi sembra una soluzione un po’ brutale, vorrei più capire il problema di questo tremolio o rumore da dove proviene per cercare di risolverlo.

        Grazie ancora per il tuo aiuto.

          • Antonio il 26 Febbraio 2015 alle 12:39
          • Rispondi

          Ho dimenticato di scrivere una cosa oltre a questo servo ho provato anche un micro servo della hk e non mi da nessun problema funziona alla grande senza neanche un tremolio o una vibrazione è perfetto ma purtroppo è troppo debole per il mio progetto.

          1. Ciao Antonio,
            vedi risposta precedente.

        1. Ciao Antonio,
          si i link a youtube puoi inserirli in quanto i video non i rimuoverai mai, non sono permessi i link a risorse che poi vengono rimosse tipo aste perchè poi gli utenti che dopo mesi vedono il link e non funziona più, non per colpa mia, mi chiedono dove possono trovare lo stesso articolo ed io non ne ho idea.

          Detto questo alcuni servo possono avere dei problemi agli estermi e 0° lo è, ma nel precedente messaggio mi hai detto che questa “vibrazione” la verificavi anche a 10° ed a 15° e sembrava essere un problema di alimentazione.
          A questo punto potrebbe essere il controller del servo o una differente codifica tra arduino e servo.

            • Antonio il 26 Febbraio 2015 alle 20:17

            Si il problema si verifica fino a 0/5/10/15 da 20 in poi sembra andare, ho provato a cambiare codifica inserendo nel mio codice al posto di “servo.write” la dicitura servo.writeMicroseconds con un valore tra 1080 a 1920, ma anche in questo caso la cosa non è cambiata, c’è un’altro modo per cambiare la codifica?

            Invece come ho scritto anche prima tutto questo casino non me lo fa con i micro servi sono perfetti ma sono troppo deboli per i miei progetti.

          1. Ciao Antonio,
            sembra proprio un problema di meccanica più che di elettronica o sketch.
            Prova con servo di qualità modellistica, in alcuni miei tutorial puoi vedere che tipo uso e non ho riscontrato problemi con quelli, mentre con altri anche io ho avuto delle difficoltà.

    • maurizio il 20 Aprile 2015 alle 21:23
    • Rispondi

    lascio quì un “grazie” per un po’ di tutorial che mi sono appena finito di leggere

    ps. ti hanno leggermente copiato 🙂
    http://www…..it/arduino/comandare-servomotore-arduino/

    1. Ciao Maurizio,
      non penso fosse intenzione di nessuno copiare.
      Gli appassionati spesso ripetono gli stessi progetti, sopratutto nei tutorial base è facile trattare argomenti simili.

    • Luca il 26 Maggio 2015 alle 21:44
    • Rispondi

    Buonasera Mauro,
    Vorrei chiederti gentilmente un aiuto. Vorrei realizzare un robot master e slave. Cioè in sostanza il robot master compie dei movimenti guidati dall’uomo e il robot slave li riproduce. In questo video viene mostrato quello che ti dicevo:
    https://www.youtube.com/watch?v=2YwYnAYH6Pk

    Allora il mio problema è: quali motori acquistare per il robot master? (Motori tali da poter essere mossi da me e non comandati da arduino), magari un motore con encoder integrato in modo da poter leggere la posizione istante per istante e poter passare questo valore ai motori montati sul robot slave.
    Vorrei fare in modo da fissare una certa resistenza esercitata dal motore al movimento, è possibile?
    Grazie in anticipo per l’aiuto.

    1. Ciao Luca,
      bel video, grazie.
      Il progetto è interessante e sicuramente la parte più complessa è quella dei sensori montati sul braccio controller.
      Io sarei orientato per l’uso di soli encoder e già questo comporterebbe un circuito complesso per il numero di assi in gioco in quanto, sai, che Arduino uno ha solo due pin di interrupt e quindi un solo encoder controllabile in quadratura.
      Già una Leonardo dispone di 5 interrupt.
      La resistenza, a mio avviso, dovrebbe essere opposta meccanicamente e non dai motori ma da un sistema di ingranaggi opportunamente calibrati.

        • Luca il 29 Maggio 2015 alle 11:10
        • Rispondi

        Grazie mille per la risposta!
        I motori vorrei comunque acquistarli in quanto vorrei realizzare un sistema simile alla sterzata assistita. Quindi tramite encoder o potenziometro riconoscere lo spostamento e azionare il motore così da aiutare il movimento. Pensi si possa fare? Ed eventualmente sarebbe necessario utilizzare un encoder e un motore separatamente o basterebbe un motore con encoder integrato?

        1. Ciao Luca,
          la domanda è interessante ma esula dall’elettronica ed entra nel campo meccanico ed io non sono bravissimo con quello, rischierei di darti una informazione errata. Lascio il commento sul blog in modo che altri appassionati più in gamba di me possano aiutarti.

          Mauro

    • marco il 15 Giugno 2015 alle 11:14
    • Rispondi

    Ciao Mauro, avrei bisogno gentilmente di un aiuto a livello di codice con arduino, sto cercando di pilotare un motore in DC in modo che quest’ultimo giri ad una velocità direttamente proporzionale alla rotazione di un potenziometro. Ti giro il codice che ho caricato sul mio Arduino duemilanove:

    [[ codice rimosso in automatico ]]

    Ora il problema è che quando faccio la prova pratica il motore si che gira in modo proporzionale al potenziometro ma lo fa per brevissimo tempo( dopo circa 3 secondi si ferma e poi riparte quando giro di nuovo il potenziometro e la cosa si ripete).
    Non conoscendo bene Arduino non so se il ciclo loop mi permetta di eseguire le istruzioni al suo interno in maniera continua o se devo inserire un ciclo for per mantenere il motore in rotazione fino a quando non metto al minimo il potenziometro.
    Se mi chiarissi questo concetto, o ancora meglio se mi girassi un codice valido per questa applicazione te ne sarei molto grato.
    Grazie in anticipo e a presto

    1. Ciao Marco,
      come hai letto in fondo ad ogni mio articolo “non è possibile incollare sketch o parti di sketch nei commenti” ti chiedo la cortesia di rispettare le poche regole del blog.
      Non scrivo codice su richiesta a meno dei progetti su commissione che seguono un iter differente sia dal punto di vista dell’ingaggio sia del costo.

      Premesso ciò devo dire che hai scelto il progetto sbagliato per comprendere come risolvere il tuo progetto, trovi nel blog molti altri articoli dedicati ai motori DC in cui la velocità è controllata in molti modi ( pulsanti, potenziometro, fotoresistenze, ecc… ) prova a leggere e comprendere quelli per capire dove il tuo sketch è errato.
      In ogni caso ricorda di utilizzare una motor shield per controllare un motore DC, senza potresti danneggiare arduino o il Pc per eccesso di corrente richiesta e questo potrebbe essere anche causa del tuo problema.

    • luisella il 5 Luglio 2015 alle 16:46
    • Rispondi

    Salve, ho acquistato un servo della turnigy, ma mi e’ arrivato senza
    senza documentazione. Ho pensato che fosse digitale e ho seguito questo sito: collegato filo rosso a 5v arduino uno, nero a gnd e filo segnale a pin 9 ed e’ andato tutto bene. Escursione da 25 a 160 gradi. Dopo un po’ di tempo riprendo il progetto e il servo non va piu’. Io alimento arduino da usb del PC. Ha dei suggerimenti? Grazie

    1. Ciao Luisella,
      innanzitutto i servo che controlli con il PWM non sono digitali ma analogici, per comprendere la differenza tra pin digitale e PWM puoi far riferimento ai miei articoli del corso base.
      In merito al mancato funzionamento potrebbe essere danneggiato il server o insufficiente l’alimentazione da parte del Pc, capita sopratutto se hai cambiato il Pc con cui alimenti arduino.

        • luisella il 6 Luglio 2015 alle 14:14
        • Rispondi

        bhe, in effetti non sto usando lo stesso pc nell’alimentazione di arduino. L’altra volta che funzionava stavo usando un altro pc.
        per quanto riguarda il tipo (analogico o digitale) io non so dire che tipo sia, è questo:
        http://www.hobbyking.com/hobbyking/store/__8760__Turnigy_380MAX_Micro_Servo_Metal_Gear_4_1kg_16sec_17_4g.html

        so che l’avevo collegato sul pin 9 come dicono tutti i siti che ho visto
        quindi potrebbe essere un analogico.
        Appena posso provo a riutilizzare il pc di prima
        grazie dei suggerimenti
        posso anche chiederti di suggerirmi un servo che funziona bene su ebay o amazon, nel caso in cui questo sia bruciato? Mi serve solo che faccia muovere a destra o sinistra il mio overcraft che sto costruendo, quindi non è necessario che abbia una coppia elevata
        grazie ancora
        luisella

        1. Ciao Luisella,
          come servo io uso principalmente quelli che acquisto su robotics-3d.com verificando che siano compatibili arduino e che possiedano la coppia che ti occorre per il tuo progetto.

            • luisella il 6 Luglio 2015 alle 16:51

            ho dato un po’ un sguardo in giro e qualcuno usa un condensatore da 100 micro farad per gli scompensi di tensione, è il caso di usarlo secondo te?
            e poi come faccio a capire se è compatibile con arduino?
            per esempio stavo guardando questi due:
            http://www.robotics-3d.com/component/virtuemart/robotica-domotica/servomotori/df05bb-standard-servo-5kg
            questo mi sembra bello, le specifiche danno anche la corrente di assorbimento pari a 160mA a 4.8 V
            e poi questo:
            http://www.robotics-3d.com/component/virtuemart/dys-servo-38-g
            che però non dà la corrente assorbita
            cosa mi consigleresti, vanno bene da usare con arduino?
            grazie ancora

          1. Ciao Luisella,
            direi che sono entrambi simili.
            Se dovessi sceglierlo per un mio progetto opterei per quello di cui reperisci maggiori informazioni, l’assorbimento è un dato importante.

    • luisella il 6 Luglio 2015 alle 22:14
    • Rispondi

    ora ho usato lo stesso pc e non funziona lo stesso
    ho visto che molti usano il servo towerpro sg90, ha una coppia molto minore di quello che ho comprato io, però leggo sui forum che comunque necessita di 700mA, è posibile ?
    se è così non si può collegare direttamente ai 5V di arduino.
    Se è così sto pensando che se un servo come questo con una coppia pari a poco più di 1 kg*cm necessita i 700mA, allora quello che ho comprato io che ha una coppia di 4,1 kg*cm forse necessita di parecchia corrente, che non posso dare mediante usb del pc e sarebbe per questo che non funziona.
    ma in ogni caso non so perché tempo fa l’ho visto funzionare.

    1. Ciao Luisella,
      alcuni servo richiedono corrente superiore a quella che arduino può erogare.
      Devi alimentare i servo con una alimentazione a 6v esterna, troverai un articolo nel blog su come fare.

        • luisella il 7 Luglio 2015 alle 17:37
        • Rispondi

        ma me ne suggerisce uno che non necessita di corrente esterna, tanto per provare ?
        grazie

        1. Ciao Luisella, puoi provare quelli mostrati in questo articolo: https://www.mauroalfieri.it/elettronica/arduino-servo-e-pulsanti.html sono dei Futaba S148 se non ricordo male.

            • luisella il 8 Luglio 2015 alle 15:43

            grazie, dovrebbero essere il modello futaba FP-S148
            ma non si trova mai la corrente di assorbimento di questi aggeggi, eppure ho visto dai tuoi video che ne colleghi addirittura due direttamente sul 5V di arduino uno e riesci a farli funzionare, quindi la corrente che assorbono è davvero piccola, inferiore a 40mA, che dovrebbe essere il limite sui pin di arduino, giusto ?

          1. Giusto Luisella,
            per brevi periodi ho provato a collegarne anche 4 insieme.

            • luisella il 8 Luglio 2015 alle 15:57

            ho trovato il consumo in questo sito:
            http://www3.towerhobbies.com/cgi-bin/wti0001p?&I=LXH318#tech
            ed è pari a 8mA al minimo a 6V
            quindi effettivamente si può collegare direttamente ai 5V di arduino uno, anche due come nel tuo progetto
            la coppia è circa 2,4 kg*cm e la velocità di risposta 0,28sec per 60 gradi a 4,8 V
            per provare direi che va benissimo
            grazie
            ciao

    • Nicola il 7 Ottobre 2015 alle 00:14
    • Rispondi

    Salve,
    vorrei porLe la seguente domanda riguardo i servo motori:
    è normale che all’accensione di Arduino il servo motore compia una breve rotazione di circa 30° antioraria
    per poi tornare alla posizione iniziale?
    Nel qual caso non le pare potenzialmente “pericoloso” che ad ogni riavvio vi sia questo “scatto” incontrollato del servo motore?

    Grazie. Nicola.

    1. Ciao Nicola,
      il fenomeno che osservi capita con alcuni servo economici la cui elettronica non è delle migliori e non possiede filtri sull’alimentazione o sui segnali spuri.
      Si reputo questo comportamento pericoloso.

    • Nicola il 8 Ottobre 2015 alle 00:54
    • Rispondi

    Salve Mauro,
    la ringrazio per la cortese risposta.
    Il servo in questione è Tower Pro SG 90. Il valore di pochi euro effettivamento lo può catalogare tra i servo motori di tipo economico tanto che è presente in numerosi “Upgraded Learning Kit” per Arduino su internet.

    Il problema di cui sopra, ovvero, il movimento “involontario” del servo all’avvio, si manifesta anche solo collegando i pin Vcc e Gnd: in questo caso il movimento produce uno spostamento di 30 gradi antiorario senza ritornare alla posizione iniziale. Se poi si applica anche il pin del “Segnale” il servo ritorna alla posizione iniziale.

    Ho notato che su internet si parla poco di questa problematica, benchè il modello Tower Pro SG 90 sia tra i più gettonati negli esempi e nei video su You-Tube.

    Possiamo concludere che si tratta di un problema “by desing” e che sui prodotti di qualità non dovrebbe esserci?

    Nicola.

    1. Ciao Nicola,
      conosco quel tipo di servo e ha un po di problemi di stabilità tuttavia un errore di 30° all’avvio potrebbe catalogarsi anche con un difetto del componente in tuo possesso.

    • simone il 22 Novembre 2015 alle 20:25
    • Rispondi

    Ciao Mauro, sono un ragazzo di 18 anni e frequento il 5^ anno di superiori, sto preparando un progetto molto consistente che discuterò in sede di orale agli esami di stato, la parte elettrica e di programmazione é quasi completata a parte qualche aggiunta in seguito, ti scrivo perché non riesco a far funzionare in nessuna maniera un servomotore che svolge una funzione molto importante e non so come fare…a me basterebbe ruotarlo semplicemente quando é verificata una condizione e se non é verificata torna indietro, MA NON VA ti sarei molto grato se mi aiutassi.
    Grazie molte

    1. Ciao Simone,
      ti consiglio di dedicarti innanzitutto alla risoluzione di questo problema singolarmente collegando solo il servo e verificando la condizione ( che non scrivi quale sia )
      Risolto questo provi a costruire qualcosa di più corposo, procedi per gradi

        • simone il 23 Novembre 2015 alle 19:36
        • Rispondi

        Ciao Mauro,grazie di avermi risposto, quello che hai detto a riguardo di collegarlo da solo é già stato fatto prima di scriverti, la posizione dei gradi non mi interessa basta che vada da un estremo all’altro(0,180) ma come ti ho detto non riesco e non capisco il motivo, per quanto riguarda la progressione graduale ne so già abbastanza sia di programmazione che di elettronica ed é quello che mi fa strano io faccio tutto giusto e niente.
        Grazie ancora, spero che mi puoi aiutare

        1. Ciao Simone,
          se hai già provato singolarmente e funziona potrebbe essere un problema di alimentazione insufficiente essendoci altri componenti, immagino perché non lo hai scritto, potresti avere necessità di un alimentatore esterno per far funzionare tutto.
          Senza maggiori informazioni sul progetto e sui componenti non posso aiutarti ulteriormente, posso solo fare congetture ed ipotesi che non servono a nessuno.

    • simone il 24 Novembre 2015 alle 15:48
    • Rispondi

    Ciao mauro mi sono dimenticato di dirti che pur avendo collegato il servo correttamente, lo so visto che in passato funzionava e ho persino verificato sul web, quando scollego e successivamente ricollego il Vcc il computer suona come quando scollego una periferica che sia arduino o quant’altro.
    Non so che problemi possa avere, aspetto una risposta e grazie infinite per l’attenzione.

    1. Ciao Simone,
      questo comportamento di windows è tipico dell’eccessiva richiesta di corrente alla porta USB.

    • simone il 26 Novembre 2015 alle 22:32
    • Rispondi

    Ciao,ho capito,ma avendo solo collegato il servo? Gentilmente mi potresti dire come potrei risolverlo? (sempre che si possa)
    Grazie ancora.

    1. Ciao Simone,
      se lo fa già solo con il solo servo collegato ti consiglio di leggere il tutorial sui servo con alimentazione esterna.
      Se neppure così funziona non mi viene in mente altro per risolvere a meno di non sostituire il servo.

    • simone il 29 Novembre 2015 alle 13:54
    • Rispondi

    Ciao, avevo già provato ma riproverò bene ancora oggi e se non dovesse andare valuterò.
    Grazie mille 🙂

    • simone il 29 Novembre 2015 alle 14:03
    • Rispondi

    Ciao, Arduino va bene anche alimentarlo con il pc quando alimento esternamente i servomotori?

    1. Si Simone,
      come descritto nell’articolo che ti ho consigliato.
      Ti prego di leggere prima di scrivere commenti altrimenti trasformi i commenti in una chat molto molto lenta 🙂

    • simone il 29 Novembre 2015 alle 15:16
    • Rispondi

    Scusa se ti disturbo ancora,ho provato e niente non funziona che servo mi consigli di comprare? Non mi interessa la forza che deve applicare visto che deve fare poco lavoro ma deve essere piccolino, io adesso possengo SG90.

    1. Ciao Simone,
      io uso spesso i servo che acquisto da robotics-3d.com senza difficoltà su arduino.
      Scegli il modello che risponde meglio alle tue esigenze.

    • simone il 2 Dicembre 2015 alle 14:41
    • Rispondi

    Grazie mille di tutto, vedo ancora se é tutto normale nella centralina del servo che possengo e poi provvederò all’acquisto.

    1. Ottimo Simone.

    • Daniele il 17 Gennaio 2016 alle 10:56
    • Rispondi

    Ciao Mauro,
    sono alle prime armi con i servo di Arduino,
    Sto utilizzando un Micro Servo 9g o SG90, quello che vorrei fare è automatizzare per far girare una giostra del Lego pensavo 3 giri avanti e 3 giri indietro.
    Con questo tipo di servo è possibile fare un incrementale di 1080 gradi (360 x 3) ed ovviamente invertire il senso?
    In alternativa potrebbe essere più semplice andare a tempo tot secondi avanti e tot indietro?
    Grazie
    Daniele

    1. Ciao Daniele,
      a memoria mi sembra che il modello di servo che stai utilizzando sia in grado di spostarsi solo di 180°

    • armando il 21 Gennaio 2016 alle 00:39
    • Rispondi

    salve,

    con il Servo HITECH da 11,5Kg 0.15 velocità HT110MG DIGITALE

    si inizia a muovere con pos = 30

    e finisce quando pos = 150

    e si muove più o meno di 120.

    levando corrente al servo e girandole con le mani ci sono 30 gradi iniziali INUTILIZZATI.

    c’e’ un modo per capire se si possono recuperare ?

    1. Ciao Armando,
      i servo digitali necessitano di un controllo differente rispetto a quelli analogici.
      Devi verificare le caratteristiche del tipo di controllo necessario e scrivere o trovare una libreria adatta ai servo digitali.

    • Francesco il 15 Febbraio 2016 alle 13:14
    • Rispondi

    Salve, premetto che non sono un esperto in elettronica e tanto meno di programmazione ma di fotografia e video. Ho acquistato una Go pro per riprese in aggiunta alla reflex e per tenerla sulla prolunga in alto. Ho visto su Youtube un sistema che serve ad evitare bruschi movimenti della microcamera con due servi + Pro mini + GY521….li ho acquistati on line e sono riuscito nei collegamenti a farli, ho scaricato Arduino e adesso non so implemetare il programma. Le chiedo se c’è un tabulato semplice da copiare per il progetto.

    1. Ciao Francesco,
      purtroppo di semplice con gli accelelrometri ed i giroscopi non conosco nulla.
      Prova a chiedere all’autore del video che progetto ha seguito e se ti può dare lo sketch.

    • Nicola il 4 Maggio 2016 alle 22:55
    • Rispondi

    Ciao Mauro ti ringrazio per tutti i tutorial che metti a disposizione avrei bisogno di alcuni chiarimenti. Mi chiamo Nicola e sto realizzando un progetto scolastico con arduino, un plastico di un impianto di irrigazione “pivot”(non so se hai presente perchè non sono molto conosciuti). Ho utilizzato due servomotori 180 gradi ma avendo bisogno di un movimento continuo delle ruote li ho modificati togliendo il fermo all’interno e posizionando il potenziometro al centro. i due servomotori sono controllati tramite due pulsanti che determinano l’avanzamento della macchina in senso orario e antiorario e tramite due coppie di fotocellule posti in un angolo del terreno che invertono i motori quando la macchina le interrompe. Dopo varie prove ho scritto questo programma e funziona tutto correttamente(i motori vengono invertiti dai pulsanti e dalle fotocellule):

    [[ codice rimosso in automatico ]]

    Ho bisogno del tuo aiuto perchè non saprei come risolvere il problema che nel momento in cui io carico il programma i motori siano fermi e si muovano solo quando io premo “puls” o “puls2” e che un terzo pulsante(puls3) blocchi l avanzamento dei motori nella posizione in cui sono, ogni qual volta venga premuto.
    Grazie infinite per l’aiuto, purtroppo il tempo che ho a disposizione è poco e i professori non sembrano molto collaborativi nei nostri confronti, quindi mi affido a te:)

    1. Ciao Nicola,
      in primo luogo ti chiedo di rispettare le regole del blog, semplici: “non è consentito incollare codice nei commenti” le trovi scritte in fondo ad ogni articolo.
      In secondo luogo, i professori probabilmente reputano debba essere tu a risolvere problemi del progetto e non loro, ed io sono daccordo.
      Posso suggerirti di ragionare sul problema:

      1. motori fermi fino alla pressione di un pulsante: lavora sul setup mettendolo in while fino alla pressione di un pulsante, trovi numerosi esempi sul web e nel blog;
      2. pulsante 3 blocca motori: ragiona in modo inverso; fino a che non premo il pulsante tutto funziona, all’atto della pressione tutto si ferma così com’è, magari valuti la ri-pressione per riprendere il movimento.

        • Nicola il 6 Maggio 2016 alle 17:15
        • Rispondi

        Scusami non ero a conoscenza di questa regola.
        Comunque grazie mille per l’aiuto, non chiedo che i professori risolvano i problemi ma sicuramente potrebbero dare delle dritte come hai fatto tu! Almeno far vedere che sono presenti

    • Vincenzo il 31 Maggio 2016 alle 17:53
    • Rispondi

    Ciao Mauro sono abbastanza ignorante in materia e quindi avrei bisongo del tuo aiuto. Con dei miei amici ho avviato un progetto in cui un servo controllato da arduino funge da blocco di sicurezza. Mi spiego meglio, l’estremità del servo non svolgerà più la sua funzione di mobilità, cioè non dovrà muovere nulla, ma dovrà bloccare un perno inserendosi in un’ apposita fessura ruotando. Ti volevo chiedere se questo era possibile da programmare o è un impresa impossibile. Spero di essere stato chiaro e grazie in anticipo per la tua pazienza.
    Cordiali Saluti.

    1. Ciao Vincenzo,
      spero di aver inteso bene la richiesta: vuoi muovere un servomotore?
      Se questo è corretto si è possibile e questo articolo dovrebbe chiarirti come fare.

        • Vincenzo il 31 Maggio 2016 alle 22:45
        • Rispondi

        No le spiego meglio io vorrei utilizzare l’aletta del servo motore come sistema di bloccaggio di un piccolo cilindrino tagliato in modo da far entrare l’aletta e bloccarlo. volevo sapere se era possibile usarlo anche in questo modo o se era una perdita di tempo. Grazie mille per la risposta e se vuoi ti posso inviare in provato uno schizzo di quello che mi serve.

        1. Ciao Vincenzo,
          il servo dal punto di vista elettronico deve solo ruotare di un determinato grado? se si, puoi farlo !!

    • Stefano Carta il 9 Novembre 2016 alle 17:55
    • Rispondi

    Salve Mauro , mi serve un aiuto vorrei utilizzare arduino uno per un mio progetto il problema è che non lo conosco per niente 🙁 io ho bisogno d’attivare 5 servi tramite telecomando a 4ch wireless.in poche parole con la pressione del tasto del telecomando si attiva il circuito dove partono due servi contemporaneamente dopo tot tempo si attivano altri due servi sempre dopo tot tempo si attiva l’ultimo servo e poco dopo parte il motore passo passo.Dopo per esempio 10sec si ferma il motore e si riattivano i servi al contrario e si ferma tutto.La scheda arduino uno secondo te va bene? per i servi che partono insieme possono condividere lo stesso pin?Ho recuperato il programma devo anche importare le librerie?

    1. Ciao Stefano,
      ti consiglio la lettura del mio corso on-line arduino gratuito per formarti almeno all’inizio ed a seguire i miei tutorial sui servo, input digitali e motori passo passo.
      L’arduino o genuino uno R3 va bene sia per i servo sia per il passo-passo, sconsiglio di collegare più servo in parallelo sullo stesso pin per evitare instabilità.
      Avendo 6 PWM da usare e soli 5 servo usa quelli.

        • Stefano carta il 10 Novembre 2016 alle 21:39
        • Rispondi

        Ciao Mauro , sto leggendo i tuoi tutorial e sto iniziando a capirci qualche cosa 🙂 per il momento solo teoria a breve mi arrivera’ un kit starter ed iniziero’ a sperimentare la teoria con la pratica. ti tengo aggiornato. Grazie

    • Costantino il 17 Novembre 2016 alle 12:36
    • Rispondi

    Ciao,
    ho letto il tuo articolo e ho ripetuto l’esperimento con un servo TGY 8103 DIGITALE.
    Sfortunatamente il servo si comporta in maniera assolutamente strana con movimenti, direi, minimi e logicamente inspiegabili.
    Il servo è di 180 gradi e la tensione di funzionamento è standard, cmq io lo ho collegato anche con un alimentatore esterno con potenza adeguata ma il funzionamento non cambia.
    Avresti qualche idea di come posso risolvere??

    Grazie
    Costantino

    1. Ciao Costantino,
      il servo che utilizzo io è un servo analogico; i servo digitali devi verificare che accettino il medesimo sistema di controllo in PWM, potrebbe essere la causa di un controllo non corretto.

        • Costantino il 17 Novembre 2016 alle 17:36
        • Rispondi

        Grazie Mauro,
        ora proverò con un servo analogico per vedere come e se funziona.
        Ormai quasi tutti i servo sono digitali e dovrò trovare una maniera per farli andare con o senza arduino 🙂
        Grazie, cmq, per la celerità della tua risposta, grazie ancora !

        • Costantino il 20 Novembre 2016 alle 12:41
        • Rispondi

        Ciao Mauro,
        ho utilizzato con servo Hitec HS-60588 e, pare, che funziona abbastanza bene (fine corsa ok inizio corsa si sente il rumore del motorino che spinge per un attimo).
        Ora cerco di capire come posso pilotare un servo digitale utilizzando i comandi della libreria SERVO altrimenti dovrò studiare e scrivere un proprio algoritmo PWM .

        Buona domenica !

        1. Ciao Costantino,
          non penso la libreria Servo riesca a controllare servo digitali, hai già verificato che il tuo servo digitale supporti un controllo PWM con la frequenza utilizzata da arduino/genuino

    • salvatore il 7 Dicembre 2016 alle 17:01
    • Rispondi

    Ciao Mauro ,prima della consueta domanda un piccolo preambolo.E’ da pochissimi gg che interagisco con arduino,girovagando nel web per varie info sull’acquisire un minimo di praticità,mi ritrovo sempre in questo sito a leggere i tuoi interessanti articoli che per noi neofiti del campo sono una salvezza.Per questo, volevo farti i miei complimenti per il sito e tutta la passione e impegno che metti a disposizione di tutti gratuitamente.Ora,veniamo al dunque,ti volevo chiedere una configurazione ideale per muovere un servo o un motore passo passo con annesso sensore in modo di adeguarsi alla superficie che incontra .Mi spiego meglio con un esempio,immagina una penna che scriva sopra una mezza sfera con uno spostamento dal centro verso destra o sinistra,quindi,-90°e +90°dal punto 0.Il sensore dovrebbe leggere sempre la distanza e adeguarsi al piano per permettere alla penna di scrivere?Quale sensore usare per la massima precisione in abbinamento con un servo 180°?

    1. Ciao Salvatore,
      ciò che vuoi realizzare è interessante, per scegliere il sensore ti consiglio di valutare un sensore ottico se non hai problemi di riflessione o deviazione dovuti a superfici riflettenti.
      Per la precisione ci sono di tanti tipi e dipende molto dalle distanze e range in cui vuoi operare. Io ho provato con buona soddisfazione quelli della sharp su distanze tra i 4cm e i 10cm sono abbastanza affidabili.
      Trovi nel blog tanti articoli di documentazione, test e sketch.

    • Manolo il 21 Dicembre 2016 alle 14:25
    • Rispondi

    Buongiorno, vorrei chiederti Mauro un consiglio sulla fattibilità di un mio prossimo progetto.
    Vorrei realizzare un semplice circuito con 24 Out per i servo, 7 In per i pulsanti, 6 Out per i leds: in questo caso mi servirei di una Arduino Mega 2560 R3, alimentandola separatamente dalla componentistica aggiuntiva alla quale provvederò collegando dei battery packs dedicati.
    Tenendo conto che verranno azionate max 4/5 Out contemporaneamente, credo non dovrei incappare in problemi di assorbimento max o quant’altro.
    Fammi sapere cosa ne pensi, in particolare per la scelta della scheda Arduino.

    Un’ultimo suggerimento a proposito dei Servo: necessito di mini Servo con una discreta potenza (5/8Kg-cm) e velocità di attuazione, quindi non caratteristiche standard. Sapresti orientarmi su alcune marche e modelli? Digitali o analogici?

    Grazie

    1. Ciao Manolo,
      per la scelta della scheda hai consultato la pagina di specifiche arduino/genuino relativa alla MEGA (https://www.arduino.cc/en/Main/ArduinoBoardMega2560) ?
      il sito arduino.cc, a mio avviso, è il punto di partenza per qualsiasi progetto con le schede arduino.
      Gli output PWM sono solo 15 ma puoi usare una libreria di PWM software, ne ho recensite e provate alcune nel blog.

      Se alimenti i servo in modo adeguato non vedo difficoltà.

      Sul tipo io ti consiglierei un servo ad ingranaggi metallici, analogico va bene; consulta il catalogo robotics-3d.com

    • Manolo il 22 Dicembre 2016 alle 14:20
    • Rispondi

    Ciao Mauro,
    non ho ben chiaro perchè mi avverti a riguardo delle Out PWM….. forse perchè è il solo modo che ho per modulare la velocità rotativa?
    Quindi è possibile collegare servo analogici su Out digitali senza PWM, a patto di non voler variare la rotazione e di avere un movimento sempre di massima intensità, senza danneggiare i servo, correggimi se sbaglio.

    Grazie

    1. Ciao Manolo,
      i servo analogici sono controllabili in PWM per cui sarebbe opportuno connetterli a tali uscite per sfruttare la modulazione nativa di tali pin, in alternativa devi usare la libreria servo.h o la softPwm ( di cui ti scrivevo ) per estendere le funzionalità Pwm ai pin digitali classici, si tratta comunque di un risultato generato via software che con 24 servo può darti delle imprecisioni o controlli non coerenti.
      Se vuoi comprendere meglio il funzionamento dei servo ti consiglio di leggere anche altri miei articoli in merito.

        • manolo il 23 Dicembre 2016 alle 14:56
        • Rispondi

        Ciao Mauro,
        una curiosità: se collegassi i servo analogici che mi avanzano per completare il progetto ai pin digitali classici della Mega come si comporterebbero a dispetto degli altri collegati ai PWM?

        Ti premetto che ad oggi non ho ancora nulla tra le mani ma sto studiando tutto ciò che hai gentilmente messo a nostra disposizione online, e non solo, ma a volte arranco nel capire….. a breve ordinerò l’occorrente.

        Grazie!

        1. Ciao Manolo,
          come ti ho scritto nel commento precedente.
          In ogni caso dipende molto da ciò che sceglierai e ti conviene testare sul campo.

          • manolo il 23 Dicembre 2016 alle 17:15
          • Rispondi

          Preciso: ho visto che PWM è la modalità migliore e non è pertanto possibile pilotare i servo con delle semplici out digitali senza le apposite librerie.

          Detto ciò Mauro, come potrei aggiungere più servo al progetto assicurando loro un corretto funzionamento in PWM esente da tremolii e interferenze? Specifico che al massimo funzioneranno solo 4 servo (su 20) per comando.

          Grazie

            • manolo il 23 Dicembre 2016 alle 17:18

            Scusami non ho visto la risposta.
            Grazie mille.

            A presto

          1. Ciao Manolo,
            io ho testato e descritto un controller della pololu da 8 servo via Seriale.
            Mi sembra esistano anche versioni da 16 e 24 devi verificare sul sito pololu o da un loro rivenditore.

    • manolo il 28 Dicembre 2016 alle 17:06
    • Rispondi

    Ciao Mauro, grazie per l’interessamento.
    Ho visto il sito ed effettivamente esistono versioni interessanti con 24 servo ma ho deciso di rimanere su Arduino Mega che mi pare più completa anche per altri progetti futuri, essendo non propriamente dedicata solo ai servo.

    A presto e buone feste!

    1. Ciao Manolo, rispetto la scelta.

    • Manolo il 4 Gennaio 2017 alle 17:25
    • Rispondi

    Ciao Mauro, un piccolo quesito a proposito di un circuito molto semplice che puoi vedere cliccando questo link: [[ link rimosso in automatico ]]

    Mi sorgono dei dubbi a riguardo di alcuni componenti che mi sembrano “facoltativi” per la finalità del circuito, ed in particolare l’ LM7805 e i TR Q1 e Q2. Dal momento che parliamo di Arduino e quindi di una scheda già di per se molto stabile, le rispettive uscite che pilotano dei semplici diodi led e un paio di servo non dovrebbero essere già pronte e precise per questo semplice utilizzo?
    Probabilmente il regolatore di tensione è indicato a causa della spartizione della Vin tra Arduino e i servo….. ma è davvero indispensabile? Il collegamento tra i led e i due TR non mi è chiarissimo.

    Grazie, come sempre.

    1. Ciao Manolo,
      come indicato nelle regole in fondo ad ogni pagina sono da evitare i link a siti esterni nei commenti.
      In merito alla tua richiesta il 7805 serve se non usi un arduino uno ma un modello differente o il classico standalone, in circuiti in cui hai l’alimentazione esterna di componenti potrebbe servire se non disponi dei 5v.
      Anche per i led è consigliabile l’uso di transistor se assorbono più di quanto arduino possa erogare.

        • Manolo il 5 Gennaio 2017 alle 17:10
        • Rispondi

        Scusami per il link, dimenticavo.
        Leggendo infatti il tuo articolo a proposito del collegamento dei servo ad Arduino non ci sono componenti aggiuntivi.
        Quindi alimentando la circuiteria esterna con batterie dedicate non ci sono problemi di sovraccarico per Arduino, la cui corrente max di assorbimento è di 200mA.

        Trovo strano Mauro che non ci sia un circuito di protezione per evitare danneggiamenti, almeno per quanto io sappia fin’ora.

        1. Ciao Manolo,
          dipende da quanti servo colleghi e per quanto tempo sono in funzione.

            • Manolo il 8 Gennaio 2017 alle 17:41

            Chiaro Mauro, grazie.

    • Nicolò il 24 Gennaio 2017 alle 22:30
    • Rispondi

    Ciao Mauro, complimenti per i tuoi corsi, sono un ottimo spunto per molti progetti. Sono uno studente presso un istituto tecnico, e stiamo lavorando ad un progetto in collaborazione con l’ università di Padova, ho un problema con Arduino, dovrei comandare due servo motori (asse x e y) attraverso un accelerometro, in modo tale da mettere in “bolla” una bilancietta, il problema è che non riesco a far variare i due servo cosicché ad un certo angolo, essi (posti l’ uno sopra l’altro) si muovino di conseguenza, ma con un angolo opposto, il problema sta’ nel momento in cui sposto l’accelerometro sull’ asse delle y, mi si dovrebbe muovere pure il servo sull asse delle x, avresti uno sketch o un consiglio? Dovrei modificare la configurazione e la posizione dei servo?
    Grazie in anticipo.

    1. Ciao Nicolò, perdonami ma non ho compreso il problema.

        • Nicolò il 26 Gennaio 2017 alle 14:38
        • Rispondi

        Dovremmo creare una piattaforma autostabilizzante, regolata da un accelerometro MPU-6050, riesco a rilevare correttamente gli angoli di inclinazione del sensore, ma non riesco a comunicare ai due servomotori come reagire in base all’ angolo che l’accelerometro restituisce.
        Questa è la disposizione provvisoria che abbiamo deciso di impiegare (https://www.google.it/imgres?imgurl=https%3A%2F%2Fi.ytimg.com%2Fvi%2FgtFuNVDuGfA%2Fmaxresdefault.jpg&imgrefurl=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DgtFuNVDuGfA&docid=Rob1djO-LhevWM&tbnid=_yu5EtPdJ6uzTM%3A&vet=1&w=1280&h=720&client=ms-android-huawei&bih=580&biw=360&q=servo%20arduino%20stabilizer&ved=0ahUKEwj-ye6I99_RAhUCQSYKHcrMBrcQMwgcKAEwAQ&iact=mrc&uact=8).

        1. Ciao Nicolò,
          i comandi per inviare un angolo ad un servo sono decritti in questo articolo: servo.write( angolo )
          Se il tuo problema è come calcolare il valore dell’angolo da passare al servo dipende dalla logica con cui imposti lo sketch e come calcoli il valore precedete di posizione se in modo assoluto o relativo.
          Articoli come questo spiegano come inviare comandi ad un servo.

    • Peo il 2 Febbraio 2017 alle 16:50
    • Rispondi

    Ciao Mauro…Vorrei chiederti un consiglio riguardano le schede pololu mini maestro 24…Secondo te é possibile utilizzare 2 di queste schede per realizzare un radio comando e una ricevente…Ai connettori di una vorrei collegare dei potenziometri e all’altra i servomotori…Ed utilizzare le porte usb solo per la programmazione…I pin Rx e tx utilizzarli per collegare le antenne wifi e cosi avere una continua comunicazzione remota tra le 2. Se credi sia fattibile potresti gentilmente darmi 2 dritte sto impazzendo già da un po 🙂 Grazie per l’attenzione. Peo

    1. Ciao Peo,
      non le ho mai provate per cui non sono certo che sia possibile. Leggendo la scheda tecnica sul sito del produttore mi sembrano schede di output e non di input per cui non comprendo come possa tu collegarvi dei potenziometri.
      Inoltre l’integrato di cui sono dotate mi sembra non sia Atmel, potrei sbagliare, per cui come vorresti programmarle ? in che linguaggio? per far cosa?
      Non comprendo a cosa possano servirti 24 servo controllati da 24 potenziometri, se mi dai qualche info in più sul tuo progetto posso provare a consigliarti qualche mio articolo da leggere.
      Infine il WiFi è certamente la soluzione più complessa e meno performante per un radiocomando.

    • Peo il 2 Febbraio 2017 alle 19:06
    • Rispondi

    Grazie mille per la risp immediata…ho gia sperimentato il controllare la posizione dei servi tramite i potenziometri ed effettivamente funziona, ma sempre assegnando pin della stessa scheda nn sono riuscito a farle comunicare tramite pc via usb percio nn ho ancora acquistato nessun modulo wifi o altro…Cosa mi consigli se nn wifi e come soprattutto…?Il linguggio nello specifico nn saprei…Semplicemente ho copiato righe di testo che mi permettono di controllare il servo e che copiasse il movimeto e la velocità in tempo reale del potenziometro ed è quello che vorrei ottenere…Credi di potermi aiutare.?..So che usa le librerie Arduino ed è compatibile su parecchi aspetti ma premetto che sono meccanico e per me tutto questo è un mondo nuovo…:) grazie ancora gentilissimo

    1. Ciao Peo,
      come ti ho scritto non ho mai provato questa scheda e non mi sento di entrare nei dettagli delle righe che hai usato, se si tratta di codice arduino non dovreti avere problemi ad usare gli sketch che spiego e pubblico sul blog per capire come controllare il tutto via seriale.
      In merito alla comunicazione puoi leggere dei miei articoli sui servo controllati via XBee o Bluetooth anche da cellulare e scegliere poi la tecnologia che reputi più adatta alla tua esigenza.

    • Peo il 3 Febbraio 2017 alle 13:25
    • Rispondi

    Ok ti ringrazio della tua disponibilità provero ad eseguire qualche esperimento e vi aggiornerò sui fatti…Magari potrà essere utile a qualcuno un giorno…Ciao a tutti… Peo

    • Marco il 27 Febbraio 2017 alle 22:58
    • Rispondi

    ciao mauro, io ho dei motori servo, usando il tuo programma essi non girano di 180 gradi, ma più di 720, potresti dirmi il perchè ? grazie

    1. Ciao Marco,
      probabilmente sono servo a 360°, anche detti a rotazione continua.
      Devi controllarli in velocità con il PWM e non in gradi.

        • Marco il 28 Febbraio 2017 alle 12:43
        • Rispondi

        grazie della risposta, quindi sono come motori DC, o c’è modo di controllarli in gradi?

        e con quali comandi si può far andar un servo a 360 dritto continuo?

        1. Ciao Marco,
          dovresti verificare sul datasheet del produttore dei servo, solitamente riporta il sistema di controllo PWM o PPM e tutti i dati di sincronia con cui calcolarti i valori da inviargli

    • Marco il 28 Febbraio 2017 alle 20:18
    • Rispondi

    e con il pmw come va usato il comando giallo?

    1. Ciao Marco,
      non ho capito la domanda.

    • Marco il 1 Marzo 2017 alle 22:01
    • Rispondi

    in effetti la domanda è poco chiara, il servo ha 3 entrate, una per l,alimentazione positiva una negativa e una terza (il cui filo è giallo nel mio motore) , volevo sapere dove va attaccato questo terzo filo nell’ uso del PWM.

    1. Ciao Marco,
      non capivo la domanda in quanto è scritta chiara nell’articolo, anche se guardi solo la figura relativa al collegamento.
      Ti consiglio di leggere anche il testo che spiega molte cose sul PWM e su come controllarlo.

    • Emilio il 4 Aprile 2017 alle 17:43
    • Rispondi

    Ciao,
    volevo farti una domanda. Ho provato copiato lo sketch e collegato il servo come da immagine, il servo non si muove ma fa un ronzio. Potrebbe essere rotto o sbaglio qualcosa?

    grazie

    1. Ciao Emilio,
      prova ad aumentare il delay, potrebbe essere un servo che impiega più tempo per eseguire i comandi.

        • Emilio il 5 Aprile 2017 alle 14:29
        • Rispondi

        Ciao Mauro,
        prima di tutto grazie per la pronta risposta. Purtroppo credo che il servo abbia qualcosa di rotto, perchè ho provato ad aumentare il dalay fino a 1000 ma nulla, solo ronzio. Posso chiederti di consigliarmi una tipologia di servo che risponda velocemente ai comani? Grazie

        1. Ciao Emilio,
          sei sicuro che sia un servo analogico pilotable in PWM e non si tratti di un altro tipo di servo? Ne esistono di differenti tipi e ciascuno prevede modalità di controllo differenti.
          In merito alla tua richiesta dovresti indicarmi cosa intendi, in termini di millisecondi, per velocità di risposta.

            • Emilio il 6 Aprile 2017 alle 14:39

            Ciao Mauro,
            questa è proprio una bellissima domanda! 🙂
            Per via della mia ignoranza (mi sono avvicinato al mondo di arduino e dell’elettronica da pochi giorni), non sapevo neanche dell’esistenza di due tipi di servo. Appena ho possibilità cerco di capire a quale tipologia appartiene il mio servo.
            Il consiglio che ti chiedo è per un progetto che vorrei realizzare, su una specie di braccio meccanico. Per questo mio progetto pensavo di usare 3 servo.

          1. Ciao Emilio,
            gli antropomorfi, bracci meccanici con articolazioni similari a quelle umane, a cinematica parallela mi affascinano molto e ti posso consigliare di cercare dei progetti nel web o sul mio blog che parlano dell’argomento.
            In alcuni progetti ci sono consigliati anche i servo da acquistare ed il codice di controllo da cui puoi partire.

            • Emilio il 7 Aprile 2017 alle 13:01

            Grazie mille Mauro,
            mi metto subito a lavoro per cercare, nel tuo blog, tutto il necessario. Grazie ancora

            • Emilio il 19 Aprile 2017 alle 13:25

            Ciao Mauro,
            non ho capito cosa sia successo, ma ora il servo funziona perfettamente (quello vecchio intendo). Ora il problema è un altro, ad ogni movimento del servo si sente, dal pc, il classico suono della usb che si collega e scollega. Come mai? Forse devo collegare il servo ad una batteria? Grazie ancora

          2. Ciao Emilio,
            si, il suono di disconnessione ti avvisa che il Pc ha disconnesso l’alimentazione sulla USB per non danneggiarla.
            Prova ad alimentare i servo con una alimentazione esterna, trovi nel blog descritto come fare.

    • Giuseppe il 12 Maggio 2017 alle 18:44
    • Rispondi

    Sig. Mauro,
    mi permetto di rivolgermi a Lei dopo non poche esitazioni… la mia inesperienza in questo campo
    è limitata. Seguo da qualche mese le sue lezioni on-line che molto mi aiutano ma (forse a causa della mia età) mi sarà difficile raggiungere il traguardo che vorrei, mi sostiene la mia precedente preparazione nella progettazione di circuiti elettronici con componenti discreti. Con arduino però è tutt’altra cosa.
    Arrivo alla domanda, mi sono imbattuto durante un tentativo di studiare alcuni sketch in queste due righe di programma che non avevo mai visto prima, potrebbe aiutarmi a capire, anche arduino da errore e non riesce a compilare?

    #include <Servo.h>
    #include <Stepper.h>

    In particolare i caratteri dopo “include” e quelli dopo Stepper.h”
    La ringrazio, Giuseppe

    1. Ciao Giuseppe,
      ti riferisci al “< " ed al ">” ? Sono la sintassi per includere una libreria.
      Probabilmente la Stepper.h ti manca nelle librerie, la dovrai installare (leggi i miei tutorial del corso arduino gratuito online ).
      La mia è solo una ipotesi in quanto non mi hai indicato l’errore.

        • Giuseppe il 15 Maggio 2017 alle 11:20
        • Rispondi

        Ciao Mauro, avrei dovuto leggere con più attenzione i tutorial.
        la risposta era sotto i miei occhi ma non riuscivo a vederla.
        Grazie, Giuseppe

        1. Ottimo Giuseppe.

    • Carlo Venerus il 18 Maggio 2017 alle 00:28
    • Rispondi

    Ciao Mauro,
    sto lavorando ad un progettino che coinvolge 4 servo motori da 12kg*cm , 2 comandati da un joystick e 2 in contemporanea da un potenziometro; ho alimentato dall’esterno con una batteria da 7.4 v a 1500mA…il problema è che il segnale sembra non essere sufficentemente potente quando il carico aumenta…ho fatto un test per la potenza con un radio comando e con questo riesco a sollevare tutto mentre passando, con la stessa alimentazione, ai segnali di arduino il sistema riesce a muoversi a malapena…
    Il programmino non presenta problemi, credo che la soluzione sia nella parte fisica ma data la mia poca esperienza non ne sto venendo fuori…cosa potrebbe essere?
    Grazie per l’attenzione, Carlo.

    1. Ciao Carlo,
      non ho capito come hai alimentato i servo. Hai usato la LiPo da 7,4v per alimentare i servo direttamente o passi da arduino?

    • marco il 18 Giugno 2017 alle 11:48
    • Rispondi

    Buongiorno

    scusate e se io volessi far girare solo di 180 gradi il servo e poi’ fermarlo come porei fare ?

    grazie a tutti

    1. Ciao Mauro,
      leggi e comprendi i tutorial ed il mio corso base e ci riuscirai senza difficoltà.

        • marco il 19 Giugno 2017 alle 16:52
        • Rispondi

        grazie credo di esserci riuscito

        [[ codice rimosso in automatico ]]

        1. Ciao Marco,
          sono contento !! Ti chiedo di rispettare le regole del blog e se vuoi condividere codice puoi documentarlo come scritto nella sezione “Collabora al blog” e ti dedicherò un articolo se di interesse collettivo.

    • Davide il 1 Agosto 2017 alle 09:41
    • Rispondi

    Ciao Mauro, vorrei espandere i Pin in entrata analogici, dovrei collegare numerosi servomotori, come posso fare? possiedo una scheda Arduino mega sensor shield 2.0

    1. Ciao Davide,
      forse intendevi i pin PWM ( similitudine di Analogici in uscita ) e non di ingressi.
      La Mega ne dispone già di molti ed altri puoi espanderli con delle shield I2C per PWM.

    • riccardo il 19 Gennaio 2018 alle 15:35
    • Rispondi

    Ciao Mauro,
    Sono appena entrato nel mondo di Arduino e dei servo motori.
    Ho provato a fare e rifare sketch ma non riesco a fare questa cosa: collegato Arduino nano un bottone e un servo, vorrei far arrivare da 0 a 90 gradi e bloccare il servo premendo una sola volta il bottone e farlo tornate da 90 a 0 con un altro “click”.
    Non so più dove sbattere la testa
    Grazie in anticipo.

    1. Ciao Riccardo,
      hai implementato un sistema a “stati” per il bottone in modo da sapere se lo hai premuto per andare da 0 a 90 o viceversa?

    • Aristides da silva il 26 Marzo 2018 alle 05:11
    • Rispondi

    Olá me ajudem a entender aonde eu errei na programação do arduino para controlar um servo motor
    Ao carregar o código apareceu uma mensagem assim ( ocorreu um erro enquanto o sketch era carregado) eu não conseguindo revólver alguém pode mim ajudar?

    1. Hi Aristides,
      firstly I ask you to write in english, or italian, because I don’t understand the language Portuguese.
      What’s the error that you receive from IDE?

    • angelo il 2 Giugno 2018 alle 21:06
    • Rispondi

    salve ho guarda<to su questo sito perche devo chiedere aiuto per un piccolo problema io ho una lavagnetta robotizzata che scrive su un vetro attraverso due motori stepper il problema e un piccolo motore servo g 90 classico che ha montato un piccolo cancellino per cancellare in automatico cio che e stato scritto diciamo che si muove ma credo che vada calibrato per non dare fastidio alla scrittura e anche perche quando deve entrare in funzione si gira da un lato e non sembra fare il suo lavoro e collegato ad una scheda brian shield wi fi ai pin dove dice servo uno e servo due credo che vada calibrato per assumere al momento giusto la posizione richiesta ora pero non so come fare ho tentato manualmente ma credo non serva ho visto molte risposte su codici e stringhe di programma ma mi sembra un po complicato e vorrei sapere se ce un modo per capire come regolarli con facilita per il mio scopo

    1. Ciao Angelo,
      non conosco la lavagna di cui scrivi e non mi azzardo a dare soluzioni.
      Ti consiglierei di controllare nel sito del produttore se esista un manuale con cui eseguire questo tipo di tarature e controlli.
      Inoltre puoi provare a scrivere all’autore del progetto se proprio non ha pubblicato nulla in merito alla taratura.

  5. ciao mauro,
    nel libro dei progetti di arduino dice che bisogna usare un condensatore.
    Serve davvero a qualcosa? ho cercato su internet ma quando ho visto che tu non lo usavi mi è venuto il dubbio.
    Aspetto in un tuo chiarimento

    1. Ciao DD,
      il condensatore è utile e necessario per questo il libro te lo consiglia.
      Io non lo utilizzo perché spesso, chi non ha il kit, non lo ha a disposizione e preferisco che i miei tutorial siano riproducibili da tutti.

    • Daniele il 13 Agosto 2018 alle 09:33
    • Rispondi

    Salve,
    ho creato un braccio robotico con dei servo collegati ad un’alimentazione esterna.
    Il problema è che appena collego l’alimentazione e l’usb di Arduino al pc i vari servi si posizionano automaticamente in una loro posizione (180°) provocando problemi di stabilità del braccio.
    E’ possibile bloccare questo “setup” iniziale??

    Daniele

    1. Ciao Daniele,
      imposta nella setup un valore differente per i servo.
      Se il posizionamento avviene prima di arrivare alla setup puoi avviare l’alimentazione dei servo in un secondo momento.
      Di solito questo fenomeno si verifica se le frequenze di PWM dei servo non sono allineate a quelle di arduino, sei certo di aver utilizzato dei servo gestibili con Arduino ed un Arduino originale?

    • Roberto il 27 Maggio 2019 alle 11:13
    • Rispondi

    Buongiorno Sig. Alfieri,
    la ringrazio per tutti i tutorial che ha scritto dai quali ho potuto prendere preziose informazioni.
    Sto facendo alcune prove con un servo Futaba (recuperato da un modello aereo) ma ho un problema con Arduino Uno (codice qui sotto).
    Per fare uno spostamento di 90° devo scrivere Servo1.write(75) se metto 90 va oltre i 90°, stesso problema per i 180° devo mettere 153.
    Non so se sbaglio qualcosa, non mi sembra.

    La ringrazio per il suo aiuto
    Roberto

    [[ codice rimosso in automatico ]]

    1. Ciao Roberto,
      in primo luogo ti chiedo di rispettare le regole del Blog che trovi in una sezione dedicata del sito ( regolamento ) e di cui ho riportato il link in fondo ad ogni articolo.

      In merito al tuo dubbio dovresti verificare che si tratti di servo analogici e che la frequenza e range PWM siano compatibili con quelli di arduino, trovari certamente tutto nei datasheet sia Arduino sia del servo Futaba.

    • Roberto il 27 Maggio 2019 alle 20:02
    • Rispondi

    Buonasera,
    mi scuso per il codice, non avevo letto e non pensavo potesse disturbare.
    Ho controllato le caratteristiche del servo che come detto è datato.
    Ho trovato pochi dettagli, è analogico e a parte il voltaggio e dati torque forse quello che può essere utile è
    quello sulla velocità:
    6 volts 0.22s/60°
    altri dati non ne ho.
    Se il dato summenzionato non avesse influenza sui gradi nello spostamento penso si debba metter mano alla
    libreria servo.h, corretto ?
    Cosa dovrei cercare di modificare ?
    Grazie e saluti
    Roberto

    1. Ciao Roberto,
      i dati trovati sono davvero pochi.
      Dovresti almeno trovare le caratteristiche del PWM che utilizza in frequenza e periodo per poter modificare qualcosa.

    • Andrea il 19 Luglio 2019 alle 14:42
    • Rispondi

    Buonasera,
    leggo il suo blog ed essendo alle prime armi con Arduino avrei bisogno di alcuni consigli.
    Dovrei pilotare 10 servo motori con Arduino nano. Il carico per i pin di Arduino sarà abbastanza importante, quindi cosa mi consiglia di interporre tra i pin ed i servomotori?
    Grazie e saluti
    Andrea

    1. Ciao Andrea,
      purtroppo senza conoscere il tipo di servomotori che hai scelto, di arduino che intendi utilizzare è complesso darti dei consigli che possano rivelarsi utili.
      Il principale problema che incontrerai riguarda certamente l’alimentazione che ti consiglio di tenere esterna, ossia alimentando i servo in modo indipendente dalla board, trovi un mio tutorial da seguire.

        • Andrea il 22 Luglio 2019 alle 16:38
        • Rispondi

        Buonasera Mauro, grazie per la risposta.
        Sarò più preciso. Userò 10 servo di tipo digitale, tensione di funzionamento 5-6.6V e corrente massima di 1A ciascuno, velocità operativa di 0.13 s/60 ° (5V) . Userò Arduino nano e la libreria Servo, con cui posso gestire fino a 12 servo. Sbaglio?

        Si, avevo intenzione di alimentare esternamente. Ha qualche consiglio riguardo l’alimentatore da usare?

        In più, può essere necessario secondo Lei l’utilizzo di un servo driver?

        Grazie per l’attenzione e la disponibilità.

        1. Ciao Andrea,
          come alimentazione esterna ti consiglio di utilizzarne uno molto stabilizzata, tipo accumulatori, in quanto quelle provenienti da alimentatori di tipo switching creano dei disturbi che potrebbero influenzare il corretto funzionamento del servo.

          In merito al controllo con la libreria Servo e la nano non ricordo il numero di pin pwm presenti su quest’ultima, tuttavia, il numero di servo che desideri utilizzare è importante e la libreria simula il PWM, usanto i timer interni, per cui avrai dei ritardi di eseguzione legati a tale lavoro di calcolo che la scheda deve eseguire.

          Se non dovesse funzionare in modo adeguato con la libreria puoi pensare ad un driver adeguato come quelli prodotti da Adafruit o Pololu.

    • Danilo il 13 Novembre 2019 alle 13:01
    • Rispondi

    Salve Mauro,
    Dovrei pilotare dei servo digitali con pic ma non riesco a trovare nessuna documentazione, avresti qualcosa in merito che posso studiare?
    Grazie in anticipo

    1. Ciao Danilo,
      purtroppo non conosco la programmazione PIC.

    • Piero il 25 Aprile 2020 alle 10:51
    • Rispondi

    Buongiorno Sig. Mauro, complimenti per il suo blog e per la cortesia che ci fa rispondendo alle nostre domande, anche io come molti SONO ALLE PRIME ARMI,ho un arduino starter kit + componenti già in mio possesso e vorrei creare wall-e, in merito vorrei comandare 2 motori per i cingoli e 2 servomotori per braccia (il tutto comandato con il telecomando) ma non trovo ne schemi ne programmi,potrebbe aiutarmi? cosa mi occorre oltre lo starter kit?e come devo collegarli? Grazie infinite
    p.s. a breve cercherò di seguire il Vostro corso online

    1. Ciao Piero,
      un progetto completo come il tuo non penso sia semplice da trovare già con le medesime caratteristiche.
      Ti consiglio di concentrarti sui singoli componenti che vuoi utilizzare, prima fai pratica con i servo, ad esempio, poi con i motori, poi con le trasmissioni IR o di altro tipo, dipende dal telecomando, e man mano procedendo per gradi cerchi di arrivare alla soluzione completa.

    • Michele il 29 Aprile 2020 alle 01:55
    • Rispondi

    ciao Mauro,
    ho realizzato il classico robottino a due ruote con sonda ad ultrasuoni, una motor shield e un servo per orientare la ‘testa’ . Uso un arduino uno.
    Per fare andare dritto il mezzo, ho pensato di aggiungere due encoder alle ruote e i rispettivi sensori a forcella che comando dai famosi pin 2 e 3 sfruttando la libreria TimerOne che sfrutta gli interrupt 0 e 1.

    Ma da quando ho implementato gli encoder, non funziona piu’ il servo, che riprende a funzionare se elimino il codice relativo ai decoder.
    Ovviamente ho pensato che TimerOne fa appunto riferimento al timer uno che se non sbaglio, viene sfruttato anche da Servo.h.
    Ho azzeccato? Ho cercato altre librerie ma non capisco bene come usarle e se sono in conflitto con Servo.h.
    puoi suggerirmi una soluzione? Ho cercato parecchio ma non ho trovato una soluzione chiara al problema.
    grazie

    1. Ciao Michele,
      hai perfettamente ragione, sia la Servo.h sia la TimeOne usano i timer interni di arduino per funzionare.
      Non conosco bene la TimeOne ma probabilmente fa delle modifiche ai TIMER e non consente più alla Servo.h di lavorare correttamente.
      Ho scritto un articolo sui TIMER di arduino uno, sono 3, forse puoi cambiare il pin del servo in modo che usi un TIMER differente da quello usato dalla TimerOne.

    • Giuseppe il 25 Marzo 2022 alle 08:59
    • Rispondi

    …ma ciao!
    ho 2 domande per te:
    1) E’ possibile pilotare i servo passando posizioni frazionarie come ad esempio 35,3 gradi?
    2) Ho letto che esistono dei servo non a rotazioen continua ma che permettono di passare i 360 gradi e si chiamano sail winch. Si pilotano con la stessa libreria o ne hanno una loro?

    1. Ciao Giuseppe,
      provo a rispondere:
      1. tutti i servo che ho provato usano un passo in gradi, ossia si muovono di un grado alla volta, non escludo che esistano servocomandi più performanti in grado di spostarsi anche in frazioni di grado;
      Leggendo nella libreria Servo.h ( quella solitamente utilizzata per il controllo dei servo ) trovi:

      void write(int value); // if value is < 200 its treated as an angle, otherwise as pulse width in microseconds void writeMicroseconds(int value); // Write pulse width in microseconds che comporta la sola possibilità di accettare numeri interi per i due metodi write e writeMicroseconds per cui dovresti utilizzare un’altra libreria.
      il commento presente in corrispondenza del metodo write dovrebbe rispondere anche alla seconda domanda.

    • Dario il 17 Aprile 2023 alle 19:34
    • Rispondi

    Salve, vorrei comandare uno o due servo con Arduino Micro ma non trovo lo sketch da nessuna parte. Sono alle prime armi ed avrei bisogno di aiuto.

    1. Ciao Dario,
      arduino micro non è molto differente dalla UNO, controlla quali pin siano di pipo PWM e modifica lo sketch usando quei pin.

    • Livio Busnelli il 16 Ottobre 2023 alle 14:46
    • Rispondi

    Buongiorno Mauro,
    vorrei un tuo parere sull’utilizzo del metodo attach che nella sua forma più completa è descritto come servo.attach(pin, min, max) dove pin è il numero del pin di Arduino al quale il segnale di controllo per il servo è connesso, min coincide con la larghezza dell’impulso, in microsecondi, corrispondente all’angolo minimo (0 gradi) sul servo e max coincide con la larghezza dell’impulso, in microsecondi, corrispondente all’angolo massimo (180 gradi) . Se i parametri min e max non vengono utilizzati nel metodo attach(), si considerano i loro valori di default, 455 us e 2400 us rispettivamente definiti nel file Servo.h.
    Nella mia prova iniziale il servo è stato comandato nella posizione 90° usando il metodo myservo.writeMicroseconds(1500); il risultato è stato come da aspettativa perchè la posizione pari a 90° è stata raggiunta. Un analogo risultato l’ho ottenuto comandando la posizione 0° tramite il metodo myservo.writeMicroseconds(570); anche in questo caso il servo si è posizionato correttamente. Il test eseguito per raggiungere i 180° invece è fallito perchè l’uso del metodo myservo.writeMicroseconds(2400) ha arrestato il servo ben prima del raggiungimento della posizione desiderata.
    E’ corretto che io debba cambiare i valori di default per min e max quando uso il metodo attach() per far corrispondere questi valori con le posizioni di 0° e 180° del mio motore?

    1. Ciao Livio,
      tutto corretto. Di solito i produttori di servi rilasciano in documentazione i valori da impostare per la corretta rotazione.
      Ti suggerirei di provare prima con myservo.write(X); dove X varia 0,1,2,3..180 e verificare se i valori di posizione raggiunti siano corretti.
      In alternativa, o se volessi usare la writeMicroseconds() ti suggerirei di provare a mettere un valore superiore a 2400 e verificare se supera il punto in cui si è fermato.

      Da un rapido calcolo se il valore 0 è a 570 invece che 455 è probabile che il 180 sia a 2515 ( o almeno a 2500 )

      Fammi sapere se funziona.

  1. […] non lo hai già fatto ti consiglio di leggere i due precedenti articoli scritti su questo argomento Tutoria Arduino e i servo e Tutorial Arduino e i servo II ) prova a pilotare 6 servomotori […]

  2. […] infatti possibile pilotare di base fino a 6 servomotori con un arduino uno, duemilanove, mini e similari, ossia quelli basati su Atmega 168 e 328; il numero di porte PWM […]

  3. […] Servo.h usata in questo sketch, al suo interno è contenuta una classe servo che dispone di alcuni metodi ciascuno dei quali ha una funzione […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.