Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 61 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
61
Dung lượng
1,34 MB
Nội dung
UBND TỈNH NINH THUẬN TRƯỜNG CAO ĐẲNG NGHỀ NINH THUẬN GIÁO TRÌNH Mơn đun: BÀI TẬP TỔNG HỢP CƠ ĐIỆN TỬ NGHỀ: CƠ ĐIỆN TỬ TRÌNH ĐỘ: CAO ĐẲNG Ban hành kèm theo Quyết định số: ngày tháng năm Trường cao đẳng nghề Ninh Thuận Năm 2019 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin phép dùng nguyên trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm LỜI GIỚI THIỆU Để thực biên soạn giáo trình đào tạo nghề Cơ điện tử trình độ Cao Đẳng Nghề Trung Cấp Nghề, giáo trình Bài tập tổng hợp điện tử giáo trình môn học đào tạo chuyên ngành biên soạn theo nội dung chương trình khung Bộ Lao động Thương binh Xã hội Tổng cục Dạy Nghề phê duyệt Nội dung biên soạn ngắn gọn, dễ hiểu, tích hợp kiến thức kỹ chặt chẽ với nhau, logíc Khi biên soạn, nhóm biên soạn cố gắng cập nhật kiến thức có liên quan đến nội dung chương trình đào tạo phù hợp với mục tiêu đào tạo, nội dung lý thuyết thực hành biên soạn gắn với nhu cầu thực tế sản xuất đồng thời có tính thực tiển cao Nội dung giáo trình biên soạn với dung lượng thời gian đào tạo 60 gồm có: Bài MH39-01: Lý thuyết mờ Bài MH39-02: Ứng dụng logic mờ điều khiển Bài MH39-03: Bộ điều khiển tỷ lệ PID Trong trình sử dụng giáo trình, tuỳ theo yêu cầu khoa học cơng nghệ phát triển điều chỉnh thời gian bổ sung kiên thức cho phù hợp Trong giáo trình, chúng tơi có đề nội dung thực tập để người học cố áp dụng kiến thức phù hợp với kỹ Ninh Thuận, ngày tháng năm 2017 Tham gia biên soạn Nguyễn Thái Thuận Trần Văn Linh Mục lục Nội dung TUYÊN BỐ BẢN QUYỀN LỜI GIỚI THIỆU Bài 1: LÝ THUYẾT MỜ 1.1 Một số khái niệm 1.1.1 Định nghĩa tập mờ 1.1.2 Logic mờ 2.1 Thiết kế hệ thống mờ 2.1.1 Các yếu tố xây dựng mô hình Logic mờ 2.1.2 Các phép toán logic mờ 10 2.1.3 Cấu trúc bên điều khiển mờ có dạng 11 Bài ỨNG DỤNG LOGIC MỜ TRONG ĐIỀU KHIỂN 13 2.1 Thiết kế ứng dụng 13 Bài tập 1: Xe tránh vật cản dùng sóng siêu âm 13 Bài tập 2: điều khiển robot bám line 19 2.2 Thực hành lắp ráp 23 2.2.1 Lắp ráp phần cứng 23 2.2.2 Code xử lý robot tránh vật cản sử dụng sở logic mờ 24 Bài BỘ ĐIỀU KHIỂN TỶ LỆ PID 29 3.1 Giải thuật PID 29 3.1.1 Propotional (tỉ lệ) 29 3.1.2 Derivative (đạo hàm) 30 3.1.3 Integral (tích phân) 31 3.2 Thực hành lắp ráp 32 Step 1: Chuẩn bị vật tư 32 Step 2: Lắp motor servo 32 Step 3: lắp ráp xe 34 Step 4: lắp modul Bluetooth 35 Step 5: Lắp cảm biến dò line 35 Step 6: Implementing the IR Sensor Logic 36 Step 7: Hướng điều khiển (Điều khiển theo tỷ lệ - P) 39 Step 8: PID Control (optional) 40 Step 9: Lập code 42 Phụ lục: Code PID cho mạch arduino UNO 45 Tài liệu tham khảo 60 Bài 1: LÝ THUYẾT MỜ MH39-01 - Giới thiệu Lý thuyết mờ giáo sư L.A Zadeh công bố lần Mỹ năm 1965, trường đại học Berkelay, bang Califormia, Mỹ Từ lý thuyết mờ có nhiều phát triển ứng dụng rộng rãi lĩnh vực điều khiển tự động hóa Tại Nhật, Logic mờ ứng dụng vào nhà máy nước hang Fuji Electronic năm 1983, hệ thống xe điện ngầm Hitachi năm 1987 Ưu điểm điều khiển mờ so với phương pháp điều khiển kinh điển tổng hợp điều khiển mà khơng cần biết trước đặc tính đối tượng phức tạp mà ta chưa biết rõ hàm truyền Tuy nhiên, nhược điểm đến chưa có nguyên tắc chuẩn mực cho việc thiết kế chưa khảo sát tính ổn định, bền vững, chất lượng, q trình q độ trình ảnh hưởng nhiễu… cho điều khiển mờ điểm yếu lý thuyết mờ vấn đề độ phi tuyến hệ, kết luận tổng quát cho hệ thống phi tuyến khó đạt Trong tốn học, việc khảo sát hàm truyền với tập xác định tập với giá trị kinh điển, hàm phụ thuộc khơng thể ánh xạ tất phần tử tập hợp mờ hay thực tế giải tất trường hợp vấn đề Cho nên với tập mờ số lượng hàm phụ thuộc khơng xác định điều cho phép hệ thống mờ có tiện ích tối đa tình huấn cho trước Như vậy, khái niệm tập hợp ánh xạ lý thuyết mờ rộng nên đủ khả để mơ hình hóa vấn đề thực tế phức tạp cách đơn giản dễ hiểu, với biến ngôn ngữ làm cho vấn để kỹ thuật có liệu mơ hồ trở nên xác, dễ kiểm tra Từ Logic mờ giúp có hệ thống điều khiển ổn định Những lĩnh vực mà Logic mờ ứng dụng có nhiều thành tựu: Điều khiển Định dạng mơ hình mẫu Phân tích định lượng (nghiên cứu khoa học, quản lý) Suy luận (giao diên thông minh, robot, kỹ thuật mềm) Phục hồi thông tin (dữ liệu) Mục tiêu: sau học xong sinh viên Hiểu lý thuyết Logic mờ Tính tốn giá trị logic mờ Chạy mô matlab 1.1 Một số khái niệm Các tập mờ hay tập hợp mờ (Fuzzy set) mở rộng lý thuyết tập hợp cổ điển dùng logic mờ Trong lý thuyết tập hợp cổ điển, quan hệ thành viên phần tử tập hợp đánh giá theo kiểu nhị phân theo điều kiện rõ ràng, phần tử thuộc không thuộc tập hợp Ngược lại, lý thuyết tập mờ cho phép đánh giá quan hệ phần tử tập hợp; quan hệ mô tả hàm liên thuộc (membership function) μ [0, 1] 1.1.1 Định nghĩa tập mờ Tập hợp mờ tập hợp mà thành phần số (x, μ(x)) Như vậy, ta nói F tập mờ F có biểu diễn F x, x | x X ~ A Trong đó: F tập mờ khơng gian X F xác định hàm: μA: X [0, 1] Trong đó: X tập hay gọi tập vũ trụ (university) tập mờ A μA hàm liên thuộc (membership function) μA(x) độ liên thuộc x vào tập mờ A Ví dụ 1: Cách biểu diễn hàm phụ thuộc không phù hợp với tập mô tả mờ tập B gồm số thực gần 5: ~ B x X | x 5 Khi ta khơng thể khẳng định chắn số có thuộc B hay khơng ? mà ta nói thuộc B phần trăm Ta phải xem hàm phụ thuộc μB(x) có giá trị khoảng đến tức ≤ μB(x) ≤ Hình 1: hàm phụ thuộc μB(x) tập mờ B Định nghĩa: tập mờ B xác định tập kinh điển M tập mà phần tử biểu diễn cặp giá trị (x, μB(x)) Trong x ϵ M μB(x) ánh xạ Ánh xạ μB(x) gọi hàm liên thuộc tập mờ B Tập kinh điển M gọi tập sở tập mờ B Ví dụ 2: Một tập mờ F với số tự nhiên nhỏ mô tả hàm thành viên μB có đồ thị sau: Hình 2: Đồ thị hàm thành viên Ta có tập mờ A = {(1,1), (2,1), (3, 0.95), (4, 0.17)} Số tự nhiên có độ phụ thuộc Số tự nhiên có độ phụ thuộc thấp Các số không liệt kê có độ phụ thuộc Các thơng số đặc trưng cho tập mờ độ cao, miền xác định miền tin cậy + Độ cao tập mờ B (được định nghĩa sở X) giá trị lớn giá trị hàm liên thuộc: H = supxϵX[μB(x)] (sup gọi cận đúng) Một tập mờ có phần tử có độ phụ thuộc gọi tập mờ tắc (H = 1) Ngược lại, tập mờ với H < gọi tập mờ không xác định Hình 3: Độ cao, miền xác định, miền tin cậy tập mờ + Miền xác định tập mờ B (được định nghĩa sở X) tập X có giá trị hàm liên thuộc khác không; ~ S x X | B ( x) 0 + Miền tin cậy tập mờ B (được định nghĩa sở X) tập X cso giá trị hàm liên thuộc ~ T x X | Các phép toán tập mờ B ( x) 1 Định nghĩa: Cho A B hai tập mờ khơng gian X, có hàm liên thuộc μA μB 1.1.2 Logic mờ Logic mờ (Fuzzy logic) phát triển từ lý thuyết tập mờ để thực lập luận cách xấp xỉ thay lập luận xác theo logic vị từ cổ điển Logic mờ coi mặt ứng dụng lý thuyết tập mờ để xử lý giá trị giới thực cho toán phức tạp (Klir 1997) Người ta hay nhầm lẫn mức độ với xác suất Tuy nhiên, hai khái niệm khác hẳn nhau; độ đắn logic mờ biểu diễn độ liên thuộc với tập định nghĩa không rõ ràng, khả xảy biến cố hay điều kiện Để minh họa khác biệt, xét tình sau: Bảo đứng ngơi nhà có hai phịng thơng nhau: phịng bếp phịng ăn Trong nhiều trường hợp, trạng thái Bảo tập hợp gồm thứ "ở bếp" hoàn toàn đơn giản: "trong bếp" "không bếp" Nhưng Bảo đứng cửa nối hai phịng sao? Anh ta coi "có phần bếp" Việc định lượng trạng thái "một phần" cho quan hệ liên thuộc tập mờ Chẳng hạn, Bảo thò ngón chân vào phịng ăn, ta nói Bảo "trong bếp" đến 99% phòng ăn 1% Một đứng cửa khơng có biến cố (ví dụ đồng xu tung lên) định Bảo hồn tồn "ở bếp" hay hồn tồn "khơng bếp" Các tập mờ đặt sở định nghĩa mờ tập hợp dựa ngẫu nhiên Logic mờ cho phép độ liên thuộc có giá trị khoảng đóng 1, hình thức ngơn từ, khái niệm khơng xác "hơi hơi", "gần như", "khá là" "rất" Cụ thể, cho phép quan hệ thành viên không đầy đủ thành viên tập hợp Tính chất có liên quan đến tập mờ lý thuyết xác suất Logic mờ đưa lần đầu vào năm 1965 GS Lotfi Zadeh Đại học California, Berkeley Biến ngôn ngữ Khái niệm biến ngôn ngữ Zadeh đưa năm 1973 sau: Một biến ngôn ngữ xác định (x, T, U, M) đó: x tên biến “nhiệt độ”, “tốc độ”, “độ ẩm” … T tập từ giá trị ngôn ngữ tự nhiên mà x nhận Ví dụ: x “tốc độ” T {“chậm”, “trung bình”, “nhanh”} U miền giá trị vật lý mà x nhận Ví dụ: x “tốc độ” U {0km/h, 1km/h,…, 100km/h…} M luận ngữ nghĩa, ứng từ Tvới tập mờ At U 2.1 Thiết kế hệ thống mờ 2.1.1 Các yếu tố xây dựng mơ hình Logic mờ Hình 4: Cấu trúc quy trình hoạt động mơ hình Một mơ hình Logic mờ bao gồm yếu tố sau: liệu (đầu vào đầu ra), hàm chuyển chuyển đổi, phép toán logic biến ngôn ngữ Dữ liệu Dữ liệu chia làm hai nhóm chính, liệu đầu vào liệu đầu Mỗi nhóm lại chia liệu rõ liệu mờ Các hàm Để thực việc quy đổi từ liệu cứng liệu mờ ta cần phải lựa chọn hàm phục vụ cho việc chuyển đổi, thông thường có loại hàm hay sử dụng: hình tam giác, hình thang, hình cong hình que // variable for storing the distance (cm) unsigned long dist = 0; // creat fuzzy logic new Fuzzy* fuzzy = new Fuzzy(); int ENA = 6; //M1 Speed Control int ENB = 7; //M2 Speed Control int IN1=2;//connected to Arduino's port int IN2=3;//connected to Arduino's port v v int IN3=4;//connected to Arduino's port v v int IN4=5; void setup(){ Serial.begin(9600); pinMode(ENA,OUTPUT); pinMode(ENB,OUTPUT); pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); /*digitalWrite(ENA,LOW); digitalWrite(ENB,LOW);//stop driving digitalWrite(IN1,LOW); digitalWrite(IN2,LOW);//setting motorA's directon digitalWrite(IN3,LOW); digitalWrite(IN4,LOW);*/ servo.attach(9); 46 // set init pin as output pinMode(initPin, OUTPUT); // set echo pin as input pinMode(echoPin, INPUT); // create array loop to iterate over every item in the array for (int thisReading = 0; thisReading < numOfReadings; thisReading++) { readings[thisReading] = 0; } // Criando o FuzzyInput distancia FuzzyInput* khoangcach = new FuzzyInput(1); // Criando os FuzzySet que compoem o FuzzyInput distancia FuzzySet* nho = new FuzzySet(10, 20, 20, 40); // Distancia pequena khoangcach->addFuzzySet(nho); // Adicionando o FuzzySet small em distance FuzzySet* vua = new FuzzySet(30, 50, 50, 70); // Distancia segura khoangcach->addFuzzySet(vua); // Adicionando o FuzzySet safe em distance FuzzySet* lon = new FuzzySet(60, 80, 80, 2200); // Distancia grande khoangcach->addFuzzySet(lon); // Adicionando o FuzzySet big em distance FuzzySet* lui = new FuzzySet(0, 0, 0, 10); // Distancia grande khoangcach->addFuzzySet(lui); // Adicionando o FuzzySet big em distance fuzzy->addFuzzyInput(khoangcach); // Adicionando o FuzzyInput no objeto Fuzzy FuzzyOutput* traitien = new FuzzyOutput(1); FuzzySet* cham1 = new FuzzySet(130, 130, 130, 145); traitien->addFuzzySet(cham1); // Adicionando o FuzzySet slow em velocity FuzzySet* vua1 = new FuzzySet(140, 180, 180, 210); traitien->addFuzzySet(vua1); FuzzySet* nhanh1 = new FuzzySet(200, 240, 240, 240); traitien->addFuzzySet(nhanh1); 47 fuzzy->addFuzzyOutput(traitien); FuzzyOutput* phaitien = new FuzzyOutput(2); FuzzySet* cham2 = new FuzzySet(130, 130, 130, 145); phaitien->addFuzzySet(cham2); FuzzySet* vua2 = new FuzzySet(140, 180, 180, 210); phaitien->addFuzzySet(vua2); FuzzySet* nhanh2 = new FuzzySet(200, 240, 240, 240); // Velocidade alta phaitien->addFuzzySet(nhanh2); fuzzy->addFuzzyOutput(phaitien); FuzzyOutput* trailui = new FuzzyOutput(3); /*FuzzySet* de1 = new FuzzySet(140, 150, 150, 160); trailui->addFuzzySet(de1); // Adicionando o FuzzySet slow em velocity fuzzy->addFuzzyOutput(trailui);*/ FuzzyOutput* phailui = new FuzzyOutput(4); /* FuzzySet* de2 = new FuzzySet(140, 150, 150, 160); trailui->addFuzzySet(de2); // Adicionando o FuzzySet slow em velocity fuzzy->addFuzzyOutput(phailui);*/ // Montando as regras Fuzzy FuzzyRuleAntecedent* ifkhoangcachnho = new FuzzyRuleAntecedent(); 48 ifkhoangcachnho->joinSingle(nho); FuzzyRuleConsequent* thentraitienvuaAndphaitiencham = new FuzzyRuleConsequent(); thentraitienvuaAndphaitiencham->addOutput(cham2); FuzzyRule* fuzzyRule1 = new FuzzyRule(1, ifkhoangcachnho, thentraitienvuaAndphaitiencham); fuzzy->addFuzzyRule(fuzzyRule1); FuzzyRuleAntecedent* ifkhoangcachvua = new FuzzyRuleAntecedent(); ifkhoangcachvua->joinSingle(vua); FuzzyRuleConsequent* thentientraivuaAndtienphaivua = new FuzzyRuleConsequent(); thentientraivuaAndtienphaivua->addOutput(vua1); thentientraivuaAndtienphaivua->addOutput(vua2); FuzzyRule* fuzzyRule2 = new FuzzyRule(2, ifkhoangcachvua, thentientraivuaAndtienphaivua); fuzzy->addFuzzyRule(fuzzyRule2); FuzzyRuleAntecedent* ifkhoangcachlon = new FuzzyRuleAntecedent(); ifkhoangcachlon->joinSingle(lon); FuzzyRuleConsequent* thentientrainhanhAndtienphainhanh = new FuzzyRuleConsequent(); thentientrainhanhAndtienphainhanh->addOutput(nhanh1); thentientrainhanhAndtienphainhanh->addOutput(nhanh2); 49 FuzzyRule* fuzzyRule3 = new FuzzyRule(3, ifkhoangcachlon, thentientrainhanhAndtienphainhanh); fuzzy->addFuzzyRule(fuzzyRule3); /*FuzzyRuleAntecedent* ifkhoangcachlui = new FuzzyRuleAntecedent(); ifkhoangcachlui->joinSingle(lui); FuzzyRuleConsequent* thenluitraiAndluiphai = new FuzzyRuleConsequent(); thenluitraiAndluiphai->addOutput(de1); thenluitraiAndluiphai->addOutput(de2); FuzzyRule* fuzzyRule4 = new FuzzyRule(4, ifkhoangcachlui, thenluitraiAndluiphai); fuzzy->addFuzzyRule(fuzzyRule4);*/ } void scan(){ // send 10 microsecond pulse digitalWrite(initPin, HIGH); // wait 10 microseconds before turning off delayMicroseconds(10); // stop sending the pulse digitalWrite(initPin, LOW); // Look for a return pulse, it should be high as the pulse goes low-high-low pulseTime = pulseIn(echoPin, HIGH); // Distance = pulse time / 58 to convert to cm dist = pulseTime/58; // subtract the last distance total = total - readings[arrayIndex]; 50 // add distance reading to array readings[arrayIndex] = dist; // add the reading to the total total = total + readings[arrayIndex]; arrayIndex = arrayIndex + 1; // go to the next item in the array // At the end of the array (10 items) then start again if (arrayIndex >= numOfReadings) {arrayIndex = 0; } } void loop(){ servo.write(90); scan(); // calculate the average distance averageDistance = total / numOfReadings; // print out the average distance to the debugger fuzzy->setInput(1, averageDistance); fuzzy->fuzzify(); float output1 = fuzzy->defuzzify(1); float output2 = fuzzy->defuzzify(2); float output3 = fuzzy->defuzzify(3); float output4 = fuzzy->defuzzify(4); output1=round(output1); 51 output2=round(output2); output3=round(output3); output4=round(output4); if(averageDistance>10&&averageDistance