Tutorial Arduino e i servo II

Nel precedente articolo hai preso confidenza con la classe Servo per pilotare i servo motori ad uso modellistico in tutte le tue applicazioni con Arduino.
In questo articolo vedrai come impartire i comandi di rotazione utilizzando un potenziometro.

Arduino Servo e potenziometroNello schema in alto puoi osservare come eseguire i collegamenti, il servo è di tipo modellistico funzionante a 4-6v per cui puoi alimentarlo con i +5v di Arduino, se i servo dovessero essere più di uno devi calcolare il loro assorbimento sapendo che Arduino NON è illimitato.

Come potenziometro puoi utilizzarne uno da 10KΩ collegando i pin esterni, quelli ai cui capi misuri una resistenza di 10KΩ indipendentemente dalla rotazione dell’alberino, al positivo (+5v) e al negativo (Gnd) di Arduino.
Non preoccuparti di quale dei terminali colleghi al positivo e quale al negativo, l’importante è che la resistenza misurata tra i due non vari ruotando l’albero del potenziometro.

Il collegamento centrale del potenziometro, quello che varia in funzione della rotazione dell’albero rispetto ad entrambi i contatti esterni, aumentando la resistenza dall’uno e diminuendola dall’altro, devi collegarlo ad uno dei pin analogici di Arduino, nello schema il pin scelto è A0.

Fatto ciò passiamo all’esempio, preso dal sito Arduino:

// Controlling a servo position
// using a potentiometer (variable resistor)
// by Michal Rinott
// 

#include <Servo.h>

Servo myservo;

int potpin = 0;
int val;

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

void loop()
{
  val = analogRead(potpin);
  val = map(val, 0, 1023, 0, 179);
  myservo.write(val);
  delay(15);
}

Analizziamo linea per linea ciò che Michal Rinott ha scrito come esempio:

