Behzad AZ
08-11-2010, 02:38 PM
کنترل روبات توسط پورت Parallel و به صورت WireLess
چکيده: در اين مقاله قصد داريم توسط پورت Parallel کامپيوتر، يک روبات را به صورت WireLess کنترل کنيم. نحوهي اتصال فرستنده و گيرندهي بيسيم به پورت Parallel و همينطور روبات و همچنين نحوهي شناسائي پورت Parallel توسط برنامه MATLAB در اين مقاله توضيح داده ميشود. استفاده از فرستنده و گيرندهي WireLess و توضيح پيرامون نحوهي کار اين سيستم، از ديگر بخشهاي اين مقاله ميباشد. از اين سيستم ميتوان در قسمتهايي که دسترسي مستقيم مقدور نميباشد استفاده نمود و به وسيلهي کامپيوتر، وظايف مورد نظر را به روبات محول کرد.
واژههاي کليدي: Parallel Port ، MATLAB ، Wireless ، کنترل روبات
1- مقدمه
امروزه پيشرفت در زمينهي ساخت روبات سرعت بيشتري به خود گرفته و شاهد توليد انواع روبات صنعتي و غير صنعتي با کاربردهاي مختلف ميباشيم. روباتهايي که وظايف انسانها را بر عهده ميگيرند و با دقت بيشتري کارها را انجام ميدهند. براي کنترل روبات روشهاي مختلفي وجود دارد. روباتهايي که از قبل برنامهريزي شدهاند و بدون ارتباط با خارج، وظايف محوله را انجام ميدهند و يا روباتهايي که از بيرون کنترل ميشوند و ميتوان وظايف آنها را به راحتي تغيير داد و ... .
در اين مقاله، ما روباتي را بررسي خواهيم کرد که از بيرون کنترل ميشود. برنامهي اين روبات توسط MATLAB نوشته شده و از طريق پورت Parallel و به صورت WireLess به درايور و از آنجا به موتورهاي روبات دستور داده ميشود. با تغيير برنامه ميتوان وظايف مختلفي را براي روبات تعريف کرد. در شکل (1)، بلوکدياگرام اين سيستم را مشاهده ميکنيد:
2- قسمت مکانيکي
براي قسمت مکانيکي اين روبات از يک ماشين با 4 چرخ استفاده شده است که توسط دو موتور DC که يکي چرخهاي سمت راست و ديگري چرخهاي سمت چپ را به حرکت در ميآورد کنترل ميشود. فرمانهاي لازم براي به حرکت درآوردن اين موتور توسط کامپيوتر و از طريق پورت Parallel به صورت بيسيم به درايو نصب شده بر روي روبات داده شده و از آنجا نيز به موتورها اعمال ميشود.
3- ارتباط پورت Parallel و MATLAB
از آنجا که فرمانهاي دادهشده به پورت Parallel توسط برنامهي MATLAB داده ميشود، لازم است تا دستورات لازم براي ارتباط بين MATLAB و پورت Parallel نوشته شود. اين دستورات پورت Parallel را شناسائي کرده و پورتهاي مورد استفاده را تعريف ميکند. در زير، برنامهي مربوط به معرفي پورت Parallel در برنامهي MATLAB را ميبينيد:
parport = digitalio('parallel','LPT1');
hwlines = addline(parport,0:3,'out');
data =4 ;
putvalue(parport,data);
putvalue(parport.Line(1:4),data);
bvdata = dec2binvec(data,4);
putvalue(parport,bvdata);
putvalue(parport.Line(1:4),bvdata);
ar=[0 0 0 0];
حال ما ميتوانيم از پينهاي 1 تا 4 پورت Parallel استفاده کنيم ، چون براي فرمان به 2 موتور، 4 بيت کافي است. براي فعال کردن اين چهار پين کافي است که در ماتريس ar اعداد 0 يا 1 را وارد کنيم. ماتريس ar به صورت زير تعريف شده است:
ar = [LF LB RF RB]
آرايههاي ماتريس ar به صورت 0 يا 1 ميباشند. عدد 1 نمايانگر روشنبودن آن پين و عدد صفر نشانگر خاموش بودن آن پين است. روشن بودن پين يعني اينکه ولتاژ 5 ولت روي آن پين وجود دارد و خاموش بودن پين يعني ولتاژ صفر.
اگر به آرايههاي ماتريس ar دقت کنيم ميبينيم که با اسامي خاصي نامگذاري شدهاند. در زير به معرفي اين آرايهها ميپردازيم:
LF : در صورت 1 بودن، موتور سمت چپ روبات به سمت جلو ميچرخد.(Left Forward)
LB : در صورت 1 بودن، موتور سمت چپ روبات به سمت عقب ميچرخد.(Left Backward)
RF : در صورت 1 بودن، موتور سمت راست روبات به سمت جلو ميچرخد.(Right Forward)
RB : در صورت 1 بودن، موتور سمت راست روبات به سمت عقب ميچرخد.(Right Backward)
در صورت صفر بودن هر يک از اين آرايهها، موتور در آن جهت خاموش ميباشد و نميچرخد.
در بخش 5 توضيحات بيشتري پيرامون نحوهي 0 يا 1 کردن اين آرايهها گفته خواهد شد.
4- فرستنده و گيرندهي بيسيم
همانگونه که قبلاً گفته شد، ارسال اطلاعات از پورت Parallel به روبات که حاوي 4 بيت ميباشد، توسط فرستندهي بيسيمي که به پورت Parallel کامپيوتر متصل شده است انجام ميگيرد. اين اطلاعات بعد از فرستاده شدن از طريق فرستنده، توسط گيرندهاي که بر روي روبات نصب شده است دريافت ميشوند. اين فرستنده-گيرنده قابليت ارسال حداکثر 4 بيت به طور همزمان و تا فاصله 30 متر را دارا ميباشد. 4 پين در فرستنده وجود دارد و دقيقاً مشابه اين 4 پين در گيرنده نيز هست که به محض تغيير حالت هر يک از اين پينها در فرستنده، مشابه همان پين در گيرنده نيز تغيير حالت ميدهد. 4 پين گيرنده به درايور متصل ميباشند.
5- اعمال فرمان براي حرکت روبات
در اين بخش پيرامون چگونگي تغيير ماتريس ar و اتصال درايور و موتورها توضيحاتي داده خواهد شد.
همانگونه که در بخش 3 توضيح داده شد، با 0 و 1 کردن درايههاي ماتريس ar ميتوانيم حرکت روبات را کنترل کنيم. مثلاً اگر بخواهيم ماشين به سمت جلو حرکت کند، پس بايد هر دو موتور به سمت جلو روشن شوند و به عبارت ديگر آرايههاي مربوط به جلو رفتن هر دو موتور را 1 کنيم. پس ماتريس ar را به صورت زير تعريف ميکنيم:
ar = [LF LB RF RB] = [1 0 1 0]
ميبينيم که براي جلو رفتن ماشين، درايههاي LF و RF را 1 کرديم. و همينطور براي عقب رفتن، ماتريس ar را به صورت زير تعريف ميکنيم:
ar = [1 0 1 0]
براي حرکت به طرفين، کافيست که يکي از موتور را روشن کنيم. مثلاً براي چرخش به سمت چپ، موتور سمت راست را به سمت جلو روشن و موتور سمت چپ را خاموش ميکنيم، يعني:
ar = [0 0 1 0]
و اگر بخواهيم چرخش سريعتري به سمت چپ داشته باشيم، ضمن روشن کردن موتور سمت راست به سمت جلو، لازم است که موتور سمت چپ را نيز به سمت عقب روشن کنيم، يعني:
ar = [0 1 1 0]
نکتهي مهم در چينش آرايههاي ماتريس ar اين است که هيچگاه نبايد هر دو آرايهي مربوط به يک موتور را همزمان روشن کرد، يعني اينکه انتخاب ماتريس ar به صورت [1 1 0 1] غلط ميباشد. اينکار باعث ميشود که هر دو فرمان به سمت جلو و عقب به صورت همزمان به يک موتور داده شود که باعث آسيب ديدن موتور و همچنين درايور ميشود.
پس براي فرمان به موتورها بايد ماتريس ar مناسب را انتخاب کنيم و سپس با استفاده از دستور زير، فرمان مورد نظر اعمال خواهد شد:
bvdata = logical(ar);
putvalue(parport,bvdata);
براي کنترل روبات، ميتوان از فرمانهاي مربوطه به صورت PWM استفاده نمود که باعث حرکت راحتتر روبات ميشود. مثلاً دستورات زير باعث حرکت روبات به صورت زيگزاگي ميشود.
for i=1:10
ar=[0 0 1 0];
bvdata = logical(ar);
putvalue(parport,bvdata);
pause(.2)
ar=[1 0 0 0];
bvdata = logical(ar);
putvalue(parport,bvdata);
pause(.4)
ar=[0 0 1 0];
bvdata = logical(ar);
putvalue(parport,bvdata);
pause(.2)
end
با دستورات مشابه ميتوان حرکات مختلفي را براي روبات در نظر گرفت.
6- نتيجهگيري
همانگونه که گفته شد، اين سيستم به صورت WireLess ميباشد و قابليت کنترل خودکار بهوسيلهي کامپيوتر را نيز دارا ميباشد. WireLess بودن اين سيستم مزاياي فراواني دارد که ميتوان از آن در مکانهايي که امکان ارتباط مستقيم مقدور نميباشد، استفاده کرد. همچنين ميتوان در مواقعي که ميخواهيم وظيفهي روبات تغيير کند، ميتوانيم به راحتي و با تغييرات جزئي در برنامه، آن را به اجرا در آوريم.
چکيده: در اين مقاله قصد داريم توسط پورت Parallel کامپيوتر، يک روبات را به صورت WireLess کنترل کنيم. نحوهي اتصال فرستنده و گيرندهي بيسيم به پورت Parallel و همينطور روبات و همچنين نحوهي شناسائي پورت Parallel توسط برنامه MATLAB در اين مقاله توضيح داده ميشود. استفاده از فرستنده و گيرندهي WireLess و توضيح پيرامون نحوهي کار اين سيستم، از ديگر بخشهاي اين مقاله ميباشد. از اين سيستم ميتوان در قسمتهايي که دسترسي مستقيم مقدور نميباشد استفاده نمود و به وسيلهي کامپيوتر، وظايف مورد نظر را به روبات محول کرد.
واژههاي کليدي: Parallel Port ، MATLAB ، Wireless ، کنترل روبات
1- مقدمه
امروزه پيشرفت در زمينهي ساخت روبات سرعت بيشتري به خود گرفته و شاهد توليد انواع روبات صنعتي و غير صنعتي با کاربردهاي مختلف ميباشيم. روباتهايي که وظايف انسانها را بر عهده ميگيرند و با دقت بيشتري کارها را انجام ميدهند. براي کنترل روبات روشهاي مختلفي وجود دارد. روباتهايي که از قبل برنامهريزي شدهاند و بدون ارتباط با خارج، وظايف محوله را انجام ميدهند و يا روباتهايي که از بيرون کنترل ميشوند و ميتوان وظايف آنها را به راحتي تغيير داد و ... .
در اين مقاله، ما روباتي را بررسي خواهيم کرد که از بيرون کنترل ميشود. برنامهي اين روبات توسط MATLAB نوشته شده و از طريق پورت Parallel و به صورت WireLess به درايور و از آنجا به موتورهاي روبات دستور داده ميشود. با تغيير برنامه ميتوان وظايف مختلفي را براي روبات تعريف کرد. در شکل (1)، بلوکدياگرام اين سيستم را مشاهده ميکنيد:
2- قسمت مکانيکي
براي قسمت مکانيکي اين روبات از يک ماشين با 4 چرخ استفاده شده است که توسط دو موتور DC که يکي چرخهاي سمت راست و ديگري چرخهاي سمت چپ را به حرکت در ميآورد کنترل ميشود. فرمانهاي لازم براي به حرکت درآوردن اين موتور توسط کامپيوتر و از طريق پورت Parallel به صورت بيسيم به درايو نصب شده بر روي روبات داده شده و از آنجا نيز به موتورها اعمال ميشود.
3- ارتباط پورت Parallel و MATLAB
از آنجا که فرمانهاي دادهشده به پورت Parallel توسط برنامهي MATLAB داده ميشود، لازم است تا دستورات لازم براي ارتباط بين MATLAB و پورت Parallel نوشته شود. اين دستورات پورت Parallel را شناسائي کرده و پورتهاي مورد استفاده را تعريف ميکند. در زير، برنامهي مربوط به معرفي پورت Parallel در برنامهي MATLAB را ميبينيد:
parport = digitalio('parallel','LPT1');
hwlines = addline(parport,0:3,'out');
data =4 ;
putvalue(parport,data);
putvalue(parport.Line(1:4),data);
bvdata = dec2binvec(data,4);
putvalue(parport,bvdata);
putvalue(parport.Line(1:4),bvdata);
ar=[0 0 0 0];
حال ما ميتوانيم از پينهاي 1 تا 4 پورت Parallel استفاده کنيم ، چون براي فرمان به 2 موتور، 4 بيت کافي است. براي فعال کردن اين چهار پين کافي است که در ماتريس ar اعداد 0 يا 1 را وارد کنيم. ماتريس ar به صورت زير تعريف شده است:
ar = [LF LB RF RB]
آرايههاي ماتريس ar به صورت 0 يا 1 ميباشند. عدد 1 نمايانگر روشنبودن آن پين و عدد صفر نشانگر خاموش بودن آن پين است. روشن بودن پين يعني اينکه ولتاژ 5 ولت روي آن پين وجود دارد و خاموش بودن پين يعني ولتاژ صفر.
اگر به آرايههاي ماتريس ar دقت کنيم ميبينيم که با اسامي خاصي نامگذاري شدهاند. در زير به معرفي اين آرايهها ميپردازيم:
LF : در صورت 1 بودن، موتور سمت چپ روبات به سمت جلو ميچرخد.(Left Forward)
LB : در صورت 1 بودن، موتور سمت چپ روبات به سمت عقب ميچرخد.(Left Backward)
RF : در صورت 1 بودن، موتور سمت راست روبات به سمت جلو ميچرخد.(Right Forward)
RB : در صورت 1 بودن، موتور سمت راست روبات به سمت عقب ميچرخد.(Right Backward)
در صورت صفر بودن هر يک از اين آرايهها، موتور در آن جهت خاموش ميباشد و نميچرخد.
در بخش 5 توضيحات بيشتري پيرامون نحوهي 0 يا 1 کردن اين آرايهها گفته خواهد شد.
4- فرستنده و گيرندهي بيسيم
همانگونه که قبلاً گفته شد، ارسال اطلاعات از پورت Parallel به روبات که حاوي 4 بيت ميباشد، توسط فرستندهي بيسيمي که به پورت Parallel کامپيوتر متصل شده است انجام ميگيرد. اين اطلاعات بعد از فرستاده شدن از طريق فرستنده، توسط گيرندهاي که بر روي روبات نصب شده است دريافت ميشوند. اين فرستنده-گيرنده قابليت ارسال حداکثر 4 بيت به طور همزمان و تا فاصله 30 متر را دارا ميباشد. 4 پين در فرستنده وجود دارد و دقيقاً مشابه اين 4 پين در گيرنده نيز هست که به محض تغيير حالت هر يک از اين پينها در فرستنده، مشابه همان پين در گيرنده نيز تغيير حالت ميدهد. 4 پين گيرنده به درايور متصل ميباشند.
5- اعمال فرمان براي حرکت روبات
در اين بخش پيرامون چگونگي تغيير ماتريس ar و اتصال درايور و موتورها توضيحاتي داده خواهد شد.
همانگونه که در بخش 3 توضيح داده شد، با 0 و 1 کردن درايههاي ماتريس ar ميتوانيم حرکت روبات را کنترل کنيم. مثلاً اگر بخواهيم ماشين به سمت جلو حرکت کند، پس بايد هر دو موتور به سمت جلو روشن شوند و به عبارت ديگر آرايههاي مربوط به جلو رفتن هر دو موتور را 1 کنيم. پس ماتريس ar را به صورت زير تعريف ميکنيم:
ar = [LF LB RF RB] = [1 0 1 0]
ميبينيم که براي جلو رفتن ماشين، درايههاي LF و RF را 1 کرديم. و همينطور براي عقب رفتن، ماتريس ar را به صورت زير تعريف ميکنيم:
ar = [1 0 1 0]
براي حرکت به طرفين، کافيست که يکي از موتور را روشن کنيم. مثلاً براي چرخش به سمت چپ، موتور سمت راست را به سمت جلو روشن و موتور سمت چپ را خاموش ميکنيم، يعني:
ar = [0 0 1 0]
و اگر بخواهيم چرخش سريعتري به سمت چپ داشته باشيم، ضمن روشن کردن موتور سمت راست به سمت جلو، لازم است که موتور سمت چپ را نيز به سمت عقب روشن کنيم، يعني:
ar = [0 1 1 0]
نکتهي مهم در چينش آرايههاي ماتريس ar اين است که هيچگاه نبايد هر دو آرايهي مربوط به يک موتور را همزمان روشن کرد، يعني اينکه انتخاب ماتريس ar به صورت [1 1 0 1] غلط ميباشد. اينکار باعث ميشود که هر دو فرمان به سمت جلو و عقب به صورت همزمان به يک موتور داده شود که باعث آسيب ديدن موتور و همچنين درايور ميشود.
پس براي فرمان به موتورها بايد ماتريس ar مناسب را انتخاب کنيم و سپس با استفاده از دستور زير، فرمان مورد نظر اعمال خواهد شد:
bvdata = logical(ar);
putvalue(parport,bvdata);
براي کنترل روبات، ميتوان از فرمانهاي مربوطه به صورت PWM استفاده نمود که باعث حرکت راحتتر روبات ميشود. مثلاً دستورات زير باعث حرکت روبات به صورت زيگزاگي ميشود.
for i=1:10
ar=[0 0 1 0];
bvdata = logical(ar);
putvalue(parport,bvdata);
pause(.2)
ar=[1 0 0 0];
bvdata = logical(ar);
putvalue(parport,bvdata);
pause(.4)
ar=[0 0 1 0];
bvdata = logical(ar);
putvalue(parport,bvdata);
pause(.2)
end
با دستورات مشابه ميتوان حرکات مختلفي را براي روبات در نظر گرفت.
6- نتيجهگيري
همانگونه که گفته شد، اين سيستم به صورت WireLess ميباشد و قابليت کنترل خودکار بهوسيلهي کامپيوتر را نيز دارا ميباشد. WireLess بودن اين سيستم مزاياي فراواني دارد که ميتوان از آن در مکانهايي که امکان ارتباط مستقيم مقدور نميباشد، استفاده کرد. همچنين ميتوان در مواقعي که ميخواهيم وظيفهي روبات تغيير کند، ميتوانيم به راحتي و با تغييرات جزئي در برنامه، آن را به اجرا در آوريم.