# برنامه نویسی میکروکنترلر (MicroController) ها و MicroProcessor ها > برنامه نویسی سیستم های Embeded >  کمک برای برنامه نویسی ربات مسیریاب

## mehdi_RM

کسی می تونه به من در برنامه نویسی برای یه ربات مسیریاب که
از میکرو  ای وی آر می خوام استفاده کنم کمکم کنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

----------


## Kimia_Konjkav

http://robotic.farsitools.com/

www.iranled.com

اگر عضو سایت www.cloob.com هستید در آنجا یک کلوب با نام کلوب رباتیک وجود دارد که شاید دوستان بیشتر راهنماییتان نمایند. اگر عضو نیستید برای پیام بدهید که دعوتتان کنم (البته اگر مایلید)

----------


## mfarzan2004

من یه برنامه نویس میکرو یم در مسابقات روبوتیک بابل 2 دوره قبل مقام 4 روم 
دارم  اگه می خای اطلاعات بده در مورد تعداد سنسورها و ... تا برنامه رو برات بفرستم

----------


## mhmmdshirazi

انقدر خودتونو اذیت نکنید من یه برنامه که با codevision به زبان c نوشته شده می زارم سبزوار سوم شد.
#include <mega16.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// Declare your global variables here
bit bk,j;
void motor(float p1,float p2)
{
   if(p1>=0)OCR1AL=(int)p1;else OCR1AL=-(int)p1;
   if(p2>=0)OCR1BL=(int)p2;else OCR1BL=-(int)p2;
   if(p1>0)
   {
      PORTD.0=1;
      PORTD.1=0;  
   }else
   {
      PORTD.0=0;
      PORTD.1=1;
   }    
   if(p2>0)
   {
      PORTD.2=1;
      PORTD.3=0;  
   }else
   {
      PORTD.2=0;
      PORTD.3=1;
   }
}
void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P 
PORTA=0xFF;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P 
PORTB=0xFF;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 31.250 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x0C;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// LCD module initialization
lcd_init(16);

while (1)
{  
   if(PINA.6==1) j=1.275; else j=1;
   lcd_gotoxy(0,0);
   lcd_putchar(PINB.4+'0');
   lcd_putchar(PINB.3+'0');
   lcd_putchar(PINB.2+'0');
   lcd_putchar(PINB.1+'0');
   lcd_putchar(PINB.0+'0');
   lcd_putchar(PINA.5+'0');
   lcd_putchar(PINA.4+'0');
   lcd_putchar(PINA.3+'0');
   lcd_putchar(PINA.2+'0');
   lcd_putchar(PINA.1+'0');
   lcd_putchar(PINA.0+'0'); 
   lcd_gotoxy(11,0);
   if(bk)lcd_putsf("Black");else lcd_putsf("White");
   if((PINA.5==1&&PINA.4+PINA.3+PINA.2+PINA.1+PINA.0>  =4&&PINB.4+PINB.3+PINB.2+PINB.1+PINB.0==0&&!bk)||
   (PINA.5==0&&PINA.4+PINA.3+PINA.2+PINA.1+PINA.0<=1&  &PINB.4+PINB.3+PINB.2+PINB.1+PINB.0==5&&bk))
   {
      motor(200*j,-200*j);
      lcd_gotoxy(0,1);  
      lcd_putsf("Left 60 ");
      delay_ms(300);
      continue;
   }
   if((PINA.5==1&&PINA.4+PINA.3+PINA.2+PINA.1+PINA.0=  =0&&PINB.4+PINB.3+PINB.2+PINB.1+PINB.0>=4&&!bk)||
   (PINA.5==0&&PINA.4+PINA.3+PINA.2+PINA.1+PINA.0==5&  &PINB.4+PINB.3+PINB.2+PINB.1+PINB.0<=1&&bk))
   {
      motor(-200*j,200*j);
      lcd_gotoxy(0,1);  
      lcd_putsf("Right 60 ");
      delay_ms(300);
      continue;
   }
   if((PINA.5==1&&!bk)||(PINA.5==0&&bk))//MOSTAGHIM
   {
      motor(200*j,200*j);
      lcd_gotoxy(0,1);  
      lcd_putsf("Straight");
      delay_ms(10);
      continue;
   }
   if(PINA.4+PINA.3+PINA.2+PINA.1+PINA.0>=2&&PINB.4+P  INB.3+PINB.2+PINB.1+PINB.0>=2)bk=1;else bk=0;
   if((PINB.4==1&&!bk)||(PINB.4==0&&bk))
   {
      motor(200*j,-200*j);
      lcd_gotoxy(0,1);
      lcd_putsf("Left 5  ");
   }
   if((PINB.3==1&&!bk)||(PINB.3==0&&bk))
   {
      motor(200*j,-80*j);
      lcd_gotoxy(0,1);
      lcd_putsf("Left 4  ");
   }
   if((PINB.2==1&&!bk)||(PINB.2==0&&bk))
   {
      motor(200*j,-30*j);
      lcd_gotoxy(0,1);
      lcd_putsf("Left 3  ");
   }
   if((PINB.1==1&&!bk)||(PINB.1==0&&bk))
   {
      motor(200*j,0*j);
      lcd_gotoxy(0,1);
      lcd_putsf("Left 2  ");
   }
   if((PINB.0==1&&!bk)||(PINB.0==0&&bk))
   {
      motor(200*j,30*j);
      lcd_gotoxy(0,1);
      lcd_putsf("Left 1  ");
   }
   if((PINA.0==1&&!bk)||(PINB.0==0&&bk))
   {
      motor(200*j,-200*j);
      lcd_gotoxy(0,1);
      lcd_putsf("Right 5 ");
   }
   if((PINA.1==1&&!bk)||(PINB.1==0&&bk))
   {
      motor(200*j,-80*j);
      lcd_gotoxy(0,1);
      lcd_putsf("Right 4 ");
   }
   if((PINA.2==1&&!bk)||(PINB.2==0&&bk))
   {
      motor(200*j,-30*j);
      lcd_gotoxy(0,1);
      lcd_putsf("Right 3 ");
   }
   if((PINB.3==1&&!bk)||(PINB.3==0&&bk))
   {
      motor(200*j,0*j);
      lcd_gotoxy(0,1);
      lcd_putsf("Right 2 ");
   }
   if((PINB.4==1&&!bk)||(PINB.4==0&&bk))
   {
      motor(200*j,30*j);
      lcd_gotoxy(0,1);
      lcd_putsf("Right 1 ");
   }
};
}
ولی من پیشنهاد می کنم تقیب خط نسازید .

