Per un utilizzo pratico di un motore DC occorre poter controllare con una certa precisione la sua velocità e poter comandare il relativo senso di rotazione.
Ad esempio, con una coppia di motori DC è possibile realizzare un semplice robot semovente a due ruote. Facendo ruotare le ruote nello stesso senso, il veicolo può avanzare o arretrare. Facendo ruotare le ruote in senso opposto l’una all’altra, è possibile far ruotare il veicolo su se stesso.
Il più semplice circuito di controllo che ti permette di gestire questi aspetti, per un motore DC, è il cosiddetto ponte H o H-Bridge.
In questo tutorial scoprirai un utile dispositivo, facilmente reperibile in commercio, che integra una coppia di H-Bridge e tutto ciò che serve per connettere ad Arduino una coppia di motori DC.
Nelle figure sono riportati il PINOUT del dispositivo L298N mostrato nel video e la logica di controllo.



Lo sketch illustrato nel video è riportato di seguito.
// Parametrizzazione logica di controllo
#define IN1 8
#define IN2 9
#define EN 10
void setup() {
// Inizializzo la comunicazione seriale
Serial.begin(9600);
// Configuro i PIN per il controllo
// e li inizializzo
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(EN,OUTPUT);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
analogWrite(EN,80);
// Stampo il messaggio con le istruzioni
Serial.println("Digita 'avanti', 'indietro', 'piano', 'forte' oppure 'stop' e premi INVIO...");
}
void loop() {
// Verifico se è stato inviato un comando
// e in caso positivo lo interpreto ed eseguo
if (Serial.available()) {
String comando = Serial.readString();
Serial.print("Ricevuto: ");
Serial.print(comando);
if (comando == "avantin") {
Serial.println("Avanti tutta!");
digitalWrite(IN1, HIGH);
digitalWrite(IN2,LOW);
return;
}
if (comando == "indietron"){
Serial.println("Indietro tutta!");
digitalWrite(IN1, LOW);
digitalWrite(IN2,HIGH);
return;
}
if (comando == "stopn"){
Serial.println("Fermi tutti!");
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
return;
}
if (comando == "pianon"){
Serial.println("Impostata velocità moderata!");
analogWrite(EN, 80);
return;
}
if (comando == "forten"){
Serial.println("Impostata velocità massima!");
analogWrite(EN, 255);
return;
}
Serial.println("Comando sconosciuto!");
}
}
La struttura del programma segue la logica che abbiamo utilizzato anche nei precedenti tutorial e non dovrebbe presentare problemi di interpretazione.