Arduino MEGA2560வை பயன்படுத்தி 2 Encoder மோட்டார்களை துல்லியமாக கட்டுப்படுத்துவது.
Required Components
- Arduino MEGA2560 -1 no
- Motor control shield(L293D) -1 no
- Micro Metal Gear Motor with Encoder -2 no
- Motor Wheel -2 no
- Bread Board -1 no
- Jumper Wires(Male to Male) -11 no
- Voltage Converter(5V-3.3V) -1 no
- 5V Battery -1 no
- USB cable -1 no
Steps
- நாம் பயன்படுத்தும் உபகரணங்கள் சரியாக வேலை செய்கிறதா என்பதை உறுதி செய்து கொள்ளவும்.
- Motor control shield(L293D) உடன் +5V battery இணைக்க வேண்டும்.
- +5V பேட்டரி இணைப்புகளை சரியாகவும் கவனமாகவும் இணைக்க வேண்டும்.
- Motor control shield(L293D) M4ஐ முதலாவது மோட்டார் M1, M2 உடனும், Motor control shield(L293D) M3ஐ இரண்டாவது மோட்டார் M1, M2 உடனும் இணைக்க வேண்டும்.
- Arduino 5V, gnd ஐ voltage converter V IN,gnd உடன் கவனமாக இணைக்க வேண்டும்.
- voltage converter V OUT,gnd ஐ முதலாவது மோட்டார் VCC, gnd உடனும், இரண்டாவது மோட்டார் VCC, gnd உடனும் கவனமாக இணைக்க வேண்டும்.
- முதலாவது மோட்டார் C1,C2 பின்களை Arduino MEGA2560 18,19 பின்களுடனும், இரண்டாவது மோட்டார் C1,C2 பின்களை Arduino MEGA2560 20,21 பின்களுடனும் இணைக்க வேண்டும்.
- Arduino program ஐ சரி பார்க்க வேண்டும்.
- மின்சுற்றை சரி பார்க்க வேண்டும்.
- Arduino program ஐ ரன் செய்ய வேண்டும்.
Arduino Program
#include <AFMotor.h>
#include <Encoder.h>
AF_DCMotor motor1(4);
AF_DCMotor motor2(3);
Encoder myEnc1(21,20);
Encoder myEnc2(18,19);
long oldPosition1 = -999;
long oldPosition2 = -999;
long m1Pos = 0;
long m1Dir = 0;
long m2Pos = 0;
long m2Dir = 0;
long md1=2000;
long md2=2000;
void setup()
{
Serial.begin(9600);
Serial.println("Motor test!");
motor1.setSpeed(200);
motor2.setSpeed(200);
motor1.run(RELEASE);
motor2.run(RELEASE);
motor1Move(md1,0);
motor2Move(md2,0);
}
void loop()
{
checkMotor1();
checkMotor2();
delay(5);
}
void motor1Move(int d1,int d2)
{
m1Pos=d1;
m1Dir = d2;
if (d2==0)
{
motor1.run(FORWARD);
}
else if (d2==1)
{
motor1.run(BACKWARD);
}
}
void motor2Move(int d1,int d2)
{
m2Pos=d1;
m2Dir = d2;
if (d2==0)
{
motor2.run(FORWARD);
}
else if (d2==1)
{
motor2.run(BACKWARD);
}
}
void checkMotor1()
{
long newPosition1 = myEnc1.read();
if (m1Dir==0)
{
if ( newPosition1>m1Pos)
{
m1Pos=0;
motor1.run(RELEASE);
myEnc1.write(0);
motor1Move(md1,1);
}
}
else
{
if ( abs(newPosition1)>m1Pos)
{
m1Pos=0;
motor1.run(RELEASE);
myEnc1.write(0);
motor1Move(md1,0);
}
}
}
void checkMotor2()
{
long newPosition2 = myEnc2.read();
if (m2Dir==0)
{
if ( newPosition2>m2Pos)
{
m2Pos=0;
motor2.run(RELEASE);
myEnc2.write(0);
motor2Move(md2,1);
}
}
else
{
if ( abs(newPosition2)>m2Pos)
{
m2Pos=0;
motor2.run(RELEASE);
myEnc2.write(0);
motor2Move(md2,0);
}
}
}