----------


## Big bang

سلام ميخواستم ببينم امكانش هست چیدمان سنسورهایتان را به من بگویيد

----------


## m-saam

دارم پروژه تحویل میدم وقتم هم تموم شده با 5 سنسور و دو موتور ربات مسیریاب دارم میسازم
همه چیز ردیفه فقط:

دستور خواندن سنسور از پایه های میکرو از پورت سی ( PC) از 0 تا 4 رو میخوام . 
تو کد ویژن هم نوشتم

----------


## farzadsw

همون برنامه ای گذاشتن این کار رو میکنه ولی با 10 تا سنسور (5تا پورت Aو 5تا پورت B) . این قسمتش برای خوندن سنسور ها و تصمیم گیری برای حرکته:


 
 
    if((PINA.5==1&&PINA.4+PINA.3+PINA.2+PINA.1+PINA.0>  =4&&PINB.4+PINB.3+PINB.2+PINB.1+PINB.0==0&&!bk)||
    (PINA.5==0&&PINA.4+PINA.3+PINA.2+PINA.1+PINA.0<=1&  &PINB.4+PINB.3+PINB.2+PINB.1+PINB.0==5&&bk))
    {
       motor(200*j,-200*j);
       lcd_gotoxy(0,1);  
       lcd_putsf("Left 60 ");
       delay_ms(300);
       continue;
    }
    if((PINA.5==1&&PINA.4+PINA.3+PINA.2+PINA.1+PINA.0=  =0&&PINB.4+PINB.3+PINB.2+PINB.1+PINB.0>=4&&!bk)||
    (PINA.5==0&&PINA.4+PINA.3+PINA.2+PINA.1+PINA.0==5&  &PINB.4+PINB.3+PINB.2+PINB.1+PINB.0<=1&&bk))
    {
       motor(-200*j,200*j);
       lcd_gotoxy(0,1);  
       lcd_putsf("Right 60 ");
       delay_ms(300);
       continue;
    }
    if((PINA.5==1&&!bk)||(PINA.5==0&&bk))//MOSTAGHIM
    {
       motor(200*j,200*j);
       lcd_gotoxy(0,1);  
       lcd_putsf("Straight");
       delay_ms(10);
       continue;
    }
    if(PINA.4+PINA.3+PINA.2+PINA.1+PINA.0>=2&&PINB.4+P  INB.3+PINB.2+PINB.1+PINB.0>=2)bk=1;else bk=0;
    if((PINB.4==1&&!bk)||(PINB.4==0&&bk))
    {
       motor(200*j,-200*j);
       lcd_gotoxy(0,1);
       lcd_putsf("Left 5  ");
    }
    if((PINB.3==1&&!bk)||(PINB.3==0&&bk))
    {
       motor(200*j,-80*j);
       lcd_gotoxy(0,1);
       lcd_putsf("Left 4  ");
    }
    if((PINB.2==1&&!bk)||(PINB.2==0&&bk))
    {
       motor(200*j,-30*j);
       lcd_gotoxy(0,1);
       lcd_putsf("Left 3  ");
    }
    if((PINB.1==1&&!bk)||(PINB.1==0&&bk))
    {
       motor(200*j,0*j);
       lcd_gotoxy(0,1);
       lcd_putsf("Left 2  ");
    }
    if((PINB.0==1&&!bk)||(PINB.0==0&&bk))
    {
       motor(200*j,30*j);
       lcd_gotoxy(0,1);
       lcd_putsf("Left 1  ");
    }
    if((PINA.0==1&&!bk)||(PINB.0==0&&bk))
    {
       motor(200*j,-200*j);
       lcd_gotoxy(0,1);
       lcd_putsf("Right 5 ");
    }
    if((PINA.1==1&&!bk)||(PINB.1==0&&bk))
    {
       motor(200*j,-80*j);
       lcd_gotoxy(0,1);
       lcd_putsf("Right 4 ");
    }
    if((PINA.2==1&&!bk)||(PINB.2==0&&bk))
    {
       motor(200*j,-30*j);
       lcd_gotoxy(0,1);
       lcd_putsf("Right 3 ");
    }
    if((PINB.3==1&&!bk)||(PINB.3==0&&bk))
    {
       motor(200*j,0*j);
       lcd_gotoxy(0,1);
       lcd_putsf("Right 2 ");
    }
    if((PINB.4==1&&!bk)||(PINB.4==0&&bk))
    {
       motor(200*j,30*j);
       lcd_gotoxy(0,1);
       lcd_putsf("Right 1 ");
    }
 
 
 
 


