Il Controller per motori L298N

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.

Screenshot

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.