«

»

Apr 09

Stampa Articolo

Servo shield arduino

La sevo shield per arduino è una shield in grado di controllare fino a 16 servomotori diversi con soli 2 pin arduino ed il protocollo I2C

servo shield collegata

La servo shield è progettata per controllare 16 uscite di tipo PWM, quelle solitamente usate dai servo, ma potresti utilizzare la servo shield per controllare 16 led o 16 driver per led ad alta luminosità da 350mA o 700mA, come quello realizzato dall’amico Luca ( leggi articolo ).

Inoltre il produttore della shield dichiara:

6 address select pins so you can stack up to 62 of these on a single i2c bus, a total of 992 outputs – that’s a lot of servos or LEDs

ossia grazie a 6 pin dedicati alla selezione dell’indirizzo I2C presenti sulla shield puoi collegare fino a 62 servo shield al medesimo arduino e controllare ben 992 uscite di tipo PWM con un unico microcontrollore.

Avrai già capito che le potenzialità di questa shield sono elevate e non si fermano ai soli 16 output PWM per controllare dei servomotori di tipo PWM.

Contenuto della confezione

Una volta aperta la confezione della servo shield ho trovato i seguenti componenti:

  • n.1 servo shield
  • n.1 connettore per alimentazione
  • n.4 strip da 3×4 pin ciascuno
  • n.1 strip da 36 pin maschio

come vedi in figura: servo shield componenti nella confezione io ho deciso di montare al posto della strip maschio da 36 pin i soliti header arduino per espandere in futuro questa shield con altre montate a castello.

Montaggio della servo shield

Sul sito Adafruit c’è come al solito un dettagliato WiKi su come assemblare la servo shield ( leggi wiki ).

Avendo deciso di montare la servo shield con componenti leggermente differenti ti mostro la mia personale tecnica di montaggio, certo che saprai trovare il modo migliore di montare la tua servo shield.

Inizia usando un’altra shield come base il montaggio e mantenere gli header in posizione:

servo shield montaggio header

inserisci la servo shield in modo che gli header attraversino la shiled:

servo shield montaggio header 2

e procedi con la saldatura di tutti i pin, terminata la saldatura dehgli header posiziona i 4 blocchi di pin 3×4 presenti nella confezione e a cui collegherai i servo e procedi a saldare anche questi:

servo shield montaggio pin

infine salda il connettore di alimentazione V+/Gnd che ti servirà ad alimentare i servo esternamente per non sovraccaricare l’alimentazione arduino:

servo shield montaggio connettore

a questo punto dovrai scegliere il condensatore da installare nello spazio sergrafato C2 della servo shield; adafruit riporta:

If you are driving a lot of servos from a power supply that dips a lot when the servos move, n * 100uFwhere n is the number of servos is a good place to start – eg 470uF or more for 5 servos. Since its so dependent on servo current draw, the torque on each motor, and what power supply, there is no “one magic capacitor value” we can suggest which is why we don’t include a capacitor in the kit.

ossia il condensatore da saldare nella posizione C2 dipende da quanti e quali servo andrai a collegare alla servo shield, è questo il motivo per cui non è fornito nella confezione.

Come regola generale suggerita dal produttore il condensatore puoi calcolarlo con la formula n*100uF per cui con 5 servo il valore dovrebbe essere 5*100uF = 500uF e la misura più prossima a questo valore è 470uF.

C2 adafruit servo shield

Imposta l’indirizzo della servo shield

come descritto dal produttore, e riportato sopra in questo articolo, puoi collegare fino a 62 servo shield ad un unico arduino uno con soli 2 pin SDA ed SCL ( protocollo I2C ) semplicemente impostando per ciascuna shield l’indirizzo a cui far rispondere la shield, per farlo trovi delle piazzole sul PCB con cui puoi definire l’indirizzo:

scelta indirizzo shield

gli indirizzi sono definiti secondo questa tabella:

Board 0: Address = 0x40 Offset = binary 00000 (no jumpers required)
Board 1: Address = 0x41 Offset = binary 00001 (bridge A0 as in the photo above)
Board 2: Address = 0x42 Offset = binary 00010 (bridge A1)
Board 3: Address = 0x43 Offset = binary 00011 (bridge A0 & A1)
Board 4: Address = 0x44 Offset = binary 00100 (bridge A2)

avrai notato che si tratta di una codifica binaria in cui i pin A0-A5 lavorano secondo la sequenza 00000 per definire l’indirizzo di configurazione.

Il video della servo shield