مثلا PINC.4 پایه پنجم از پورت c رو میخونه (0 یا 1)

----------


## haras14465

با سلام 
اگر امکان داره نحوی قرار گیری سنسور ها رو هم قرار بدهید 

و در مورد if(PINA.4+PINA.3+PINA.2+PINA.1+PINA.0>=2&&PINB.4+P  INB.3+PINB.2+PINB.1+PINB.0>=2)bk=1;else bk=0;


و همچنین OCR1AL=-(int)p1;


که در برنامه چه کار می کننند؟؟ :قلب:

----------


## khafan_bat

مهندس همینطوری که نمیشه . . . 

این درست که میخوای برنامه مسیر یاب بنویسی ، باید یکسری چیزا رو معلوم کنی . نوع ، تعداد ، چگونگی پیکربندی ، چگونگی راه اندازی  سنسور ها و موتور ها با جزیات دقیق . . . 

با توجه به شکل فیزیک و مشخصات الکترونیکی و مکانیکی روباتت چه الگوریتمی میخوای پیاده کنی ؟ سرعتی ؟ دقتی ؟ قدرتی ؟ ( که اینها هم تابع نوع قرار گیری سنسور ها و موتور ها هستند )

از همه مهمتر . . . با چه زبانی و در چه محیطی میخوای برنامه بنویسی ؟؟؟

بگو تا در برنامه نویسی کمکت کنم.

----------


## haras14465

سلام 

من برنامه را خوندم تقریبا همشو متوجه شدم الا مقدار دادهی رجیستر هاint) p1 و جالب بود ببینم برای این برنامه که شما نوشتید نحوی قرارگیری سنسور ها دایره ای یا شکل دیگری هست .

ضمن این که برنامه اگر porta.6 رو هم نمی دونم کجا و چی هست که سرعت رو کوم و زیاد می کنه 


