کسی می تونه به من در برنامه نویسی برای یه ربات مسیریاب که
از میکرو ای وی آر می خوام استفاده کنم کمکم کنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
کسی می تونه به من در برنامه نویسی برای یه ربات مسیریاب که
از میکرو ای وی آر می خوام استفاده کنم کمکم کنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
http://robotic.farsitools.com/
www.iranled.com
اگر عضو سایت www.cloob.com هستید در آنجا یک کلوب با نام کلوب رباتیک وجود دارد که شاید دوستان بیشتر راهنماییتان نمایند. اگر عضو نیستید برای پیام بدهید که دعوتتان کنم (البته اگر مایلید)
من یه برنامه نویس میکرو یم در مسابقات روبوتیک بابل 2 دوره قبل مقام 4 روم
دارم اگه می خای اطلاعات بده در مورد تعداد سنسورها و ... تا برنامه رو برات بفرستم
انقدر خودتونو اذیت نکنید من یه برنامه که با 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 ");
}
};
}
ولی من پیشنهاد می کنم تقیب خط نسازید .
سلام ميخواستم ببينم امكانش هست چیدمان سنسورهایتان را به من بگویيد
آخرین ویرایش به وسیله whitehat : دوشنبه 31 فروردین 1388 در 18:22 عصر دلیل: لطفا فارسی بنویسید
دارم پروژه تحویل میدم وقتم هم تموم شده با 5 سنسور و دو موتور ربات مسیریاب دارم میسازم
همه چیز ردیفه فقط:
دستور خواندن سنسور از پایه های میکرو از پورت سی ( PC) از 0 تا 4 رو میخوام .
تو کد ویژن هم نوشتم
همون برنامه ای گذاشتن این کار رو میکنه ولی با 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)
با سلام
اگر امکان داره نحوی قرار گیری سنسور ها رو هم قرار بدهید
و در مورد 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;
که در برنامه چه کار می کننند؟؟
مهندس همینطوری که نمیشه . . .
این درست که میخوای برنامه مسیر یاب بنویسی ، باید یکسری چیزا رو معلوم کنی . نوع ، تعداد ، چگونگی پیکربندی ، چگونگی راه اندازی سنسور ها و موتور ها با جزیات دقیق . . .
با توجه به شکل فیزیک و مشخصات الکترونیکی و مکانیکی روباتت چه الگوریتمی میخوای پیاده کنی ؟ سرعتی ؟ دقتی ؟ قدرتی ؟ ( که اینها هم تابع نوع قرار گیری سنسور ها و موتور ها هستند )
از همه مهمتر . . . با چه زبانی و در چه محیطی میخوای برنامه بنویسی ؟؟؟
بگو تا در برنامه نویسی کمکت کنم.
سلام
من برنامه را خوندم تقریبا همشو متوجه شدم الا مقدار دادهی رجیستر هاint) p1 و جالب بود ببینم برای این برنامه که شما نوشتید نحوی قرارگیری سنسور ها دایره ای یا شکل دیگری هست .
ضمن این که برنامه اگر porta.6 رو هم نمی دونم کجا و چی هست که سرعت رو کوم و زیاد می کنه
من یک 6-7 ماهی بیشتر نیست که روباتیک کار می کنم و مین یاب اتو ماتیک کار کردم و فعلا روی مسیر یاب ها مطالعه می کنم ممنون می شوم در مورد این سوال ها کمکم کنی .....
با تشکر
دوست عزيز سلام. من يه برنامه براي ربات 12 سنسوره مي خوام كه به صورت زير سنسورا قرار گرفتن.لطفا كمكم كنين
ستاره ها سنسورا هستن.
*--------------*----------------*
---------------*-----------------
------------*-----*--------------
---------*----------*------------
------*----------------*---------
----*--------------------*-------
دوستان من یک ربات مسیریاب ساختم بامیکروکنترل mega8l وبادوسنسورفرستنده ودو سنسورگیرنده حالا برای برنامه اش ماندم هرکاری می کنم راه نمی افته کلیه مدارالکتریکی چندبارچک کردم همش درسته اگرکسی میتونه برای برنامه اش کمکم کنه
من یک آرایش سنسور جدید عالی 19 سنسوره براتون گذاشتم که روش خوندنش متفاوته ولی بهترین روشش روش خواندن پله ایه یعنی سنسور و سط را میخونیم تا زمانی که روی خط سیاهه وقتی از خط سیاه خارج شد دوتا سنسور پایینی را چک میکنیم تا پیچ ها را تشخیص بدیم.هرچقدر پیچ تندتر باشه سنسورهای پایینتری را چک میکنیم تا به آخرین سنسورهابرسیم. برین حالشو ببرین.
http://www.up.egyup.com/images/42333840064606464668.jpg
سنسورها را با چه واسطه ای به میکرو وصل کردی؟ adc یا op amp؟
سلام ، فعلا بهترین شیوه چیدمان سنسور ، شیوه هلالی خیلی نرم هست . متاسفانه Editor اجازه رسم نمیده . بنده خودم به طور کامل با این روش کار کرده ام و نتیجه خوبی گرفته ام .
سلام دوست عزیز من تو سایت کلوپ ثبت نام کردم ولی کلوپ رباتیکو پیدا نکردم ! میشه راهنمایی کنید .
سلام دوست عزیز من یک تازه کارم و تا حالا این دومین رباتم بوده که می سازم که یک ربات 8 سنسوره مسیریاب است که من در برنامه نویسی اش کمی(خیلی بیشتر از کمی) مشکل دارم و خواستم ازشما فرد باتجربه کمک بگیرم اگه می شه (خواهشا ترو خدا )برایم برنامه اش را بنوسید .
پیام مدیر بخش : در خواست های خصوصی رو تنها از طریق پیام خصوصی پیگیری کنید .
آخرین ویرایش به وسیله farzadsw : جمعه 09 اردیبهشت 1390 در 13:52 عصر
با سلام خدمت دوست عزیز
من یک ربات مسیر یاب با 15 سنسور مانند شکل درست کرده ام و مسیر مورد نظر هم در عکس هست اگه میشه در نوشتن برنامه ی آن به من کمک کنید (دو موتور با درایور lm298اتصال به پورتd و سنسورها را با opamp به پورت c,bوصل کرده ام ) atmega32
خیلی ممنون می شم اگه کمکم کنید email:amd.coms@gmail.com
منتظر تایید آدرس ایمیل
سلام. یه سوال:
تو بعضی از آموزش ها میگن اگه از 2 موتور 6 ولت استفاده می کنیم باید به L298 , ولتاژ 12 ولت بدیم تو بعضی ا میگن نه 6 ولت کافیه. بالاخره کدوم درسته؟ :(
من ربات مسیر یاب با 5 سنسور نوشتم مدارش هم با پروتئوس شبیه سازی کردم
یکی از دوستان که کد برنامه ربات مسیر یاب رو در پست های اولیه گزاشت کد های مربوط به lcd توش بود
حالا یه سوال: برای چی باید برای این ربات ها lcd قرار داد؟؟؟؟
مهمترین مساله الگوریتم. بهترین الگوریتمی که من می شناسم PID cotroller هستش.
http://www.pololu.com/docs/0J21/all#1
http://www.societyofrobots.com/membe...xport/html/350
سلام بخشید میشه برنام ای که برای amd.coms فرستادین برای منم بفرستین لطفا .خیلی خیلی هم ممنون
x,lona@yahoo.com
ببخشید ایمیلم x.lona@yaho.com است ممنون
سلام
دوستان عزیز من ی مشکلی شدیدی در برنامه نویسی ربات مسیریاب دارم اگر لطف کنین کمکم کنین خیلی ممنون میشم ..........
من ی برنامه برای یک ربات مسیر یاب 5 سنسوره با استفاده از کدویزن که با استفاده روش pwm برای موتور ها سرعت رو کاهش بده و lcd هم نداره....
به طور کلی ربات من دارای ی چیدمانی بصورت عکس هایی که برات میفرستم هست....
همونطور که در عکس ها دیده میشه من از پورت A میکرو بعنوان ورودی اطلاعات از سنسورها و از پورتD بعنوان خروجی میکرو به درایو وصل کردم ...
برنامه میخوام بصورتی باشه که وقتی سنسور وسط رو خط بود دو موتور بچرخند
اگر سنسور راست یا چپ سنسور وسطی روی خط آمد موتور سمت چپ یا راست با سرعت کمتری موتور مربوطه به گردش در آید و اگر انتهایی ترین سنسور ها بر روی خط امد اون موتوری که باید بچرخه با سرعت بیشتری بچرخد تا ربات سریع به مسیر برگردد (منظورم اینکه با PWM این کار انجام بشه ) در کل سرعت موتور ها در هر حالت قرار گیری به طور معمول ب یک نسبت کاهش داشته باشه....
اگر منظورم رو متوجه نشدین بزار ساده تر بگم وقتی سنسور وسط روی خط بود مثلا موتور ربات 2 دور بر ثانیه حرکت کنه وقتی یک از سنسورهایکناری روی خط رفت موتور مربوطه 1.5دور بر ثانیه بچرخه و اگر انتهایی ترین سنسور روی خط رفت موتور 2.5 دور بر ثانیه بچرخه( این یک مثال بودا) .....
خواهش میکنم یکی برنامه اش رو باتوضیح برام بزاره......(پاس شدن درس این ترمم بشدت بهش بستگی داره )
با تشکر از وقتی که میزارین .....
ببخشید ایمیلم رو فراموش کردم بزارم دوستان لطفا کمکم کنین وقت زیادی ندارم فقط ی برنامه ای برام واقعا با کیفیت باشه و خوب عمل کنه
با تشکر از تمامی دوستانی که به دیگران کمک میکنن
sadegh_1990@mailfa.org
سلام ببخشید میشه به من کمک کنین و بگین به زبان cو بسکام برای مسیر های به شکل زیر چطوری باید دستور بدم و برنامشو بنویسم
http://uupload.ir/files/xlb_untitled.png
سلام روز بخیر
من میخوام یه پروژه ی AVR با بسکام درس کنم میشه راهنماییم کنین