PDA

View Full Version : کمک برای برنامه نویسی ربات مسیریاب



mehdi_RM
شنبه 05 فروردین 1385, 22:59 عصر
کسی می تونه به من در برنامه نویسی برای یه ربات مسیریاب که
از میکرو ای وی آر می خوام استفاده کنم کمکم کنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

Kimia_Konjkav
یک شنبه 06 فروردین 1385, 06:12 صبح
http://robotic.farsitools.com/

www.iranled.com

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

mfarzan2004
پنج شنبه 10 فروردین 1385, 23:31 عصر
من یه برنامه نویس میکرو یم در مسابقات روبوتیک بابل 2 دوره قبل مقام 4 روم
دارم اگه می خای اطلاعات بده در مورد تعداد سنسورها و ... تا برنامه رو برات بفرستم

mhmmdshirazi
چهارشنبه 10 مهر 1387, 03:47 صبح
انقدر خودتونو اذیت نکنید من یه برنامه که با 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+PINB.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
دوشنبه 31 فروردین 1388, 15:05 عصر
سلام ميخواستم ببينم امكانش هست چیدمان سنسورهایتان را به من بگویيد

m-saam
جمعه 16 بهمن 1388, 22:06 عصر
دارم پروژه تحویل میدم وقتم هم تموم شده با 5 سنسور و دو موتور ربات مسیریاب دارم میسازم
همه چیز ردیفه فقط:

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

farzadsw
شنبه 17 بهمن 1388, 14:56 عصر
همون برنامه ای گذاشتن این کار رو میکنه ولی با 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+PINB.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
چهارشنبه 06 مرداد 1389, 14:55 عصر
با سلام
اگر امکان داره نحوی قرار گیری سنسور ها رو هم قرار بدهید

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


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


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

khafan_bat
دوشنبه 11 مرداد 1389, 21:09 عصر
مهندس همینطوری که نمیشه . . .

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

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

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

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

haras14465
دوشنبه 18 مرداد 1389, 13:06 عصر
سلام

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

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


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



با تشکر

labkhand
شنبه 06 شهریور 1389, 17:42 عصر
من یه برنامه نویس میکرو یم در مسابقات روبوتیک بابل 2 دوره قبل مقام 4 روم
دارم اگه می خای اطلاعات بده در مورد تعداد سنسورها و ... تا برنامه رو برات بفرستم





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

jamshidiso
پنج شنبه 25 آذر 1389, 13:11 عصر
دوستان من یک ربات مسیریاب ساختم بامیکروکنترل mega8l وبادوسنسورفرستنده ودو سنسورگیرنده حالا برای برنامه اش ماندم هرکاری می کنم راه نمی افته کلیه مدارالکتریکی چندبارچک کردم همش درسته اگرکسی میتونه برای برنامه اش کمکم کنه

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


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

mrbarekat
پنج شنبه 19 اسفند 1389, 17:42 عصر
سنسورها را با چه واسطه ای به میکرو وصل کردی؟ adc یا op amp؟

HjSoft
یک شنبه 28 فروردین 1390, 17:10 عصر
سلام ، فعلا بهترین شیوه چیدمان سنسور ، شیوه هلالی خیلی نرم هست . متاسفانه Editor اجازه رسم نمیده . بنده خودم به طور کامل با این روش کار کرده ام و نتیجه خوبی گرفته ام .

mohammad_479
دوشنبه 05 اردیبهشت 1390, 19:05 عصر
سلام دوست عزیز من تو سایت کلوپ ثبت نام کردم ولی کلوپ رباتیکو پیدا نکردم ! میشه راهنمایی کنید .:لبخندساده:

mehrdad12345
چهارشنبه 07 اردیبهشت 1390, 20:14 عصر
سلام دوست عزیز من یک تازه کارم و تا حالا این دومین رباتم بوده که می سازم که یک ربات 8 سنسوره مسیریاب است که من در برنامه نویسی اش کمی(خیلی بیشتر از کمی) مشکل دارم و خواستم ازشما فرد باتجربه کمک بگیرم اگه می شه (خواهشا ترو خدا )برایم برنامه اش را بنوسید .

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

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