1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đồ án đề tài nghiên cứu robot hai bánh tự cân bằng sử dụng arduino

47 3 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên Cứu Robot Hai Bánh Tự Cân Bằng Sử Dụng Arduino
Tác giả Vũ Tuấn Anh, Hoàng Đức Dự
Người hướng dẫn THS. Phạm Hữu Chiến
Trường học Trường Đại Học Công Nghiệp Quảng Ninh
Chuyên ngành Công Nghệ Kỹ Thuật Tự Động Hóa
Thể loại Đồ án
Năm xuất bản 2023
Thành phố Quảng Ninh
Định dạng
Số trang 47
Dung lượng 2,31 MB

Nội dung

Trang 10 hai bánh cân bằng, nên em quyết định lựa chọn đề tài này nhằm để tìm hiểu, khai thácthêm những ưu điểm, tìm ra những hạn chế để cải tiến và khắc phục.Hình 1.1: Xe hai bánh tự câ

BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP QUẢNG NINH  BÁO CÁO ĐỒ ÁN ĐỀ TÀI: NGHIÊN CỨU ROBOT HAI BÁNH TỰ CÂN BẰNG SỬ DỤNG ARDUINO Sinh viên thực : VŨ TUẤN ANH, HOÀNG ĐỨC DỰ Lớp : Tự Động Hóa K13 Ngành học : CNKT Tự Động Hóa Khóa học : 2020 - 2024 Hình thức đào tạo : Đại học Giảng viên hướng dẫn : THS PHẠM HỮU CHIẾN Quảng Ninh, tháng 10, năm 2023 BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP QUẢNG NINH  BÁO CÁO ĐỒ ÁN ĐỀ TÀI: NGHIÊN CỨU ROBOT HAI BÁNH TỰ CÂN BẰNG SỬ DỤNG ARDUINO Sinh viên thực : VŨ TUẤN ANH, HOÀNG ĐỨC DỰ Lớp : Tự Động Hóa K13 Ngành học : CNKT Tự Động Hóa Khóa học : 2020 - 2024 Hình thức đào tạo : Đại học Giảng viên hướng dẫn : THS PHẠM HỮU CHIẾN Quảng Ninh, tháng 10, năm 2023 BỘ CƠNG THƯƠNG CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM TRƯỜNG ĐH CÔNG NGHIỆP QUẢNG NINH Độc lập-Tự do-Hạnh phúc BẢN NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Sinh viên thực hiện: Lớp: Chuyên Ngành: Khoa: Giảng viên hướng dẫn: Học hàm, học vị: Đơn vị công tác: NỘI DUNG NHẬN XÉT Tính cấp thiết, ý nghĩ khoa học thực tiễn đề tài: Bố cục trình bày đồ án: Kết đạt được: Các vấn đề cần làm rõ hay bổ sung, chỉnh sửa (nếu có): Ý kiến khác: Kết luận chung: Điểm đánh giá: Quảng Ninh, ngày… tháng….năm 2023 GIẢNG VIÊN HƯỚNG DẪN (Ký, ghi rõ họ tên ) ĐỀ TÀI ROBOT ĐỀ TÀI: NGHIÊN CỨU ROBOT HAI BÁNH TỰ CÂN BẰNG SỬ DỤNG ARDUINO GVHD: NHÓM SVTH: Quảng Ninh, tháng 10 năm 2023 MỤC LỤC GIẤY ĐĂNG KÝ ĐỀ TÀI LỜI CẢM ƠN Nhận xét giảng viên MỤC LỤC DANH SÁCH HÌNH ẢNH DANH SÁCH BẢNG CHƯƠNG TỔNG QUAN .10 1.1 Tầm quan trọng đề tài .10 1.1.1 Giới thiệu lí chọn đề tài 10 1.2 Xe hai bánh cân tự ứng dụng thực tiễn .11 1.2.1 Tại phải thiết kế xe hai bánh tự cân 11 1.2.2 Ứng dụng thực tiễn .13 1.3 Mục tiêu 13 1.4 Giới hạn đề tài 14 1.5 Những đề tài liên quan .14 1.6 Phương pháp, phương tiên nghiên cứu 15 CHƯƠNG CƠ SỞ LÝ THUYẾT 16 2.1 Nguyên lý cân robot 16 2.1.1 Mơ hình tốn học xe hai bánh tự cân 17 2.2 Bộ điều khiển PID 23 2.2.1 Khái niệm .23 2.2.2 Các phương pháp tìm thơng số PID 24 2.3 Cảm biến gia tốc góc nghiêng MPU-6050 25 CHƯƠNG THIẾT KẾ PHẦN CỨNG VÀ THI CÔNG HỆ THỐNG 27 3.1 Yêu cầu thiết kế .27 3.2 Thiết bị phần cứng 27 3.2.1 Danh sách thiết bị sử dụng .27 Mạch điều khiển động L298N 28 3.2.2 Sơ đồ kết nối phần cứng 29 3.3 Thiết kế phần cứng cho xe hai bánh phần mềm Solidworks 30 3.3.1 Thiết kế khung cho xe hai bánh .30 3.4 Lưu đồ giải thuật 31 CHƯƠNG KẾT QUẢ THỰC TẾ 33 4.1 Thiết kế điều khiển PID kiếm chứng Arduino IDE 33 CHƯƠNG KẾT LUẬN 37 5.1 Nhận xét 37 5.2 Kết .37 5.3 Hướng phát triển 37 TÀI LIỆU THAM KHẢO 38 PHỤ LỤC .39 DANH SÁCH HÌNH ẢNH Hình 1.1: Xe hai bánh tự cân thực tế .9 Hình 1.2:(a) Hình xe ba bánh xuống dốc (b) Hình xe ba bánh lên dốc 10 Hình 1.3: Xe hai bánh lên dốc xuống dốc 10 Hình 2.1: Nguyên lý hoạt động hệ xe cân 14 Hình 2.2: Hình mơ tả xe hai bánh tự cân .15 Hình 2.3: (a) Xe hai bánh nhìn nghiêng (b) Xe hai bánh nhìn từ xuống 16 Hình 2.4: Sơ đồ khối hệ thống sử dụng điều khiển PID 22 Hình 2.5: Cảm biến góc nghiêng MPU6050 24 Hình 3.1: Sơ đồ kết nối phần cứng .27 Hình 3.2: (a) Tầng xe (b) Tầng xe 28 Hình 3.3: (a) Xe nhìn nghiêng (b) Mặt trước xe 28 Hình 3.4: Thuật tốn chương trình .29 Hình 3.5: (a) Mặt sau xe (b) Mặt trước xe .29 Hình 3.6: Xe hai bánh nhìn nghiêng 30 Hình 4.1: Đáp ứng tín hiệu góc nghiêng với thơng số PID TH1 31 Hình 4.2: Đáp ứng góc nghiêng với thơng số điều khiển PID TH2 32 Hình 4.3: Đáp ứng góc nghiêng với thông số điều khiển PID TH3 33 Hình 4.4: Đáp ứng góc nghiêng với thơng số điều khiển PID TH4 34 DANH SÁCH BẢNG Bảng 2.1: Ký hiệu ý nghĩa đại lượng 17 Bảng 2.2: Bảng kết nối chân cảm biến MPU6050 24 Bảng 3.1: Bảng thiết bị sử dụng 26 Bảng 3.2: Bảng thích chân chức 27 Bảng 3.3: Bảng thơng số mơ hình 30 Bảng 4.1: Bảng thông số PID TH1 31 Bảng 4.2: Bảng thông số PID TH2 32 Bảng 4.3: Bảng thông số PID TH3 33 Bảng 4.4: Bảng thông số PID TH4 34 CHƯƠNG TỔNG QUAN 1.1 Tầm quan trọng đề tài 1.1.1 Giới thiệu lí chọn đề tài Ngày với phát triển vượt bậc khoa học công nghệ nay, song song với phát triển nhu cầu vật chất, sống người ngày tăng cao, người ln muốn đơn giản hóa cơng việc ngày mang lại suất độ xác gần tuyệt đối Và khoảng 20 năm trở lại người chế tạo robot với nhiều chức áp dụng vào mục đích khác Hiện vào nhà máy khơng khó bắt gặp hình ảnh robot làm thay công việc người, robot bắt trước hành động, suy nghĩ người robot thay người làm việc môi trường nguy hiểm mỏ khoáng sản, nhà máy hạt nhân thay người đến nơi mặt trăng, hỏa Với ý tưởng sử dụng robot để thay người dự án robot hai bánh cân nói chung xe hai bánh cân nói riêng từ trước đến đề tài nhiều nhà khoa học khai thác, phát triển Chính dự án có nhiều ứng dụng sống sử dụng với nhiều mục đích khác như: phục vụ nhu cầu giải trí ví dụ có sản phẩm xe điện hai bánh cân thường giới trẻ sử dụng nhiều, nước phát triển xe hai bánh cân thay cho xe đạp thiết kế nhỏ gọn giá trị sử dụng cao Bởi mơ hình tốn học xe hai bánh cân thiết kế dựa hoạt động mơ hình lắc ngược, nhà khoa học khai thác việc áp dụng vào mơ hình mang tính ứng dụng cao việc điều chỉnh thăng cho tên lửa quân việc giữ thăng cho máy bay áp dụng từ mơ hình tốn học Chính ưu điểm tính ứng dụng thực tiễn cao mơ hình xe hai bánh cân bằng, nên em định lựa chọn đề tài nhằm để tìm hiểu, khai thác thêm ưu điểm, tìm hạn chế để cải tiến khắc phục Hình 1.1: Xe hai bánh tự cân thực tế 1.2 Xe hai bánh cân tự ứng dụng thực tiễn 1.2.1 Tại phải thiết kế xe hai bánh tự cân Đối với xe bánh hay bánh thông dụng, việc thăng ổn định chúng nằm bề mặt chân đế bánh xe tạo ra, với loại xe hai bánh có cấu trúc xe đạp việc giữ thăng không chuyển động hồn tồn khơng thể Vì việc thăng xe dựa tính chất quay hồi chuyển hai bánh xe quay Còn xe hai bánh tự cân dựa mô hình tốn học lắc ngược, loại xe có bánh với trục bánh xe trùng nhau, xe cân trọng tâm xe cần giữ nằm giữ bánh xe, điều giống ta giữ gậy thẳng đứng lòng bàn tay Ngày trước robot hầu hết xây dựng với bánh xe, với bánh lái ráp đồng trục, bánh đuôi nhỏ Nhưng việc thiết kế xe bánh điều mang lại nhược điểm cố hủ, thiết kế bánh mà trọng lượng xe chia cho bánh xe lái bánh Chính lng mang nhược điểm 10 Hình 3.14: Xe hai bánh nhìn nghiêng Thơng số mơ hình STT Khối lượng xe Chiều cao Chiều rộng Chiều dài Bánh kính bánh xe Chiều rộng bánh xe Khối lượng bánh xe Khoảng cách từ tâm đến trụ bánh xe 0.5 Kg 0.14 m 0.07 m 0.2 m 0.03 m 0.02 m 0.07 kg 0.11 m Bảng 3.5: Bảng thơng số mơ hình 33 CHƯƠNG KẾT QUẢ THỰC TẾ 4.1 Thiết kế điều khiển PID kiếm chứng Arduino IDE Thử sai nhiều lần với thông số , , điều khiển PID kết hợp quan sát tín hiệu góc nghiêng thân xe để tìm thơng số tối ưu điều khiển PID TH1: với thông số bảng 4.1 10 0 Góc nghiêng ban đầu -15 đến -25 độ Giá trị đặt -2.5 độ Bảng 4.6: Bảng thơng số PID TH1 Hình 4.15: Đáp ứng tín hiệu góc nghiêng với thơng số PID TH1 34 Nhận xét: Với thông số PID TH1 xe dao đông mạnh cân TH2: với thông số bảng 4.2 30 0 Góc nghiêng ban đầu -15 đến -25 độ Giá trị đặt -2.5 độ Bảng 4.7: Bảng thông số PID TH2 Hình 4.16: Đáp ứng góc nghiêng với thơng số điều khiển PID TH2 Nhận xét: Với thông số PID TH2 dao động cân 35 TH3: với thông số bảng 4.3 70 0 Góc nghiêng ban đầu -15 đến -25 độ Giá trị đặt -2.5 độ Bảng 4.8: Bảng thơng số PID TH3 Hình 4.17: Đáp ứng góc nghiêng với thơng số điều khiển PID TH3 Nhận xét: Với thông số PID TH3 tín hiệu góc nghiêng thân xe cso thể bám vào tín hiệu đặt, cịn dao động, xe cân 36 TH4: với thơng số bảng 4.4 70 1.9 200 Góc nghiêng ban đầu -15 đến -25 độ Giá trị đặt -2.5 độ Bảng 4.9: Bảng thơng số PID TH4 Hình 4.18: Đáp ứng góc nghiêng với thơng số điều khiển PID TH4 Nhận xét: Với thông số PID TH4 xe cân bằng, cịn dao động nhỏ, thời gian xác lập khoảng 2s, sai số xác lập khoảng 0.8 37 CHƯƠNG KẾT LUẬN 5.1 Nhận xét Với điều khiển PID cho hệ xe hai bánh tự cân cho đáp ứng góc nghiêng chấp nhận với sai số thời gian xác lập thấp, nhiên so sánh chất lượng điều khiển khác LQR hay Fuzzy 5.2 Kết  Tìm phương trình tốn học hệ xe hai bánh tự cân  Thiết kế, tính tốn lựa chọn thiết bị phù hợp với mơ hình  Sử dụng lọc Kalman để lọc nhiễu cho tính hiệu góc nghiêng  Xây dựng điều khiển PID để cân xe 5.3 Hướng phát triển Với đề tài xe hai bánh cân có nhiều hướng phát triển sau:  Sử dụng điều khiển khác LQR, Fuzzy để điều khiển góc xoay vị trí xe  Kết hợp điều khiển từ xa cánh tay robot mang vật nặng 38 TÀI LIỆU THAM KHẢO [1] P L Y Z C F Y Qian Hao, "The Fuzzy Controller Designing of the SelfBalancing Robot," pp 16-18, 2011 [2] W Z Junfeng Wu, "Design of Fuzzy Logic Controller for Two-wheeled," pp 12661270, 2011 [3] C.-P H J.-C H Jia-Rui Cao, "Stabilizing Controller Design using Fuzzy T-S Model," pp 520-523, 2016 [4] Y.-K L H.-T H Gwo-Ruey Yu, "PSO-based Fuzzy Control of a Self-Balancing Two-Wheeled Robot," 2017 [5] H S D S I H A A Adik S Wardoyo, "An Investigation on the Application of Fuzzy and PID Algorithm in the Two," pp 64-68, 2015 [6] N V Đ H N P L L V T Nguyễn Minh Tâm, "MODELLING AND OPTIMAL CONTROL FOR TWO-WHEELED" [7] H T Hoàng, Hệ Thống Điều Khiển Thông Minh, NXB ĐẠI HỌC QUỐC GIA THÀNH PHỐ HCM, 2006 39 PHỤ LỤC Code chương trình #include "PID_v1.h" #include "LMotorController.h" #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #include #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #define MIN_ABS_SPEED 20 //int estado = 'h'; //int led = 4; MPU6050 mpu; // MPU bool dmpReady = false; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t packetSize; uint16_t fifoCount; 40 uint8_t fifoBuffer[64]; Quaternion q; // [w, x, y, z] VectorFloat gravity; // [x, y, z] float ypr[3]; // [yaw, pitch, roll] goc nghiêng thân xe yaw //PID double originalSetpoint = 181.8; //-2.5 double setpoint = originalSetpoint; double movingAngleOffset = 0.1; double input, output, gocnghien, gocdat, input0; //adjust these values to fit your own design double Kp = 70; //70 double Kd = 1.9; //1.9 double Ki = 200; //200 PID pid(&input, &output, &setpoint, Kp, Ki, Kd, DIRECT); double motorSpeedFactorLeft = 0.384; double motorSpeedFactorRight = 0.38; //MOTOR CONTROLLER int ENA = 9; int IN1 = 4; 41 int IN2 = 5; int IN3 = 6; int IN4 = 7; int ENB = 10; LMotorController motorController(ENA, IN1, IN2, ENB, IN3, IN4, motorSpeedFactorLeft, motorSpeedFactorRight); volatile bool mpuInterrupt = false; void dmpDataReady() { mpuInterrupt = true; } SimpleKalmanFilter locnhieu(2, 2, 0.01); void setup() { pinMode(ENA, OUTPUT);/// out pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(ENB, OUTPUT); // pinMode(led, OUTPUT); 42 //digitalWrite(led,0); Serial.begin(9600); // join I2C bus (I2Cdev library doesn't this automatically) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz) #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif Serial.print(','); Serial.print(90); Serial.print(','); Serial.print(-90); Serial.print(','); mpu.initialize(); devStatus = mpu.dmpInitialize(); mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788); 43 if (devStatus == 0) { mpu.setDMPEnabled(true); attachInterrupt(0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); dmpReady = true; packetSize = mpu.dmpGetFIFOPacketSize(); //thiết lập PID pid.SetMode(AUTOMATIC); pid.SetSampleTime(10); pid.SetOutputLimits(-255, 255); } else { 44 // ERROR! // = initial memory load failed // = DMP configuration updates failed // (if it's going to break, usually the code will be 1) // Serial.print(F("DMP Initialization failed (code ")); // Serial.print(devStatus); // Serial.println(F(")")); } } void loop() { // if programming failed, don't try to anything if (!dmpReady) return; // wait for MPU interrupt or extra packet(s) available while (!mpuInterrupt && fifoCount < packetSize) { //no mpu data - performing PID calculations and output to motors pid.Compute(); motorController.move(output, MIN_ABS_SPEED); } 45 mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // get current FIFO count fifoCount = mpu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // reset so we can continue cleanly mpu.resetFIFO(); // Serial.println(F("FIFO overflow!")); // otherwise, check for DMP data ready interrupt (this should happen frequently) } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // read a packet from FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); 46 // track FIFO count here in case there is > packet available // (this lets us immediately read more without waiting for an interrupt) fifoCount -= packetSize; mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); input = ypr[1] * 180/M_PI + 180; input0 = (ypr[1]-0.07)*90; gocnghien = locnhieu.updateEstimate(input0); Serial.println (gocnghien); //Serial.print (','); //Serial.println (-2.50); } } 47

Ngày đăng: 03/01/2024, 13:50

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w