من یک 6-7  ماهی بیشتر نیست که روباتیک کار می کنم و مین یاب اتو ماتیک کار کردم و فعلا روی مسیر یاب ها مطالعه می کنم ممنون می شوم در مورد این سوال ها کمکم کنی .....



با تشکر

----------


## labkhand

> من یه برنامه نویس میکرو یم در مسابقات روبوتیک بابل 2 دوره قبل مقام 4 روم 
> دارم  اگه می خای اطلاعات بده در مورد تعداد سنسورها و ... تا برنامه رو برات بفرستم






دوست عزيز سلام.  من يه برنامه براي ربات 12 سنسوره مي خوام كه  به صورت زير سنسورا قرار گرفتن.لطفا كمكم كنين 
ستاره ها سنسورا هستن.
  *--------------*----------------*
   ---------------*-----------------
   ------------*-----*--------------
   ---------*----------*------------
   ------*----------------*---------
   ----*--------------------*-------

----------


## jamshidiso

دوستان من یک ربات مسیریاب ساختم بامیکروکنترل mega8l وبادوسنسورفرستنده ودو سنسورگیرنده حالا برای برنامه اش ماندم هرکاری می کنم راه نمی افته کلیه مدارالکتریکی چندبارچک کردم همش درسته اگرکسی میتونه برای برنامه اش کمکم کنه

----------


## mrbarekat

من یک آرایش سنسور جدید عالی 19 سنسوره براتون گذاشتم که روش خوندنش متفاوته ولی بهترین روشش روش خواندن پله ایه یعنی سنسور و سط را میخونیم تا زمانی که روی خط سیاهه وقتی از خط سیاه خارج شد دوتا سنسور پایینی را چک میکنیم تا پیچ ها را تشخیص بدیم.هرچقدر پیچ تندتر باشه سنسورهای پایینتری را چک میکنیم تا به آخرین سنسورهابرسیم. برین حالشو ببرین.


http://www.up.egyup.com/images/42333840064606464668.jpg

----------


## mrbarekat

سنسورها را با چه واسطه ای به میکرو وصل کردی؟ adc یا op amp؟

----------


## HjSoft

سلام ، فعلا بهترین شیوه چیدمان سنسور ، شیوه هلالی خیلی نرم هست . متاسفانه Editor اجازه رسم نمیده . بنده خودم به طور کامل با این روش کار کرده ام و نتیجه خوبی گرفته ام .

----------


## mohammad_479

سلام دوست عزیز من تو سایت کلوپ ثبت نام کردم ولی کلوپ رباتیکو پیدا نکردم ! میشه راهنمایی کنید . :لبخند:

----------


## mehrdad12345

سلام دوست عزیز من یک تازه کارم و تا حالا این دومین رباتم بوده که می سازم که یک ربات 8 سنسوره مسیریاب است که من در برنامه نویسی اش کمی(خیلی بیشتر از کمی) مشکل دارم و خواستم ازشما فرد باتجربه کمک بگیرم اگه می شه (خواهشا  ترو خدا )برایم برنامه اش را بنوسید .

پیام مدیر بخش : در خواست های خصوصی رو تنها از طریق پیام خصوصی پیگیری کنید .

----------


## amd.coms

با سلام خدمت دوست عزیز
من یک ربات مسیر یاب با 15 سنسور مانند شکل درست کرده ام و مسیر مورد نظر هم در عکس هست اگه میشه در نوشتن برنامه ی آن به من کمک کنید (دو موتور با درایور lm298اتصال به پورتd و سنسورها را با opamp به پورت c,bوصل کرده ام ) atmega32
خیلی ممنون می شم اگه کمکم کنید :لبخند:      email:amd.coms@gmail.com

----------


## sara90

> انقدر خودتونو اذیت نکنید من یه برنامه که با codevision به زبان c نوشته شده می زارم سبزوار سوم شد.
> #include <mega16.h>
> #include <delay.h>
> // Alphanumeric LCD Module functions
> #asm
>    .equ __lcd_port=0x15 ;PORTC
> #endasm
> #include <lcd.h>
>  
> ...


سلام به دوستان خوبم میشه یه نفر این برنامه رو یه توضیح کلی بده که قسمت های مختلفش چیکار میکنن؟

----------


## small_rz

