Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
1,19 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ BÁO CÁO CUỐI KÌ MƠN ỨNG DỤNG MÁY TÍNH TRONG ĐO LƯỜNG VÀ ĐIỀU KHIỂN THIẾT KẾ GIAO DIỆN VÀ LẬP TRÌNH ĐIỀU KHIỂN HỆ THỐNG PIN MẶT TRỜI Giáo viên hướng dẫn : TS Hoàng Văn Mạnh Sinh viên thực : Lê Văn Cường - 19021583 Nguyễn Tấn Dũng - 19021590 Nguyễn Đình Dương - 19021592 Nhóm : 20 Lớp : K64AT – Kĩ thuật điều khiển tự động hóa Hà Nội, 20/10/2022 h MỤC LỤC CHƯƠNG I: TỔNG QUAN Lý chọn đề tài Mục tiêu nghiên cứu 3 Ý nghĩa khoa học thực tiễn 3.1 Ý nghĩa khoa học .4 3.2 Ý nghĩa thực tiễn .4 CHƯƠNG II: PHÂN TÍCH VÀ THIẾT KẾ .5 Linh kiện phần cứng 1.1 Arduino Uno R3 1.2 Động Servo SG90 1.3 Quang trở CDS 5MM .6 Sơ đồ nguyên lý Nguyên lý hoạt động Giao thức truyền thông (UART) Sơ đồ giải thuật 10 CHƯƠNG III: LẬP TRÌNH ĐIỀU KHIỂN ARDUINO .11 Code arduino 11 1.1 Khai báo hàm setup 11 1.2 Hàm chạy tự động ( Auto ) .12 1.3 Hàm điều khiển tay ( Manual ) 14 1.4 Hàm loop ( vòng lặp ) 15 Lập trình giao diện QT Creator 16 2.1 Giao diện 16 2.2 Code 17 TÀI LIỆU THAM KHẢO 20 h CHƯƠNG I: TỔNG QUAN Lý chọn đề tài Việt Nam xem quốc gia có tiềm lớn lượng mặt trời có sẵn quanh năm, ổn định phân bố rộng rãi vùng miền đất nước Tổng số nắng năm tỉnh miền Bắc bình quân từ 1.800 - 2.100 (N.T.N Tuất cộng sự), vùng miền Trung miền Nam khoảng 1.400 - 3.000 giờ; số ngày nắng trung bình tỉnh miền Trung miền Nam khoảng 300 ngày/năm Bên cạnh đó, cường độ xạ mặt trời trung bình nhận mặt đất dao động khoảng 3,54 - 5,15 kWh/m2/ngày tăng dần từ Bắc vào Nam (H.T.T Hường, 2014; Nguyen N.H., 2013) tiềm lý thuyết đánh giá khoảng 43,9 tỷ TOE/năm (N.T.N Tuất cộng sự) Tuy nhiên, việc khai thác sử dụng nguồn lượng hạn chế, khoảng 1,2 - MWp (H.T.T Hường, 2014; N.T.N Tuất cộng sự) Các hoạt động nghiên cứu sử dụng lượng mặt trời Việt Nam tập trung vào số lĩnh vực cung cấp nước nóng dùng sinh hoạt phát điện quy mô nhỏ; sấy, nấu ăn, chưng cất nước quy mô thử nghiệm nhỏ, chưa đáng kể Xuất phát từ yêu cầu thực tế đồng ý Giáo viên hướng dẫn, nhóm em thực đề tài “Thiết kế mơ hình tự động điều hướng pin mặt trời (Tracking Solar)” với mong muốn đề tài ứng dụng thực tế tạo thiết bị cỡ nhỏ hữu ích phát lượng (điện) gia đình, Và làm sở để tạo nên trạm điện mặt trời tương lai Mục tiêu nghiên cứu - Nâng cao hiệu suất chuyển đổi pin thông qua việc điều khiển vị trí pin ln ln vng góc với tia sáng mặt trời chiếu tới - Thiết kế mơ hình điều hướng xoay theo trục - Xây dựng thuật toán điều hướng pin mặt trời theo thời gian thực điều khiển vị trí dùng điều khiển Arduino h Mơ hình pin mặt trời tự động hiều hướng người dân Ý nghĩa khoa học thực tiễn 3.1 Ý nghĩa khoa học -Xây dựng sở khoa học việc chế tạo mơ hình tự động điều hướng pin mặt trời -Chứng minh hiệu việc ứng dụng mơ hình tự động điều hướng pin mặt trời vào sinh hoạt nói riêng góp phần cải thiện môi trường, đẩy mạnh nguồn tài nguyên nói chung 3.2 Ý nghĩa thực tiễn - Việc sử dụng thiết bị lượng mặt trời vào sinh hoạt ngày có ý nghĩa lời việc tiết kiệm lượng bảo vệ môi trường - Mở hướng công khai thác tài nguyên thiên nhiên có sẵn để phục vụ người h CHƯƠNG II: PHÂN TÍCH VÀ THIẾT KẾ Linh kiện phần cứng 1.1 Arduino Uno R3 Arduino UNO R3 kit Arduino UNO hệ thứ 3, với khả lập trình cho ứng dụng điều khiển phức tạp trang bị cấu hình mạnh cho loại nhớ ROM, RAM Flash, ngõ vào digital I/O có nhiều ngõ có khả xuất tín hiệu PWM, ngõ đọc tín hiệu analog chuẩn giao tiếp đa dạng UART, SPI, TWI (I2C) Arduino UNO R3 sử dụng vi điều khiển Atmega328p, kit có 14 chân Digital I/O (6 chân hardware PWM) chân Analog với độ phân giải là10 bit Trong tập này, Arduino Uno R3 dùng để điều khiển cho hai động Servo SG90 để điều khiển hai trục quay cho hệ thống pin mặt trời (giả định) h 1.2 Động Servo SG90 Động Servo SG90 (góc quay 180) Servo phổ biến dùng mơ hình điều khiển nhỏ đơn giản cánh tay robot Động có tốc độ phản ứng nhanh, tích hợp sẵn Driver điều khiển động cơ, dễ dàng điều khiển góc quay phương pháp điều độ rộng xung PWM Động có dây nối gồm dây cấp nguồn 5V, GND dây nhận tín hiệu điều khiển (tín hiệu digital) từ vi điều khiển 1.3 Quang trở CDS 5MM h Quang trở loại điện trở có giá trị điện trở thay đổi phụ thuộc vào cường độ ánh sáng Quang trở CDS 5mm có giá trị điện trở tỉ lệ nghịch với cường độ ánh sáng có giá trị bóng tối 2MΩ Các giá trị cảm biến từ quang trở (cường độ ánh sáng) sử dụng làm thơng số đầu vào cho tốn điều hướng hệ thống pin mặt trời (giả định) Sơ đồ nguyên lý Nguyên lý hoạt động Các chân analog Arduino đọc giá trị điện áp lớn 5V với độ phân giải 10 bit Bốn giá trị điện áp đọc từ chân A0, A1, A2, A3 theo công thức: I= 5000 1000+ R h Bài toán chấp nhận sai số 50 giá trị tương tự đo (∼ 0,2 44 V ) Hệ thống cảm biến bao gồm quang trở làm nhiệm vụ tiếp nhận ánh sáng từ nguồn sáng Giữa quang trở có vách ngăn hình chữ Thập làm nhiệm vụ phân chia cảm biến quang trở thành hướng khác riêng biệt Vách ngăn làm nhiệm vụ định hướng cho quang trở ln ln hướng phía có nguồn sáng mạnh nhất, cụ thể Mặt trời Khi cụm cảm biến vng góc với tia xạ mặt trời, giá trị cảm biến Tín hiệu từ cụm cảm biến truyền trực tiếp phần tử trung tâm điều khiển Arduino h Hình ảnh tổng qt mơ hình Giao thức truyền thông (UART) Giao tiếp Serial board Arduino Uno với máy tính cá nhân Khi kết nối board Arduino Uno với máy tính cable USB, thơng qua chip USB-toSerial CH430E board, cổng USB máy tính chuyển đổi thành tín hiệu Serial để kết nối với chân TX, RX board, lúc này, ta dễ dàng trao đổi liệu board máy tính Và cách để nạp chương trình từ máy tính xuống cho board Arduino Uno Serial là chuẩn giao tiếp truyền thông nối tiếp không đồng sử dụng UART (Universal Asynchronous Receiver-Transmitter, phận phần cứng tích hợp bên chip ATmega328 board Arduino Uno) Như giới thiệu từ phần trước, sử dụng chuẩn giao tiếp Serial, để trao đổi thông tin cách hiệu quả, đòi hỏi thiết bị giao tiếp với cần phải thống với số quy cách riêng tốc độ baud (baudrate), khung truyền (frame), start bit, stop bits,… sau tìm hiểu: h Baudrate Như ví dụ việc truyền bit data sau micro giây, ta nhận thấy để việc giao tiếp diễn thành công, thiết bị cần có thống rõ ràng khoảng thời gian truyền cho bit liệu, hay nói cách khác tốc độ truyền cần phải thống với Tốc độ gọi tốc độ baud (baudrate), định nghĩa số bit truyền giây Ví dụ, tốc độ baud sử dụng 9600, có nghĩa thời gian truyền cho bit 1/9600 = 104.167 micro giây Khung truyền (frame) Bên cạnh tốc độ baud, khung truyền chuẩn giao tiếp Serial quan trọng để đảm bảo việc truyền nhận diễn xác Khung truyền quy định số lượng bit truyền lần truyền, bao gồm start bit, bit data, stop bits, cịn có parity bit (kiểm tra lỗi liệu trình truyền nhận) Start bit Đây bit truyền vào khung truyền, có chức thông báo cho thiết bị nhận biết có chuỗi liệu truyền đến Đối với dịng AVR nói chung UnoX nói riêng, trạng thái chưa có liệu (Idle) đường truyền ln kéo lên mức cao Khi có liệu mới, đường truyền kéo xuống mức thấp, start bit quy định mức Dữ liệu (data) Dữ liệu cần truyền thông thường gồm bits, nhiên hồn tồn tùy chỉnh số lượng bit data cho gói tin, 5, 6, 7, 9… Trong q trình truyền, bit có trọng số thấp (LSB) truyền trước, cuối bit có trọng số cao (MSB) Stop bits Stop bits nhiều bit có chức thơng báo cho thiết bị nhận biết gói liệu gởi xong Đây bit quan trọng, cần phải có khung truyền Giá trị stop bit mức Idle (mức nghỉ) ngược với giá trị start bit Đối với dòng vi điều khiển AVR bit kết thúc mức cao Sơ đồ giải thuật 10 h CHƯƠNG III: LẬP TRÌNH ĐIỀU KHIỂN ARDUINO Code arduino 1.1 Khai báo hàm setup #include // thêm thư viện Servo Servo horizontal; // Tạo đối tượng Servo quay theo chiều ngang int servoh = 90; // Khởi tạo góc quay ban đầu int servohLimitHigh = 180; // Góc quay max int servohLimitLow = 0; // Góc quay Servo vertical; // Tạo đối tượng quay theo chiều dọc int servov = 90; // Khởi tạo góc quay ban đầu int servovLimitHigh = 180; // Góc quay max 11 h int servovLimitLow = 0; // Góc quay // Kết nối chân biến trở(quang trở) int ldrlt = 0; //LDR top left // ldrlt | ldrrt int ldrrt = 1; //LDR top rigt // | // -int ldrld = 2; //LDR down left // // ldrld | ldrrd | int ldrrd = 3; //LDR down rigt int tg1; int tg2; void setup() //Thiết lập { Serial.begin(9600); // Giao tiếp nối tiếp Arduino máy tính //Muốn điều khiển cần attach horizontal.attach(9); // attach servo ngang nối chân số vertical.attach(10); // attach servo dọc nối chân số 10 horizontal.write(90); // Thiết lập góc quay ban đầu servo ngang vertical.write(90); // Thiết lập góc quay ban đầu servo dọc delay(500); } 1.2 Hàm chạy tự động ( Auto ) void Auto() { int lt = analogRead(ldrlt); // top left int rt = analogRead(ldrrt); // top right 12 h // Đọc giá trị biến trở int ld = analogRead(ldrld); // down left int rd = analogRead(ldrrd); // down right int dtime = 10; int tol = 50; int avt = (lt + rt) / 2; //Đọc giá trị trung bình int avd = (ld + rd) / 2; int avl = (lt + ld) / 2; int avr = (rt + rd) / 2; int dvert = avt - avd; // tính hiệu số quang trở int dhoriz = avl - avr;// tính hiệu số quang trở trái phải if (-1*tol > dvert || dvert > tol) // Hiệu số dọc lớn sai số bắt đầu cho khởi động servo đến hiệu số nhỏ sai số { if (avt > avd) { servov = ++servov; delay(50); if (servov > servovLimitHigh) { servov = servovLimitHigh; } } else if (avt < avd) { servov= servov; delay(50); if (servov < servovLimitLow) { servov = servovLimitLow; } 13 h } vertical.write(servov); } if (-1*tol > dhoriz || dhoriz > tol) // Hiệu số ngang lớn sai số cho khởi động servo đến hiệu số nhỏ sai số { if (avl > avr) { servoh = servoh; delay(50); if (servoh < servohLimitLow) { servoh = servohLimitLow; } } else if (avl < avr) { servoh = ++servoh; delay(50); if (servoh > servohLimitHigh) { servoh = servohLimitHigh; } } else if (avl = avr) { // nothing } 14 h horizontal.write(servoh); } delay(dtime); } 1.3 Hàm điều khiển tay ( Manual ) void Manual(char chosen, int goc) //chế độ tay điều khiển servo { if(chosen=='u') { vertical.write(goc); return; } if(chosen=='d') { horizontal.write(goc); return; } return; } 1.4 Hàm loop ( vòng lặp ) void loop() { if(Serial.available()) { char chosen = Serial.read(); int goc = Serial.parseInt(); 15 h Serial.print(tg1); //tg biến trung gian để lưu lại, kí tự s,e,a,m nút bấm bên giao diện QT creator Serial.print(tg2); if(chosen=='s') { tg1=1; } if(chosen=='e') { tg1=0; tg2=3; } if(chosen=='a') { tg2=1; } if(chosen=='m') { tg2=2; } Serial.print(tg1); Serial.print(tg2); if(tg1==1&&tg2==2) { Manual(chosen,goc); } } if(tg1==1&&tg2==1) { 16 h Auto(); } } Lập trình giao diện QT Creator 2.1 Giao diện 2.2 Code 17 h 18 h 19 h TÀI LIỆU THAM KHẢO https://www.youtube.com/watch?v=GkJ ny_plQE&t=331s&ab_channel=ICVS %C3%A1ngT%E1%BA%A1o https://www.youtube.com/playlist? list=PLUbFnGajtZlXbrbdlraCe3LMC_YH5abao 20 h https://create.arduino.cc/projecthub? _gl=1*7j5giu*_ga*MzM4NTk1MDAyLjE2NjM5ODI1ODc.*_ga_NEXN8H46L5 *MTY2NjUzNjU3My42LjEuMTY2NjUzNjU4Ny4wLjAuMA 21 h 22 h 23 h