![]() |
|
|
Questo articolo illustra come controllare un motore DC con Arduino e un integrato L293 o compatibile, permettendo il controllo bidirezionale con un selettore e la variazione della velocità con un potenziometro. Il motore deve sopportare la tensione che gli viene applicata, onde evitare possibili problemi di arrostimento, oppure motori con tensioni superiori possono creare surriscaldamenti all'integrato di controllo della potenza. Controllare anche se l'integrato ha già i diodi di protezione incorporati come l'integrato con la sigla L293D, altrimenti sono da aggiungere come riferimento vedere lo schema nel datasheet. Per non avere dubbi sulle tensioni dei motori che l'integrato supporta riferirsi al datasheet: http://www.ece.utexas.edu/~valvano/Datasheets/L293d.pdf Assembly List
 |
||||||||||||||||||||||||||||||||||||
Â
// Uso L293 con potenziometro e cambio moto avanti-retro ok
// setta pin
const int buttonPin1 = 2; // selettore
const int buttonPin2 = 4; // selettore
const int ledPin1 = 8; // LED controllo
const int ledPin2 = 9; // LED controllo
const int potPin = A1; // input potenziometro
const int in1Pin = 5; // L293 pin 2
const int in2Pin = 6; // L293 pin 7
const int motorPin = 3; //L293 pin 1 pwm
int buttonState1 = 0; // variabile per leggere stato selettore
int buttonState2 = 0;
int potVal = 0;
int mapedPotVal = 0;
void setup()
{
// initializzo
pinMode(potPin, INPUT);
pinMode(motorPin, OUTPUT);
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
}
void loop()
{
buttonState1 = digitalRead(buttonPin1); // Rileva stato selettore
buttonState2 = digitalRead(buttonPin2);
potVal = analogRead(potPin); // Rileva valore potenziometro
mapedPotVal = map(potVal, 0, 1023, 0, 255); // Scala il risultato della lettura
analogWrite(motorPin, mapedPotVal); // Output del valore della all'intergrato
// leggo stato selettore
if (buttonState1 == HIGH) {
// accendo LED avanti:
// spengo LED indietro:
// cambio direzione motore
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(in1Pin,HIGH);
digitalWrite(in2Pin,LOW);
}
else {
// accendo LED indietro:
// spengo LED avanti:
// cambio direzione motore
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,HIGH);
}
}
