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.
Prima di inserire un commento, per favore, leggi il regolamento
28 pings
Skip to comment form