PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ربات مسیریاب



shayanmelody
07-02-2011, 21:43
سلام خدمت همه دوستان و اساتید گرامی.
من حدود 1 سالی میشه که ایده ساخت یک ربات مسیریاب با 64 تا سنسور(یک ماتریس 8*8)به ذهنم افتاد.بعد از کشو قوس فراوان تونستم سخت افزار رو بطور کامل و بدون اشکال ببندم(البته رو فیبر سوراخ دار!)الان فقط مونده برنامش.چندتا الگوریتم نوشتم اما اون انتظاراتی رو که داشتم بر آورده نکرد.اومدم اینجا تا از شما بپرسم ببینم ایده ای واسه برنامه نویسیش دارید یا نه.
با تشکر.

1nafar
08-02-2011, 11:11
سلام
باید حقایق رو قبول کرد ، 64 تا سنسور برای یک ربات مسیر یاب واقعا زیاد هست و تقریبا شما 40 تا 50 عدد سنسور اضافه دارید ( البته این نظر من هست )
You can see links before replyجايگذاري-سنسورها-در-ربات-مسير-ياب
بهتره یه مقدار در مورد نحوه ی استفاده از سنسور ها و چیزی که توی ذهنتون هست بیشتر توضیح بدید ، شاید یه ایده ی جدید در کار باشه .

shayanmelody
08-02-2011, 17:25
سلام.
مرسی از توجه شما.امشب یا فردا جزییات بیشتری رو از طرح قرار میدم.

shayanmelody
17-02-2011, 14:52
با سلامی دوباره و عذر خواهی برای تاخیر.
ایده کار از اونجا شروع شد که در دوره قبل مسابقات رباتیک دانشگاهمون من با ساختن ربات مسیریاب با پردازش تصویر آشنا شدم.البته به دلایلی نتوانستم ادامه دهم.که دلیل این آشنایی یکی از تیم هایی بود که رباتشان مجهز به دوربین بود.وقتی که ربات بر روی مسیر در حال حرکت بود مسیر حرکت بر روی یک ماتریس طراح شده در برنامه نشان داده میشد.از انجاییکه این ربات مسیر را به زیبایی طی میکرد،من با خودم فکر کردم وگفتم به جای اینکه ما دوربین بگذاریم در جلوی ربات و با پیاده کردن فیلتر ها و الگوریتم های خاص مسیر را بر روی یک ماتریس پیاده کنیم،با سنسور این کار را انجام دهیم و سپس از این مرحله پردازش ها بر روی ماتریس همانند کار با دوربین میباشد.البته این نظر من است و شاید کار با دوربین تفاوت های دیگری نیز داشته باشد.
خوب حالا الگوریتمی که در ابتدا در ذهن من بود را میگوم:
به ترتیب سطر ها را فعال میکنیم و مقدار هر یک از سطر هارا خوانده و در متغییر مربوطه قرار میدهیم و سپس به سراغ سطر های بعدی میرویم.این روند ادامه پیدا میکند تا هر هشت سطر زمین را اسکن کند.
سپس این 8 متغییر را در یک ماتریس 8*8 قرار داده و حالت های مختلف را مینویسیم !!!!!!!!!!!
در ابتدا که این الگوریتم به ذهنم آمد ،عمق فاجعه را درک نکرده بودم!فقط به این فکر میکردم که با این حالت های زیاد میتوان در برنامه مانور های خیلی خوبی داد!(ولی تا چه حد زیاد؟ 64^2*2 حالت !!!!!!!!!!!!!!!!!!!!!!!!!!!)
بر فرض محال که این حالت های مختلف را بنویسیم(؟)پگونه میشود از AVR توقع داشت که از پس همچین برنامه ای بر آید؟
بنابر این به فکر الگوریتم های ساده تر افتادم و الآن دارم بر روی آنها کار میکنم.
امیدوارم توضیحات واضح باشد و توانسته باشم هدفم را برسانم.منتظر نظرات شما دوستان هستم مخصوصا جناب آقای 1nafar که به موضوع من توجه نشان دادند.
با تشکر