سلام. یه سوال:
تو بعضی از آموزش ها میگن اگه از 2 موتور 6 ولت استفاده می کنیم باید به L298     ,  ولتاژ 12 ولت بدیم تو بعضی ا میگن نه 6 ولت کافیه. بالاخره کدوم درسته؟ :(

----------


## hossein72

> من یه برنامه نویس میکرو یم در مسابقات روبوتیک بابل 2 دوره قبل مقام 4 روم 
> دارم  اگه می خای اطلاعات بده در مورد تعداد سنسورها و ... تا برنامه رو برات بفرستم



سلام خسته نباشی!ربات تعقیب خط با 8 سنسور cny70با دو موتور.ممنون

----------


## md3848

من ربات مسیر یاب با 5 سنسور نوشتم مدارش هم با پروتئوس شبیه سازی کردم

یکی از دوستان که کد برنامه ربات مسیر یاب رو در پست های اولیه گزاشت کد های مربوط به lcd توش بود 

حالا یه سوال: برای چی باید برای این ربات ها lcd قرار داد؟؟؟؟

----------


## mehrdadbaqeri

مهمترین مساله الگوریتم. بهترین الگوریتمی که من می شناسم PID cotroller هستش.

http://www.pololu.com/docs/0J21/all#1
http://www.societyofrobots.com/membe...xport/html/350

----------


## venos.

سلام بخشید میشه برنام ای که برای amd.coms فرستادین برای منم بفرستین لطفا .خیلی خیلی هم ممنون
x,lona@yahoo.com

----------


## venos.

ببخشید ایمیلم x.lona@yaho.com است :لبخند گشاده!:  ممنون

----------


## محمد1990

سلام 
دوستان عزیز من ی مشکلی شدیدی در برنامه نویسی ربات مسیریاب دارم اگر لطف کنین کمکم کنین خیلی ممنون میشم .......... :ناراحت: 
من ی برنامه برای یک ربات مسیر یاب 5 سنسوره با استفاده از کدویزن که با استفاده  روش pwm برای موتور ها سرعت رو کاهش بده و lcd هم نداره....
به طور کلی ربات من دارای ی چیدمانی بصورت عکس هایی که برات میفرستم هست....




 همونطور که در عکس ها دیده میشه من از پورت A میکرو بعنوان ورودی اطلاعات از سنسورها و از پورتD بعنوان خروجی میکرو به درایو وصل کردم ...


برنامه میخوام بصورتی باشه که وقتی سنسور وسط رو خط بود دو موتور بچرخند
اگر سنسور راست یا چپ سنسور وسطی روی خط آمد موتور سمت چپ یا راست با سرعت کمتری موتور مربوطه به گردش در آید و اگر انتهایی ترین سنسور ها بر روی خط امد اون موتوری که باید بچرخه با سرعت بیشتری بچرخد تا ربات سریع به مسیر برگردد (منظورم اینکه با PWM این کار انجام بشه ) در کل سرعت موتور ها در هر حالت قرار گیری به طور معمول ب یک نسبت کاهش داشته باشه....


اگر منظورم رو متوجه نشدین بزار ساده تر بگم وقتی سنسور وسط روی خط بود مثلا موتور ربات 2 دور بر ثانیه حرکت کنه وقتی یک از  سنسورهایکناری روی خط رفت موتور مربوطه 1.5دور بر ثانیه بچرخه و اگر انتهایی ترین سنسور روی خط رفت موتور 2.5 دور بر ثانیه بچرخه( این یک مثال بودا) ..... :متفکر: 

خواهش میکنم یکی برنامه اش رو باتوضیح برام بزاره......(پاس شدن درس این ترمم بشدت بهش بستگی داره )


با تشکر از وقتی که میزارین .....

----------


## محمد1990

ببخشید ایمیلم رو فراموش کردم بزارم دوستان لطفا کمکم کنین وقت زیادی ندارم فقط ی برنامه ای برام واقعا با کیفیت باشه و خوب عمل کنه 

با تشکر از تمامی دوستانی که به دیگران کمک میکنن

sadegh_1990@mailfa.org

----------


## venos.

سلام ببخشید میشه به من کمک کنین و بگین به زبان cو بسکام برای مسیر های به شکل زیر چطوری باید دستور بدم و برنامشو بنویسم
http://uupload.ir/files/xlb_untitled.png

----------


## maryam.m011

سلام روز بخیر
من میخوام یه پروژه ی AVR با بسکام درس کنم میشه راهنماییم کنین

----------

