Tra gli ultimi acquisti fatti mi ha incuriosito una Motor shield prodotta in Italia non da Arduino ma con alcune caratteristiche davvero interessanti per essere utilizzata su un robot:
La Motor shield della microbot distribuita da robot-domestici.it ha:
- integrato L298 prodotto dalla STMicroelectronics;
- due pin digitali ( D7 e D8 ) disponibili per comandi esterni;
- due pin analogici ( A2 e A3 ) disponibili per input esterni;
- controllo della corrente assorbita da ogni singolo motore;
- freno motore;
- integrato TCN75A che comunica con Arduino mediante I2C la temperatura della shield;
Effettivamente non sono poche le cose che la Motor shield può fare per il tuo robot, in questo primo test ti concentrerai sulla parte di controllo dei due canali, il freno motore e il controllo della corrente assorbita, in un prossimo test proverai il sensore di temperatura e gli input / output su pin esterni.
specifiche tecniche della Motor shield
La Motor shield presenta le seguenti specifiche tecniche:
sono prese direttamente dalla documentazione fornita dal Produttore.
La documentazione tecnica della Motor shield contiene anche altre informazioni molto interessanti, i pin di controlla tra Arduino e la shield per controllare i motori:
ed anche uno schema dei segnali che devi inviare alla motor shield per controllare i due canali ( A e B ):
tutte queste informazioni sono molto utili quando dovrai realizzare il tuo sketch per un robot.
Come riporta anche la documentazione ufficiale lo schema in Tab.2 della motor shield riporta solo i segnali da inviare ai pin del canale A, tali segnali sono identici anche per il canale B, ti basta sostituire i pin a cui invii tali segnali.
Controllo assorbimento dei motori
Il controllo di quanto assorbe un motore in un robot o in un progetto complesso può indicarti un’informazione fondamentale sia per evitare di:
- bruciare il motore;
- fondere il chip L298 di controllo della motor shield;
- capire se un motore sta andando in stallo, ossia è bloccato meccanicamente;
Configurare la Motor shield
La motor shield ha alcuni jumper che puoi utilizzare per configurarla al meglio, puoi ad esempio escludere il controllo della corrente assorbita dai motori se non reputi utile al progetto tale controllo, spostando i jumper:
oppure puoi configurare da dove prendere alimentazione per i motori, se usare l’alimentazione proveniente dal Vin di Arduino o alimentare i motori con l’alimentazione esterna prevista sulla motor shield:
ti consiglio di usare sempre questa per non compromettere Arduino, inoltre la tensione supportata dalla motor shield per alimentare i motori è di 46v di picco e Arduino non potrebbe mai permetterti di utilizzare tali tensioni senza danneggiarsi.
Lo sketch di test della Motor shield
lo sketch di esempio che ho utilizzato è molto semplice, conta che per scriverlo ho impiegato 6min circa 🙂 non perché sia veloce a scriverlo ma perché dopo la lettura della documentazione tecnica è stato davvero semplice:
/********************************************************** * Motor Shield Robot * * Data creazione 15 marzo 2013 * Ultima modifica 15 marzo 2013 * * autore: Mauro Alfieri * web: mauroalfieri.it * tw: @mauroalfieri * /**********************************************************/ #define inputA1 9 #define inputA2 10 #define enableA 3 #define inputB1 2 #define inputB2 6 #define enableB 5 #define ampereA A0 #define ampereB A1 #define buttonA 4 #define buttonB 7 #define buttonC 8 #define buttonD 11 int velocitaA = 0; int velocitaB = 0; void setup() { Serial.begin( 9600 ); pinMode( inputA1,OUTPUT ); pinMode( inputA2,OUTPUT ); pinMode( enableA,OUTPUT ); pinMode( inputB1,OUTPUT ); pinMode( inputB2,OUTPUT ); pinMode( enableB,OUTPUT ); pinMode( ampereA,INPUT ); pinMode( ampereB,INPUT ); Serial.println( "----- Avvio -----"); } void loop() { int pressedA = digitalRead( buttonA ); int pressedB = digitalRead( buttonB ); int pressedC = digitalRead( buttonC ); int pressedD = digitalRead( buttonD ); digitalWrite( inputA1,pressedA ); digitalWrite( inputA2,pressedB ); digitalWrite( inputB1,pressedC ); digitalWrite( inputB2,pressedD ); analogWrite( enableA,255 ); analogWrite( enableB,255 ); Serial.print( "C Motor A: " ); Serial.print( analogRead( ampereA ) ); Serial.print( "C Motor B: " ); Serial.print( analogRead( ampereB ) ); Serial.print( "\n" ); delay( 500 ); }
per eseguire i test ho utilizzato 4 pulsanti rispettivamente collegati ai pin di arduino 4,7,8,11 ognuno dei pulsanti mi serve a comandare uno dei canali di input della motor shield, come vedi nello sketch.
Alle linee 50-53: leggi il valore proveniente dai 4 pin digitali;
linee 55-58: imposti il valore digitale di OUTPUT della motor shield con il valore appena letto dagli INPUT digitali;
linee 60-61: imposta a 255 il valore analogico di OUTPUT per i due canali, in pratica mandi al massimo entrambi i motori;
linee 63-67: leggi i valori di A0 ed A1, su cui ricevi l’informazione di corrente assorbita e scrivili sul monitor seriale.
Si tratta di uno sketch di esempio di cui ho realizzato anche un video:
in cui vedi anche i valori di corrente letti sul monitor seriale durante il test.
Buon divertimento.
28 commenti
Vai al modulo dei commenti
ciao sono nuovo di qui…
sarebbe grandioso includere i motoriduttori nel progetto dolly cam con arduino : )
luca
Autore
Ciao Luca,
è il nuovo progetto a cui sto lavorando si chiamerà Dolly Slider.
Se leggi un po di articoli sul Dolly capirai di cosa parlo.
Mauro
Ciao Mauro
Si l’ho visto ed é grandioso! io Intendevo una variante con il motoruduttore al posto del passo passo 🙂
Ciao
Luca
Autore
Ciao Luca,
come ti dicevo, se leggi il testo dell’articolo, è la variante a cui sto lavorando 🙂
Mauro
Ciao Mauro
Ottima guida!!
Però avrei bisogno di un ulteriore chiarimnto.. Se dovessi controllare anche il motore 3 e il motore 4 quali altri pin dovrei inizializzare?
Autore
Ciao Luca,
la motor shield presentata controlla soli 2 motori, se vuoi controllarne un 3° ed un 4° dovrai acquistarne 2 e collegarle in modo che non vadano in conflitto di pin.
Mauro
Puoi chiarire questo fatto di collegare due motor shield senza mandare in conflitto i pin?
Dove deduco i pin occupati normalmente e come controllare ciò?
Ciao
Autore
Ciao Massimo,
puoi dedurre i pin utilizzati dai datasheet di ciascuna scheda, sono informazioni che il produttore della shield rilascia solitamente.
Mauro
Scusa l’ho notato dopo che usavi la versione per controllare 2 motori.. Comunque non è che sapresti su quella da 4 quali pin sono interessati?
Autore
Ciao Luca,
esiste una versione a 4 motori?
girami il link e vedo se c’è adeguata documentazione.
Mauro
Salve , sono nuovo nel campo di arduino e della robotica vorrei chiederti un consiglio ho acquistato una dual dc motor shield con i cingoli della tamiya e la gearbox per il controllo dei due motori indipendenti ho collegato il tutto ma quando alzo il modellino i cingoli girano ma quando lo metto a terra i gingoli non girano più alla shield ho collegato un alimentazione esterna da 9v e i motorini assorbono 2a e vanno a 4,6v vorrei un aiuto grazie
cordiali saluti
Autore
Ciao Pasquale,
il tuo sembra un problema di peso/potenza potrebbe dipendere dal modellino troppo pesante o dalla potenza dei motori.
I motori assorbono 2Ampere ma il tuo controllo è in grado di erogare tale potenza?
Mauro
Grazie Mauro per avermi risposto, per il modellino ho usato il compensato per gli aereo modelli il controllo dei motori è questo : http://www.robotstore.it/open2b/var/catalog/images/430/0-ed11e760-800.jpg i motori usati sono :http://www.superdroidrobots.com/pictures/Tamiya/FA-130.jpg e la gearbox è : http://www.tamiyausa.com/images/product/430/70097/header_70097.jpg dalla descrizione che hai dato dell’ integrato L298 eroga 2A , ho collegato i motori a M1- M1+ ed M2- M2+ inoltre ho messo il jumper su pwr ed in che prende corrente da un alimentazione esterna di 9v ora mi chiedo, se è la potenza o l assetto degli ingranagi della gearbox con una configurazione di rpm elevata e quindi il cingolo non riesce a muoversi quando é a terra.
Grazie.
Autore
Ciao Pasquale,
il dubbio che hai puoi verificarlo velocemnete diminuendo o aumentando il PWM che hai impartito ai motori.
Mauro
Grazie Mauro , ho risolto il problema , praticamente il motore aveva poca torsione e non riusciva a regere il peso, spero che potresti darmi anche un altro consiglio , sul controllo ho applicato 2 motori e un alimentazione 9v ma collegando tutti i due motori il motore A funziona ma il motore B non funziona ma quando stacco il motore A funziona il B credo che sia un problema di alimentazione insufficiente , vorrei un tuo parere .
Grazie.
Autore
Ciao Pasquale,
è un comportamento anomalo, come hai collegato i motori?
I driver motori hanno di solito 2 canali: uno per il motore a dx ed uno a sx
Mauro
Salve Mauro
si ho collegato i due motori sui canali uno per il motore a dx cioè (M1- cioè gnd) (M1+ cioè vcc) e l altro per il motore a sx cioè M2- e M2+ , ma quello di dx funziona ma l’altro no .
l’alimentazione esterna è una duracel da 9v forse è un po scarica per questo il motore di sx nn riesce a partire.
Grazie
Autore
Ciao Pasquale,
accade la stessa cosa anche se invertì i motori?
É sempre lo stesso che non funziona?
Mauro
Carissimo Mauro, ti ringrazio anticipa mente, per tutte le tue spiegazioni molto utili.
Vorrei chiederti se e possibile collegare due potenziometri a questo a questo progetto “motor shield per robot”,
in modo da ridurre o aumentare la velocità dei motori, oppure se e possibile al posto dei pulsanti inserire un piccolo mouse, come quelli che vende futura elettronica.
Se fosse possibile avere un piccolo esempio. Sono un principiante alle prime armi, e mi sto avvicinando adesso a questo affascinante mondo.
Ti ringrazio infinitamente.
Beppe Falagario.
Autore
Ciao Giuseppe,
nel blog trovi tantissimi articoli dedicati ai motori ed al controllo tramite potenziometri, pulsanti, nunchuck ecc… ti consiglio la lettura di ciascun articolo, sopratutto se sei alle prime prove e sono certo che in breve sarai capace di realizzare tutto quello che ti occorre.
Buon pomeriggio
seguo da moltissimo il tuo blog tanto che ho anche riprodotto alcuni progetti ..
ho letto nei commenti che ci sono altri lettori che come me aspettano il dolly slider video (ad oggi ho costruito il famosissimo dolly photo)
e ne sono veramente fiero.
vorrei chiederti 2 info ,
la prima e se ci sarà mai il progetto dolly slider con motoriduttore!! lo attendiamo tutti con ansia 🙂
la seconda e se (il progetto Motor shield per robot )lo posso utilizzare con una scheda adafruit motorshild..
non penso che basti incollare lo sketch —
se non sabglio andrà convertito giusto ?
purtroppo non riesco a capire quali righe di codica dovrei cambiare,
se la cosa non è complicata (e non ti porta via tanto tempo, mi aiuteresti ) ? ti ringrazio in ogni caso ..
e he vorrei costruire un sali e scendi (con un moto riduttore solo ) per la cucina.
Autore
Ciao Andrea,
si prima o poi uscirà un kit dolly video con motoriduttore, sto studiando da alcuni anni questa materia e penso di aver trovato una buona combinazione con una collaborazione nata qualche mese fa con tre aziende della mia zona, ti farò sapere presto.
Per la motorshield adafruit sicuramente dovrai eseguire delle modifiche, tuttavia io non ne possiedo una e quindi non l’ho mai testata per realizzare uno sketch con essa. Penso che una volta compreso il principio base del funzionamento di questa scheda sarai facilmente in grado di adattare lo sketch alle tue esigenze.
Buongiorno!
Seguo da tanto il tuo blog!
In questo periodo, per un progetto universitario, sto eseguendo un controllo di due motori DC. Per fare questo mi tornerebbero utili molte caratteristiche di questa Motor Shield.
Posso chiederti dove trovarla?
Ti ringrazio
Paolo
Autore
Ciao Paolo,
se quelle riportate nell’articolo non ti bastano puoi verificare quelle pubblicate sul sito robotics-3d.com da cui l’ho acquistata.
Ciao Mauro, grazie del tuo articolo, molto utile e preciso.
Ho un problema con il secondo canale. In pratica il motore collegato al canale 2 è più lento, e fa anche un rumore diverso, più acuto.
Ho collegato una batteria esterna da 12 e 7ah.
Ovviamente ho provato ad invertire i motori.
Grazie
Autore
Ciao Bruno,
invertendo i motori, come hai scritto, hai rilavato che il secondo canale è sempre in sofferenza ?
Se la shield è quella mostrata i questo articolo potrebbe essere difettosa e puoi chiedere una verifica al rivenditore.
Se è differente devi consultare la documentazione del produttore per verificare se gli schemi del primo e del secondo canale siano identici dal punto di vista delle componenti esterne al driver.
Ho invertito i motori ed il canale è sempre in sofferenza.
La shield è identica a quella nell’articolo, quella della microbot. Purtroppo credo sia difettosa
Grazie comunque
Autore
Si bruno,
immagino sia un difetto della shield, io ne ho acquistate diverse ma non hanno evidenziato mai problemi di questo tipo.