ecco il video realizzato dalla adafruit sulla servo shield:

Buona sperimentazione !!!

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

33 comments

Vai al modulo dei commenti

  1. Simone

    Salve
    sono uno studente di informatica ed appassionato di elettronica. Vorrei condividere il mio sito con te in quanto presenta alcuni progetti interessanti di informatica/elettronica (arduino, programmazione web-ajax) correlati di codice sorgente.

    Saluti
    Simone Romano

    1. Mauro Alfieri

      Ciao Simone,
      mi farebbe molto piacere condividere i tuoi progetti sul blog, ho visitato il tuo sito e visto che per visualizzare il codice chiedi la registrazione. Io sono dell’idea che la conoscenza vada condivisa gratuitamente e fino ad oggi questa idea si è rivelata vincente.

      Se vuoi condividere i tuoi progetti io posso scrivere degli articoli dedicati a ciascun progetto ma mi piacerebbe farlo dopo che tu abbia reso pubblico il codice e descritto che cosa fai e come lo fai, un po’ come vedi nel blog.

      Se condividi questa opinione il mio blog è a disposizione per te e per tutti gli appassionati come te.

  2. stefano

    ciao, Seguo con interesse il tuo blog, e ho realizzato diversi progetti amatoriali seguendo le tue lezioni, da un po’ di tempo mi sono messo in testa di costruire un prototipo per un braccio robot economico a 6 assi nrl quale voglio utilizzare dei servi digitali, la documentazione è minimale, e mi chiedevo se puoi darmi consigli su quali librerie utilizzare o su quale shield utilizzare, o se addirittura non convenga realizzarne uno ad hoc .
    Grazie
    Stefano

    1. Mauro Alfieri

      Ciao Stefano,
      come tu stesso scrivi “la documentazione è minimale” io sceglierei dei servo di cui è disponibile della documentazione sufficente.
      Non ho chiaro cosa intendi per “o se addirittura non convenga realizzarne uno ad hoc” perchè dalla tua prima frase ho capito che stai realizzando un tuo prototipo.

  3. stefano

    eeesatto !!! , quindi , gli unici servi per i quali ho travato una documentazione seria (almeno secondo i miei parametri) sono i dynamixel, è addirittura commentato il protocollo seriale, non sarebbe difficile realizzare anche con un semplice max 485 un collegamento alla “rete” di servi, ma non mi piace partire sprovveduto, se esiste qualcosa di funzionante sono disposto ad usarlo, anche perchè occorre mettere in funzione un buon sistema di enable della comunicazione, in rete ho trovato questo “http://www.dfrobot.com/wiki/index.php/Digital_Servo_Shield_for_Arduino_SKU:DRI0027” , ma non ho ben capito quali siano le modalità di utilizzo, se hai prodotti migliori da consigliare sono tutt’ orecchi, e se l consiglio è quello di farmi l’hardware … e così sia…
    Grazie ancora e complimenti per il blog

    1. Mauro Alfieri

      Ciao Stefano,
      percepisco grande entusiasmo, tuttavia non comprendo che direzione hai in mente.
      Se devi iniziare da 0 ti consiglio di valutare le tue possibilità sia economiche sia di costruzione meccanica in quanto i dynamixel sono ottimi e ben documentati ma anche molto costosi 🙂 e forse superiori per forza e angolo di rotazione al tuo scopo.

  4. stefano

    più che entusiasmo la mia è incoscienza ;-).
    avevo anche valutato gli analogici della hitec, ma siamo alle solite, manca la documentazione, quella che c’ è è vaga, e approssimativa, in alcuni casi ho visto addirittura applicati degli strani oggetti tipo questo “http://www.robot-italy.com/it/servo-medium.html” .. se parliamo di prezzo.. per la meccanica non ci sono grossi problemi, ho un’ officina pronta a tgliare e forare tutto l’alluminio che voglio, sto per prendere una direzione progettuale, non ne ho una ben chiara, è per questo che mi sono rivolto ad un professionista, ovviamente condividerò tutti i passaggi nel blog quando le idee saranno più chiare…

    1. Mauro Alfieri

      Ciao Stefano,
      per i servo di tipo analogico, come quello che indichi, non c’è bisogno di molta documentazione si controllano con la classe Servo.h di Arduino e trovi molti articoli a disposizione nel blog su come usarli.

      Per l’officina meccanica è di tua proprietà? Ne sto cercando una che mi possa supportare nella realizzazione di alcuni componenti per i miei progetti.

      1. stefano

        Non è di mia proprietà, è di un amico, ma è a disposizione perchè collaboro alla realizzazione di diversi prodotti che spesso prendono anche vita nel mondo commerciale. Se posso aiutarti non credo ci siano problemi a sottoporre i disegni, è molto attrezzata per tutto quello che riguarda l’alluminio, materiale che, peraltro, io utilizzo moltissimo nei prototipi ( l’ultimo una rep STrap prusa simil i3 tirata giù da qui “http://www.imagecar.it/PDF/imageCar_RepStrap_2013_PDF_3D.pdf” che, non ho ancora avuto il coraggio di sottoporgli … vabbè ).

        1. Mauro Alfieri

          Ciao Stefano,
          grazie per la dritta, sai darmi un riferimento o un sito per sottoporgli i pezzi che dovrò realizzare?

          Mauro

  5. Marco

    Ciao, dato che questa shield utilizza il protocollo i2c, oltre ai servo posso controllare anche dei sensori come il DHT11 o MCP9808?

    1. Mauro Alfieri

      Ciao Marco,
      certo puoi utilizzare tutti i pin non usati dalla shield.

  6. Emanuele

    Sono un giovane dilettante, che alimentatore serve per far funzionare tutti i servo collegati alla scheda?
    grazie

    1. Mauro Alfieri

      Ciao Emanuele,
      dipende dalla corrente necessaria per i servo, considera quanto assorbe un servo singolo, di solito riportato dal sito del produttore del servo, e moltiplicalo per il numero di servo che colleghi alla scheda.
      Mantieni un 30% in più per i picchi.

  7. Donato

    Ciao,
    ho in mente un progetto che prevede 32 (trentadue) motori passo passo che dovranno far ruoare delle semplici lancette. Con una di queste shield posso pilotare 4 motori passo passo? Se si con 8 shield risolverei il mio problema. Hai qualche suggerimento in merito?
    Ti ringrazio.
    Donato

    1. Mauro Alfieri

      Ciao Donato,
      da quello che puoi leggere questa shield controlla 16 servo, che sono completamente differenti dai passo/passo.
      Prova ad approfondire sul sito del costruttore se qualcuno ha già eseguito un esperimento simile.

      1. Donato

        Grazie Mauro per la risposta.
        Conosco la differenza fra servo e stepper. Volevo solo sapere se posso collegare a 4 pin PWM di questa shield un driver per pilotate un motore passo passo. Nelle specifiche c’è scritto che si possono pilotare 16 servo o anche molti led con i PWM pin. Nelle FAQ ho trovato: Can this shield be used for LEDs or just servos? It can be used for LEDs as well as any other PWM-able device! Per questo motivo ho pensato che potesse essere possibile collegare gli stepper motor.
        In alternativa tu cosa mi suggeriresti per risolvere il mio problema.
        Grazi per la risposta e per tutto ciò che condividi.
        Donato

  8. Fabio

    Ciao Mauro,
    avrei una domanda su come usare questo shield 🙁 [link rimosso] ) per comandare 8 servo ad esso collegati.
    Non capisco come comunicare con i singoli Servo una volta inserito lo shield nel mio Arduino UNO R3.

    Qui ho trovato il Datasheet: [link rimosso] , ma credo mi serva un aiuto o uno sketch per capire come si manda il segnale al singolo Servo o meglio come funziona il protocollo I2C.

    Grazie mille in anticipo ed attendo una tua risposta.
    Fabio

    1. Mauro Alfieri

      Ciao Fabio,
      in primo luogo ti esorto al rispetto delle 2 semplici regole presenti in fondo ad ogni articolo: i link a portali generalisti non è consentito e viene rimosso.
      In merito alla richiesta se la tua scheda è uguale a quella mostrata in questo articolo puoi usare gli esempi forniti da Adafruit ( produttrice della shield ), qualora sia differente dovrai verificare le differenze sul datasheet del produttore ed eventualmente contattarlo per chiedere un esempio se non lo rilascia già sul proprio sito.

  9. juan

    Salve ho seguito diverso volte i tuoi tutorial, sono uno studente di elettronica; per un progetto scolastico sto realizzando un movjmento con dei servo e ho questa servoshield ma non ho capito bene la parte di programmazione per esempio come faccio a dire al software dove attaccare il servo. Volevo sapere se esiste un qualche tutorial da qualche parte.

    Grazie dell’attenzione

    1. Mauro Alfieri

      Ciao Juan,
      hai provato gli esempi rilasciati dal costruttore della shield ? Mi sembra sia Adafruit

  10. Gigi

    Salve, leggo il suoi articoli da parecchio tempo, davvero molto interessanti! Sono un neofita per quanto riguarda Arduino ed il mondo dell’elettronica, comprendo che la mia domanda non riguarda questa shield ma ho bisogno di aiuto per quanto riguarda la gestione di due servo motori; ho collegato i due servi ad un alimentatore switching esterno 5V 2A, ho ponticellato la terra sul GND di Arduino, quindi ho collegato i due pin PWM tra Arduino ed i servi; se premo i pulsanti i servi (sto usando quelli economici 9g) ruotano nella posizione richiesta e ritornano nella posizione iniziale, il problema è che vibrano e saltellano quando sono fermi. Sono quasi certo che il problema sia dovuto all’alimentazione ma come posso fare a risolvere? Grazie per l’eventuale risposta.

    1. Mauro Alfieri

      Ciao Gigi,
      articoli sui servo ce ne sono molti e avresti potuto inserire il tuo commento in un articolo dedicato, ad esempio, ai servo ed i pulsanti, ma l’errore non ti impedirà di ricevere risposta 🙂
      Il motivo della vibrazione potrebbe dipendere dalla tensione di alimentazione, anche se lo escluderei se hai alimentato i servo esternamente, con un alimentatore separato, oppure dipende, caso più probabile, dalla qualità costruttiva dei servo che sono dotati di elettronica economica e meccanica ancor di minor valore 🙂

  11. Mauro_Mo

    Salve,
    Per la tesina della maturità avevo avuto l’idea di realizzare un progetto simile a quello visto in questo link: https://youtu.be/fmTlPdHvGRI
    Io avevo intenzione di utilizzare due mani.
    Mi interessava sapere quali componenti e soprattutto quale scheda Arduino utilizzare per realizzarlo.
    Servirebbero un servo motore per “dito”, quindi massimo 10, e 2 motori passo a passo.
    Essendo alle prima armi, vorrei sapere quale scheda sopporta questo numero di apparecchiature o se serve un’espansione come quella di questo articolo.
    Mi piacerebbe anche se mi dessi informazioni su dove e quali motori comprare.

    1. Mauro Alfieri

      Ciao Mauro,
      so che esistono moltissime varianti di questo progetto realizzate nel web.
      La strada migliore per riprodurlo potrebbe essere quella di chiedere la lista dei materiali all’autore o inventarsi un modo tuo originale di farlo.
      Se vuoi controllare 10 servo puoi utilizzare anche la versione Arduino Uno con la libreria Servo puoi simulare il PWM su tutti i pin.
      Per i passo-passo considera di utilizzare almeno 2 pin per ciascun drive.

      1. Mauro_Mo

        Ciao Mauro, non sapevo dove fare questa domanda e allora la faccio qui sotto al mio commento precedente…
        È possibile far partire due programmi in contemporanea sulla stessa scheda, o, esiste un comando che permetta di scrivere 2 programmi in 1, in modo da farli funzionare contemporaneamente. Spero di capisca quello che volevo dire.
        Ad esempio se io, per ricollegarmi al progetto che ho scritto nel commento precedente, volessi aggiungere degli occhi mobili, tipo questi https://youtu.be/6jqvu_MQ5pc, posso farli funzionare insieme, cioè suona e nuove gli occhi.
        Penso ci sia un modo, sai come si fa?
        Grazie, Mauro

        1. Mauro Alfieri

          Ciao Mauro,
          non è possibile avere due programmi in runtime su arduino. Ma nell’esempio che fai non è neppure necessario, ti basta coordinare in modo corretto le parti di codice di etrambe le funzioni che desideri eseguire.

  12. Gabriele

    Ciao Mauro, per 10 servo posso usare un condensatore da 1000 uF 35 V?

    1. Mauro Alfieri

      Ciao Gabriele,
      dalla formula n * 100uF hai la risposta. considera che il produttore riporta per 5 servo un 470uF quindi c’è anche un po di margine in quei 100uF per servo.

      1. Gabriele

        grazie della risposta. intendevo va bene la tensione 35 V?

        1. Mauro Alfieri

          Si, considera che i servo lavorano a 5v per cui hai ampio margine di tolleranza sul condesatore.

          1. Gabriele

            va bene grazie mille.

  13. Mauro_Mo

    Perfetto, come pensavo. Diciamo che è il modo più semplice…

Lascia un commento

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

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