Δεξιο- και αριστερόστροφη κίνηση DC κινητήρα

To L293D είναι ένα πολύ χρήσιμο τσιπ. Μπορεί να ελέγξει ανεξάρτητα δύο κινητήρες. Χρησιμοποιούμε μόνο το μισό τσιπ , οι περισσότερες από τις ακίδες στη δεξιά πλευρά του τσιπ είναι για τον έλεγχο ενός δεύτερου κινητήρα.

learn_arduino_L293D.jpg

 

Πρώτα, ρυθμίζεται η ταχύτητα, χρησιμοποιώντας μια analogWrite στην ακίδα ενεργοποίησης. Ο ακροδέκτης ενεργοποίησης του L293 απλώς ενεργοποιεί ή απενεργοποιεί τον κινητήρα ανεξαρτήτως των ρυθμίσεων των ακροδεκτών in1 και in2 του L293.

Για τον έλεγχο της κατεύθυνσης του κινητήρα, οι ακίδες in1 και in2 πρέπει να ρυθμιστούν σε αντίθετες τιμές.

Εάν το in1 είναι HIGH και το in2 είναι LOW, ο κινητήρας θα περιστραφεί με έναν τρόπο, αν από την άλλη είναι in1 LOW και in2 HIGH τότε ο κινητήρας θα περιστραφεί προς την αντίθετη κατεύθυνση.

  /*

  Bi-directional Motor

  */

int enablePin = 11;

int in1Pin = 10;

 int in2Pin = 9;

 int switchPin = 7;

 int in1 = 0;

 int in2 = 0;

int rev;

 int speed;

 int i;

 

 

void setup()

 {

Serial.begin(9600);  

pinMode(in1Pin, OUTPUT);

 pinMode(in2Pin, OUTPUT);

  pinMode(enablePin, OUTPUT);

  pinMode(switchPin, INPUT_PULLUP);

  while (! Serial);

Serial.println("Insert values this way +/-1,speed from 0 to 255, motor turns >180");

Serial.println("Example : +1,200");

 

 }

 

void loop()

 {

   while (Serial.available())

  {

 

 String s1=Serial.readString();

speed = s1.substring(3).toInt();

rev = s1.substring(0,2).toInt();

 

  setMotor(speed, rev);

  }

void setMotor(int speed, int reverse)

{

 analogWrite(enablePin, speed);

 if (reverse==1) { in1=0;

    in2=1; }

 if (reverse==-1) {in1=1;

 in2=0;}  

  digitalWrite(in1Pin, in1);

   digitalWrite(in2Pin, in2);

 }