1nafar
17-02-2011, 19:32
سلام
معمولا دوربین های که روی ربات ها نصب میشن ، دوتا حالت دارن :
1- دوربین دارای رزولیشن کم هست ( مثلا 64 یا 128 پیکسل ) و میکرو خودش عملیات پردازش توصیر رو انجام میده
2- دوربین دارای کیفت مناسب هست و تصویر گرفته شده رو به یک کامپیوتر ارسال میکنه ، در کامیپوتر پردازش تصویر توسط نرم افزار های مثل مطلب یا ... انجام میشه و سپس فرامین به پردازنده ی ربات ارسال میشه .
.................................................. .............................
الان شما دارای همون حالت اول رو پیاده میکنید ، اما به جای دوربین از سنسور مادون قرمز استفاده کردید و به نوعی کار دشوار کردید .
در دوربین ها یا به نوعی سنسور های تصویر ، در هر دوره ی زمانی یک تصویر از مسیر تهیه میشه ، این تصویر در داخل دوربین به کد های باینری تبدیل میشه و با استفاده از یکی از پروتکل های ارتباطی ( i2c یا موازی یا spi یا ...) یه میکرو کنترلر ارسال میشه ، داده ی ارسالی یک ماتریس 8*8 هست ( برای یک دوربین 64 پیکسلی نوعی ) که در اون مکان های سفید با صفر و مکان های مشکلی با یک مشخص میشن ، مثلا :
00000000
00000011
00001100
00011000
00011000
00011000
00011000
00011000
میکرو ماتریس بالا رو به صورت سریال از پایین به بالا دریافت میکنه و هر سطر رو با سطر قبلی خودش مقایسه میکنه .
حرکت آهسته : فرض کن میکرو در هر ثانیه یکی از سطر های بالا رو دریافت کنه ،بعد از گذشت اولین ثانیه ، میکرو سطر دوم رو دریافت میکنه و با مقایسه ی بیت های اون با سطر اول متوجه میشه که مسیر راست هست و هر دو موتور ربات باید با قدرت ثابت ربات رو به جلو ببریند .
حالت بالا تا ثانیه ی چهارم ادامه پیدا میکنه ف در ثانیه ی پنجم و با دریافت سطر ششم ، میکرو متوجه میشه که بیت ها یک واحد به راست شیفت پیدا کردن ، این یعنی مسیر ما به سمت راست میره ، در این حالت چرخ سمت رایت باید سرعتش رو کمتر کنه تا ربات از مسیر منحرف نشه و.................
با توجه به اینکه بخش عمده ی پردازش در داخل سنسور انجام میشه و میکرو فقط باید عملیات مقایسه و کنترل موتور ها رو انجام بده ، این روش کاملا عملی هست اما چون یه مقدار سرعت دوربین پایین هست و توی اغلب مسابقات ما به ربات های سرعت بالا نیاز داریم ، معمولا از دوربین زیاد استفاده نمیشه ( اگه سرعت ربات بالا باشه ، امکان خروج از خط خیلی زیاد هست ) .
.................................................. .............................
به نظر من اگه شما روی پردازش تصویر و کار با دوربین وقت بزارید ، بهتره ، چون وقت گذاشتن روی سنسور های مادون قرمز مثل راه اندازی شبکه ی اترنت با 8051 با وجود میکرو کنترلر های و ماژول های جدید هست .
اگه میخوایید همین پروژه رو ادامه بدید ، باید خروجی تمامی سنسور ها رو به وسیله ی op-amp به سطح منتطقی 0 و 1 تبدیل کنید و بعد اون رو به صورت موازی و 8 تایی به میکرو بدید .
برای اتصال سنسور ها به میکرو میتونید از بافر های که پایه ی enable دارن استفاده کنید ، در این حالت 8 تا بافر خواهید داشت که خروجی اونا به هم متصل شده و به یکی از پورت های میکرو وصل شده .
به ورودی هر بافر 8 تا سنسور متصل هست ( خروجی مقایسه کننده op-amp) و میکرو از طریق یک پورت دیگه ، پایه های e بافر های موجود رو کنترل میکنه .

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