linea 6: include la libreria esterna Servo che contiene una classe Servo() il cui utilizzo è descritto in questo articolo;
linea 8: crea l’oggetto myservo di tipo Servo, ossia inizializza la classe.
linea 10: imposta una nuova variabile di tipo integer potpin che indica a quale pin è collegato il potenziometro, in questo caso è il pin 0 ossia il primo pin analogico, il segnale letto da questo pin avrà valori che variano da 0 a 1023 dove 0 indica la minima resistenza e 1023 la massima;
linea 11: imposta la variabile val senza darle alcun valore, questa variabile sarà poi utilizzata per memorizzare il valore letto sul pin 0 analogico;
linee 13-16: definiscono la funzione setup(), fondamentale per inizializzare lo sketch, al suo interno utilizzando il metodo attach() già visto impostiamo che il pin per comunicare con il servo è il pin 9;
linea 18: definisce la funzione loop(), quella eseguita ciclicamente da Arduino durante il suo funzionamento.
linea 20: con la funzione di Arduino analogRead() leggi il valore proveniente dal potenziometro e lo memorizzi nella variabile int, i valori come detto saranno la variazione da 0 a 1023 in funzione della rotazione dell’albero;
linea 21: introduce una funzione molto interessante map() capace di eseguire una mappatura tra valori minimi e massimi, nell’esempio gli dici che la variabile val contiene il valore da mappare e che l’intervallo 0-1023 (secondo e terzo parametro) deve essere mappato sull’intervallo 0-179 (quarto e quinto parametro), per essere più chiari riporto questo esempio: immagina di leggere dal potenziometro il valore 512, non puoi passarlo direttamente al server in quanto il range di funzionamento è 0-179 gradi, per cui un valore 512 posizionerebbe il servo al 180 grado, ma farebbero altrettanto tutti i valori da 180 a 1023 non riuscendo ad ottenere il risultato sperato, per questo dovrestii convertire proporzionalmente il valore diciamo con la seguente equazione: 1023:179 = 512:x da cui x = (512 x 179 ) / 1023 = 89,58 arrotondando 90°, per eseguire ad ogni ciclo di eseguzione questo calcolo viene in contro la funzione map(9 che si occupa di tutto, arrotondamenti incusi. Al termine della nostra elaborazione di riga val varrà il valore corrispettivo tra 0 e 179 proporzionalmente a quello impostato sul potenziomentro.
linea 22: non resta che posizionare il servo con il metodo write() della classe Servo;
linea 23: imposta un tempo di attesa i 15 millesimi di secondo prima di ripartire con il ciclo della funzione loop(), questo tempo serve mediamente al servo per raggiungere la posizione desiderata.

Aggiungo una considerazione proprio sull’ultima linea di codice vista (23), il tempo impostato è generico ed è stato impostato su un valore abbastanza grande da consentire il corretto funzionamento con la maggior parte dei servo modellistici in commercio, tuttavia se il servo che stai utilizzando fosse di quelli molto rapidi a raggiungere un determinato angolo il mio consigio è di ridurre questo tempo per avere delle variazioni più immediate. Per calcolare il tempo di ritardo puoi fare riferimento alle caratteristiche del server, solitamente è indicata la velocità angolare, per capire meglio cosa intendo apri la pagina del servo futaba S3016 mini e guarda le caratteristiche tecniche riportate dal costruttore, troverai:

Speed: 0.25 sec/60° @ 4.8V

che a 4,8 v ( ˜5v a cui lo hai alimentato ) indica una velocità di rotazione di 0,25 sec per 60° che corrisponde a 1/4 di secondo per 60° e nel caso di rotazione a 180° 0,75 sec ( 180 / 60 = 3 -> 0,25 x 3 = 0,75) e quindi 0,0041666667 sec per ciacun grado che corrisponde a circa 4 millesimi di secondo per grado, considerando le dovute approssimazioni sia in alimentazione che per arrotondamenti possiamo dire che il nostro servo, alimentato a 5v, si muove di un grado ogni 5 millesimi di secondo.
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-2.html

122 commenti

3 ping

Vai al modulo dei commenti

    • danilog il 6 Marzo 2012 alle 18:07
    • Rispondi

    ciao! questo tutorial è utilissimo.Sono nuovo nel mondo di arduino,e sto facendo il mio secondo progettino utilizzando due servomotori. Il mio progetto consiste nel creare un piccolo faretto a led ad alta luminosità(circa 6) che tramite due servomotori si muovo su due piani ortogonali,controllato da due potenziometri. Per adesso sono riuscito solo a scrivere il codice per comandare i due servi con i due potenziometri in modo indipendente,però non riesco ad aggiungere l istruzione per far lampeggiare i 6 led ad intermittenza! mi da un errore di compilazione.Potresti dirmi o scrivermi come far ad aggiungere alla libreria dei servo un istruzione per far lampeggiare i led? grazie in anticipo. Sito fantastico 🙂

    1. Ciao Danilo,
      Grazie x i complimenti, che tipo di errore ti restituisce? Xchè vuoi usare la libreria server per far lampeggiare dei led?
      Io ti consiglio di far lampeggiare i faretti in modo indipendente dai servo.

      Ma potrei aver male interpretato il tuo progetto.

      Mauro

    • danilog il 7 Marzo 2012 alle 19:01
    • Rispondi

    ciao! comunque ho risolto il problema,ho scovato un due errori nella scrittura del codice, adesso funziona tutto. il mio progetto consiste in un Pan e tilt comandato da due mini servomotori.però adesso invece di applicarci un faretto led ,voglio metterci una webcam con 3 led per illuminare.Il tutto comandato da due potenziomentri.Adesso però stavo pensando ad usare un pulsante normalmente chiuso per spegnere o accnedere i 3 led per la webcam. Non so da dove iniziare a scrivere il codice però ,cioè al premere del pulsante vorrei accendere i 3 led e al suo rilascio che li mantenga accesi. per poi ripremerlo per spegnerli.è fattibile come cosa?

    1. Ciao Danilo, posta le correzioni così tutti gli amici del blog le possono usare come hai fatto tu.
      Se mi autorizzi io pubblico le correzioni allo sketch a tuo nome.

      Per il pulsante e i led si può fare, puoi memorizzare in una variabile “stato” la condizione del pulsante e verificare stato per accendere o spegnere i led.

      Mauro

    • danilog il 8 Marzo 2012 alle 17:13
    • Rispondi

    questo è il listato per comandare due servo con due potenziometri.Ho aggiunto anche 5 led (IR per vedere con la webcam anche in assenza di luce)accessi.Vorrei aggiungerci appunto un interuttore,per i led
    ————————————-
    #include

    Servo myservo; // create servo object to control a servo
    Servo myservo2;
    int potpin = 0;
    int potpin2= 1;// analog pin used to connect the potentiometer
    int val;
    int val2; // variable to read the value from the analog pin

    void setup(){{
    pinMode(1, OUTPUT);
    pinMode(2, OUTPUT);
    pinMode(3, OUTPUT);
    pinMode(4, OUTPUT);
    }
    myservo.attach(9); // attaches the servo on pin 9 to the servo object
    myservo2.attach(8);
    }

    void loop()
    {{
    digitalWrite(1, HIGH); // set the LED on // wait for a second
    digitalWrite(2, HIGH); // set the LED on
    digitalWrite(3, HIGH); // set the LED on
    digitalWrite(4, HIGH); // set the LED on
    delay(50);}

    val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
    val2=analogRead(potpin2);
    val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
    val2=map(val2,0, 1023, 0, 179);
    myservo.write(val); // sets the servo position according to the scaled value
    myservo2.write(val2); // waits for the servo to get there
    }

    • davide il 29 Giugno 2012 alle 18:42
    • Rispondi

    ciao, hai spiegato benissimo ma purtroppo io ho incontrato un problema :(… ho montato il circuito e inserito il codice ( controllato 50 volte ed è perfetto ormai : )sicurissimo.)… poi quando finalmente do tensione il mio arduino si disconnette e riconnette da solo, appena tolgo i 5v oppure stacco il motore dal pin 9 l’arduino funziona correttamente…. premessa io ho appena acquistato l’arduino e gli altri circuiti sul libro mi osno usciti subito ma in questo mi sono bloccato…. secondo te cosa può essere che mi fa succedere questo problema?
    cavetti collegati correttamente sia su arduino che su basetta : ) helpppp : (

    dimenticavo di dirti che da internet ho guardato delle pagine che collega solo il motore e trovo sempre lo stesso problema anche se devo solo colelgare motore a 5v-gnd e un pin….ma l’arduino con questo motore si comporta sempre nello stesso modo : )

    1. Ciao Davide,
      Da quello che scrivi sembra che il problema sia di natura elettrica, verifica che i contatti del servo siano corretti, che modello di servo hai?

      La seconda ipotesi è che il tuo servo sia difettoso,hai modo di provarlo indipendentemente da Arduino o di sostituirlo con un altro modello?

      Mauro

    • zanna il 3 Settembre 2012 alle 14:09
    • Rispondi

    ciao, ho scoperto da poco il tuo blog e l’ho trovato molto interessante. volevo un consiglio se possibile…
    sto costruendo un cavalletto a giraffa (camera crane) per riprese video di 4mt. ( su youtube ci sono moltissimi esempi di come funzionano) utilizzando due servo ed arduino ruoto la telecamera sugli assi x y con un joystick. e fin qui niente di complicato…
    a questo punto per migliorare le riprese e l’effetto vorrei aggiungere un sistema che mantenga la telecamera fissa sul soggetto, anche cambiando l’angolazione della ripresa.(muovendo il braccio cella giraffa) pensavo ad un sistema di due potenziometri che leggessero la posizione degli assi sul cavalletto, i quali interagissero con i servo montati sulla telecamera mantenendo sempre l’inquadratura fissa.
    il problema è che non capisco come far interagire due potenziometri ( un asse del joystick e il sensore sul cavalletto) su un singolo asse… e come fare ad inserire e disinserire il sistema bloccando l’inquadratura…
    in pratica dovrebbe aggiungere o sottrarre un angolazione ai servo che pilotano la telecamera.. è coretto?

    1. Ciao Zanna,
      ho visto su internet cos’è una giraffa (camera crane) non ho capito il tuo dubbio è di tipo meccanico o di programmazione?

      Mauro

        • zanna il 5 Settembre 2012 alle 14:53
        • Rispondi

        ciao,
        allora il mio problema è a livello di programmazione, (non ho ancora ben chiara la logica di programmazione…ma mi sto impegnando 🙂 )
        in pratica la giraffa è snodata su 4 assi (2 sulla telecamera comandati dal joystick e 2 sul cavalletto), quindi,
        una volta impostata l’inquadratura sul soggetto, per far rimanere fissa l’inquadratura della telecamera muovendo il cavalletto, il sistema dovrà modificare la rotazione degli assi della telecamera. così da ottenere una angolazione diversa per lo stesso soggetto.
        http://www.youtube.com/watch?v=oGIHC8N9ZRc&feature=related
        nel primo minuto di questo video si vede come dovrebbe funzionare…

        pensavo di installare due potenziometri sugli assi del cavalletto che mi forniscano i dati dello spostamento degli assi, i quali interagiscano con il movimento della telecamera dopo la pressione di un pulsante. e tutto ritorni manuale alla seconda pressione del pulsante.

        però a livello di programmazione ho delle difficoltà a metterlo in pratica…

        1. Ciao Zanna,
          bel progetto !!!
          Da quanto vedo non è semplicissimo ma neppure infattibile se limiti le funzioni della giraffa rispetto a quelle del video.
          Se ho capito il tuo problema è che non riesci a spostare il comando dei servo dalla prima coppia di potenziometri alla seconda coppia, quella legata agli assi.

          Per capirci:
          supponi di chiamare A la coppia di potenziometri mossi manualmente;
          supponi di chiamare B la coppia di potenziometri legati agli assi;

          così come lo immagino dovresti collegare un bottone o interruttore ad un ingresso, analogico o digitale scegli tu.
          Con un if leggi il suo valore e definisci:

          valore 0 passi ai servo i valori della coppia A;
          valore 1 passi ai servo i valori della coppia B;

          Dovrebbe funzionare.
          Fammi sapere se ho scritto una cavolata o se ho interpretato male il problema, mi piacerebbe pubblicare il tuo progetto una volta concluso.

          Mauro

            • zanna il 5 Settembre 2012 alle 15:31

            da quel poco che ci capisco di logica, penso che il procedimento dovrebbe funzionare in questo modo:

            – imposto la posizione della telecamera sul soggetto tramite joystick manualmente

            – premo un pulsante e il sistema memorizza la posizione attuale della telecamera (pot A) e abilito la lettura dei pot B.

            – muovendo il braccio i potenziometri B andranno a sommare o sottrarre i valori di A memorizzati e di conseguenza sposteranno la telecamera facendole mantenere la stessa inquadratura.

            -premendo nuovamente il pulsante si disabilitano i pot B e ritorna tutto in manuale.

          1. Potresti ovviare al problema stabilendo che la posizione dei potenziometri B al momento della pressione del pulsante sia lo 0 virtuale dei due assi e regolare il valore di rotazione dei servo in funzione del valore calcolato partendo da questo 0.

            Potresti utilizzare in questo modo i 2 gruppi di potenziometri A e B in modo differente tra loro:

            i pot. A funzionano come joystick: il valore proporzionale agisce sulla velocità di movimento e direzione e non sulla posizione 1 a 1;
            i pot. B funzionano proporzionalmente in modo da mantenere la posizione sull’oggetto.

            Se acquisti questa shield:
            http://www.robot-domestici.it/joomla/component/virtuemart/Arduino/arduino-shield/input-shield-for-arduino
            potresti usare il joystick per i potenziometri A e i pulsanti per memorizzare i valori o altre funzioni.

            Mauro

    • anvi il 3 Gennaio 2013 alle 21:46
    • Rispondi

    salve e complimenti.
    mi puoi consigliare dove posso leggere qualcosa su: arduino, encoder, lcd.
    avrei un piccolo progettino da realizzare.
    detto in due parole vorrei visualizzare sul lcd avanti e indietro i conteggi dell’encoder.
    grazie

    1. Ciao Anvi,
      puoi trovare tutto quello che ti occorre su questo blog o sul forum ufficiale Arduino.

      Mauro

    • Fabio il 18 Marzo 2013 alle 11:57
    • Rispondi

    Ciao Mauro, la tua guida è fantastica, ho una domanda su come comandare i servi, se voglio far ruotare un servo di 360° come posso fare?
    Grazie

    1. Ciao Fabio,
      non possiedo un servo in grado di compiere questo tipo di rotazione.
      I servomotori che possiedo si spostano al massimo di 180à.

      Spero di potermene procurare presto uno e scrivere una articolo.

      Mauro

        • Fabio il 19 Marzo 2013 alle 16:57
        • Rispondi

        Ciao, quindi non mi sai dire come scrivere il software, per far ruotare un servo piu di 180°, non si può dare un impulso di una certa durata per far ruotare il servo in continuazione?
        Grazie Fabio

        1. Ciao Fabio,
          alcuni servo, ho letto, regolano solo la velocità di rotazione con il PWM, altri sembrano più simili ai servo da 180gradi, ossia gli imposti il grado a cui vuoi che vadano ed il servo si posiziona.

          Non avendoli provati non so dirti se si comportino come desiderato.

          Mauro

            • Fabio il 20 Marzo 2013 alle 11:57

            Ok grazie mille, continuero comunque a seguirti i tuoi consigli sono molto utili continua così

          1. Ciao Fabio,
            grazie per la fiducia.
            Magari riuscirò a procurarmi un servo da 360° e farne un tutorial 🙂

            Mauro

    • DARIO MAMONE il 8 Maggio 2013 alle 17:57
    • Rispondi

    Ti chiedo cortesemente di dirmi se l’Arduino può pilotare questo tipo servomotore
    Ringraziandoti in anticipo ti porgo i miei saluti

    Savox SV-0235MG Super Torque Steel Gear Digital Servo.
    Features:
    •Combines leading edge technology with super high 12 bit (4096) resolution and unique steel gears.
    •Super light-weight.
    •High speed, incredible efficiency, and low power consumption.
    •Extremely strong metal steel gears ensure long-life and durability.
    •The full aluminum case design not only looks good but also allows for cooler and smoother operating temps.
    •Our servos are totally green – from materials to production, these servos are environmentally friendly.
    •Ideal for 5th scale vehicles

    Dimensions(mm): 65.8x30x57.4
    Weight(g): 200
    Speed(@6.0V sec/60): .16
    Torque(@6.0V oz-in): 388.8
    Speed(@7.4V sec/60): .13
    Torque(@7.4V oz-in): 486.1
    Gear: Metal
    Bearing: 2BB
    Case: Full Aluminum
    15 Tooth Spline

    1. Ciao Dario,
      non ho ancora provato con servo digitali, hai cercato in internet se qualcuno li ha utilizzati e cosa dice?

      Mauro

    • giacomo il 13 Maggio 2013 alle 21:17
    • Rispondi

    scusa se sono fuori tema, ma mi potresti dire come crei le immagini schematichedei collegamenti dell’arduino?

    1. Ciao Giacomo,
      uso Fritzing un programma open source.

      Mauro

    • orlando il 29 Maggio 2013 alle 17:55
    • Rispondi

    e se ho un potenziometro a 2 pin?

    1. Ciao Orlando,
      non immagino come possa essere costruito un potenziometro a 2 pin?
      Sei sicuro che sia un potenziometro, ossia una resistenza variabile?

      Mauro

        • orlando il 30 Maggio 2013 alle 22:12
        • Rispondi

        scusa non sono stato preciso…è una resistenza variabile…è un sensore di flessione che ha 2 pin…non è da molto che uso arduino..pensavo che piu o meno fossero la stessa cosa !
        ho ovviamente provato a montarlo e usarlo come se fosse un potenziometro..ma il servo faceva solo dei microscopici scatti ogni tanto( ma è probabile che era qualche falso contatto..o rumore)

        1. Ciao Orlando,
          ora é più chiaro.
          Non ne ho mai provato uno ma da quanto ho letto la resistenza varia tra i due pin al variare della flessione.
          Devi collegare in serie una resistenza che faccia da bilanciamento, passami il termine, puoi leggere qualche mio articolo sulle fotoresistenze, il concetto é simile, loro variano al variare della luce rilevata e la tua varia con la flessione.

          Mauro

    • riccardo il 8 Luglio 2013 alle 01:13
    • Rispondi

    salve, ho costruito un hexapod, utilizzando una scheda atmega2560, per adesso sto controllando solo 12 dei 18 servo, il mio problema e che ho collegato il segnale direttamente ai servomotori, quindi l’hardware è abbastanza complesso, volevo semplificare utilizzando un Servo Controller, ma in rete non trovo una guida valida, è possibile avere un semplice listato per capire come programmarlo?

    1. Ciao Riccardo,
      perdona l’ignoranza cos’é un ServoController? Ne hai già in mente qualcuno di tuo interesse?

      Mauro

    • Riccardo il 10 Luglio 2013 alle 09:12
    • Rispondi

    Un servo controller è una scheda che ti permette di controllare più servo motori assieme, risparmiando cosi le uscite pwm.
    Una scheda qualsiasi, anche solI 6 canali della popolu va benissimo, ma il mio problema e come configurarla con arduino.

    1. Ciao Riccardo, ho chiaro il tipo di scheda di tuo interesse.
      Ne ho acquistata una da robot-domestici.it ed appena arriva inizierò qualche test.

      Mauro

    • Bernardo il 11 Settembre 2013 alle 19:16
    • Rispondi

    Ciao Mauro,
    Volevo chiederti se era possibile fare la stessa cosa con questo tipo di motori passo passo con relativa scheda con uln2003
    http://m.dhgate.com/product/a42a-dc-5v-step-motor-uln2003-mini-stepper/160716268.html#pd-112

    Ti ringrazio!!

    1. Ciao Bernardo,
      Il motore sembra un comune bipolare, per cui puoi utilizzarlo, la scheda non da informazioni sul tipo di circuito per cui non so risponderti in merito.

      Puoi sempre prendere il solo integrato dalla scheda ed utilizzarlo come nel mio tutorial, o meglio studiati il circuito una volta acquistato e utilizzarlo per controllare il motore passo-passo.

      Mauro

    • bernardo il 12 Settembre 2013 alle 11:20
    • Rispondi

    ok ma potresti dirmi come potrei fare per utilizzare quel motorino per controllare la posizione tramite un potenziometro?? (non voglio controllare la velocita’ ma la posizione)
    https://www.mauroalfieri.it/informatica/motori-passo-passo-pilotarli-con-arduino-quarta-parte.html
    ho visto quest’altro articolo e ho montato tutto come hai fatto tu pero’ vorrei poterlo controllare con un potenziometro, non mi interessa dare comandi con il pc..

    ti ringrazio!!

    1. Ciao Bernardo,
      interessante quesito, io se dovessi ottenere una cosa simile comincerei a ragionare sull’escursione del potenziometro ( quanto gradi compie ) ed il numero di passi del motore passo-passo, farli coincidere potrebbe richiedere un bel po’ di calcoli.

      Poi lo sketch non dovrebbe essere un problema, sai che il pin analogico legge 0-1023 se dividi per i gradi di escursione sai la posizione, infine sposti il motore del numero di passi che ti occorre.

      Mauro

    • Luca il 30 Ottobre 2013 alle 17:10
    • Rispondi

    Il programma di Arduino mi dà un errore:
    Evidenzia il codice:

    Servo myservo;

    e in basso nella casella nera c’è scritta:

    “Servo” does not name a type

    Potresti aiutarmi?

    1. Ciao Luca,
      l’errore mi fa pensare che lo sketch non trovi la libreria Servo.h, tale libreria è fornita con l’IDE arduino pertanto posso pensare che l’installazione del tuo IDE abbia qualche errore.
      Prova a disinstallare l’IDE e a reinstallarlo, poi riprova uno degli esempi Servo forniti ed infine riprova lo sketch.

      Mauro

    • Riccardo il 1 Dicembre 2013 alle 09:46
    • Rispondi

    Ciao Mauro volevo chiederti quando scelgo un servomotore oltre al voltaggio che con arduino ad esempio a 5V ho capito che va bene e se ne scelgo uno più alto in voltaggio basta mettere un alimentazione esterna, ma nel caso della corrente qual’è il limite di corrente gestibile o comunque otimale per non avere problemi?
    Un servo con specifiche di funzionamento di 4.8V e 160mA di corrente potrebbe andar bene vero??
    Grazie mille dell’aiuto 🙂

    1. Ciao Riccardo,
      ti invito a leggere le specifiche arduino per trovare risposta alla tua domanda.
      Se non ricorso male la corrente massima erogata dal +5v non è sufficente a controllare un servo che assorbe 160mA.

      In ogni caso ti consiglio di utilizzare una fonte di alimentazione estarna.

      Mauro

    • Riccardo il 2 Dicembre 2013 alle 02:03
    • Rispondi

    ok grazie mille, il servo che avevo visto su robot-domestici è un hitec hs 311 standard con quei 6V e 160 mA di assorbimento che effettivamente sono troppi per un 5V arduino che dalle specifiche sta sotto anche a 100mA, come consigli di collegarlo ?? grazie ancora

    1. Ciao Riccardo,
      collega l’alimentazione esterna a 6v ti bastano 4 pile da 1,5v.

      Mauro

    • Riccardo il 2 Dicembre 2013 alle 17:21
    • Rispondi

    Ok farò come dici grazie mille dell’aiuto e dei consigli 🙂

    • Riccardo il 4 Dicembre 2013 alle 10:43
    • Rispondi

    Ciao mauro scusa se insisto, allego l’immagine di quanto dicevamo perchè vorrei essere sicuro se vanno bene tutti i collegamenti con vin gnd e pin ma soprattutto quale dei due portabatterie per l’alimentazione è meglio mettere considerando che li ho entrambi da 4 e 6 batterie con jack per arduino.
    Grazie ancora

    http://uptiki.altervista.org/viewer.php?file=8du1ji621qvpkwqacwzw.jpg

    1. Ciao Riccardo,
      il collegamento è errato.
      1. innanzitutto Arduino deve essere alimentato con almeno 7v dal suo jack altrimenti l’alimentatore interno non lavora correttamente.
      2. il servo è meglio alimentarlo direttamente con i 6v delle 4×1,5v e non dal Vin
      3. il solo pin in comune tra arduino ed il servo è il Gnd

      Mauro

    • Riccardo il 4 Dicembre 2013 alle 12:04
    • Rispondi

    Non so come ringraziarti mi guidi passo passo verso la migliore soluzione, ho provato a rifare i collegamenti come mi dicevi ti allego la nuova immagine spero di aver capito e fatto bene come mi dicevi.

    http://uptiki.altervista.org/viewer.php?file=wd1svbsx2idfs2r4ywhn.jpg

    1. Ciao Riccardo,
      così funziona 🙂
      Prendo spunto dalla tua difficoltà per scrivere un articolo in cui spiego come si fa questo tipo di collegamento.

      Mauro

        • Riccardo il 4 Dicembre 2013 alle 14:01
        • Rispondi

        Ok perfetto eseguirò i collegamenti come quelli dell’ultimo schema così come mi hai confermato, ti ringrazio.
        Bella l’idea di un articolo su questa tematica penso sarà utilissimo per tutti soprattutto per chi è all’inizio 🙂

    • Michele Moroni il 5 Dicembre 2013 alle 21:17
    • Rispondi

    Ciao mauro,

    ho cercato di riprodurre un arduino standalone su breadboard seguendo come esempio questo che ti scrivo di seguito: http://areacom.altervista.org/Arduino_standalone:_ATmega328_su_breadboard_con_alimentazione_tramite_LM7805/page/86
    Ho voluto provare a collegarci un microservo della towerpro, un SG90. Mi sono divertito a regolare il movimento del rotore del servo sia dai comandi fissati dalle istruzioni dello sketch, sia controllando il movimento mediante potenziometro B10K ( quello che forniscono insieme al kit base arduino insomma). Funziona tutto e ho cercato di sviscerare al meglio lo sketch spiegato veramente bene da te qui sul sito, solo che mi accorgo, non appena collego l’arduino su breadboard, al pc, utilizzando l’arduino UNO per caricare gli sketch, che il servo fa un rumore tipo scricchiolio che a volte si percepisce quando siamo vicini a un palo dell’alta tensione e vibra leggermente. Tutto questo quando è alimentato ma è a riposo e ruotando il potenziometro vedo che si muove anche il rotore del servo ma una volta riposizionato ricomincia a ‘scricchiolare’.
    Sapresti dirmi il motivo? Forse un difetto del servo?perchè se utilizzo direttamente arduino UNO pe fare tutto questo il servo nn produce alcun rumore, mentre su quello su breadboard si invece.
    Grazie dell’aiuto!
    Michele

    1. Ciao Michele,
      premetto di non aver mai realizzato un arduino standalone ma immagino che lo scricchiolio che rilevi potrebbe essere dovuto ad una alimentazione non stabilizzata o a qualche collegamento “ballerino” sulla breadboard che come sai è costruita con contatti mobili e non fissi e fermi.

      Mauro

    • brian il 22 Marzo 2014 alle 11:57
    • Rispondi

    Ciao Mauro… siamo 2 studenti del terzo anno di un i.t.i.s. indirizzo Automazione… stiamo costruendo la tua mano robotica comandata dal Nunchuck… tuttavia abbiamo riscontrato problemi col tubo corrugato… i nostri servomotori( Sanwa- servo SM-631), non riescono a “tirare” il tubo corrugato… ne esiste uno piu morbido? o è poca la potenza che arriva? considera che abbiamo fatto una prova con i 5v dell’Arduino 1…
    altra cosa, i nostri servo hannop 3 pin: 5 v e gnd sono collegati gia al connettore autocostruito, ma il terzxo pin (quello che andrebbe all’ingrersso dell’arduino) dobbiamo collegarlo al PWM vero? grazie per l’attenzione…

    Brian, Francesco

    1. Ciao Brian e Francesco,
      non ho realizzato io la mano in questo articolo tuttavia il problema che riscontrate potrebbe essere dovuto a:

      1. il tubo va tagliato in corrispondenza delle nocche della mano per agevolare la piegatura nel verso opposto, nel video si intravede il taglio;

      2. come hai scritto é meglio se alimenti i servo con una pila esterna a 6v ( 4 pile di tipo AA )

      Che io sappia esistono diversi tipi di corrugato puoi provare in ferramenta o in un negozio di bricolage per trovarne uno più adatto se i due rimedi non sono sufficienti, considera che un corrugato più morbido potrebbe contenere più gomma e quindi avere caratteristiche meccaniche non adatte al progetto a causa dell’elasticità del tubo.

    • michele il 10 Maggio 2014 alle 18:58
    • Rispondi

    ciao mauro, sto realizzando un progetto con 5 servo towerpro 9g, in pratica li voglio comandare grazie a 5 sensori di flessione, ma è sorto un problema, i servo non arrivano a 180° nonostante usi questo codice:

    int pos1 = map(flex1, 400, 700, 0, 180);
    pos1 = constrain(pos1, 0, 180);
    int pos2 = map(flex2, 400, 700, 0, 180);
    pos2 = constrain(pos2, 0, 180);
    int pos3 = map(flex3, 400, 700, 0, 180);
    pos3 = constrain(pos3, 0, 180);
    int pos4 = map(flex4, 480, 640, 0, 180);
    pos4 = constrain(pos4, 0, 180);
    int pos5 = map(flex5, 400, 700, 0, 180);
    pos5 = constrain(pos5, 0, 180);

    cosa posso fare? grazie anticipatamente.

    1. Ciao mike,
      se il problema è meccanico puoi sostituire i servo con qualcuno che compia i 180°.
      In alternativa puoi sempre lavorare sulla meccanica di trasmissione in modo che i gradi eseguiti dal servo siano sufficienti al tuo progetto.

    • Aldo il 23 Maggio 2014 alle 01:04
    • Rispondi

    Ciao, ottimo tutorial!!!! Una domanda : se volessi alimentare il servo non dall’Arduino ma da un pacco batterie, il collegamento del potenziometro sarebbe lo stesso?

    1. Ciao Aldo,
      nel blog trovi tante risorse ed articoli sui servo, tra questi ne ho scritto uno proprio su come alimentare i servo con una batteria esterna.

    • giacomo il 9 Giugno 2014 alle 17:58
    • Rispondi

    ciao mauro, come fa Arduino a passare da un valore analogico come quello dell’uscita del potenziometro ad un valore digitale come gli impulsi pwm che comandano un servo ? che processi avvengono? grazie

    1. Ciao Giacomo,
      i pin per la lettura analogica sono differenti da quelli della generazione di PWM.
      La lettura analogica la esegue mediante un ADC ( Analog Digital Converter ).

        • giacomo il 10 Giugno 2014 alle 10:32
        • Rispondi

        ok, ricevo un segnale analogico che poi viene campionato ma dall’ ADC come fa a generare impulsi pwm per comandare il servo, mi potresti fare un esempio grazie.

        1. Ciao Giacomo,
          ti consiglio di leggere attentamente questo articolo è tutto spiegato linea per linea.
          Trovi nel blog anche articoli più semplici per comprendere come leggere un segnale analogico e come generare un segnale PWM.

          In ultima soluzione puoi frequentare un corso arduino base tra quelli presenti in questa pagina:
          https://www.mauroalfieri.it/corso-arduino.html

    • giuseppe il 23 Luglio 2014 alle 19:30
    • Rispondi

    perche quando connetto l alimentazione dal pc mi da continui segni di errore e il servomotore si muove a piccoli ticchettii?
    non riesco a capire!
    grazie in anticipo

    1. Ciao Giuseppe,
      il computer non ha sufficiente corrente erogata per alimentare questo servo.

    • luigi il 23 Ottobre 2014 alle 06:32
    • Rispondi

    Ciao Mauro,
    ho un problema che non riesco a risolvere. Devo comandare la discesa e la salita di una tapparella lunga 20 cm, mediante un servo a rotazione continua che si mette in moto grazie ad un sensore LDR che trasduce poca o molta luce. Come devo fare ad ottenere un numero di rotazioni limitate?
    Grazie
    Luigi

    1. Ciao Luigi,
      il servo a rotazione continua non è il massimo per questo scopo proprio perché non è controllabile in gradi e di conseguenza hai 2 svantaggi:
      – conoscere la posizione
      – impostare un numero di rotazioni
      La cosa migliore è usare due finecorsa, uno all’inizio ed uno alla fine che ti dicano quando la tapparella ha raggiunto il punto di inizio/fine e devi fermare la rotazione del servo.

    • luigi il 24 Ottobre 2014 alle 17:19
    • Rispondi

    Ciao Mauro, purtroppo non ho due fine corsa…però sono riuscito a fermarlo in un senso (myservo.write.Microseconds(1000)), ma nell’altro senso gira continuamente! Come potrei fare?
    questo è lo sketch:

    [ codice rimosso in automatico ]

    1. Ciao Luigi, come leggi in fondo ad ogni articolo ci sono delle regole, che mi piace siano rispettate.
      Come ti ho già scritto i servo a rotazione continua sono poco indicati per questo scopo, in ogni caso se il comando usato funziona per un verso di rotazione dovrebbe funzionare anche per il verso opposto o il produttore del servo deve darti i valori per cui il servo ruota e quelli per cui il servo è fermo.

    • Thomas il 23 Febbraio 2015 alle 22:19
    • Rispondi

    ciao mauro, io avrei bisogno di collegare 5 servo a 5 potenziometri ma utilizzando il tuo metodo moltiplicato per 5 la tensione sui servo si abbassa troppo. hai qualche dritta da darmi?
    grazie in anticipo

    1. Ciao Thomas,
      esistono molte soluzioni da quelle semplici di alimentazione multipla dei servo con sorgente esterna, leggi gli articoli sul blog, fino all’uso di shield specifiche per il controllo multi servo.
      Immagino tu stia realizzando una mano robotica o simile, prova a leggere i miei articoli sul movimento armonico e i tanti progetti di mano robot che ho realizzato.

        • Thomas il 24 Febbraio 2015 alle 14:34
        • Rispondi

        Grazie ora guardo e si sto realizzando un braccio meccanico

    • Alberto il 12 Marzo 2015 alle 09:07
    • Rispondi

    Ciao Mauro,
    Sto realizzando una mano robotica con 5 servo motori comandati da 5 potenziometri.. Ho utilizzato il tuo programma aggiungendo i comandi per 5 servo e 5 potenziometri, ma non funziona niente.. ho provato anche con 2 servo e 2 potenziometri ma non funziona lo stesso; potresti darmi indicazioni?
    Grazie

    1. Ciao Alberto,
      nel blog trovi molti articoli dedicati al tuo stesso esperimento anche con logiche di programmazione complesse come il movimento armonico e similari.

    • Mattia il 2 Giugno 2015 alle 00:47
    • Rispondi

    Ciao! ho cominciato oggi a cimentarmi con arduino ma certi codici come quello che mi fornisci in questo tutorial me lo da come sbagliato, devo ancora collegare l’arduino e il codice l’ho copiato tale e quale ma il programma mi dice: #include expects “filename”, mi viene da pensare che l’arduino che c’ho io non sia originale dato che non mi sembra proprio identico alle schede che vedo in rete e di conseguenza non funzioni bene, hai sentito altri casi come i miei o sono io che sono zuccone? grazie

    1. Ciao Mattia,
      ho corretto lo sketch, fino ad oggi se il primo che mi segnala l’errore, evidente, mancava la libreria servo da includere.

    • Jacopo il 3 Giugno 2015 alle 13:17
    • Rispondi

    Ciao Mauro, complimenti per il tuo lavoro!
    Avrei bisogno di un consiglio, io sto usando un potenziometro a 10 giri per controllare un servo, come faccio a capire i valori che devo dare alla funzione map per far girare il servo all’unisono col potenziometro, ti ringrazio.
    Jacopo

    1. Ciao Jacopo,
      un potenziometro multigiro non è il massimo per controllare all’unisono un servo, anche perché quest’ultimo lavora solo in gradi 0-180.
      Se invece ti riferisci ad un servo motore a rotazione continua, quelli che conosco io non sono controllabili in gradi ma in velocità.

    • simone il 12 Giugno 2015 alle 14:37
    • Rispondi

    Buongiorno Mauro,

    ho un quesito problematico :)…. ho collegato i seguenti materiali assieme(arduino 2009, potenziometro, esc, batteria) per far funzionare una turbina da modellismo, parte tutto ma dura pochi secondi, nello stesso momento in cui aziono il potenziometro la turbina parte, ma si ferma dopo pochi secondi 4-5secondi al massimo e devo ripartire da zero con il potenziometro, non cè possibilità di far girare continuativamente la turbina??? riusciresti a farmi un esempio di stringa da caricare?

    grazie molte per l’aiuto che potrai darmi…
    un salutone
    simone

    1. Ciao Simone,
      mi hai dato troppi pochi dettagli per capire cosa stai utilizzando.
      Prova a scrivermi qualche info in più e vedrò se posso aiutarti.

        • simone il 16 Giugno 2015 alle 09:59
        • Rispondi

        Buongiorno Mauro,

        di seguito ti metto la stringa che uso per far funzionare il motore brushless:

        [[ codice rimosso in automatico ]]

        questo è lo sketch che uso, purtroppo quando attivo il potenziometro il motore brushless parte e in quel lasso di tempo di circa 3-4 secondi puoi aumentare e diminuire i giri del motore quanto vuoi, ma non so per quale motivo allo scadere dei 3-4 secondi il motore si ferma e devo ripartire da zero con il potenziometro…mi piacerebbe che girassi il potenziometro esempio a metà e il motore girasse fino a che io non diminuisco o aumento i giri con il potenziometro…

        Se ti serve qualche altra caratteristica, magari dimmi precisamente cosa ti serve perché sono un neofita 🙂

        grazie molte
        ciao
        simone

        1. Ciao Simone,
          come avrai letto in fondo ad ogni articolo ” è vietato incollare sketch nei commenti ” Ti chiedo la cortesia di rispettare le due semplici regole del blog.
          In merito al tuo problema controlla l’errore è di certo nello sketch e nei valori che invii al motore se inizia a girare e poi si interrompe.
          Ricordati che i valori da inviare ad un motore brushless sono in gradi attraverso la libreria servo se usi un ESC, ti consiglio di leggere anche il mio articolo di ieri sui brushless.

    • Alberto il 9 Luglio 2015 alle 23:50
    • Rispondi

    Salve ho letto il tutorial e credo che sia mooolto utile,sono nuovo sia di questo sito che in questo affascinante mondo,cmq volevo sapere se dopo aver collegato tutti fili dal potenziometro e dal servomotore all’arduino uno e averlo “configurato con lo sketch (fatto copia ed incolla da sopra xD) VOLEVO SAPERE se era possibile poi staccare il cavo USB dal computer ed iniziarlo ad usare indipendentemente,cioè da solo,oppure tocca collegare qualche alimentatore e/o batteria…????? URGENTE volevo sapere solo questo grz in anticipo

    1. Ciao Alberto,
      se sei nuovo di questo mondo ed hai voglia, davvero, di imparare ti consiglio di iniziare con il corso base gratuito che trovi in questo sito o con un corso in aula in cui si affrontano anche le basi per iniziare.
      Se scolleghi arduino dal Pc dovrai alimentarlo con una tensione esterna, ti consiglio di leggere la scheda tecnica sul sito arduino ufficiale ed i tutorial sulle alimentazioni da me realizzati.

    • Nico il 16 Settembre 2015 alle 18:18
    • Rispondi

    Ciao, ottimo tutorial. Vorrei sapere perchè una volta arrivato al massimo valore (179°) il servo inizia a vibrare? E perchè una volta arrivato al 179 il potenziometro gira ancora anche se di poco?. Grazie in anticipo

    1. Ciao Nico,
      probabilmente il servo che stai utilizzando non è in grado di gestire il segnale di controllo dei 179°, prova a diminuirlo nella stringa di conversione a 178 o meno.

    • Mox il 18 Ottobre 2015 alle 15:51
    • Rispondi

    salve! grazie alle tue guide, qualcosa riesco a capirla 😀
    davvero utili e intuitive… tanto che sono riuscito a fondere due codici, modificando quello postato da te e intervenire sulla velocità del servo con un potenziometro… ora,
    però una cosa prorpio non riesco, a far fermare i due momenti “for” per un tempo calcolato sempre dal valore “analogRead”, e comunque non sono riuscito a fermarlo neanche con un “delay”…
    qualche consiglio? grazie infinite 😀

    [[ codice rimosso in automatico ]]

    1. Ciao Max,
      innazitutto, come avrai letto, non è possibile incollare codici nei commenti; questi vengono rimossi in automatico.
      Non sono certo di aver compreso cosa desideri: se vuoi che il movimento dei servo si fermi dopo aver raggiunto un determinato valore ti basta inserire un controllo ( if ) per determinare il raggiungimento del punto ed eseguire un delay() come effetto dell’if quando la condizione è verificata.

      E’ più semplice in codice: if ( gradoDelServo == gradoDiStop ) { delay( tempoDiStop ); } l’importante è che tu lo inserisca nel punto giusto.

    • marco il 5 Dicembre 2015 alle 11:43
    • Rispondi

    Salve Mauro, vorrei farti una domanda banalissima. Il potenziometro è da 10kohm, ma deve essere di tipo log o lineare? Un ultima domanda, vi è la possibilità che si bruci il potenziometro? e quindi che potenza dovrebbe riuscire a dissipare?

    1. Ciao Marco,
      date le tensioni e le correnti in gioco direi che puoi usare un normale potenziometro da 1/4w senza problemi.
      Considera che la maggior parte dei potenziometri presenti nei kit sono di tipo logaritmico.

    • peppe il 8 Gennaio 2016 alle 15:50
    • Rispondi

    salve
    ho letto ma non riesco a capire ……..

    ma come si installa la libreria servo su arduino ?

    nel caso di alimentazione esterna dei servo le masse dei servo devono essere collegati ad arduino ( alimentato a parte da altro alimentatore) ?

    grazie

    1. Ciao Peppe,
      la libreria Servo non va installata, è già presente nell’IDE, a meno che tu non ne voglia usare una di terze parti.
      Per lo schema di connessione ed alimentazione esterna dei servo trovi un mio articolo specifico

    • domenico il 9 Gennaio 2016 alle 20:12
    • Rispondi

    Ciao, ho provato a far girare lo sketch riportato in questo articolo non usando la funzione map ma facendo uso della formula di conversione come da te spiegato. La cosa strana e che i valori dell’angolo di rotazione partono da 0° e salgono fino ad un max di 32° e poi diventano negativi cominciando da -31° fino a 0° e poi la cosa si ripete in modo periodico. Francamente non riesco a capire. Ho pensato ad un problema di approssimazione dei calcoli (che con la funzione map() evidentemente è risolto all’interno della funzione stessa) ma come fanno a venire fuori angoli negativi?
    La formula che uso è
    val=analogRead(A0)
    val=val*180/1023.

    1. Ciao Domenico,
      il modo corretto di scriverla sarebbe: val = ( analogRead(A0)*180 )/1023.
      Tuttavia i valori che riporti ( da -31 a +32 ) non sono frutto dell’operazione matematica con le formule che riporti.
      Penso tu stia eseguendo qualche altra operazione su “val” prima della formula.

        • Domenico il 11 Gennaio 2016 alle 12:29
        • Rispondi

        Ciao Mauro,
        innanzitutto grazie per la pronta risposta.
        Mi sono permesso di inviarti lo sketch che sto usando ma potrai verificare che non faccio fare alcuna operazione su “val” tranne, ovviamente, quella per la conversione.
        Spero che a te o a qualcun altro venga in mente un suggerimento.
        Grazie ancora e complimenti per il lavoro che fai.

        P.S.: mi sono accorto solo ora che nello sketch ho fatto un piccolo errore nell’ultima istruzione Serial.println() ma il problema di fondo resta lo stesso.

        1. Ciao Domenico,
          mi spiace me non riesco a testare e verificare tutti gli sketch che modificate, primo per mancanza di tempo, siete tanti appassionati a seguirmi, e secondo perché non sono così in gamba da correggere gli sketch senza provarli.

            • Domenico il 12 Gennaio 2016 alle 18:49

            Tranquillo, più che comprensibile. Un saluto

          1. Grazie Domenico,
            non demordere è solo provando che si scoprono i piccoli errori e li superiamo.

    • Alessandro il 26 Gennaio 2016 alle 00:06
    • Rispondi

    Ciao io ho un problema con il potenziometro da 50K ho provato ad alimentarlo a 5V ma mi da sempre 0 se lo alimento a 9V mi funziona ma la tensione é troppo alta per la lettura di arduino. Che mi consigli? Grazie.

    1. Ciao Alessandro,
      i potenziometri, di solito, sono componenti passivi non necessitano di alimentazione.

        • Alessandro il 26 Gennaio 2016 alle 15:07
        • Rispondi

        Grazie Sig. Mauro, comunque sono riuscito ad alimentarlo con i 5v di arduino ma quando vado a leggere il valore del potenziometro con la seguente frase:

        val= anagolgRead(potpin);
        Serial.println(val);

        mi da valori sballati, che non fanno riferimento alla rotazione del potenziometro. Sai il perchè? Grazie ancora.

        1. Ciao Alessandro,
          se i collegamenti sono corretti da schema potrebbe essere malfunzionante il potenziometro, verificalo con un tester

    • Marco il 2 Febbraio 2016 alle 19:54
    • Rispondi

    Scusa vorrei saper se potresti inviarmi uno sketch per comandare 4 servo con dei potenziometri, poichè finora nn ho trovato il modo di comandarli manualmente.
    Grazie.

    1. Ciao Marco,
      se cerchi nel blog ci sono numerosi esempi, tra questi ricordo quelli dedicati al guanto che controlla una mano robot dove i servo sono 5.
      Leggendo e comprendendo come funziona lo sketch potrai ottenere quello che desideri.

    • Cristian il 13 Febbraio 2017 alle 14:03
    • Rispondi

    Ciao Mauro cerco aiuto per un progetto che non mi fa dormire da mesi gli collego l,interruttore Co battezza gli do il digital writewrite al servo ma nulla!!!!
    devo far un movimento iniziale con pulsante ad un servo su uno sketch di un mpu 6050 poi spingendo di nuovo il pulsante ritorno in posizione 0 servo motore allego file indirizzo sketc
    grazie mille
    [[ link rimosso in automatico ]]

    1. Ciao Cristian,
      innanzitutto ti chiedo di rispettare le due semplici regole del blog, che hai letto in fondo ad ogni articolo.
      In secondo luogo non analizzo/correggo codice di altri perché come scritto non penso di possederne le capacità ed il tempo.
      In terzo ed ultimo, ti vorrei offrire il mio aiuto e consiglio, ma dalla tua descrizione del problema non ho capito molto.

    • Cristian il 13 Febbraio 2017 alle 21:29
    • Rispondi

    Ok perdono! Colpa mia! Non ho letto tutto! Pardon
    Grazie per la tempestiva risposta
    Ma ho messo il link perché oltre a quel codice nessun altro trovato in rete mi fa funzionare i 3 servi sui 3 assi con il mio mpu 6050 my 521 con arduino
    Spiego meglio desidererei che il sevo sul asse z da una posizione 0 azionando un interruttore facesse un movimento di 90 gradi e che entrasse in funzione il giroscopio sui 3 assi /servi (muovendosi di consegueza al giroscopio )poi rispingendo l’interruttore tornasse in posizione 0 spegnendo il giroscopio!
    Tu dirai st….. ecco io non c dormo la notte ho provato a studiare ma evidentemente ho dei limiti! Oltre ai led e programmi base non riesco grazie mille ancora

    1. Ciao Cristian,
      non sono certo di aver compreso, tuttavia se vuoi subordinare il funzionamento del giroscopio alla pressione di un pulsante devi impostare una variabile di stato che avrà valori true o false in funzione della pressione del pulsante ed in base a tale valore discriminerai se leggere o meno il segnale dall’MPU6050.

    • Francesco il 18 Febbraio 2017 alle 01:20
    • Rispondi

    Salve, mi potreste fornire uno sketch per il comando di due servomotori mediante potenziometri che utilizzerò per un braccio robot ? grazie anticipatamente .

    1. Ciao Francesco,
      lo spirito del blog, come ti sarai accorto leggendolo, è di spingere tutti gli appassionati e chi ha un esigenza come la tua ad imparare e provare a realizzarlo con le proprie conoscenza.

    • jason il 5 Maggio 2017 alle 17:55
    • Rispondi

    Buonasera Mauro ,

    ho seguito quello che ha spiegato qua e in altre guide , usando componenti del kit base , tranne i servocomandi in aggiunta ho usato due potenziometri , ma non capisco perchè i servocomandi traballano e non rispindono ai comandi quando li collego con una batteria esterna per arrivare a 6v ; allego sotto lo schema elettrico :
    [[ link rimosso in automatico come da regolamento ]]

    il codice è giusto perchè coi servo collegati a arduino funziona (traballano gia se in 2 , il singolo non da problemi)

    grazie

    1. Ciao Jason,
      solitamente avrei ipotizzato una scarsa alimentazione ma da come scrivi, se leggo bene, il tuo problema si verifica proprio quando colleghi la batteria. Prova con 4 semplici pile stilo come batteria esterna di solito non crea problemi di vibrazioni.
      Non hai specificato che tipo di alimentazione a batteria esterna stai utilizzando.

        • jason il 8 Maggio 2017 alle 09:14
        • Rispondi

        Ciao Mauro ,

        grazie del tempo dedicatomi ; lo alimento con una lipo da 2200mAh collegata a un dc-dc step down ( uguale a quello del tuo articolo sui tutorial !! ) . ho gia provato con 4 batterie ricaricabili ma mi fa lo stesso problema, posso capirlo dando 4.8v a 2700mAh su due servi ci potrebbe stare. se riesco mi procuro 5 batterie da 1.2v cosi da dare 6v e provo .

        potrebbe essere che ho inavvertitamente danneggiato arduino?

        grazie

        jason

        1. Ciao Jason,
          perdonami ma in questo articolo non si cita il DC-DC step down. Ho scritto così tanti articoli a riguardo che non saprei a quale ti riferisci, me lo indicheresti?
          Se il problema si verifica anche con 4 pile da 1,2v ed hai verificato che non sussistono problemi meccanici o elettronici sui servo potrebbe trattarsi di una incompatibilità dei segnali PWM o dei TIMER che stai utilizzando o semplicemente i collegamenti non solidi.

            • jason il 8 Maggio 2017 alle 11:27

            subito un grazie del tuo tempo ,

            l’articolo è questo : https://www.mauroalfieri.it/elettronica/convertitore-dc-dc-regolabile-step-down.html

            i TIMER (potenziometri spero di non sbagliare ) sono quelli da 10k , dati in dotazione con il kit base di arduino . aspetta provo a stravolgere tutto e usare dei pulsanti , nel caso a progetto avanzato non userò più dei TIMER
            ma ci sarà un sensore muscolare .

            grazie ancora

          1. Ciao Jason,
            il regolatore che hai individuato è ti tipo switching, ma a questo punto escluderei che si tratti del suo uso se ti si verifica anche con le batterie ricaricabili.
            I TIMER sono ua cosa differente dai trimmer, cerca nel blog per capire cosa siano.

            • jason il 8 Maggio 2017 alle 16:33

            di nuovo Ciao Mauro , rieccomi con le mie domande .

            Ho fatto il test che ti dicevo e la situazione non è variata , ho letto dei TIMER ma i pin da me usati sono il 9 e il 10 , hanno la stessa frequenza . se riuscissi a risolvere questo problema come faccio in futuro a usarne 5 (quantità che mi serve per il mio progetto ) ; si posono modificare le frequenze , ma che frequenza dovrei usare ? ho iniziato da pochi mesi e non ho strumenti per rivelare la frequenza ,arrivo massimo a un saldatore .Magari sbaglio io a collegare qualcosa , non so più che pensare , se vuoi ti invio un disegno dello schema o una foto .
            Non pensavo fosse cosi complicato l’uso di arduino .

            grazie

          2. Ciao Jason,
            ci sono cose che puoi modificare e cose che sono fisse nei TIMER, come hai letto e compreso.
            Tuttavia mi resta come opzione solo quella dei collegamenti instabili rileggendo tutto quello che hai scritto e partendo dall’assunzione che tu abbia eseguito correttamente ciò che ti ho suggerito.

            • jason il 9 Maggio 2017 alle 17:44

            Ciao Mauro ,

            mi sono recato al fablab della mia città e abbiamo risolto il problema ,il dc-dc step quando l’ho impostato a 6v non l’o fatto col gnd collegato a arduino , collegandfolo la tensioned scendeva a 3v , la cosa strana è che per non avere il tremolio su un servo devo settarlo a 8v , l’altro servo è perfetto . inoltre vi era anche un cavo che faceva girare le scatole , propio come avevi suggerito.

            Grazie ancora delle dritte .

          3. Ciao Jason,
            ottimo lavoro. Alcune problematiche è necessario affrontarle praticamente per comprendere l’errore, a distanza è complesso e si rischia di procedere per tentativi ed ipotesi.
            A quale FabLab ti sei recato ?

            • jason il 10 Maggio 2017 alle 11:40

            Ciao Mauro ,

            Fablab di Biella , un bel posticino 😉

          4. Bene sono contento.

    • Alex Bonanni il 22 Maggio 2020 alle 21:22
    • Rispondi

    Ciao Mauro io ti porgo il mio commento per chiederti se hai a disposizione di un programma per far andare un servomotore per una stampante per circuiti stampanti

    1. Ciao Alex,
      che tipologia di servomotore usa la tua stampante?

  1. […] servomotori in modo parallelo ( articoli precedenti su questo argomento Tutoria Arduino e i servo e Tutorial Arduino e i servo II ) prova a pilotare 6 servomotori […]

  2. […] leggere la nostra conversazione come commento all’articolo Tutotorial Arduino e i servo II in cui Danilo ha postato il suo […]

  3. […] il potenziometro col segnale che pilota l'innalzamento o l'abbassamento del suono del motore. Tutotorial Arduino e i servo II – Mauro Alfieri Elettronica Sugo __________________ Un ottimista invento' l'aeroplano, un pessimista invento' il […]

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.