h. Hình ảnh của module ñ iều khiển
3.3.5.4. Xây dựng giao diện phần mềm cài ñặ t hệ thống ñ iều khiển robot
robot
Thiết kế giao diện cài ñặt cần phải có 3 phần cơ bản: (1)Cài ñặt ñiều khiển bằng tay; (2)Cài ñặt ñiểm di chuyển; (3)Cài ñặt chương trình.
Nhiệm vụ của phần này cần phải cài ñặt ñược hết các tính năng cơ bản cho robot.
• Phần cài ñặt ñiều khiển bằng tay chỉ cần thay ñổi giá trịñiều khiển tốc
ñộ tương ñối của ñộng cơ bước và ñộng cơ DC.
• Phần cài ñặt ñiểm di chuyển: phần này phải ñảm bảo chỉ rõ cho robot biết mỗi một ñiểm cần có tọa ñộ ñộng cơ bước, ñộng cơ DC, các trạng thái của van. Sau ñó lưu lại các trạng thái này tại vị trí tương ứng với
ñiểm cần chỉ. Vậy công việc của phần này sẽ cần có:
oPhần hiển thị: Phải hiển thịñầy ñủ thông tin vềñiểm cài ñặt, tọa ñộ
hiện tại của các ñộng cơ và các xi lanh.
o Phần sử lý nút bấm:
Các nút ñiều khiển bằng tay phải ñiều khiển ñược ñể chỉ cho hệ
robot biết tọa ñộñiểm
Ghi vị trí các ñiểm bằng nút Enter
Xem lại kết quả bằng nút Test
Xây dựng phần mềm cài ñặt ñiểm di chuyển ñược tôi thể hiện trong trích
ñoạn mã chương trình dưới ñây:
//======================================================== char but_setup_auto=1; void setup_auto_display(void) { if (add_EN_display[40]==bat) {
if (but_setup_auto>=17) but_setup_auto=1; if (but_setup_auto<=0) but_setup_auto=16; if (timer_display>=100)
{timer_display=0;
//======hien giao dien================
lcd_gotoxy(0,0);lcd_putsf(“VT”);lcd_gotoxy(0,1);itoa(but_setup_auto,lcd_buffer);
lcd_puts(lcd_buffer); lcd_putsf(“ “); lcd_gotoxy(5,0); lcd_putsf(“DC:”); lcd_gotoxy(5,1); lcd_putsf(“ST:”);
// vi tri robo = vitri_luu
lcd_gotoxy(8,0); ftoa(td() ,2,lcd_buffer); lcd_puts(lcd_buffer); lcd_putsf(“ “); lcd_gotoxy(8,1); ftoa(goc_den,1,lcd_buffer); lcd_puts(lcd_buffer); lcd_putsf(“ “); //==========
lcd_gotoxy(0,2); lcd_putsf(“Than “); lcd_gotoxy(5,2); lcd_putsf(“c_tay “); lcd_gotoxy(11,2); lcd_putsf(“b_tay”);
//==========
lcd_gotoxy(0,3); if (xilanh_than==1) lcd_putsf(“cao “); else lcd_putsf(“thap”); lcd_gotoxy(5,3); if (xilanh_canhtay==1) lcd_putsf(“ra “); else lcd_putsf(“vao”); lcd_gotoxy(11,3); if (xilanh_bantay==1) lcd_putsf(“kep”); else lcd_putsf(“nha”); };
//xu ly nut bam trong giao dien
if ((nut[nut_up]==an)&&(tt_nut_up==nha))
{ tt_nut_up=an; if(but_setup_auto<17) but_setup_auto++; select_mode_clear_point(); }; if ((nut[nut_down]==an)&&(tt_nut_down==nha))
{ tt_nut_down=an; if(but_setup_auto>0) but_setup_auto--; select_mode_clear_point(); }; if ((nut[nut_enter]==an)&&(tt_nut_enter==nha))
{ tt_nut_enter=an; td_dc[but_setup_auto-1] = td(); td_step[but_setup_auto-1] = goc_den; tt_than[but_setup_auto-1] = xilanh_than; tt_canhtay[but_setup_auto-1] = xilanh_canhtay; }
if ((nut[nut_exit]==an)&&(tt_nut_exit==nha)) {tt_nut_exit=an; EN_display(4); lcd_clear(); };
if (nut[nut_exit]==nha) tt_nut_exit=nha; if (nut[nut_up]==nha) tt_nut_up=nha; if (nut[nut_down]==nha) tt_nut_down=nha; if (nut[nut_enter]==nha) tt_nut_enter=nha; //====================================================
//================dieu khien bang tay================= //========Than Robot============
if ((nut[nut_than_tien]==an)&&(nut[nut_than_lui]==nha))
{ DC_CH=tien; DC_PWM=170; chieu_dc=tien; EN_RUN=tat; td_dc_in=td(); } else if ((nut[nut_than_tien]==nha)&&(nut[nut_than_lui]==an))
{ DC_PWM=0; if (chieu_dc==tien) DC_CH=lui; if (chieu_dc==lui) DC_CH=tien; EN_RUN=bat; td_dc_in=td(); }; //============================== //========Chieu quay============ if ((nut[nut_quaytrai]==an)&&(timer_nut>=2)) {goc_den=goc_den+0.2; timer_nut=0; }; if ((nut[nut_quayphai]==an)&&(timer_nut>=2)) {goc_den=goc_den-0.2; timer_nut=0; }; //================================= if ((nut[nut_xilanh_than]==an)&&(tt_nut_xilanh_than==nha)) { tt_nut_xilanh_than=an; xilanh_than=~xilanh_than; } if ((nut[nut_xilanh_canhtay]==an)&&(tt_nut_xilanh_canhtay==nha)) { tt_nut_xilanh_canhtay=an; xilanh_canhtay=~xilanh_canhtay; } if ((nut[nut_xilanh_bantay]==an)&&(tt_nut_xilanh_bantay==nha)) { tt_nut_xilanh_bantay=an; xilanh_bantay=~xilanh_bantay; } if (nut[nut_xilanh_than]==nha) tt_nut_xilanh_than=nha; if (nut[nut_xilanh_canhtay]==nha) tt_nut_xilanh_canhtay=nha; if (nut[nut_xilanh_bantay]==nha) tt_nut_xilanh_bantay=nha; //=========test============= if (nut[nut_offset]==an)
{ //======hien giao dien================ lcd_gotoxy(0,0); lcd_putsf(“VT”);
lcd_gotoxy(0,1); itoa(but_setup_auto,lcd_buffer); lcd_puts(lcd_buffer); lcd_putsf(“ “); lcd_gotoxy(5,0); lcd_putsf(“DC:”); lcd_gotoxy(5,1); lcd_putsf(“ST:”);
lcd_gotoxy(8,0); ftoa(td_dc[but_setup_auto-1] ,2,lcd_buffer); lcd_puts(lcd_buffer); //td() lcd_gotoxy(8,1); ftoa(td_step[but_setup_auto-1],1,lcd_buffer); lcd_puts(lcd_buffer); //==========
lcd_gotoxy(0,2); lcd_putsf(“Than “); lcd_gotoxy(5,2); lcd_putsf(“c_tay “); lcd_gotoxy(11,2); lcd_putsf(“b_tay”);
//==========
lcd_gotoxy(0,3); if (tt_than[but_setup_auto-1]==1) lcd_putsf(“cao “); else lcd_putsf(“thap”); lcd_gotoxy(5,3); if (tt_canhtay[but_setup_auto-1]==1) lcd_putsf(“ra “); else lcd_putsf(“vao”); }
} }
• Phần cài ñặt chương trình:
Phần này chính là phần lập trình cho robot truyền ñộng. Công việc phần này là viết chương trình giúp cho người ñiều khiển tương tác ñược với robot bằng các lệnh ñiều khiển từng giai ñoạn một.
ðể chỉ rõ cho người lập trình ñiều khiển robot biết, tôi ñưa ra số việc Robot cần làm tương ñương với số lệnh. Mỗi lệnh robot phải làm một việc. Vậy cấu trúc chương trình sẽ có: Con trỏ lệnh và ghi dữ liệu lệnh. Dữ liệu lệnh gồm: Vị trí robot ñi ñến, lệnh trễ thời gian, lệnh kẹp bàn tay. Sau ñó kiểm tra ñược các lệnh ñã viết bằng nút Test.
Chương trình ñược thể hiện bằng trích ñoạn mã dưới ñây:
//======================================================== char P_lenh=1; char P_vitri=1; bit P_bantay=1; char but_program_setup=1; void program_setup_display(void) { char g; if (add_EN_display[41]==bat) { if (but_program_setup==4) but_program_setup=1; if (but_program_setup==0) but_program_setup=3;
if (P_lenh>=17) P_lenh=1; if (P_lenh<=0) P_lenh=16; if (P_vitri==19) P_vitri=1; if (P_vitri==0) P_vitri=18; if (timer_display>=100)
{timer_display=0; lcd_clear();
//======hien giao dien================ lcd_gotoxy(5,0); lcd_putsf(“Lenh:”);
lcd_gotoxy(13,0); itoa(P_lenh,lcd_buffer); lcd_puts(lcd_buffer); lcd_putsf(“ “); if (P_vitri!=18)
{lcd_gotoxy(5,1); lcd_putsf(“Vi Tri”);
lcd_gotoxy(13,1); itoa(P_vitri,lcd_buffer); lcd_puts(lcd_buffer); lcd_putsf(“ “); }
else {lcd_gotoxy(5,1); lcd_putsf(“TG(0.1s)”);
lcd_gotoxy(13,1); itoa(tg_R[P_lenh-1],lcd_buffer); lcd_puts(lcd_buffer); lcd_putsf(“ “); }
//====
if (P_vitri==17) {lcd_gotoxy(13,1); lcd_putsf(“RP ");} if (P_bantay==kep) {lcd_gotoxy(13,2); lcd_putsf("kep");}; if (P_bantay==nha) {lcd_gotoxy(13,2); lcd_putsf("nha");}; if (but_program_setup==1) {lcd_gotoxy(3,0); lcd_putsf("=>");}; if (but_program_setup==2) {lcd_gotoxy(3,1); lcd_putsf("=>");}; if (but_program_setup==3) {lcd_gotoxy(3,2); lcd_putsf("=>");}; }
//xu ly nut bam trong giao dien
if ((nut[nut_up]==an)&&(tt_nut_up==nha)&&(P_vitri!=18)) { tt_nut_up=an; { but_program_setup--; select_mode_clear_point2(); } }; if ((nut[nut_up]==an)&&(timer_nut>=300)&&(P_vitri==18)) { timer_nut=0; tg_R[P_lenh-1]++; } //======== if ((nut[nut_down]==an)&&(tt_nut_down==nha)&&(P_vitri!=18))
{ tt_nut_down=an; but_program_setup++; select_mode_clear_point2(); }; if ((nut[nut_down]==an)&&(timer_nut>=300)&&(P_vitri==18))
{ timer_nut=0; tg_R[P_lenh-1]--; } //========
if ((nut[nut_right]==an)&&(timer_nut>=300)) {timer_nut=0;
if (but_program_setup==1) P_lenh++; if (but_program_setup==2) P_vitri++; if (but_program_setup==3) P_bantay=~P_bantay; };
if ((nut[nut_left]==an)&&(timer_nut>=300))
{timer_nut=0; if (but_program_setup==1) P_lenh--; if (but_program_setup==2) P_vitri--; if (but_program_setup==3) P_bantay=~P_bantay; }; //======= if ((nut[nut_enter]==an)&&(tt_nut_enter==nha)) { tt_nut_enter=an; bang_lenh_dich_chuyen[P_lenh-1]=P_vitri-1; bang_lenh_ban_tay[P_lenh-1]=P_bantay-1; }; if ((nut[nut_exit]==an)&&(tt_nut_exit==nha))
{tt_nut_exit=an; EN_display(4); lcd_clear(); };
if (nut[nut_exit]==nha) tt_nut_exit=nha; if (nut[nut_up]==nha) tt_nut_up=nha; if (nut[nut_down]==nha) tt_nut_down=nha; if (nut[nut_enter]==nha) tt_nut_enter=nha;
if ((nut[nut_offset]==an)&&((timer_nut>=100))) { lcd_clear(); timer_display=0;
//======hien giao dien================ for (g=0;g<8;g++)
{lcd_gotoxy(2*g,0); itoa(g,lcd_buffer); lcd_puts(lcd_buffer); } for (g=0;g<8;g++)
{ lcd_gotoxy(2*g,1); itoa(bang_lenh_dich_chuyen[g],lcd_buffer); lcd_puts(lcd_buffer); } for (g=0;g<8;g++)
{lcd_gotoxy(2*g,2); itoa(g+8,lcd_buffer); lcd_puts(lcd_buffer); lcd_gotoxy(2*g,3); itoa(bang_lenh_dich_chuyen[g+8],lcd_buffer); lcd_puts(lcd_buffer);
} }
}}//========================================================