Motore DC direzione e velocità con Arduino e Potenziometro

Controllo velocità e direzione di un motore DC con Arduino, vediamo come!
Inizialmente questo articolo era stato scritto al volo per dare una risposta al commento di Enrico, che voleva pilotare un motore dc controllandone velocità e direzione tramite un potenziometro. Data la sua semplicità di comprensione e realizzazione, credo che lo schema ed il codice siano sufficienti.


Il circuito si rifà all’articolo L298N pilotare un motore DC con Arduino.

Lo schema:

Schema dei collegamenti per questo esempio
Schema dei collegamenti Motore DC direzione e velocità con Arduino e Potenziometro

Il codice:

/*
   Autore   : Andrea Lombardo
   Web      : http://www.lombardoandrea.com
   Articolo : https://wp.me/p27dYH-Jf
*/


//definizione dei pin
static int pinDirezioneMarcia = A0; //pin analogico deputato a leggere i valori del potenziometro
static int mA = 12; //pin digitale per determinare gli stati logici da inviare al modulo
static int mB = 13; //pin digitale per determinare gli stati logici da inviare al modulo
static int pinPotenza = 11; //pin digitale tramite il quale inviare un segnale di tipo PWM tramite la funzione analgWrite()

//variabili usate per gestire e mostrare i valori di operazione
int accelerazione;
int potenza;  //valore in uscita dal pin 11

void setup() {
  //inizializzo la comunicazione seriale cosi da mostrare i valori nel Monitor Seriale
  Serial.begin(9600);

  //inizializzo variabili
  accelerazione = 0;
  potenza = 0;

  //definisco tipologia pin
  pinMode(pinDirezioneMarcia, INPUT); //input in quanto legge il valore analogico del pin A0
  pinMode(mA, OUTPUT); //output perche' definisce lo stato logico del pin IN1 del modulo L298N
  pinMode(mB, OUTPUT); //output perche' definisce lo stato logico del pin IN2 del modulo L298N
  pinMode(pinPotenza, OUTPUT);  //output perche' definisce il valore PWM del pin EN1 del modulo L298N

  //pullDown sensore pinDirezioneMarcia
  digitalWrite(pinDirezioneMarcia, LOW);

  //Definisco il senso di marcia del motore
  /*
    mA |   mB  | Evento
    -----|-------|----------------------
    LOW  | LOW   | fermo
    LOW  | HIGH  | Movimento in un senso
    HIGH | LOW   | Movimento senso opposto
    HIGH | HIGH  | Fermo
  */

  digitalWrite(mA, LOW);
  digitalWrite(mB, HIGH);

}


void loop() {

  //leggo il valore analogico del potenziometro sul pin A0.
  int valorePotenziometro = analogRead(pinDirezioneMarcia);

  /*
    Il range dei valori analogici e' da 0 a 1023 mentre il range dei valori PWM  e' da 0 a 255
    per mantenere questa proporzionalita' eseguo la mappatura dei valori
  */
  int valoreMappato = map(valorePotenziometro, 0, 1023, 0, 255);
  determinaMovimento(valoreMappato);
}

void determinaMovimento(int valoreMappato) {
  String direzione = "";
  if (valoreMappato <= 121) {
    //vai in un senso
    digitalWrite(mA, LOW);
    digitalWrite(mB, HIGH);
    potenza = map(valoreMappato, 0, 121, 255, 0);
    direzione = "DIETRO";
  } else if (valoreMappato >= 135) {
    //vai nell'altro
    digitalWrite(mA, HIGH);
    digitalWrite(mB, LOW);
    potenza = map(valoreMappato, 135, 255, 0, 255);
    direzione = "AVANTI";
  } else if (valoreMappato > 121 && valoreMappato < 135) {
    //ferma il motore
    digitalWrite(mA, LOW);
    digitalWrite(mB, LOW);
    direzione = "FERMO";
    valoreMappato = 0;
  }

  //Invio i dati letti al Monitor seriale, cosi da poterli vedere a video
  Serial.print("Accelerazione = ");
  Serial.print(potenza);
  Serial.print(" - direzione = ");
  Serial.println(direzione);

  analogWrite(pinPotenza, potenza);
}

Come sempre

  • Assicurati che tutti i collegamenti siano corretti;
  • Ricordati di impostare la porta COM del tuo Arduino;
  • Imposta la stessa velocità seriale definita in Serial.begin(9600), nel Monitor Seriale
  • E ricorda che io non mi assumo nessuna responsabilità per eventuali danni o disastri che causi 😀

A fine pagina trovi il link per scaricare il pacchetto con codici e schemi di collegamento. Come sempre ti ricordo che acquistando prodotti Amazon passando attraverso i link del mio sito, io percepisco una piccola commissione (parliamo di centesimi) in buoni regalo. Questi buoni sommati alle eventuali donazioni PayPal, servono a mantenere attivo il sito web e ad acquistare nuovi componenti.

Prodotti Amazon




Approfondimenti

Potrebbero interessarti anche...

Available for Amazon Prime