Creating 2 DC Motors, 2 Servos and 2 LEDs control program using Arduino MEGA 2560
Required Components
- L293D Motor Driver Control -1 no
- Arduino MEGA 2560 Board -1 no
- 5V DC Motors -2 no
- Servo -2 no
- LED -2 no
- 9V Battery -1 no
- Bluetooth -1 no
- USB cable -1 no
- Jumper Wires -10 no
Circuit
Steps
- Make sure the components are working properly.
- Connect the 9V Battery to the L293D Motor Driver.
- Connect the 2 Servo motors to the motor driver servo pins properly.
- Connect the 2 DC motors pins to the motor driver output pins M3, M4.
- Connect the LED Cathodes (+) & Anode (-) pins to the Mega Board pins 50, 52 & gnd respectively.
- Connect the ground connection respectively.
- Check the Arduino program.
- Check the Circuit Connections.
- 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
- DIWA Robot