shayanmelody
17-02-2011, 20:46
سلام خدمت استاد عزیز.
با تشکر از توضیحات شما.این طور که من متوجه شدم باید کارهای زیر را انجام دهیم:
1.ابتدا سطر 8 را فعال میکنیم و مقدار آنرا میخوانیم.
2.از آنجا که هنوز سطری را نخواندیم،این مقدار را باید با یک متغییر خنثی مقایسه کنیم.
3.عملیات پردازشی را انجام دهیم و یک خروجی بگیریم.
4.متناسب با خروجی به موتور ها دستور دهیم.
5.سطر 7 را فعال کنیم.
6. و ....
آیا درست متوجه شدم ؟
در مورد درایو کردن سنسور ها این را بگویم که اگر قرار بود همزمان تمام سطر ها روشن باشند،آنگاه شدت اشعه ir تولید شده توسط led فرستنده آنقدر زیاد بود که تمام گیرنده ها در سطح منطقی 1 بودند.بخاطر همین مجبورم در هر لحطه همان سطری را که می خواه پردازش کنم روشن کنم که این عمل را با ترانزیستور انجام دادم.
برای تقویت کردن خروجی سنسورها نیز از lm324 استفاده کردم.

shayanmelody
17-02-2011, 20:51
این هم عکس رباتم میباشد

shayanmelody
20-02-2011, 20:13
من هنوز منتظرما....................
کسی نبود؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

persian_astro
04-08-2011, 16:21
اولین چیزی که توجه منو جلب کرد این بود که چون شما سنسوراتون خیلی زیادن و به هم نزدیکن احتمال دریافت اطلاعات غلط خیلی زیاده.........فکر نکنم کار درستی باشه...

cmuiran
04-08-2011, 22:18
سلام
میگم که مثل صفحه کلید عمل کن
مثلا
البته این برای 6*6 نوشتم
Portb = 1
For Pg = 0 To 5
I(pg + 1) = Getadc(pg)
Next
' Waitms 50

Portb = 2
For Pg = 6 To 11
P = Pg - 6
I(pg + 1) = Getadc(p)
Next
' Waitms 50

Portb = 4
For Pg = 12 To 17
P = Pg - 12
I(pg + 1) = Getadc(p)
Next
' Waitms 50

Portb = 8
For Pg = 18 To 23
P = Pg - 18
I(pg + 1) = Getadc(p)
Next
' Waitms 50

Portb = 16
For Pg = 24 To 29
P = Pg - 24
I(pg + 1) = Getadc(p)
Next
' Waitms 50

Portb = 32
For Pg = 30 To 35
P = Pg - 30
I(pg + 1) = Getadc(p)
Next
' Waitms 50

For B = 1 To 36
If I(b) > Ref Then
I(b) = 1
Else : I(b) = 0
End If
Next B

cmuiran
04-08-2011, 22:19
فکر کنم سخت نوشتم
اینو ببین
Portb = 1
I(1) = Getadc(0)
I(2) = Getadc(1)
I(3) = Getadc(2)
I(4) = Getadc(3)

Portb = 2
I(5) = Getadc(0)
I(6) = Getadc(1)
I(7) = Getadc(2)
I(8) = Getadc(3)

Portb = 4
I(9) = Getadc(0)
I(10) = Getadc(1)
I(11) = Getadc(2)
I(12) = Getadc(3)

Portb = 8
I(13) = Getadc(0)
I(14) = Getadc(1)
I(15) = Getadc(2)
I(16) = Getadc(3)

Portb = 16
I(17) = Getadc(0)
I(18) = Getadc(1)
I(19) = Getadc(2)
I(20) = Getadc(3)

For B = 1 To 20
If I(b) > Ref Then
I(b) = 1
Else : I(b) = 0
End If
Next B