Scopri come collegare la Motor Shield ad Arduino, e far muovere due motori in corrente continua con un semplice sketch.
Un video dice più di mille parole, puoi seguirlo per collegare prima l’alimentazione, poi i due motori ed infine l’Arduino al computer.
Lo sketch fa eseguire ai motori una semplice sequenza, ciascun passaggio dura 5 secondi:
- entrambi i motori in una direzione;
- entrambi i motori in direzione inversa;
- un motore in una direzione e l’altro in direzione opposta;
- ogni motore in direzione opposta alla precedente;
- sto di tutta la sequenza;
al termine ricomincia dall’inizio.
E’ solo uno sketch di esempio ma puoi facilmente renderti conto del funzionamento della scheda.
Lo sketch
/* * Sketch Test Motori Shield FE * * @author: Alfieri Mauro * @see: https://www.mauroalfieri.it * * @licenze: Creative common */ int pinDirA=2; int pinDirB=8; int pinPwmA=3; int pinPwmB=9; void setup() { pinMode( pinDirA,OUTPUT ); pinMode( pinPwmA,OUTPUT ); pinMode( pinDirB,OUTPUT ); pinMode( pinPwmB,OUTPUT ); } void loop() { // Test: rotazione dei motori // stessa direzione, vel digitalWrite( pinDirA,HIGH ); digitalWrite( pinDirB,HIGH ); // velocità massima analogWrite( pinPwmA,255 ); analogWrite( pinPwmB,255 ); delay(5000); // Test: rotazione dei motori // direzione inversa digitalWrite( pinDirA,LOW ); digitalWrite( pinDirB,LOW ); // velocità massima analogWrite( pinPwmA,255 ); analogWrite( pinPwmB,255 ); delay(5000); // Test: rotazione dei motori // direzione incrociata digitalWrite( pinDirA,HIGH ); digitalWrite( pinDirB,LOW ); // velocità massima analogWrite( pinPwmA,255 ); analogWrite( pinPwmB,255 ); delay(5000); // Test: rotazione dei motori // direzione incrociata digitalWrite( pinDirA,LOW ); digitalWrite( pinDirB,HIGH ); // velocità massima analogWrite( pinPwmA,255 ); analogWrite( pinPwmB,255 ); delay(5000); // Test: stop dei motori // nessuna direzione digitalWrite( pinDirA,HIGH ); digitalWrite( pinDirB,HIGH ); // velocità nulla analogWrite( pinPwmA,0 ); analogWrite( pinPwmB,0 ); delay(5000); }
E’ uno sketch davvero semplice, le cose importanti sono i pin che collegano la shield ad Arduino:
int pinDirA=2; int pinDirB=8; int pinPwmA=3; int pinPwmB=9;
che puoi cambiare grazie alla posizione dei jumper di selezione, e i comandi utilizzati dallo sketch per impartire il movimento:
digitalWrite( pinDirA,HIGH ); digitalWrite( pinDirB,HIGH ); analogWrite( pinPwmA,255 ); analogWrite( pinPwmB,255 );
il comando digitalWrite() lo usi per impartire la direzione al motore, HIGH per una direzione e LOW pe quella inversa; il comado analogWrite() lo usi per impartire la velocità di rotazione, nell’esempio è sempre impostato a 255 perchè i motori che vi ho collegato sono dotati di riduttore di giri a 12 giri al minuto e se impartisci velocità inferiori quasi non ne percepisci la rotazione.
Se usi motori in CC senza riduttore di velocità ti sarà utile variarne la velocità per controllarli meglio.
I comandi si ripetono in sequenza con un intervallo di 5 secondi.
Il risultato:
Buon diveritmento.
166 commenti
Vai al modulo dei commenti
Ciao,
Innanzi tutto complimenti per il blog, finalmente dei tutorial davvero ben fatti, esposti con chiarezza e competenza. Prendo spunto da questo sullo shield pilota motori perchè avrei bisogno di capire come pilotare due motori DC con un ponte H L293 per mezzo di due potenziometri. La peculiarità che dovrebbe avere il tutto sta nel fatto che il fermo motore deve avvenire con il potenziometro a metà corsa e invertire il senso di rotazione a secondo di come si ruota il potenziometro stesso e ovviamente variare la velocità di conseguenza. In rete per ora ho trovato solo schemi che pilotano si due motori con l’L293 e due potenziometro ma invertono il senso di rotazione per mezzo di uno switch. Ho già realizato questo schema ed ho capito come impostare i potenziometri per il loro funzionamento normale ma non saprei come impostare il funzionamento come richiesto dal mio progetto. Grazie per qualsiasi eventuale aiuto.
Autore
Ciao Diego,
quello che mi chiedi è più semplice di quanto immagini, ragiona su un solo potenziometro ed un motore, l’altro segue di conseguenza.
Il potenziometro collegato ad un ingresso analogico ti da valori da 0 a 1023, per cui puoi dire 0 – 511 rotazione oraria, 513 – 1023 antioraria, per tolleranza diciamo 0 – 500 oraria, 520 – 1023 antioraria, poi se il potenziometro ha bisogno di maggiore escursione come punto di 0 lo puoi variare.
A questo punto:
int pot=analogRead(pin); // pin a cui hai collegato il potenziometro;
if (pot > 0 && pot < 500) { int vel=map(pot,0,500,0,255); digitalWrite( pinDirA,HIGH ); analogWrite( pinPwmA,vel ); } if (pot > 520 && pot < 1023) { int vel=map(pot,520,1023,0,255); digitalWrite( pinDirA,LOW ); analogWrite( pinPwmA,vel ); } Stessa situazione con il secondo motore. Non ho provato il codice ma penso possa fare al caso tuo, eventualmente con qualche ritocco opportuno. Mauro
Fatto e funziona alle grande:
int accelerometro = 1; // ingresso potenziometro acceleratore
int valacc;
int pin293 = 2;
void setup(){
pinMode (2,OUTPUT);
}
void loop(){
valacc = analogRead(accelerometro);
if (valacc > 0 && valacc 512 && valacc < 1023) {
valacc = map(valacc,512, 1023, 0, 255);
analogWrite(3, valacc);
digitalWrite(2, LOW);
}
}
Autore
Ciao Marco,
sono contento, purtroppo il codice che incolli nei commenti é illeggibile per questo vi chiedo di non farlo.
Mauro
Ciao, avrei in mente un progetto. Premetto che ho già acquistato la shield, mi arriverà nei prossimi giorni. Il progetto consiste in una macchina con quattro motori comandata a distanza da due joystick, grazie all’utilizzo del led e del ricevirore IR. Avrei bisogno di aiuto riguardo al codice. Riguardo ai joystick i dati da inviare sono solo quelli riguardo l’asse x o y, non entrambi. Quindi con un joystick mandare in avanti il lato sinistro della macchina e con l’altro il lato destro. Come una specie di cingolato. Grazie in anticipo per le risposte!
Autore
Ciao Manuel,
il tipo di aiuto che ti occorre in cosa consiste?
Sai che per regola realizzo codice solo su commissione e che pubblico centinaia di articoli da cui puoi prendere spunto per costruire i tuoi progetti e le tue esigenze.
Scusami Marco,
ho notato il tuo codice, perchè anchio sto cercando di realizzare un progetto, pilotare un carro con due mortori utilizzando arduino leonardo come variatore e invertitore, ricevendo i segnali dai potenziometri di un radio comando ( per aereomodelli).
Ma vista la mia quasi totale ingnoranza nel programmare, non riesco a ricavare lo schema di collegamento dal tuo codice; es.:
Il pin accellerometro è A1 (analogico)?
L293 è collegato al solo pin 2 e non PWM ?
Potresti, cortesemente, inviarmi uno schema di collegamenti inerente al codice.
Ringrazio anticipatamente, e mi scuso ancora per la mia ingnoranza in materia.
Sergio.
Autore
Ciao Sergio,
perdonami ma non sono Marco e qualcosa mi dice che non sia l’unica confusione che hai fatto, in questo articolo non c’è alcun collegamento da eseguire, basta usare la Motor Shield Fe come descritto nel tutorial.
Se possiedi una motor shield differente e non sai come fare i collegamenti puoi leggere la descrizione delle linee 10-13 e comprenderai immediatamente come connettere la tua shield.
Perdonami la confusione MAURO,
e grazie per il consiglio, da quando ho istallato le nuove versioni dell’IDE Arduino.org Arduino.cc regna la confusione, tanto che non sono riuscito a creare un progettino “semplice” come quello descritto, di collegare 2 potenz. con la mia Adafruit Motor Shield. Se hai due stringhe di codice da postarmi per fare chiarezza te ne sarei veramente grato.
Saluti e a presto.
SERGIO.
Autore
Ciao Sergio,
non possiedo la Adafruit Motor Shield, puoi provare uno dei loro sketch di esempio ed adattare il mio se ti occorrono le medesime funzionalità.
Ho un problema simile, ma con la Adafruit Motor shield v.2
Da quello che leggo per il suo controllo va utilizzato il bus I2C, dove posso trovare chiarenti “comprensibili” su questo argomento?
Preciso che sto cominciando con Arduino, e queste che possono sembrare piccole difficoltà, per me sono enormi.
Grazie in anticipo
Autore
Ciao Daniele,
ti consiglio la lettura del mio corso arduino gratuito online.
Complimenti per il tutorial!
Se ho capito bene con la shield in questione posso realizzare un robot che con 2 motori a magneti permanenti va avanti, indietro e ruotare sul posto. E possibile farlo? Grazie e ancora complimenti!
Autore
Ciao Marco,
si è proprio quello per cui nasce questa shield.
Se sei interessato alla robotica guarda anche gli articoli sul robot beginner kit:
https://www.mauroalfieri.it/elettronica/robot-beginner-kit-con-arduino.html
https://www.mauroalfieri.it/elettronica/robot-beginner-kit-con-elettronica.html
https://www.mauroalfieri.it/elettronica/robot-beginner-kit-con-arduino-il-primo-sketch.html
Mauro
Ciao Mauro,
innanzitutto complimenti per il tutorial e per tutto il materiale che rendi disponibile su arduino. Vorrei pilotare un motore dc con velocità variabile: sai darmi qualche consiglio su come variare la velocità con un potenziometro (o con altro modo), che tu sappia ci sono schemi elettrici di esempio disponibili sul sito?
Grazie mille!!!!!!
Mauro
Autore
Ciao Mauro,
grazie per i complimenti.
Per il tuo progetto non ricordo se ho mai pubblicato un tutorial con le caratteristiche che ti occorrono, sicuramente ci sono molti tutorial sui potenziometri e sui motori in cc, prova a leggerne qualcuno e sono certo che saprai comporre lo sketch che ti serve.
Se non ci riesci scrivimi quali articoli hai letto e che difficoltà hai incontrato, ed io cercherò di darti un aiuto volentieri.
Mauro
Ciao Mauro,
ho un quesito che mi sta davvero “tormentando”: il software dell’esempio così com’è scritto, pilota due motori DC prima in una direzione, poi in un’altra,ecc… Il mio scopo principale però, utilizzando questo hardware, era quello di far girare il motore DC molto più velocemente, rispetto al caso in cui fosse alimentato semplicemente senza tale interfaccia, sfruttando l’integrato L298 che, correggimi se sbaglio, dovrebbe consentirmi di variare anche la frequenza. In effetti quest’ultima cosa così non riesco a farla: sai darmi qualche consiglio?
Thanks
Mauro
Autore
Ciao Mauro,
la Motor Shield FE può essere alimentata attraverso una sorgente esterna.
l’integrato L298 è un ponte-H che ti permette di variare la velocità e direzione del motore, per pilotarlo usi un segnale PWM per regolare la velocità e un segnale digitale per la direzione.
Il valore massimo del PWM è 255, inviando un segnale generato con la funzione analogWrite(pinPWM, 255) ottieni la velocità massima di rotazione.
Mauro
Gentile Mauro Alfieri, da poco mi sono appassionato al mondo dell’elettronica pur avendone scarse conoscenze ed inoltre, sono un appassionato di modellismo. (Premetto che mi piace realizzare manualmente ciò che costruisco, nel limite del fattibile e delle mie possibiltà).
E’, da un po’ di tempo, che mi frulla in testa di realizzare un aeromodello (bimotore) con due motori, ma il mio problema e riuscire a farli girare entrambi allo stesso numero di giri. Dunque, tramite Arduino volevo creare un programma che se uno dei due motori variasse il numero di giri (per qualsiasi causa) quello che gira più velocemente, riducesse la velocità fino al punto da uguagliarne i giri dell’altro.
Sto cercando di scrivere qualche programma con Arduino , ma se possibile vorrei qualche consiglio su come procedere.
Grazie mille e complimenti per i tutorial.
Gaetano
Autore
Ciao Gaetano, interessante progetto.
Immagino che i due motori siano elettrici e non a scoppio, correggi i se sbaglio, sono anche dotati di encoder?
Mauro
Innanzitutto grazie mille per la tempestiva risposta.
No, i motori sono a scoppio, difatti pensavo di regolarne i giri tramite due servomotori .
Facendo leggere i numeri di giri dei due motori tramite Arduino, i due servomotori sempre tramite Arduino, dovrebbero far rallentare il motore che gira più veloce( se questo per qualsiasi causa dovesse accadere) per poterlo bilanciare facendo rallentare sino ad arrivare ai giri dell’altro per poter procedere assieme. Scusandomi se la mia esposizione del problema risulti poco chiara?
Naturalmente, vorrei se possibile qualche consiglio oltre a come poter scrivere il programma, anche nel senso di semplificare questa operazione (se possibile) , soprattutto se si può procedere in maniera diversa per arrivare allo scopo.
Considera che sto tentando di avvicinarmi all’universo dell’elettronica e della (prima) programmazione. Universo da me sconosciuto ma che mi affascina molto.
Un caro saluto Gaetano.
Autore
Ciao Gaetano,
il codice non é complesso, e piotare i servo neppure, leggi gli articoli dedicati ai servo.
Quello che potrebbe essere difficile é rilevare il numero di giri, come pensi di riuscirci?
Mauro
Ciao Mauro, onestamente non lo so, o almeno non né sono sicuro.
Io pensavo, tramite Arduino, (e mi scuso se dico baggianate data la mia ignoranza in materia) di applicare un qualche sensore all’uscita dell’albero di ognuno dei due motori, che mi leggesse i numero di giri sia dell’uno che dell’altro e che me li trasmettesse ai servo ed in base al valore, quest’ultimi mi possano rallentare l’uno o l’altro.
Spero di essermi spiegato?
Adesso, il problema è sapere se tutto ciò nella pratica possa essere realizzabile.
Mi piacerebbe sapere cosa ne pensi, se hai idee alternativa e se posso avere qualche suggerimento su come realizzarle.
Grazie mille per la cortesia e la pazienza dimostratami.
Un caro saluto Gaetano.
Autore
Ciao Gaetano,
la maggiore difficoltà che vedo riguarda proprio il modo in cui puoi rilevare l’elevato numero di giri del motore.
Sono anche io un ex aeromedellista e ricordo che i motori presentano un numero di giri nell’ordine dei 13000 o più.
La scelta del sensore deve essere adeguata ed anche la risoluzione ( numero di segnali per giro ) devi calcolarla bene per evitare di ottenere errori di calibrazione dovuti ad imprecisione del sensore o elaborazione da parte di Arduino.
Mauro
Ciao Mauro, dopo quanto mi hai scritto, pensavo in alternativa di usare dei sensori ad infrarossi piazzati prima delle eliche in maniera tale che mi dia il valore dei giri delle eliche dei due motori ( con i dovuti calcoli considerato che ogni elica ha due pale dunque il valore verrebbe raddoppiato) e poi continuare con tutto il resto : scrittura del codice, far muovere il servo ecc.. ecc…
Cosa ne pensi? l’idea è sballata o potrebbe funzionare?
Ciao Gaetano.
Autore
Ciao Gaetano,
non sono certo che le sonde ad infrarosso siano in grado di rilevare quelle velocità.
Potrebbero risultare lente, dovresti fare dei test.
Mauro
ciao mauro,
complimenti per il tutorial ,spiegazione chiara e dettagliata !!
Premetto che è da poco che ho scoperto arduino e le sue illimitate applicazioni ,mi sto appassionando sempre più all’elettronica e volevo porti una domanda che forse risulterà banale..ma siccome so ancora poco riguardo questi componenti elettronici volevo capire meglio….
se io volessi pilotare 4 motori DC a 12 v in modo indipendente uno dall’altro, come posso fare utilizzando arduino uno… mi chiedevo se era possibile collegare più Motor Shield una sull’altra in modo da pilotare 4 motori..ma in questo caso la seconda Motor Shield non segue le stesse istruzioni della prima collegata ad arduino??
Gentilmente volevo anche sapere se è possibile pilotare questi quattro motori tramite 4 potenziometri , tarati in modo da avere lo zero a meta del loro campo di impiego.
Infine mi chiedevo se il tutto, è possibile collegarlo insieme in modo da potere far eseguire a questi motori uno sketch scritto oppure comandare i motori in modo manuale tramite i potenziometri.
Spero di essermi spiegato in modo abbastanza comprensibile e ringrazio per qualunque risposta .
Autore
Ciao Marco,
quello che scrivi è fattibile.
Il discorso 2 motor schield ti comporta inevitabilmente che devi prenderne due in grado di selezionare i pin di comunicazione, solitamente ogni schield usa 4 pin per i due motori di cui 2 per la dir ( Motore1 e Motore2 ) e 2 per il PWM ( velocità ).
Una delle shield che ho usato: Motor shield FE ha la possibilità di selezionare i pin e quindi poter essere montata a castello con altre dello stesso tipo, nota dolente devi essere in grado di saldate componenti SMD in quanto questa shield è fornita smontata e ricevo continui commenti da parte di utenti che hanno bruciato tutti cercando di costruirla.
Mauro
grazie per la risposta… quindi con questo tipo di Motor schield posso pilotare due motori come descritto sopra e montando a castello una seconda Motor schield posso pilotarne altri due …se non erro la seconda schield deve essere impostata su altri pin diversi da quelli utilizzati per l’altra giusto?? che pin mi consiglieresti di usare per la seconda ?? e in che modo dovrei indicarli quando faccio uno sketch ? se utilizzassi la Dual DC Motor Shield per Arduino che forse vendono già assemblata ,riuscirei a ottenere il mio obbiettivo?? grazie ancora
Autore
Si Marco,
hai bisogno che la Motor Shield ti permetta di utilizzare pin differenti di controllo per ciascun motore.
Mauro
Scritto cosi potrebbe funzionare correttamente ??
int pinDirA=2;
int pinDirB=8;
int pinDirC=4;
int pinDirD=12;
int pinPwmA=3;
int pinPwmB=9;
int pinPwmC=5;
int pinPwmD=10;
grazie dell’aiuto !!
Autore
Ciao Marco,
la selezione dei pin che hai scelto è corretta.
Mauro
potrei fare la stessa cosa ma solo con dei l293d?
sarebbe possibile anche variare la velocita?
Autore
Ciao Lorenzo,
la motor shield fe si basa sull’L293, puoi realizzare lo stesso schema sul tuo supporto e seguire il tutorial per variarne la velocità.
Mauro
grazie per la risposta ,
ok allora il problema sta solo nel saldare i componenti della shield sopratutto i componenti SMD… quali precauzioni e consigli mi potresti dare al riguardo??? grazie mauro.
Autore
Ciao Marco,
devi essere molto bravo con il saldatore e disporre o di una stazione saldante con punta da 0.3 e temperatura regolabile o di una stazione ad aria calda.
Senza questa attrezzatura e tanta esperienza le possibilità di saldare il componente SMD senza danneggiarlo si riducono di molto.
Mauro
Vedo nella foto una batteria al piombo che alimenta la scheda da quanti V è ? quanti sono gli Ah ?
Tisembrerà una domanda banale, ma mi stò avvicinando adesso ad arduino.
Grazie Manlio
Ciao Mauro,
dire complimenti per il tuo Blog è il minimo, grazie a te mi hai fatto venir voglia di riprendere il mio vecchio Hobby la robotica.
La mia Domanda è:
ho un Motor Controller che oltre a costarmi un sacco di soldi non vorrei buttarlo via ma riciclarlo in un Robot Rover autonomo che sto costruendo.
Inizialmente comandavo il Rover con un RC che con 2 Servo collegati a 2 Potenziometri per gli assi X e Y (sinistra destra – avanti indietro) riuscivo a gestirlo, adesso vorrei togliere i 2 Pot che erano collegati al Controller con tensioni 0 V indietro – 2,5 Fermo 5 V Avanti, ma non riesco a venir fuori di cosa utilizzare tra Arduino e il controller al posto dei POT.
PS:il Controller è un 4QCombi.
Grazie per una Tua eventuale risposta.
Autore
Ciao Ciro,
bellissimo progetto e grande passione, mi piacerebbe pubblicare le foto del tuo progetto prima e dopo se vuoi.
Per il controllo del rover vuoi usare arduino per sostituire i servo e potenziometri ma lasciare la ricevente e controllato con un radiocomando o vuoi sostituire tutto il sistema di controllo, compreso il radiocomando?
Mauro
Ciao Mauro, Grazie di avermi risposto.
il Rover di adesso almeno la parte controllo motori è così :
http://rev2.altervista.org/image/Controllo_Mot_Servi.jpg
io vorrei eliminare tutta la parte RC + i 2 POT comandati dai 2 Servo e sostituirli con
Arduino via software se fosse possibile o con aggiunta di qualche shield i2c o seriale ma che mi
gestisca in uscita la tensione che per questo Controller è 0 Volt indietro 2,5 volt fermo 5 volt avanti.
Da premettere che per motori ho utilizzato 5 motorini Tergicristalli che credo a pieno carico assorbono 9 – 10 A.
La RC la riciclerò per usarla in caso se volessi intervenire io da remote per un evenienza.
Il Rover attuale ha un peso di 75 kg Batterie compreso.
Ecco il mio vecchio sito per farti un’idea : http://devil2.altervista.org/
Spero che la tua mente diabolica avrà qualche idea per tirarmi fuori.
Per le foto se mi dai una tua mail ti daro’ tutto il materiale che ti occorre.
Ciao e Grazie.
Autore
Ciao Ciro,
bellissimo progetto.
Da quanto mi scrivi vuoi renderlo autonomo e non radiocomandato, giusto?
Il controller, da come mi scrivi accetta un controllo in tensione 0-2,5-5v in base al quale muove i motori.
Puoi provare con un segnale PWM in cui:
duty cycle 0% ( valore 0 ) dice al controller di muovere i motori indietro
duty cycle 50% ( valore 128 ) dice al controller di non muovere i motori
duty cycle 100% ( valore 255 ) dice al controller di muovere i motori avanti
Non è il modo migliore per farlo ma puoi provare a costo zero, in caso non funzioni potrai provare con una motor shield che comanda il tuo driver.
Raccontami il risultato della tua prova, il progetto è molto interessante.
Mauro
Ciao Mauro,
avevo letto del duty cycle, ma non riesco a capire come faccio a “dire” al Controller Fermati o vai avanti ?
se lui legge dal suo potenziometro la variazione di tensione 0 – 2,5 – 5, almeno come leggo esempio :duty cycle 0% ( valore 0 ) dovrebbe dare all’uscita 0 V e per il controller 0 V significa indietro. E’ quì che non capisco a come gestire le tensioni all’uscita con istruzioni.
Se non ti chiedo molto sarei felicissimo se scrivesti 2 righe di programma.
Grazie ancora.
Autore
Ciao Ciro,
fai come ti ho scritto, 0% indietro 50% fermo 100% avanti.
Mauro
Tipo questo ?
int POT_pin = 11;
int V1=0, V2=128, V3=255; // valori PWM duty cycle
int attesa = 1000;
void setup()
{
pinMode(POT_pin, OUTPUT);
}
void loop()
{
indietro();
delay(attesa);
fermo();
delay(attesa);
avanti();
delay(attesa);
}
void indietro()
{
analogWrite(POT_pin, V1);
}
void fermo()
{
analogWrite(POT_pin, V2);
}
void avanti()
{
analogWrite(POT_pin, V3);
}
Autore
Ciao Ciro,
si può funzionare come sketch, va provato con il tester e poi con il tuo controller.
Mauro
Ok le tensioni all’uscita del Pin 11 sono accettabili ho ottenuto INDIETRO 0 Volt, Fermo 2.49 V, AVANTI 4.96.
Appena lo provo con il controller ti farò sapere per ora Grazie !! ;-))
Autore
Eccellente 🙂
Non vedo l’ora di avere qualche filmato 🙂
Mauro
Ciao Mauro,
ho appena scoperto il mondo Arduino.
Mi sono informato ed ho acquistato Arduino Uno e una Motor Shield V2.0.
Il problema è che neanche il tuo sketch funziona.
Vorrei consigli.
Grazie.
P.S.: il tuo blog è uno dei migliori d’Italia te lo assicuro.
Autore
Ciao Giorgio,
grazie per i complimenti.
Ti chiedo gentilmente di non scrivere tutto in maiuscolo, ti ho corretto io il commento.
Per il tuo problema la motor shied che hai acquistato è quella dell’articolo?
Il motivo per cui non funziona lo sketch potrebbe essere la shield differente, non tutte le motor shield sono uguali e non tutte hanno i medesimi pin connessi ad Arduino.
Mauro
ciao complimenti per il tuo sito ricco di informazioni
mi potresti dare qualche info su come pilotare un motore dc con dei segnali pwm che variano la velocita in funzione di un dato che arduino riceve da un IMU che indica l’inclinazione?per essere piu’ pratico l’IMU registra un inclinazione di x gradi in e arduino deve pilotare un ponte H aumentando la velocita’ in modo progressivo all’aumentare del valore x.allo stesso modo per un inclinazione di -x deve aumentare la velocita del motore in senso opposto.
giusto per info sto cercando di capire se teoricamente potrei costruirmi una sorta di segway molto casereccio con materiali di recupero e sto trovando molte info su svariati siti .purtroppo non sono in gradi di scrivere sketch cosi complessi quindi voglio capire visto che trovo sketch per pilotare motori e sketch di calibrazione di IMU ma non saprei come unirli insieme.
l’altro problema che mi scoraggia un po e la sterzatadi questo”segway” che viene fatta tramite un potenziometro che registra valori destra/sinistra che devono far variare le velocita’ dei due motori in modo da far girare il mezzo ma qui altra difficolta’ cioe’ come fa arduino a pilotare i motori quando gli arrivano sia i dati dall’IMU sia i dati dal potenziometro?
scusami per la confusione ma e’ da qualche giorno che cerco risposte dal web e ne ho lette di tutti i colori.
Autore
Ciao Beppe,
il segway é un bel progetto, tuttavia complesso.
La parte più importante riguarda la stabilità che con sole due ruote deve essere stabilita dall’accellerometro.
Di solito l’accellerometro o IMU, come lo chiami, si usa per stabilizzato e dei potenziometri definiscono le velocità.
Per rispondere a quello c’è mi chiedi é solo questione delle logica sw che scegli tra la gestione del segnale IMU e quella del potenziometro.
Far variare la velocità di un motore in funzione della risultante dei segnali é cosa banale, ti basta definire a quale livello di segnale corrisponda quale valore PWM, puoi farlo con map() se é una variazione lineare o con una proporzione … fino ad arrivare a complesse formule di conversione segnale/PWM che decidi tu come realizzare.
Mauro
intanto ti ringrazio per la disponibilita’
io parlo di IMU perche’ navigando su altri progetti gia realizzati consigliano di usare accellerometro+giroscopio o separati o appunto uniti su di un unico circuito/componente chiamato IMU.Secondo te basterebbe un accellerometro a tre assi senza usare un giroscopio??
Non ho capito perche’ mi parli di potenziometri…cioe’ non e’ arduino direttamente che manda seganli PWM differenti a un ponte H per variare la velocita’?ovviamente li varia in relazione al dato che gli arriva dall’IMU
grazie
saluti
Autore
Ciao Beppe,
Non mi sono mai addentrato nella progettazione i un segway per cui non so dirti se sia sufficiente un accelerometro a 3 assi o se occorra anche un giroscopio.
Per i potenziometri immagino il loro utilizzo per impartire la direzione dx-sx come mi scrivevi.
Bisognerebbe fare dei test con tutto questo per verificare cosa sia necessario e cosa eliminabile.
Mauro
Ciao Mauro,
scusami per la banalità del problema che ti pongo. Ho usato lo sketch per il controllo di due motori con la shield RV3 ma utilizzando un solo motore. Il problema è che il motore montato gira solo in una direzione ( oraria) e non cambia verso..è come se l’istruzione digitalWrite( pinDirA,LOW) non funzionasse!
Puoi aiutarmi? Abbi pazienza…
Cordiali saluti.
Arnaldo
Autore
Ciao Arnaldo,
nel mio esempio io non utilizzo la stessa shield che hai utilizzato tu. Controlla che i pin a cui fai riferimento siano gli stessi.
Mauro
Ciao Mauro, scusami ma per la precedente questione ho risolto da solo. Ho controllato i dati della shield ed ho visto che il pin da utilizzare per il cambio di direzione è il 12 e non il 2 ( io avevo pedissequamente seguito il tuo sketch senza fare i conti con la shield…).
Grazie comunque.
Arnaldo
Autore
Ciao Arnaldo,
ottima intuizione, non avevo letto questo tuo commento quando ho risposto al precedente.
É lo spirito giusto quello che stai usando, nei tutorial commento linea per linea proprio per aiutarti a comprendere le parti da modificare.
Mauro
da semplice principiante ti domando gentilmente quali motori hai usato e il tipo di batteria ….. in modo da comperarli e poi provare anche io
Autore
Ciao Alex,
i motori sono dei motoriduttori in corrente continua e l’alimentazione è una da 12v se non ricordo male.
Trovi tutto su robot-domestici.it
Mauro
Ciao Mauro, non finirò mai di farti i complimenti per tutti questi preziosi consigli. Vorrei porti una domanda, sto costruendo un modellino cingolato, azionato da due motorini dei tergicristalli. Per la regolazione della velocità ho usato un tip 147 e per l’inversione un relè con doppio scambio e due contatti. Vorrei regolare il tutto con il pwm in modo da gestire i movimenti dei cingoli tramite potenziometri. Potresti aiutarmi nel codice? magari solo nella parte della mappatura dei potenziometri e per l’inversione di marcia. PS i potenziometri sono i joystick della playstation. Andrea
Autore
Ciao Andrea,
certo, e mi piacerebbe pubblicare il tuo progetto una volta ultimato.
Il potenziometro ti da dei valori sul pin Arduino a cui lo colleghi da 0 a 1023, se dividi tale valore otterrai 512.
Puoi dire al tuo sketch che se il valore è inferiore a 512 ( da 0 a 511 ) deve far ruotare in un senso il motore, se è superiore ( da 513 a 1023 ) deve ruotare in senso inverso.
Per la mappatura del range 0-511 o 513-1023 puoi utilizzare il comendo map(), nel blog ci sono tanti articoli in cui descrivo come utilizzarlo e sul sito arduino.cc trovi la sintassi di utilizzo.
Mauro
Grazie mille per la risposta, vorrei però sapere come sarebbe la riga di codice anche di un solo motorino per la marcia avanti e quella indietro. Sto leggendo in questi giorni le righe di codice per il pwm ma non ci sto capendo nulla.
Autore
Ciao Andrea,
trovi tutto nei miei articoli sul rover Leonardo o simili.
Si tratta di 2 righe di codice per ciascun motore una gestisce la direzione ed una la potenza in PWM.
Mauro
Ciao Mauro, sono riuscito a collegare tutto e ho fatto anche il programma..sembrava funzionare tutto per il meglio ma invece c’è un problema..metto un pezzo del programma cosi mi spiego meglio:
void loop()
{
val1 = analogRead (pinMot1); // potenziometro 1 motore destra
val1pwm = map (val1, 0, 500, 0 ,255);
analogWrite( pinPwmA,val1 );
delay(15);
val1pwm = map (val1, 520, 1023 , 0, 255);
analogWrite( pinPwmA,val1 );
delay (15);
Serial.print(“valore: “);
Serial.println(val1);
if (val1 < 512)
{
digitalWrite (dirA, HIGH);
}
else
{
digitalWrite (dirA, LOW);
}
}
ho scritto che se il joystick si trova fra 0 e 500 il pwm va da 0 a 255 quindi il motore va in avanti e accelera mano mano che io spingo la levetta….poi gli ho detto che se sta fra i 520 e 1023 va da 0 a 255 e il motore tramite relè gira all'indietro. Il problema sta nel fatto che quando vado all'indietro il motore parte a tutta velocità con la levetta quasi nella posizione di riposo e se la spingo al massimo il motore si ferma…il problema sta nel codice? grazie mille per la risposta…
Autore
Ciao Andrea,
non si se sua xchè il codice è stato incollato nei commento, come chiedo di non fare, ma mi sembra che ci sia un errore di logica.
Non puoi usare la stessa variabile per mappare un valore se non la discrimini con in if;
Prova a spostare nell’if anche il map della variabile val1 e assegnala al PWM dopo l’if vedrai che funziona meglio.
Mauro
Ciao MAuro,
è passato un po di tempo dal mio ultimo post, ma era doveroso dirti e farti vedere a che punto sto con il progetto il rover ha raggiunto il peso di 28,5 Kg e come promesso ti lascio il Link della Clip, sto ancora in alto mare per realizzazione completa ma un passo alla volta riuscirò a finirlo.
Grazie ancora dei tuoi consigli.
https://www.youtube.com/watch?v=qCNj7L3QJ-I
Autore
Ciao Ciro,
é stupendo.
Non ho capito xchè il test con arduino uno é fallito, cosa ti aspettavi? Nel video non l’ho letto.
Mauro
Ciao Mauro,
lo stesso sketch con Arduino Uno o Arduino 2009 il Sonar un SRF08 dopo un po smetteva di funzionare me ne accorgevo dal suo led che dopo 10 – 15 lampeggi si spegneva lasciando il rover senza controllo e andava a sbattere, non sai quante volte ho rifatto lo sketch, modificando i tempi, la logica ma niente.
Siccome chi gestirà il rover , Motore – Sensori – GPS – IMU sarà un Arduino Due, ho preso un Mega che avevo a portata di mano, ho caricato lo sketch che prima girava sull’UNO e non ho avuto più problemi come noterai dalla Clip nel primo test dalle poche volte che non si bloccava il sonar, dovevo intervenire io con la mano per farlo fermare ed avevo la distanza di fermo motori a 70 Cm, al passaggio con il Mega lo vedi nel test successivo.
Il primo gradino è superato.
Autore
Ottimo Ciro, grazie per la delucidazione.
Mauro
come mai l’uno ha manifestato questo problema?
Autore
Ciao Massimo,
a quale problema ti riferisci?
Mauro
quello che riporta Ciro, ovvero che dopo qualche lampeggìo l’uno non funziona.
Autore
Ciao Massimo,
mi fido di quello che ha scritto Ciro in quanto non possiedo il componente che lui ha provao.
Se sei curioso puoi acquistare un componente identico e provare, magari condividendo la tua eperienza.
Mauro
Per ora sto provando un altro progetto di studio: il robot beginner 4wd che ho preferito per il fatto che tratta l’uso di una shield anzichè il componente TB6612FNG
https://www.mauroalfieri.it/elettronica/robot-beginner-kit-con-elettronica.html
se devo esser sincero sto trovanto alcuni problemi relativamente alla comprensione di aspetti legati ai consumi, voltaggio e corrente. Mi sembra che per i vari progetti siano quasi dei dogma, nel senso che non ho alcuna idea di quanto richieda in termini di diff di potenziale e in termini di intensità di corrente il motore servo che dispongo, di quanto per ogni motorino, di quanto per il sensore sharp.
Tragicamente non mi è nemmeno chiaro quanto gestisca l’arduino uno, o meglio, mi è (quasi) chiaro ma non come si possa bypassare tali limiti per progetti più grossi.
Ad esempio i 2motori DG02S (che nel 4wd sono 2 coppie di motori) trovo che la scheda tecnica trovata navigando parla di usarlo con 3V e 0.125A. Questo corrisponde ad un’alimentazione di 6stilo in serie e collegando i motori secondo uno schema del tutto simile a https://www.mauroalfieri.it/wp-content/uploads/2012/03/Arduino+Motor-Shield.jpg
?
Sempre di mio interesse ci sono i ponticelli della shield dei quali non ho compreso cosa influiscono e cosa sarebbe cambiato se li avessi montati diversamente
ciao
Autore
Ciao Massimo,
Il beginner kit é ottimo per chi é alle prime armi.
Il 4wd é altrettanto interessante per il tipo di controller motori come tu hai scritto.
Per gli assorbimenti puoi seguire due strade:
1. controllare i datasheet dei componenti che usi, su internet si trova tutto;
2. usare un multimetro in serie ad uno dei poli del componente e verificare quanto assorbe.
Per Arduino e l’erogazione di corrente trovi sul sito ufficiale il dato corretto.
Per bypassare il limite della corrente erogata da arduino puoi usare degli alimentatori esterni, ho scritto un articolo su un convertitore dc-dc che ho provato ed uso davvero interessante.
Continua a sperimentare e se ti occorre aiuto commenta gli articoli che trattano l’argomento su cui vuoi aiuto.
Mauro
Ciao Mauro
è da poco che utilizzo Arduino e facevo delle prove con la Arduino Motor Shield REV3 per controllare dei motori CC in velocità e direzione. Le prime prove di controllo solo velocità tramite un potenziometro non sono proprio andate come speravo, nel senso che in pratica il motore gira solamente con il potenziometro quasui tutto al massimo , per il restante emette un fastidiossimo ronzio in alta frequenza …..
qualche idea del perchè succede questo ?
Grazie della risposta e saluti
Autore
Ciao Antonio,
prova a farti scrivere sul monitor seriale il valore letto dal potenziometro, potrebbe essere un errore di collegamento o di lettura a causare il tuo problema.
Stai utilizzando la shield dell’articolo con una fonte di alimentazione esterna ed adeguata ai tuoi motori?
Mauro
Ciao Mauro, io vorrei realizzare un robot utilizzando il beginner kit che mostri in altri tutorial utilizzando però una motor shield e un sensore ad ultrasuoni al posto di quello ad infrarossi. Il kit utilizza 4 stilo che vanno collegate tramite jack ad arduino, in questo video tu mostri come alimentare i motori collegando l alimentazione direttamente alla shield. Nel caso del robot come dovrei procedere? Le 4 stilo dovrebbero essere sufficienti per alimentare il tutto perché alla fine utilizzo solo un sensore diverso e una shield al posto della scheda motori. Cambia qualcosa? Come dovrei procedere? Grazie 🙂
Autore
Ciao Bobby,
L’alimentazione é uno dei grandi temi nei progetti arduino.
Il datasheet dell’arduino uno dice chiaramente che arduino va alimentato dai 7v ai 12v per cui 4 stilo da 1,5=6v é già un limite che rischia di compromettere il progetto.
Considera che suoi nuovi beginner ho fatto sostituire il pacco batterie con uno da 6 pile da 1,5v=9v
Oltre ad arduino hai anche la motor shield ed il sensore da alimentare, ti consiglio o un pacco batterie da 9-12v per alimentare il tutto collegando il sensore ai 5v di arduino ed il resto direttamente al pacco batterie oppure utilizza 2 pacchi batterie uno con una pila da 9v per arduino ed uno da 6v per la motor shield.
Il sensore collegarlo sempre ai 5v di arduino.
Mauro
Puoi dirmi come contattarti in privato? Cosi appena mi arrivano i vari pezzi ti invio le foto dei collegamenti se possibile. Grazie dei consigli e complimenti per l’ottimo sito !
Autore
Ciao Bobby,
trovi i miei riferimenti nella pagina contatti del blog.
Se mi mandi tutto posso farti un preventivo per il tuo progetto.
Mauro
Ciao Mauro, guardando i tuoi video vorrei provare a rifare lo stesso progetto appunto con 2 motori Dc, il problema da cui non riesco a uscirne è quali motori prendere. io ho la motorshield ufficiale di arduino che funziona con una tensione tra 5V e 12V ma con amperaggio massimo di 2A a canale. Ora vedo spesso motori che rientrano in quel range ma superano l’amperaggio massimo specie sotto carico, ho trovato però motori dc con voltaggio 6V con amperaggio che rimane sotto i 2A sotto sforzo… quindi ottimo, ma alla motor shield sulla linea Vin come dò i 6V?? Bastano 4 batterie classiche da 1,5V messe dentro pacchi batterie? se invece ne prendessi uno da 4,5V basterebbero 3 batterie sempre connesse al vin e tutto funzionerebbe senza problemi ??
Autore
Ciao Riccardo,
la motor shield puoi alimentarla esternamente con il voltaggio che desideri da 5 a 12v, per cui se usi dei motori da 6v usa pure 4 pile da 1,5v.
Mauro
Ok chiarissimo grazie mille, una piccola cosa però…nel caso collegassi 2 motori da 6V uno ogni uscita della shield dovrei raddoppiare la tensione sulla motor shield collegando alla Vin di quest’ultima quindi 8 batterie da 1,5V o una da 12V giusto??
Autore
Ciao Riccardo,
assolutamente NO !!!
Ti consiglio di leggerti qualche articolo on-line di elettronica base da cui apprendere almeno la differenza tra Tensione (V) e Corente (A)
Mauro
Leggendo alcuni articoli ho capito che la tensione è una differenza di potenziale tra i 2 capi del conduttore e la corrente sono le cariche che scorrono nel “canale generato dalla differenza di potenziale” nell’unità di tempo, ed esse sono legate dalla formula V=R*i (dove R è la resistenza che frena la corrente facendone fluire quanto basta). Quindi nel mio caso dei motorini collegati alla shield sia se ne ho 1 che 2 entrambi da 6V ognuno collegati alla shield mi bastano sempre 4 batterie da 1,5V perchè la tensione andrebbe bene sia per un solo motorino che per entrambi i motorini collegati (stando sempre attento a non superare i 2Ampere per la corrente su ogni uscita della shield).
L’unica cosa che potrebbe cambiare quindi avendo 2 motorini attaccati è la durata delle batterie che sarebbe un po’ superiore nel caso di un solo motorino collegato.
Quello che ho capito è tutto giusto??
Sperando di non aver detto assurdità la ringrazio per tutti gli aiuti 🙂
Autore
Ottimo Riccardo,
il principio fondamentale é che tensione (Volt) e corrente (Ampere) sono componenti legate dalla legge di Ohm che hai citato.
Nel tuo caso la tensione deve essere sempre 6v e la corrente necessaria a far muovere i due motori ma non superare i 2A per motore quando scegli questi ultimi.
Mauro
Grazie mille dell’aiuto e dei chiarimenti e complimenti per tutti gli articoli è un blog fenomenale!
Salve
complimenti per il blog, che trovo completo e chiaro nel delucidare i vari argomenti.
Volevo chiederti e cito
” il comado analogWrite() lo usi per impartire la velocità di rotazione, nell’esempio è sempre impostato a 255 perchè i motori che vi ho collegato sono dotati di riduttore di giri a 12 giri al minuto e se impartisci velocità inferiori quasi non ne percepisci la rotazione. ”
da dove salta fuori esattamente il 255?
sto giocando con questo “motore”
http://www.robotstore.it/product/341/Micro-Motoriduttore-6V-160rpm-18.8Ncm-con-asse-posteriore.html
e mi chiedevo che valore dovrei impostare nello sketch per un corretto funzionamento-
Aspetto tue riposte
Cordiali Saluti
Autore
Ciao Silvio,
il PWM arduino puoi impostarlo da 0 a 255 che corrisponde al duty cycle pwm 0%-100%
Per comprendere questi valori puoi leggere il mio articolo sui segnali digitali e pwm, lo trovi nel corso on-line
Mauro
Ti ringrazio 🙂
Cordiali saluti
Silvio
Salve Mauro, mi sono imbattuto per caso sul tuo. blog, vorrei costruirmi una sedia per invalidi con il Segway, quelle in commercio hanno tutte il sistema di guida con una barra a forma di manubrio, io verrei sostituirla con un joystick , essendo digiuno di elettronica vorrei il tuo parere se e’ fattibile.
Ti ringrazio per l’attenzione, cordiale salut
Dario
Autore
Ciao Dario,
forse non mi è chiaro il tuo intento, tuttavia trovo poco adatto il sistema segway per una sedia per invalidi.
Il sistema Segway si basa sulla postura ed i pesi del corpo e si bilancia con degli accellerometri, tutte cose che rischiano di mettere in pericolo la sicurezza e l’incolumità dell’invalido.
Mauro
Salve….nell’intento di collaudare la motor shield in oggetto ho scritto il programma riportato nell’articolo,non funzionando ho provato a cortocircuitare l’SMD seguendo lo schema del circuito stampato…la domanda sembrerà banale ma: é normale che le coppie OUT siano cortocircuitate tra loro?(OUT1 con OUT2 ed OUT3 con OUT4)
ringrazio e rinnovo i complimenti.
Autore
Ciao Marco,
dopo l’assemblaggio hai verificato che tutti i pin fossero saldati correttamente e non ci fossero cortocircuiti tra i pin dell’SMD.
Questa shield ha il difetto di richiedere un’ottima manualità e mano ferma per poter essere assemblata correttamente.
Mauro
Ciao Mauro,
C’è un modo per cambiare il senso di rotazione senza la motor shield?
Autore
Ciao Alex,
la motor shield consente il controllo dei motori con il classico ponte-H e serve principalmente per evitare che arduino si bruci in presenza di elevate correnti di assorbimento dei motori.
Puoi utilizzare una relay shield ma non controlli la velocità di rotazione dei motori.
Mauro
salve ho comprato una “Adafruit Motor Shield” ed ho collegato due motori cc a M1 e M2, ho caricato lo sketch presente in questa pagina, ma non è successo niente. Cosa sbaglio? Premetto che sono alle prime armi.
Grazie
Salve , trovo molto interessanti i tuoi articoli , ma dovendo fare uso di arduiino e un motor shield vorrei un chiarimento . DEvo usare 2 motori per girare una telecamera in verticale e orizzontale , per farlo dovrei ovviamente usare un potenziometro doppio asse ( joystick per capirci) ma , i fili che hanno i potenziometri sono 3 +3 ( lasciando il discorso di 2 motori , ma facendo esempio ad uno solo il potenziometro per regolare velocita’ e direzione del motore ha 3 piedini dove li collego??? sono neofita e la passione non e’ piu q
Autore
Ciao Francesco,
ti consiglio di leggere il mio corso on-line gratuito o partecipare ad un mio corso in aula per approfondire alcuni basilari concetti sui quali denoto confusione in questo momento.
Un potenziometro ha 3 contatti ( +,Gnd e segnale ) come collegarlo lo trovi descritto in ogni mio articolo sui potenziometri.
Un motore in cc è del tipo meno indicato per il progetto che desideri eseguire a meno di non utilizzare un motore+encoder ed il codice si complica molto..
Ciao Mauro,
ho appena comprato la motor shield R3 e volevo provarla utilizzando il tuo sketch qui sopra:
collego la motor shield alla board arduino uno,
collego 2 motorini da 6 volt alla morsettiera posizioni A e B
collego batteria da 9V, rispettando le polarità, alla stessa morsettiera dei motori (Vin e GND)
alimento la board tramite USB
copio il tuo sketch e lo carico sulla scheda
ma tutto rimane fermo, non c’è tensione ai capi del motore
Non riesco a capire cosa possa aver sbagliato, mi puoi cortesemente aiutare?
Grazie in anticipo.
Autore
Ciao Alberto,
innanzitutto ti invito a leggere i miei articoli e non limitarti solo al copia e incolla, apprenderai cose molto interessanti e sarai in grado di gestire problemi come quello incontrato in pochi minuti.
La scheda che uso in questo sketch non è la motor shield R3 ma la motor shield fe, tra loro le due shield sono differenti e i pin PWMA, PWMB, DIRA e DIRB sono posizionati su pin diversi.
Grazie,
me ne sono accorto anche io dopo una buona oretta di tentativi!!!!!!
Ho letto con interesse il tuo programma ma davo per scontato la parte di iniziale delle definizioni…..errore!!!!
Grazie comunque dell’aiuto e dei numerosi esempi che metti a disposizione sul tuo prezioso sito.
Ciao Mauro,
vorrei un informazione riguardante la motor shield, io possiedo una Dual DC motor shield come questa
http://www.robotstore.it/open2b/var/catalog/images/430/0-ed11e760-800.jpg , lo già provata in precedenza su arduino uno e va bene, ma ora ho acquistato arduino yun , la mia domanda è se posso inserire la shield su arduino yun, anche se so che una saldatura del shield fa contatto con la porta Ethernet con la yun ma quella la isolerò con il silicone, vorrei sapere se ha sempre le stesse funzionalità ?
un altra cosa che vorrei sapere e perché l integrato L298P si surriscaldi infetta, nei datasheed della scheda mi dice che La massima tensione supportata è 46V ma Il circuito L298 può diventare molto caldo quando lavora con correnti superiori ad 1A puoi spiegarmi cosa vuol dire .
Grazie,
Pasquale
PS: L’alimentazione esterna per la shield lo alimentata con una lipo 11.1v
Autore
Ciao Pasquale,
dovresti controllare che i pin di questa shield siano compatibili, come funzionalità, con quelli della Yùn.
Controlla i datasheet di entrambe.
Vuol dire che devi far attenzione a quanto assorbe il motore che stai collegando, questa shield lavora al massimo con 2A per canale e si surriscalda se la usi correnti superiori ad 1A.
I tuoi motori che caratteristiche possiedono?
Ciao Mauro ,
ho controllato i pin di entrambe le schede la yun con la shield e combaciano hanno le stesse diciture,
riguardante i motorini io ho una macchina rc comprata dai cinesi ed ha un motorino della tamya come le 4wd per lo sterzo e credo che vada a 3,5v e uno per l accelerazione che va a 5v, puoi consigliarmi che voltaggio posso usare?
Autore
Ciao Pasquale,
per il voltaggio io userei un 5v per il motore di accelerazione ed un partitore di resistenze per i 3,5v, ho scritto un articolo sui partitori di resistenze che puoi leggere.
Senza conoscere l’amperaggio assorbito dai motori sotto sforzo non puoi dedurre se la motor shield è adeguata o si brucerà col tempo a causa di un eccessiva richiesta di corrente.
salve io ho una Adafruit Motor Shield, andando a vedere i pin utilizzati, dalla guida ufficiale:
Digital pin 11: DC Motor #1 / Stepper #1 (activation/speed control)
Digital pin 3: DC Motor #2 / Stepper #1 (activation/speed control)
Digital pin 5: DC Motor #3 / Stepper #2 (activation/speed control)
Digital pin 6: DC Motor #4 / Stepper #2 (activation/speed control)
e Digital pin 4, 7, 8 and 12 are used to drive the DC/Stepper motors
allora ho modificato lo sketch all’inizio:
int pinDirA=4;
int pinDirB=7;
int pinPwmA=11;
int pinPwmB=3;
naturalmente i motori in uso sono motor1 e motor2
Autore
Ciao Rossano,
premetto di non aver mai provato questa shield, lascio ad altri utenti del blog la possibilità di darti consigli migliori dei miei.
Leggendo la documentazione ci sono degli esempi da usare con la libreria rilasciata da Adafruit e penso che sia solo attraverso quella libreria che tu possa controllare i motori connessi a questa shield.
grazie proverò anche se non ho molta dimestichezza con la programmazione. Ma in teoria se individuo i pin utilizzati dalla scheda potrei anche modificarli?
Autore
Ciao Rossano,
forse è più semplice se adatti il mio sketch all’uso della libreria che il produttore ti rilascia per usare la shield.
In questo modo non dovrai ricavarti la piedinatura della scheda.
Salve Mauro,
prima di iniziare un impegnativo percorso per risolvere il mio problema, gradirei avere un suo parere:
ho un paio di forbici elettroniche felco a cui tagliando il cavo ho bruciato la scheda elettronica.
Ritengo che essendo un piccolo motore elettrico controllato da un “interruttore” (il grilletto) a pressione,
probabilmente arduino con un motor sheald possa sostituire la vecchia scheda che al momento non viene piu prodotta.
Non ne sono certo perchè non sono sicuro di poter trovare le specifiche dei componenti elettrici delle forbici Sono comunque intenzionato a provare.
Per avere un’ idea
https://www.youtube.com/watch?v=WCW_gqliay4
La ringrazio anticipatamente e le faccio i complimenti per il lavoro svolto
Francesco Bianciardi
Autore
Ciao Francesco,
probabilmente è possibile, tuttavia senza le caratteristiche tecniche del motore sarà dura anche solo per la scelta della motor shield da utilizzare.
Complimenti per il sito Le chiedo se è possibile comandare da pc co interfaccia grafica il progetto sopra elencato e possibilmente con pulsanti per la frenatura e lo stop di emergenza.
Vorrei comandare le loco del plastico su due circuiti separati possibilmente con indicazioni per lo sketch perchè è il mio primo approccio con Arduino.
Grazie
Autore
Ciao Franky,
penso sia possibile usando la comunicazione seriale tra Pc e arduino.
Dovrai modificare lo sketch per ricevere comandi seriali e scrivere un programma su Pc, con i pulsanti, che invii i comandi seriali definiti ad arduino.
Buona sera,
Complimenti vivissimi per il blog sa cui ho imparato una valanga di cose(!) facendomi diventare un assiduo frequentatore.
Stavo creando uno sketch per movimentare un cassetto nel quale ci sono dei fine corsa per il motore, ma ho riscontrato un problema. Una volta arrivati al fine corsa il motore non si ferma pur avendo integrato un if nello sketch. Ho fatto ricerche su internet ma non ho trovato nulla di utile.
Posto il codice qui: http://pastebin.ubuntu.com/9685713/
mentre lo schema elettrico è questo:http://imagebin.ca/v/1nHUZfiouCyL
Ho sostituito dei pulsanti ai fine corsa ma fondamentalmente penso che sia la stessa cosa.
Un grazie infinito.
Autore
Ciao Francesco,
mi fa piacere che tu sia un assiduo frequentatore del blog e che abbia imparato tanto.
Non correggo codice scritto da altri perché non sono in grado di fare correzioni senza riprodurre tutto lo schema e testare lo sketch e … capirai .. che con oltre 1500 utenti assidui al giorno non ho tempo per provare tutti gli sketch.
Posso consigliarti di non usare gli if per la gestione dei finecorsa ma di usare i while come ho fatto in alcuni sketch per il dolly con finecorsa.
Certo è comprensibile.
Grazie mi hai aiutato comunque. Almeno ora so da dove iniziare 😀
A presto.
Ancora grazie. Dopo il tuo suggerimento sono riuscito a fare quello che volevo.
Ti ringrazio tantissimo.
Autore
Bene Francesco, sono contento.
ciao. mi chiamo Giacomo.avrei bisogno del tuo aiuto riguardo ad arduino. io vorrei creare un piccolo plastico ferroviario e vorrei controllare le locomotive automaticamente con arduino e motorshield. il tuo esempio,su come gestire due motori dc in velocità di rotazione e direzione è perfetto per me. però vorrei inserire anche un tempo di attesa . voglio far partire la loco da un punto,farla arrivare ad un altro,ad una certa velocità e in un certo tempo,poi voglio che stia ferma un tempo che posso decidere e poi tornare al punto di partenza.sono in possesso di arduino uno e motorshield.
se mi puoi aiutare te ne sono grato.
grazie.
Autore
Ciao Giacomo,
il tempo di attesa negli sketch arduino è dato dal comando delay();
ok.
ho capito.
l altro dubbio che ho è relativo alla scheda motor shield che ho io ,che è la L298P SHIELD V1.2
per sicurezza ti mando una foto.
siccome è diversa da quella usata nella tua spiegazione vorrei sapere se è uguale lo sketch da caricare e soprattutto ho il dubbio sui ponticelli M1 M2 E1 E2 ecc . e quelli di alimentazione se vanno bene come sono posizionati sulla mia scheda tenendo presente che voglio alimentare i motori con alimentazione separata come hai fatto tu,scusa la mia ignoranza ma sto cercando di imparare con arduino. grazie
Autore
Ciao Giacomo,
la shield è differente da quella che uso e purtroppo non l’ho mai testata.
Dovresti consultare la documentazione del produttore, che certamente rilascia, e verificare che differenze presenta rispetto a quella che presento in questo articolo.
Gentile sig. Mauro le scrivo per qualche informnazione sui progetti arduino.
La mia esigenza e’ pilotaren i 2 motori del mio Jimmi Jib con un joystick
quindi pn e tilt dei motori a velocita e direzione diverse .
guardando questo tutorial mi sorge un dubbio , una volta terminato
il programma di pilotaggio -arduino deve restare collegato al pc per funzionare , oppure
completato il programma ha solo bisogno di alimentazione da 5 volt per funzionare . ?
Grazie Francescop
Autore
Ciao Francesco,
Arduino è autonomo, dopo l’upload dello sketch ( programma ), puoi usare solo l’alimentazione esterna che da specifiche è 7-20v
Ti consiglio di leggere la scheda tecnica del produttore per capire come puoi alimentarlo.
La ringrazio per la disponibilita e se posso vorrei sapere alcune cose sul
progetto che mi serve pilotare .
1) con il joystick direzione (dx e sx ) e velocita’
2) con un potenziometro aggiuntivo regolare la vel. mn e mx dei motorini
3) con un potenziometro regolare l’attacco e la frenata +o- veloce visto che si tratta
di una telecamera che riprende e’ fastidioso vedere scatti in partenza o in fermata
quali sono realizzabili e qualki difficoltosi da eliminare quindi ..
Un’ultima cosa con un solo alimentgatore da 12v . posso alimentare sia
Arduino che la motor shield e i motorini ? Ovviamente credo realizzando
un circuitino piccolo con diversi voltaggi di uscita .
il programma per ealizzare questo e’ possibikle averlo?
Anche acquistandolo ovviamente o magari sapere il modo di come realizzarlo .
Grazie
Autore
Ciao Francesco,
sei interessato a commissionarmi un progetto ?
In caso sia così ti invito a scrivermi sulla casella info del blog e ti spiego la procedura.
Ciao Mauro, anzitutto complimenti per i tutorial, no comment… Volevo chiederti, come posso collegare un sol motore a due schede utilizzando un rele? Premetto che uno è la scheda alligator e l’altro è la scheda arcuino uno + motor ahield. Ciao grazie
Autore
Ciao Giuseppe,
non ho compreso la domanda 🙁
Salve, una informazione ; sto costruendo un robot con 2 servomotori e 2 motori DC con riduzione di velocita e possibile collegarli entrambi e 4 alla motor shield?? E riguardo lo skethh come devo procedere? Grazie!!
Autore
Ciao Jacopo,
la motor shield di cui parli è come quella che ho mostrato in questo sketch?
In ogni caso ricordo che solo la motor shield ufficiale arduino.cc abbia le predisposizioni per i servo oltre ai motori.
Si si la motor shield e quella di Arduino.ecc ma trovo difficoltà nella programmazione Grazie!!!
Autore
Ciao Jacopo,
quella presentata in questo articolo non è quella ufficiale ma una delle disponibili da un produttore differente.
Lo sketch lo dovrai adattare alla tua motor shield.
OK grazie mille
Buonasera, vorrei sapere se sulla scheda motor schield è possibile collegare un motore 220v (50hz) 10w sull’uscita esterna, con alimentazione 220v. E se sulla scheda arduino uno è possibile creare 2 programmi separati, in modo da poterne selezionarne uno per volta a secondo dell’utilizzo che mi serve. Vorrei creare una pompa dosatrice per invasettare. Grazie in anticipo.
Autore
Ciao Jorim,
su quella mostrata sicuramente no! Puoi cercare una scheda in grado di gestire i motori che desideri, io non ne conosco.
Per il doppio programma si può fare in molti modi, ti consiglio la lettura del mio corso base arduino online gratuito per prendere confidenza con la programmazione di questa scheda.
Grazie mille Mauro, vedrò sicuramente il tuo corso. Buona giornata e grazie ancora.
Ciao Mauro, volevo farti una domanda.
Ho un motoriduttore, lo faccio girare tramite l’input di un sensore di pressione, però dopo 10 secondi vorrei che si fermasse (anche se io continuo a tenere premuto il sensore) e che non ripartisse fino al prossimo tocco di sensore. Questo si può fare con un rotary encoder?
Non so se mi sono spiegato chiaramente.
Grazie in anticipo..
Saluti LUIGI
Autore
Ciao Luigi,
temo di non aver compreso il problema in relazione alla soluzione proposta.
Se vuoi fermare il motore dopo 10sec dall’avvio anche se il sensore non è stato rilasciato devi agire sui tempi con delay o millis in funzione del tipo di controllo che implementi.
Il rotary encoder fa tutt’altro.
Buon giorno signor Mauro , potrei chiedervi un aiuto ? sono un ragazzo che a giugno dovrà sostenere la maturità , come progetto di fine anno sto costruendo una macchina radiocomandata tramite arduino ma i motori non rispondono a miei comandi potreste gentilmente aiutarmi ?
Autore
Ciao Francesco,
io posso aiutarti se mi chiedi qualche info specifica su qualcosa che non comprendi.
Scrivere “non rispondono” è troppo generico, che analisi hai eseguito? i comandi che invii vengono ricevuti? cosa compare sul monitor seriale? sei certo che i motori da soli funzionino? hai provado a controllare i motori con uno sketch semplice?
Ricorda di rispettare le regole descritte in ogni articolo e di aver letto e compreso bene quello che descrivo nel mio corso base arduino gratuito on-line.
Sono Francesco il ragazzo della messaggio precedente , vi spiego il problema , ho caricato il vostro skech sul mio arduino + shield 2a motor della df robot e appena lo carico mi si spegne lo shield , invece se carico il mio skech anche quando non do comandi io tramite il radio comando i motori continuano a ruotare
Autore
Ciao Francesco,
questo sketch è scritto per una specifica Motor Shield, se lo usi con un’altra devi verificare che i pin di controllo e tutti i collegamenti siano corretti ed identici a questo modello, altrimenti rischi di danneggiare uno dei componenti o il computer.
Potresti aiutarmi tramite email o altro a creare uno sketch per il mio progetto di fine anno?
Autore
Ciao Francesco,
per etica non realizzo progetti per esami di maturità neppure a pagamento.
Se mi chiedi dei consigli sugli articoli che leggi ti aiuto volentieri ma devi aver già individuato il tuo progetto e degli articoli che ne parlano, averli letti, compresi e sperimentato le caratteristiche in pratica.
Ciao,
Un articolo utile su come funzionasse la motor shield era proprio quello che stavo cercando !
Mi servirebbero un paio di chiarimenti peró :
Ho preso un motorino DC da una vecchia macchinina telecomandata che avevo, volevo sapere se lo posso collegare con la shield senza problemi
(Da quanto ho capito basta che assorbe meno di 2A e posso collegarci qualsiasi DC giusto ?)
Poi ho letto che ci posso controllare con questa shield 2 motori DC
Ovviamente anche uno solo ci posso collegare e basta, non sono obbligato a collegarne 2 ?
Grazie in anticipio per l’aiuto !!
Autore
Ciao Leonardo,
la risposta alla prima domanda è quasi corretta, basta che il motore assorba al massimo 2A e sia alimentato ad un voltaggio massimo previsto dalla shield, che se non ricordo male è 36v, ma ti invito a leggerne le caratteristiche sul sito del produttore.
Alla seconda domanda hai già fornito una valida risposta da solo.
Ciao Mauro e grazie per il tuo aiuto! Leggo questo tutorial con estremo interesse. Dovrei pilotare separatamente i due motori delle due ruote del mio tosaerba robot, essi lavorano a 24v. La Motor Shield da te suggerita va bene per quelle tensioni? Inoltre, per rilevare l’urto di un ostacolo da parte del mio robot per poi invertire la marcia, è consigliabile valutare la riduzione dei giri delle ruote stesse o il loro aumento di assorbimento? Cosè più semplice misurare e gestire? Non posso utilizzare sensori ad ultrasuoni per altri motivi…
Grazie.
Marco.
Autore
Ciao Marco,
quando hai dubbi su una shield la cosa migliore è consultare la scheda tecnica del produttore.
L’ho verificata io e riporta da 7v a 46v per cui adatta a motori da 24v, ma con un carico massimo di 2A per motore.
Questa scheda non dispone di pin adatti a verificare quanta corrente i motori stiano assorbendo per cui dovresti dotarti di una shield differente che supporti tali funzionalità, tuttavia, fossi in te, proverei a studiare il funzionamento di altri sensori per determinare la presenza di un ostacolo e non mi baserei solo sull’assorbimento.
Grazie mille per la risposta!
Approfitto per chiedere un ulteriore chiarimento. Quale altra shield posso utilizzare per pilotare tre motori che sicuramente hanno un assorbimento superiore a 2A ognuno? Inoltre, e forse la domanda è sciocca, una volta installata la shield su Arduino, i pin e le funzionalità dello stesso sono ancora utilizzabili o sono occupati dalla gestione dei motori?
Grazie.
Marco.
Autore
Ciao Marco,
mi aspettavo la tua domanda e purtroppo la risposta è che esistono migliaia di shield per il controllo di motori progettate e vendute sul web, ed è li che ti invito a cercarle secondo le tue esigenze, giusto come chiarimento “superiore a 2A” significa poco, se non hai dati certi è complesso anche cercare una scheda. La maggior parte in ambito genuino sono progettate per i 2A, forse l’ambito semi professionale è più adatto a fornirti un prodotto adeguato.
In merito ai pin, se la shield usa, ad esempio, i pin 2,3,4,5 per i rispettivi motori, questi ultimi non sono utilizzabili per altro.
http://www.microbot.it/documents/mr007-002_datasheet_it.pdf
Approfitto della tua gentilezza per sapere se è possibile utilizzare questa scheda relè per attivare e disattivare dei motori pilotando pin di Arduino. Mi scuso se ti sto tediando ma è il mio secondo progetto ed è abbastanza complesso..senza un minimo di aiuto rischio di incendiare il garage!
Grazie mille davvero..
Autore
Ciao Marco,
ti sconsiglio di eseguire progetti complessi senza avere le conoscenze necessarie e ti esorto a non tentare progetti pericolosi senza aver seguito almeno un corso sulla sicurezza.
Detto questo quella shield l’ho recensita ed usata in alcuni progetti pubblicati li hai già letti?
In che modo vuoi controllare i motori? che motori sono? come vuoi controllarli? senza valide informazioni il rischio di errore è altissimo.
Ciao Mauro,
ho realizzato una macchina con servo e motore DC, quest’ultimo comandato da un ponte H . ( tutti i compontenti sono presi dallo starter kit). Per il controllo della velocità ho usato l’enable del ponte H , nella configurazione SM, cioè mandando un segnale PWM con analog.write per il controllo della velocità , e il tutto funziona correttamente .
Tuttavia appena metto a terra la macchina per farla andare arranca, e il motore si ferma subito perchè fa troppa fatica.
Non è un probelma di costruzione, perchè se invece mando un segnale digitale sull’enable con digital.write questa va benissimo, ne di alimentazione perchè ho usato un trasformatore dalla presa di casa.
Ho letto in internet che è sbagliato usare il ponte H in modalità SM, perchè perde di efficienza il motore, ma va usato in modalità LAP, mandando un segnale digitale sull’enable, e generando due segnali PWM in controfase sui pin IN1 e IN2 del ponte H variando in questo modo la velocità.
Questa shield è costruita apposta da non perdere di efficienza anche se usata in SM? come posso risolvere il mio problema senza acquistala, considerando che non so come si generi un segnale in controfase ?
Grazie in anticipo per l’aiuto
Autore
Ciao Leonardo,
si questa shield risolverebbe il tuo problema.
Se non vuoi acquistarla usa la configurazione LAP del ponte-H, trovi in internet moltissimi appassionati di elettronica che lo descrivono e spiegano come usarlo, purtroppo io non l’ho mai usato .. preferisco la shield
Ciao Mauro e complimenti per i tuoi validi progetti. Quello che volevo chiederti e’ questo : ( Premesso che sono alle prime armi con Arduino , ma mi affascina molto …) Ho visto che riesci a pilotare due motori alternando anche la rotazione . Volevo chiederti se esiste un programma per arduino , o eventuali schede da collegare che variano la velocita’ del motore 12 volt cc 1,5 a riducendola o aumentandola gradualmente in modo automatico ( senza l’uso del potenziometro manuale ) in base a dei parametri impostati precedentemente . Esempio : quando un sensore x si attiva a 5 volt ( rilevatore di presenza o di prossimita’ ) automaticamente il voltaggio del motore sale da 5 a 12 volt in 10 secondi o viceversa .Praticamente il motore o accellera o decellera “gradualmente”.Grazie . ( spero di essermi espresso in modo comprensibile )
Autore
Ciao Luca,
si con arduino puoi scrivere un programma che lo faccia.
Ti consiglio di iniziare con i miei tutorial del corso arduino gratuito on-line ed approfondire le tue conoscenze con gli articoli presenti nel blog e dedicati al controllo motori.
Ciao Mauro,
vorrei usare per la mia macchinina telecomandata un motore DC preso da una vecchia gig nikko mach 5, ma purtroppo non trovo ne datasheet ne riesco a leggere il modello sul motore.
Il diametro del motore è circa 3 cm, abbastanza grandicello quindi.
Vorrei sapere da quanti Ampere dovrei prendere il mio driver.
In un altro motorino che ho, più piccolo, modello RC280 SA , dice :
corrente senza carico 0.3 A
corrente alla massima efficienza 1.6 A
corrente di picco 9A
Quindi dovrei usare un driver almeno da 9 A ?? non è tanto ??
Grazie per la risposta
Autore
Ciao Leonardo,
puoi utilizzare un tester per verificare quanto assorbe sia a vuoto sia connesso ad un sistema meccanico.
Ciao Mauro
Mi chiamo Ciro ho 71 anni ma ho ancora voglia di conoscere e provare.Cosi quando ho scoperto Arduino mi sono subito appassionato,ho già realizzato diversi progetti e finora me la sono cavata ,sopratuttto nella programmazione.Veniamo al dunque ho comprato un kit OWI -ROBOTIC ARM EDGE A cui manca il movimento avanti,indietro,destra ,sinistra,fermo,ho quindi montato due servo 360° arduino R3 Ee la shield clone della adafruit piu un ricevitore IR per comandarlo tramite un normale telecomando.Ho due problemi di cui non riesco a venirne a capo:1° Collegando il robot tramite cavo USB funziona ,i servo si muovono a seconda il tasto premuto ma se uso le batterie ( 6 V per ardu e 7,4 per la shield ) si muove a impulsi(premendo un tasto ho solo
un piccolo accenno di movimento).Ora se dal pc ho 500 ma non mi spiego perchè con le batterie che ne erogano di più non funziona,ho provato con l’alimentatore del mio hiphone (500ma) e funziona.
Hai qualche idea sul perchè.2° problema riguarda la programmazione lo schetch è perfetto i tasti rispondono al comando impartito ma; se inserisco le linee di comando FERMO il programma esegue subito il comando di fermo e gli altri comandi mi danno solo un impulso#include
[[ codice rimosso in automatico ]]
se puoi darmi un aiuto te ne sarei grato
Ti faccio i complimenti per il tuo blog e le tue risposte
Grazie Ciro
Autore
Ciao Ciro,
in primo luogo ti invito a non pubblicare codice nei commenti come puoi leggere in fondo ad ogni articolo del blog, sono le regole.
In secondo luogo non conosco il kit che hai acquistato.
In terzo luogo non so a quale shield clone ti riferisci: quella arduino ? quale shield alimenti a 7,4v ?
Sia la USB sia il caricatore dello smartphone erogano 5v e non 6v e non 7,4v potrebbe essere un limite della shield che usi.
2° controlla bene quello che hai scritto nelle linee FERMO e controlla cosa accade con il monitor seriale quando le inserisci.
Ciao Mauro, grazie per il tuo post, molto utile.
Ho provato a collegare i motori, purtroppo il motore collegato al secondo canale gira più lento del primo, anche sostituendo i motori o lasciandone collegato solo uno.
Come posso risolvere questo problema?
Autore
Ciao Bruno,
come ho risposto nel commento all’articolo in cui hai inserito il primo commento col medesimo problema:
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.
Salve e complimenti per il tutorial. Nel caso volessi alimentare il motore (in CC) di un (o più) locomotore in miniatura, mi chiedo quanti mA può sopportare l’uscita della controller. Infine ho notato che in vendita su Ebay (ma anche Amazon) esistono vari controller motor shield da pochi euro (4-6) a 60-80. Potresti dire il nome esatto del modello? Per esempio questa mi sembra simile alla tua [[ link rimossso ]] ma che differenza c’è con questa? [[ link rimossso ]]
Grazie mille.
Autore
Ciao Lolafox,
ti chiedo la cortesia di rispettare le semplici regole del blog che trovi nella sezione apposita.
In merito alla scheda mostrata è quella di futura elettronica commercializzata da robotics-3d.com e le uscite motori supportano fino a 2A ciascuna.
Per le altre shield che trovi nel web devi controllare la scheda tecnica ed il datasheet del produttore.