De L293D chip is een motordriver waarmee je twee dc motoren kan aansturen. Je kan ze links en rechtsom laten draaien en harder en zachter. Op de afbeelding rechts zie je de pin-configuratie. Op de afbeelding beneden zie hoe de aansluitingen zijn in het Tinkerkad simulatie programma:
pin 1: naar Arduino pin 11
pin 2: naar Arduino pin 9
pin 3: naar motor 1
pin 4: naar GND / batterij min
pin 5: naar GND / batterij min
pin 6: naar motor 1
pin 7: naar Arduino pin 10
pin 8: naar Plus Batterij
pin 9: naar Arduino pin 5
pin 10: naar Arduino pin 3
pin 11: naar motor 2
pin 12: naar GND / batterij min
pin 13: naar GND / batterij min
pin 14: naar motor 2
pin 15: naar Arduino pin 4
pin 16: naar Arduino 5 V
Je kan bovenstaand schema en onderstaande code gebruiken om te testen.
Let op dat als je code wil veranderen in Tinkercad je de simulatie eerst moet stoppen.
Tinkercad link: https://www.tinkercad.com/things/02DBZ69YsyD
Een tweede eenvoudig voorbeeld zie je hier:
https://www.tinkercad.com/things/hcjFncRScer
// L293D motordriver test met twee DC motoren.
// Deze code laat achtereenvolgens twee testprogramma's uitvoeren
// demoOne en demoTwo.
// Verbind de pinnen van de driver met de pinnen van de Arduino
// motor A:
int enA = 11;
int in1 = 9;
int in2 = 10;
// motor B:
int enB = 5;
int in3 = 3;
int in4 = 4;
void setup()
{
// Maak van alle motorcontrole pinnen output's
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void demoOne()
{
// Deze functie laat de motoren draaien in beide richtingen met een vaste snelheid.
// Zet motor A aan.
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// stel de snelheid in op 200. (Instellen tussen 0 en (max)255)
analogWrite(enA, 200);
// Zet motor B aan.
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// stel de snelheid in op 200. (Instellen tussen 0 en (max)255)
analogWrite(enB, 200);
delay(2000);
// verander de draairichting van de motoren (in1/in2 en in3/in4 HIGH-LOW wisselen)
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// zet de motoren uit
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void demoTwo()
{
// Deze functie laat de motoren versnellen en vertragen.
// In de eerste for-loop versnellen de motoren (van 0 naar 255)
// In de tweede for-loop vertragen ze (van 255 naar 0)
// Met analogWrite krijgen de motoren het getal (i) (tussen 0 en 255) voor de snelheid
// zet de motoren aan
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// versnellen van 0 naar maximaal
for (int i = 0; i < 256; i++)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// vertragen van maximaal naar 0
for (int i = 255; i >= 0; --i)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// zet de motoren uit
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop()
{
demoOne();
delay(1000);
demoTwo();
delay(1000);
}