Society of Robots - Robot Forum

Software => Software => Topic started by: shreyansh on December 18, 2012, 11:08:50 AM

Title: advance line following robot
Post by: shreyansh on December 18, 2012, 11:08:50 AM
please some one help me to programme advance line following robot.I have spent a lot of money on making it.



thanks.

Title: Re: advance line following robot
Post by: happytriger2000 on December 20, 2012, 05:54:54 AM
Tips for you:
 search Parallax for BoeBot, it uses PID control on 2 led receiver
Title: Re: advance line following robot
Post by: jwatte on December 20, 2012, 11:29:07 AM
Write a program to:

1) Read sensors
2) Give motor control based on sensor readings
3) Repeat

Without more information about what controller you're using for the robot, what the sensors are, or anything else about the robot, we can't really help any more than that.
Title: Re: advance line following robot
Post by: billhowl on December 22, 2012, 04:19:23 AM
Is it this advance line following robot
http://www.societyofrobots.com/member_tutorials/node/350 (http://www.societyofrobots.com/member_tutorials/node/350)
Here is the source code
http://www.societyofrobots.com/member_tutorials/files/Code%20V2.2(SOR)_0.zip (http://www.societyofrobots.com/member_tutorials/files/Code%20V2.2(SOR)_0.zip)

Code: [Select]
#include "LotL.h"

SIGNAL (SIG_INTERRUPT0) // left switch
{
delay(0.3);

switch(menu)
{
case 0:
if(pause == true)
pause = false;
menu = 10;
break;
case 10:
if(pause == false)
pause = true;
menu = 0;
break;
case 20:
menu = 80;
break;
case 30:
case 40:
case 50:
case 60:
case 70:
case 80:
menu -= 10;
break;
case 25:
maxspeed--;
break;
case 35:
basespeed--;
break;
case 45:
Kp--;
break;
case 55:
Ki--;
break;
case 65:
Kd--;
break;
}
DispMenu(menu);
}

SIGNAL (SIG_INTERRUPT2) // middle switch
{
delay(0.3);
switch(menu)
{
case 20:
case 30:
case 40:
case 50:
case 60:
case 70:
menu += 5;
break;
case 80:
menu = 0;
break;
case 25:
case 35:
case 45:
case 55:
case 65:
case 75:
menu -= 5;
break;
}
DispMenu(menu);



}

SIGNAL (SIG_INTERRUPT1) // right switch
{
delay(0.3);

switch(menu)
{
case 0:
case 10:
menu = 20;
break;
case 20:
case 30:
case 40:
case 50:
case 60:
case 70:
menu += 10;
break;
case 80:
menu = 20;
break;
case 25:
maxspeed++;
break;
case 35:
basespeed++;
break;
case 45:
Kp++;
break;
case 55:
Ki++;
break;
case 65:
Kd++;
break;
}
DispMenu(menu);
}

int main(void)
{
unsigned int p;

//call all initializing functions
InitPorts();
InitInterrupts();
InitPWM();
InitLCD(0); //LS_BLINK|LS_ULINE
LCDClear();
sei(); //enables interrupts

//prints the openning screen
BacklightOn();
LCDClear();
LCDGotoXY(0,0);
LCDWriteString("Lord ofthe Lines");
delay(1);

LCDGotoXY(3, 1);
LCDWriteString("pratheek");
delay(1);
DispMenu(0); //displays home screen

while(true)
{
if(pause == false)
{
CalcError();

if((s1+s2+s3+s4+s5+s6+s7+s8) == 0) //robot has overshot
{
if(lastreading == 'r') //checks if the last sensor to the activated was right
{
RightMB(); //turn right at full speed
LeftMF();
OCR1A = 255;
OCR1B = 255;
}

else if(lastreading == 'l') //checks if the last sensor to the activated was left
{
RightMB(); //turn left at full speed

LeftMF();
OCR1A = 255;
OCR1B = 255;
}
}


else  //robot on line
{
P = error * Kp;

I += error;
I = I * Ki;

D = error - perror;

correction = P + I + D;

rightpulse =  basespeed + correction;
leftpulse = basespeed - correction;

LeftMF();
RightMF();


if(leftpulse > 255)
leftpulse = 255;

if(rightpulse > 255)
rightpulse = 255;

OCR1A = leftpulse;
OCR1B = rightpulse;
}
}

_delay_ms(10);
}

}

void DispMenu(int m)
{
switch(m)
{
case 0:

LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Lord ofthe Lines");

LCDGotoXY(0 ,1);
LCDWriteString("Start");
LCDGotoXY(8 ,1);
LCDWriteString("Settings");
break;

case 10:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Lord ofthe Lines");

LCDGotoXY(0 ,1);
LCDWriteString("Pause");
LCDGotoXY(8 ,1);
LCDWriteString("Settings");
break;

case 20:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Settings");

LCDGotoXY(0, 1);
LCDWriteString("1. Max Speed");
break;

case 30:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Settings");

LCDGotoXY(0, 1);
LCDWriteString("2. Base Speed");
break;

case 40:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Settings");

LCDGotoXY(0, 1);
LCDWriteString("3. Propotional");
break;

case 50:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Settings");

LCDGotoXY(0, 1);
LCDWriteString("4. Integral");
break;

case 60:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Settings");

LCDGotoXY(0, 1);
LCDWriteString("5. Derivative");
break;

case 70:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Settings");

LCDGotoXY(0, 1);
LCDWriteString("7. Adjust Sensor");
break;

case 80:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Settings");

LCDGotoXY(0, 1);
LCDWriteString("6. Done");
break;

case 25:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Settings");

LCDGotoXY(0, 1);
LCDWriteString("Max Speed: ");
LCDWriteInt(maxspeed, 3);
break;

case 35:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Settings");

LCDGotoXY(0, 1);
LCDWriteString("Base Speed: ");
LCDWriteInt(basespeed, 3);
break;

case 45:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Settings");

LCDGotoXY(0, 1);
LCDWriteString("Propotional: ");
LCDWriteInt(Kp, 2);
break;

case 55:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Settings");

LCDGotoXY(0, 1);
LCDWriteString("Integral: ");
LCDWriteInt(Ki, 2);
break;

case 65:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Settings");

LCDGotoXY(0, 1);
LCDWriteString("Derivative: ");
LCDWriteInt(Kd, 2);
break;
case 75:
LCDClear();
LCDGotoXY(0, 0);
LCDWriteString("Sensors");
DispAdjustmentMenu();
break;
}
}

void DispAdjustmentMenu(void)
{

LCDGotoXY(0, 1);
LCDWriteInt(s1, 1);

LCDGotoXY(2, 1);
LCDWriteInt(s2, 1);

LCDGotoXY(4, 1);
LCDWriteInt(s3, 1);

LCDGotoXY(6, 1);
LCDWriteInt(s4, 1);

LCDGotoXY(9,1);
LCDWriteInt(s5, 1);

LCDGotoXY(11, 1);
LCDWriteInt(s6, 1);

LCDGotoXY(13, 1);
LCDWriteInt(s7, 1);

LCDGotoXY(15, 1);
LCDWriteInt(s8, 1);


}
Title: Re: advance line following robot
Post by: jwatte on December 22, 2012, 08:13:43 PM
What particular step are you stuck at?
What are you doing?
What do you expect to happen?
What is actually happening?