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:
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.
Commentati Recentemente