Robot tự động

Chia sẻ: Hadinh Dinh | Ngày: | Loại File: DOC | Số trang:18

0
123
lượt xem
75
download

Robot tự động

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Trong xã hội ngày nay, kĩ thuật điện tử đã và đang ứng dụng mạnh mẽ trong nhiều lĩnh vực, và ngày càng trở nên phổ biến hơn là lĩnh vực “Điều Khiển Tự Động”. Trong những công trình lớn như nhà máy, xí nghiệp chúng ta thấy rõ hơn vai trò quan trọng của điều khiển tự động hoặc những ứng dụng tự động trong lĩnh vực dân dụng, có những máy thông minh phục vụ cho những nhu cầu sinh hoạt cho con người . tất cả những máy móc đó điều được điều khiển bởi bộ xử...

Chủ đề:
Lưu

Nội dung Text: Robot tự động

  1. Lời giới thiệu Trong xã hội ngày nay, kĩ thuật điện tử đã và đang ứng dụng mạnh mẽ trong nhiều lĩnh vực, và ngày càng trở nên phổ biến hơn là lĩnh vực “Điều Khiển Tự Động”. Trong những công trình lớn như nhà máy, xí nghiệp chúng ta thấy rõ hơn vai trò quan trọng của điều khiển tự động hoặc những ứng dụng tự động trong lĩnh vực dân dụng, có những máy thông minh phục vụ cho những nhu cầu sinh hoạt cho con người . tất cả những máy móc đó điều được điều khiển bởi bộ xử lí trung tâm, ở những hệ thống lớn thì bộ xử lí trung tâm là PLC, máy tính công nghiệp.., ở những hệ thống xử lí nhỏ hơn thì người ta dùng vi điều khiển. Với một vi điều khiển , khi kết hợp với một cơ cấu chấp hành hợp lí, người lập trình có thể điều khiển một cách linh hoạt cơ cấu đó theo yêu cầu đặt ra , làm cho mô hình hoạt động linh hoạt hơn, thông minh hơn. Chính vì yếu tố này nên có nhiều nhà sản xuất cho vi điều khiển ,tạo nên những dòng vi điều khiển có tính năng cạnh tranh với nhau và các vi điều khiển liên tục được cải tiến. Và PIC của hãng MICROCHIP là một trong những dòng vi điều khiển có tính năng mạnh mẽ mà đối với sinh viên Việt Nam đã bắt đầu quen thuộc. Bên cạnh vi điều khiển , cảm biến là yếu tố quan trọng không kém trong một cơ cấu hay một hệ thống, nó như là “tay”, “mắt” của một cơ cấu. Em ứng dụng những yếu tố này vào mô hình “Xe Robot Bám Theo Người”. Tuy nhiên do kiến thức, kinh nghiệm và thời gian có hạn nên đề tài em còn nhiều khuyết điểm, kính mong quý thầy, cô cùng bạn bè đóng góp ý kiến để đề tài được hoàn thiện hơn. CHƯƠNG I Lí Thuyết 1.1/Vi điều khiển PIC 16F877A A/ Sơ đồ chân :
  2. B/Sơ đồ khối :
  3. Tóm lược phần cứng PIC 16F877A : -Tần số thạch anh 20 MHz. -Bộ nhớ ROM nội :8 KB(Flash ROM). -386 BYTE RAM nội. -256 BYTE EFROM trong vùng ROM nội dùng chứa dữ liệu. -Về giao tiếp, có 5 port A, port B, port C, port D, port E vào ra với tín hiệu điều khiển độc lập. -2 bộ định thời :Timer 0 và Timer 2 độ phân giải 8 bit. - 1 bộ định thời Timer 1 độ phân giải 16 bit. -2 CCP(Capture/Compare/PWM). -1 bộ ADC 10 bit với 8 ngõ vào. -1 bộ Watch Dog Timer . -15 nguồn ngắt -Nạp chương trình thông qua cổng nối tiếp(ICSP-In Circuit Serial Programming). -Cũng như các vi điều khiển khác ta cấp dao động cho PIC, chân nguồn, chân Reset. Ở PIC 16F877A : +Chân 1: reset tích cực mức thấp. +Chân 13,14 cấp dao động ,có thể dùng thạch anh 20MHz,4 MHz + Chân 12,31 cấp nguồn 0 V.(Vss) + Chân 11,32 cấp nguồn 5 V(Vdd) +Các chân còn lại xếp thành 5 port xuất nhập như sơ đồ trên. -Các chức năng phần cứng của PIC được hổ trợ trong phần mềm lập trình: cách thiết đặt port xuất nhập, thư viện hổ trợ phần cứng ,khai báo tần số thạch anh , đặt địa chỉ tín hiệu vào ra...Như vậy người lập trình sẽ dễ dàng hơn trong thao tác lập trình, sử dụng hợp lí các ô nhớ ,địa chỉ cần thiết. Tùy theo mỗi dòng PIC mà nhà sản xuất tích hợp những module chuyên dụng, ví dụ module PWM, ADC,.., khi muốn sử dụng module nào ta chỉ cần khai báo và thiết lập phần mềm và ứng dụng. chính vì yếu tố này nên ngày càng nhiều người quan tâm đến PIC bởi tính hiệu quả và dễ sử dụng của nó. 1.2/ Chương trình lập trình cho PIC : PIC C COMPILER Chương trình có cấu trúc lệnh giống C++ , file gốc là C file, sau khi biên dịch(compile) tạo ra HEX file và ASM file, hỗ trợ sữa lỗi. có thể viết chương trình cho nhiều dòng PIC như dòng PIC 12bit(PCB), PIC 14bit(PCM), PIC 16bit(PCH),PIC 24bit(PCD), PIC 16F877A là dòng 14bit, khi viết chương trình ta phải chọn hỗ trợ cho từng dòng PIC, nếu không biên dịch file không có ý nghĩa. Trong mỗi chương trình ta phải khai báo thư viện hỗ trợ cho chip đang lập trình, tần số thạch anh sử dụng,các thư viện phụ trợ khác, hỗ trợ “HELP” là một công cụ đắc lực cho ngừơi lập trình, với mọi chức năng của PIC ta có thể tìm cách khai báo , thiết lập, sử dụng trong “HELP”. 1.3/ Chương Trình Nạp : WIN PIC800 Chương trình nạp đa năng cho nhiều dòng PIC , ta phải chọn dòng chip , ví dụ như 16F877A, chọn như hình vẽ, sau đó chọn đúng tên chip mình đang nạp, chọn setting/hardware/JDM programmer:
  4. < Thiếu hình > Do PIC được hỗ trợ tối đa từ phần mềm nên các thao tác viết chương trình và nạp chương trình vào chip phải chính xác. 1.4/ Cảm Biến Siêu Âm SRF05 : A Hình Dáng Hình 1.4.1 SRF05 là cảm biến siêu âm gồm mạch phát và mạch thu trên cùng một board, có thể nhận dạng được nhiều vật cản và nhiều khoảng cách, có thể đo được khoảng cách từ 4cm -> 4m . Với 2 chế độ hoạt động (mode 1,mode2). Trong đề tài em chọn chế độ hoạt động mode 1. B Nguyên Lí Hoạt Động: ở chế độ họat động mode 1 , chân mode trên board để lững không kết nối như sơ đồ chân trên. Giản đồ xung như sau: < Thiếu hình > Muốn SRF05 hoạt động, ta cấp nguồn vào cho nó, khi muốn đo khoảng cách ,ta cấp vào chân trigger xung có TON >=10uS, SRF05 được lập trình sẵn ,nó phát ra 8 burst siêu âm, khi sóng siêu âm gặp vật cản ,phản hồi về mạch thu siêu âm trên Board, lúc này tùy theo khoảng cách giữa vật cản và board ,SRF05 trả về một xung có TON thay đổi 100uS --> 25mS, nếu không có vật cản thì TON =30mS. Muốn đo khoảng cách thực tế ta đo giá trị xung phản hồi, đổi ra uS, sau đó chia cho 58 để lấy giá trị đo là cm, chia cho 148 lấy giá trị là inch
  5. Tần số kích ở chân Trigger tối đa là 20Hz, đồng nghĩa ta có thể cập nhật giá trị đo nhanh nhất là 20 lần/giây. 1.5 Cảm Biến Chuyển Động PIR 325 A Giới thiệu về hồng ngoại Tia hồng ngoại tồn tại trong phổ trường điện từ,có bước sóng dài hơn bước sóng của ánh sáng có thể nhìn thấy được. Tia hồng ngoại không thể nhìn thấy nhưng có thể phát hiện được nhờ vào những trang thiết bị chuyên dụng. những vật sinh ra nhiệt năng đều sinh ra tia hồng ngoại, bao gồm cả động vật và con người, bước sóng của tia hồng ngoại do con người sinh ra vào khoảng 9.4 m. B Cấu trúc và hoạt động PIR325 1 sơ đồ khối Hình 1.5.1 Thông số PIR325 < Thiếu hình> 2 Nguyên lí hoạt động và cách bố trí
  6. Hình 1.5.2 Nguyên tắc chung của PIR là thu tia hồng ngoại do con người hay đối tượng tạo ra hồng ngoại di chuyển, trong đầu thu PIR có 2 phiến cảm ứng hồng ngoại, khi có tia hồng ngoại được hấp thụ, 2 phiến này tạo ra 1 áp rất nhỏ gần như tín hiệu nhiễu và có độ lệch nhau, 2 tín hiệu này được đưa vào chân FET như hình 1.5.1, ở tầng này tín hiệu được khuếch đại 100 lần, ở tầng 2 khuếch đại 100 lần, sau khi khuếch đại tín hiệu đi vào mạch so sánh , tại đây tín hiệu được lọc nhiễu và cho tín hiệu ra ở 3.9 VDC Chương II THI CÔNG: 2.1 Nhiệm vụ và cơ sở lý luận phân tích đề tài: A/Yêu cầu đề tài: Xe gồm 2 động cơ DC lái hướng xe,vi xử lí lái đồng bộ 2 động cơ điều khiển xe chạy theo người. Nguyên lí phát hiện sự di chuyển người dùng sóng hồng ngoại do bộ cảm biến PIR đảm nhận,mạch lái công suất dùng mostfet và rơle 2 tiếp điểm điều khiển động cơ. Cảm biến nhận dạng sự thay đổi hồng ngoại khi ta di chuyển báo về vi xử lí , vi xử lí điều khiển xe chạy theo người có sự di chuyển đó. B / Phân tích đề tài:
  7. Xe có thể tự cân bằng , chạy thẳng, quẹo trái, thiết kế xe 3 bánh xe, bánh trước cân bằng và có thể quay đa hướng , 2 bánh sau được truyền động cấp moment chuyển động cho xe, chọn loại động cơ có công suất phù hợp với khung xe, truyền động đơn giản nên chọn loại động cơ có hộp số. Sau khi có giàn khung ta cần cơ cấu điều khiển nên phải có “Mạch Xử Lí Trung Tâm”, nhiệm vụ mạch xử lí là điều khiển xe chạy tùy theo giá trị điều khiển nhận được. Yêu cầu đề tài là “ Xe Bám Theo Người”, trước khi bám theo người,xe cần phải “Thấy” người , nguyên lí dùng cảm biến PIR nhận dạng hồng ngoại của con người khi người đó di chuyển. Khi xe chạy về hướng có người nhưng không đụng vào người đó,vậy cần có mạch dò khoảng cách giữa người và xe, ở đây em dùng cảm biến Siêu Âm để đo khoảng cách giữa người và xe. Trên xe bố trí mạch điều khiển vô tuyến để khởi động và dừng xe. Giữa mạch điều khiển và động cơ có mạch Công Suất Cách Li đảm bảo tín hiệu điều khiển ổn định. Từ cách phân tích trên em đưa ra sơ đồ khối tổng thể cho xe như hình 2.1 < thiếu hình > *SƠ ĐỒ KHỐI : Hình 2.1 *NGUYÊN LÍ HOẠT ĐÔNG: Nhấn phím khởi động , xe xoay vòng, sau đó dò tìm đối tượng người, khi cảm biến PIR phát hiện có sự hiện diện người , xe dừng xoay, chạy về hướng có người di chuyển đó, trong lúc chạy đến xe đo khoảng cách và chạy với tốc độ hợp lí hơn, bám theo đối tượng. 2.2/ SƠ ĐỒ MẠCH TỪNG KHỐI: A/ Mạch xử lí trung tâm: - Nhiệm vụ: nhận tín hiệu từ các cảm biến PIR, siêu âm, tín hiệu vô tuyến , xuất tín hiệu điều khiển ra mạch cách li công suất lái 2 động cơ hoạt động theo ý đồ lập trình. - Sơ đồ mạch như trên, chân 1:mạch reset tích cực mức thấp, dùng port D, portB nhận giá trị điều khiển, port C xuất tín hiệu điều khiển với: o ROLE_L :địa chỉ C0, đảo chiều động cơ trái. o PWM_L:địa chỉ C1, cấp xung điều khiển tốc động cơ trái. o ROLE_R:địa chỉ C3, đảo chiều động cơ phải. o PWM_R:địa chỉ C2, cấp xung điều khiển tốc động cơ phải. - Vi điều khiển là PIC 16F877A ,như phần giới thiệu phần lí thuyết 16F877A có hỗ trợ module PWM 2 kênh thuận tiện trong điều khiển tốc độ động cơ(do xe chạy ở nhiều chế độ nên cần nhiều tốc độ),đồng thời PIC có hỗ trợ phần mềm chuyên lập trình riêng cho nó nên tương đối dễ tiếp cận lập trình hơn. B/ Mạch vô tuyến : - Nhiệm vụ: truyền tín hiệu điều khiển của người điều khiển đến xe,gồm 4 kênh :A,B,C,D ,tích cực mức 1, có duy trì: + Kênh A: khởi động. + Kênh B: dừng.
  8. + Kênh C. +Kênh D. C/ Mạch công cuất cách li: +Nguyên Lí Điều Rộng Xung: -Tại 2 chân PWM_R, PWM_L vi điều khiển cấp ra xung có thể điều chỉnh T_ON, T_OFF, giá trị thay đổi tùy theo yêu cầu vận hành người lập trình -Chu kỳ xung ra được tính như sau: (1/20000000)*4*16*256= 819.2 us hoặc 1.2 KHz Dùng thạch anh 20MHz Chu kì xung được chia làm 256 mẫu như mạch trên mạch tích cực ở mức”0” nên khi muốn tăng tốc độ động cơ ta tăng giá trị T_ON qua câu lệnh ví dụ PWM_L =PWM1, PWM_R =PWM2 set_pwm1_duty(255-value); -Giá trị T_ON = 255-value. -2 chân ROLE_R,ROLE_L dùng đóng điện cho cuộn dây rơle trái và phải , đảo tiếp điểm => đảo chiều dòng điện qua động cơ ,động cơ quay đảo chiều. * Chú ý : mỗi động cơ có sự đáp ứng dòng không giống nhau nên khi xét giá trị ta căn cứ thực tế mỗi động cơ . D/ Mạch Nguồn: Nguồn DC 12v cấp từ acqui khô, dùng 2 acqui cấp cho mạch vi điều khiển và công suất.
  9. 2.3LƯU ĐỒ GIẢI THUẬT A/ Lưu Đồ Giải Thuật Chương Trình Main
  10. +Giải thích lưu đồ: Khi xe bật nguồn lên, xe dừng tại chổ,khi có tín hiệu khởi động bit RF_A=1, xe chạy quay vòng tìm người, nếu phát hiện có người xe dừng lại , đo khoảng cách giữa người và xe, nếu có người và khoảng cách người và xe
  11. Giải thích lưu đồ: SRF05 hoạt động, đo giá trị nhận về,so sánh khoảng cách, tùy theo giá trị khoảng cách xe chạy với nhiều tốc độ để bám theo đồng thời kích xung đo giá trị mới, khoảng 2s xe kiểm tra có còn người hay không ,chạy quét lại. CHƯƠNG 3: ĐÁNH GIÁ VÀ KẾT LUẬN 3.1 Kết Luận: Với sự nổ lực hết mình và sự hướng dẫn tận tình giáo viên hướng dẫn đề tài em đã hoàn thành và kết quả là hình 3.1 < thiếu hình > Hình 3.1 Đề tài tuy đã hoàn thành nhưng do kinh nghiệm cũng như kiến thức hạn chế kính mong quý thầy cô đóng góp cho em những hướng giải quyết thêm. Em tự nhận xét đề tài có những ưu khuyết điểm sau: Ưu điểm: Xe khởi động và dừng từ xa,rất thuận tiện,trong lúc xe bám theo đối tượng ta có thể lập trình những khoảng cách bám hợp lí, xe trang bị nguồn điểu khiển và nguồn công suất rời nên hoạt động tương đối ổn định,khi xe bị lạc đối tượng tự tìm lại ,bám theo. Khuyết điểm: Cảm biến nhận người PIR hoạt động không ổn định , dễ nhiễu nên dễ xác định sai đối tượng bám theo, dễ lạc đối tượng, tốc độ xe bám theo không cao. 3.2 TÀI LIỆU THAM KHẢO: 1 GS Phạm Văn Ất__Kỹ Thuật Lập Trình C.Năm2006 NXB Giao Thông Vận Tải. 2 Các website hỗ trợ: -www.picvietnam.com(diễn đàn cảm biến…) -www.diendandientu.vn(diễn đàn PIC) -www.google.com.vn -www.alldatasheet.com 3.3 PHỤ LỤC CHƯƠNG TRÌNH: CHƯƠNG TRÌNH ĐIỀU KHIỂN HOÀN THIỆN: #include #include __CONFIG(HS & WDTDIS); //khai báo input/output cho xe #define Relay_l RC0 #define Relay_r RC3 #define Pwm_l RC1
  12. #define Pwm_r RC2 #define Cbnhan RB7 #define Trigger RB1 #define echo RB0 #define Rf_A RD0 #define Rf_B RD1 #define Rf_C RD2 #define Rf_D RD3 #define Speed_ch1 CCPR1L #define Speed_ch2 CCPR2L //------------------------------------------------ typedef unsigned int uint; typedef unsigned char uchar; //khai báo các biến nhớ static uchar DistanceL, DistanceH, remember, times, sub; //------------------------------------------------ void delay (unsigned int dem) { //Delay khoang 'dem' mili giay unsigned int z; while (dem) { z = 230; while (z>0) z--; dem--; } } //***************************************** void delay10us (void) { uchar z; z = 20; while (z>0) z--; } //khai báo ngắt ngoài************************* void Intr_Init (void) { GIE = 1; INTE = 1; INTEDG = 1; //cạnh lên************************ }
  13. //khai báo timer1******************************* void Timer1_Init (void) { T1CON = 0x25; //enable timer 1, prescaler = 4 } //chương trình ngắt ngoài đo khoảng cách************** void interrupt distance (void) { if (INTE && INTF) { INTF = 0; if (INTEDG) { INTEDG = 0; //ngắt cạnh xuống TMR1H = 0; TMR1L = 0; } else { INTEDG = 1; //ngắt cạnh lên DistanceL = TMR1L; //đọc giá trị lưu vào BYTE_L DistanceH = TMR1H; //đọc giá trị lưu vào BYTE_H } } } //+++++++++ PWM +++++++++++++ void PWM_EN() {CCP1CON |= 0x0c;} void PWM_UN() {CCP1CON &= 0xf0;} //------------------------------------ void Init_pwm () { TRISC = 0x00; PR2 = 0xff; T2CON = 0x07; //prescaler = 16, enable timer2 TMR2 = 0x00; CCP1CON = 0x0f; /*PWM mode on CCP1 module*/ CCP2CON = 0x0f; /*PWM mode on CCP2 module*/ } ///các chương trình con*********************** void stop (void) { Speed_ch1 = 255;
  14. Speed_ch2 = 255; } //----------- stop_h ------------------------ void stop_h (void) { Relay_r = Backward; Relay_l = Backward; delay (8); Speed_ch1 = 255; Speed_ch2 = 255; } //------------ speed_slow-------------- void speed_slow (void) { Relay_l = 1; Relay_r = 1; Speed_ch1 = 240; //Motor right Speed_ch2 = 230; //Motor left } //------------ speed_1-------------- void speed_1 (void) { Relay_l = 1; Relay_r = 1; Speed_ch1 = 224; //Motor right Speed_ch2 = 200; //Motor left } //------------speed_2--------------- void speed_2 (void) { Relay_l = 1; Relay_r = 1; Speed_ch1 = 188; //Motor right Speed_ch2 = 140; //Motor left } //------------speed_3--------------- void speed_3 (void) { Relay_l = 1; Relay_r = 1; Speed_ch1 = 113; //Motor right
  15. Speed_ch2 = 60; //Motor left } //------------speed_4--------------- void speed_4 (void) { Relay_l = 1; Relay_r = 1; Speed_ch1 = 83; //Motor right Speed_ch2 = 20; //Motor left } //=================back_w============== void back_w (void) { Relay_l = 0; Relay_r = 0; Speed_ch1 = 246;; //Motor right Speed_ch2 = 244; //Motor left } //--------- Trigger pulse -------------- void trigger (void) { Trigger = 1; delay10us(); Trigger = 0; } //Chương Trình Chính************************* void main (void) { stop(); Relay_l = 1; Relay_r = 1; TRISB1 = 0; //trigger TRISB0 = 1; //echo TRISB7 = 1; TRISC = 0x00; TRISD = 0xff; TRISA = 0x00; ADCON1 = 0x06; // config IN/OUT port Trigger = 0; Intr_Init(); Timer1_Init(); Init_pwm(); while (1)
  16. { stop(); while (Rf_A == 1) { Relay_l =1; Relay_r =0; Speed_ch1 = 245; &a mp;n bsp; //thay doi toc do quay Speed_ch2 = 245; &a mp;n bsp; // while (Cbnhan == 0) { delay (10); stop (); while (Rf_A == 1) { trigger(); delay(3); Relay_l = 1; Relay_r = 0; Speed_ch1 = 250; //thay doi toc do quay Speed_ch2 = 250; // while ((Cbnhan == 0)&&(Rf_A == 1)&&(DistanceH < 35)) { delay (10); stop(); for (sub = 0; sub < 150; sub++) { //thoi gian quet cam bien lan ke tiep trigger(); delay(5); if (DistanceH < 35) { trigger (); delay(5); if (DistanceH < 8) { //(15 = 50cm) back_w(); delay(20); } else if ((DistanceH >= 8) && (DistanceH < 14)) { stop (); delay(20); } else if ((DistanceH >= 14) && (DistanceH < 19)) { speed_slow(); delay(20);
  17. } else if ((DistanceH >= 19) && (DistanceH < 23)) { speed_1(); delay(20); } else if ((DistanceH >= 23) && (DistanceH < 26)) { speed_2(); delay(19); } else if ((DistanceH >= 26) && (DistanceH < 35)) { speed_3(); delay(18); } } else { stop(); delay(17); } } } } } } } }

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản