Arduino Tutorials – Lesson 23- L293D Motor Driver Control Shield with Arduino MEGA 2560.

Creating 2 DC Motors, 2 Servos and 2 LEDs control program using Arduino MEGA 2560

Required Components

  1. L293D Motor Driver Control -1 no
  2. Arduino MEGA 2560 Board -1 no
  3. 5V DC Motors -2 no
  4. Servo -2 no
  5. LED -2 no
  6. 9V Battery -1 no
  7. Bluetooth -1 no
  8. USB cable -1 no
  9. Jumper Wires -10 no

Circuit

Steps

  1. Make sure the components are working properly.
  2. Connect the 9V Battery to the L293D Motor Driver.
  3. Connect the 2 Servo motors to the motor driver servo pins properly.
  4. Connect the 2 DC motors pins to the motor driver output pins M3, M4.
  5. Connect the LED Cathodes (+) & Anode (-) pins to the Mega Board pins 50, 52 & gnd respectively.
  6. Connect the ground connection respectively.
  7. Check the Arduino program.
  8. Check the Circuit Connections.
  9. Run the Arduino program.

Arduino Program

#include <AFMotor.h>
#include <Servo.h>
AF_DCMotor motor1(3);
AF_DCMotor motor2(4);
Servo servo1;
Servo servo2;
Servo servo3;
int pos1=20;
int pos1min=50;
int pos1max=110;
int pos2=90;
int pos2min=110;
int pos2max=170;
int pos3=80;
int pos3min=50;
int pos3max=110;
int i=0;
int delaytime=10;
int led1 = 50;
int led2 = 52;
String inputString = "";
boolean stringComplete = false;

void setup() 
{
  Serial1.begin(9600);
  motor1.setSpeed(200);
  motor2.setSpeed(200);
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  servo1.attach(9);
  servo2.attach(10);
  servo3.attach(48);
  servo1.write(pos1);
  servo2.write(pos2);
  servo3.write(pos3);
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  ledsOn();
}

void loop()
{
  ledsOn();
  serialEvent();
  if (stringComplete)
  {
    processCmd(inputString);
    inputString = "";
    stringComplete = false;
  }
}

void processCmd(String st1)
{
  st1.remove(st1.length());
  String cmd = st1.substring(0,1);
  st1="";
  if (cmd == "f")
  {
    motorForward();
  }
  else if (cmd == "b")
  {
    motorBackward();
  }
  else if (cmd == "r")
  {
    motorRight();
  }
  else if (cmd == "l")
  {
    motorLeft();
  }
  else if(cmd == "s")
  {
    motorStop();
  }
  else if(cmd == "1")
  {
    servoAction1();
  }
  else if(cmd == "2")
  {
    servoAction2();
  }
  else if (cmd=="o")
  {
    eyesBlink();
  }
}

void serialEvent()
{
  while (Serial1.available())
  {
    char inChar = (char)Serial1.read();
    inputString += inChar;
    if (inChar == '$')
    {
      stringComplete = true;
    }
  }
}
for(int i=0;i<5;i++)
{
  moveHandServoMotors(1);
}
delay(2000);
for(int i=0;i<5;i++)
{
  moveHandServoMotors(0);
}
delay(2000);


void motorForward()
{
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor1.setSpeed(255);
  motor2.setSpeed(255);
}

void motorBackward()
{
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor1.setSpeed(255);
  motor2.setSpeed(255);
}

void motorLeft()
{
  motor1.run(BACKWARD);
  motor2.run(FORWARD);
  motor1.setSpeed(255);
  motor2.setSpeed(255);
}

void motorRight()
{
  motor1.run(FORWARD);
  motor2.run(BACKWARD);
  motor1.setSpeed(255);
  motor2.setSpeed(255);
}

void motorStop()
{
  motor1.run(RELEASE);
  motor2.run(RELEASE);
}

void ledsOn()
{
  digitalWrite(led1,HIGH);
  digitalWrite(led2,HIGH);
}

void ledsOff()
{
  digitalWrite(led1,LOW);
  digitalWrite(led2,LOW);
}

void eyesBlink()
{
  for(int i=0;i<8;i++)
  {
    ledsOn();
    delay(250);
    ledsOff();
    delay(250);
  }
}

void servoAction1()
{
  for(int i=0;i<5;i++)
  {
    moveHandServoMotors(0);
  }
}

void servoAction2()
{
  for(int i=0;i<5;i++)
  {
    moveHandServoMotors(1);
  }
}

void moveHeadServoMotor(int tp)
{
  if (tp==0)
  {
    servo3.write(pos3min);
    delay(1000);
    servo3.write(pos3max);
    delay(3000);
  }
  if (tp==1)
  {
    for(int i=0;i<60;i++)
    {
      servo3.write(pos3min+i);
      delay(delaytime);
    }
    delay(1000);
    for(int i=0;i<60;i++)
    {
      servo3.write(pos3max-i);
      delay(delaytime);
    }
    delay(3000);
  }
}

void moveHandServoMotors(int tp)
{
  if (tp==0)
  {
    servo1.write(pos1min);
    servo2.write(pos2min);
    servo3.write(pos3min);
    for(int i=0;i<60;i++)
    {
      servo1.write(pos1min+i);
      servo2.write(pos2min+i);
      servo3.write(pos3min+i);
      delay(delaytime);
    }
    delay(200);
    for(int i=0;i<60;i++)
    {
      servo1.write(pos1max-i);
      servo2.write(pos2max-i);
      servo3.write(pos3max-i);
      delay(delaytime);
    }
    delay(200);
  }
  else if (tp==1)
  {
    servo1.write(pos1min);
    servo2.write(pos2max);
    servo3.write(pos3min);
    for(int i=0;i<60;i++)
    {
      servo1.write(pos1min+i);
      servo2.write(pos2max-i);
      servo3.write(pos3min+i);
      delay(delaytime);
    }
    delay(200);
    for(int i=0;i<60;i++)
    {
      servo1.write(pos1max-i);
      servo2.write(pos2min+i);
      servo3.write(pos3max-i);
      delay(delaytime);
    }
    delay(200);
  }
}

Projects

  1. DIWA Robot

Leave a Reply

Your email address will not be published. Required fields are marked *