1. Trang chủ
  2. » Luận Văn - Báo Cáo

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 hệ thống pin mặt trời

23 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

Nội dung

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 hệ thống pin mặt trời, sử dụng lập trình điều khiển Arduino nâng cao hiệu suất chuyển đổi của tấm pin mặt trời

ĐẠ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 hiện : 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 và tự động hóa Hà Nội, 20/10/2022 1 MỤC LỤC CHƯƠNG I: TỔNG QUAN 3 1 Lý do chọn đề tài 3 2 Mục tiêu nghiên cứu 3 3 Ý nghĩa khoa học và thực tiễn 4 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 1 Linh kiện phần cứng 5 1.1 Arduino Uno R3 5 1.2 Động cơ Servo SG90 6 1.3 Quang trở CDS 5MM .6 2 Sơ đồ nguyên lý 7 3 Nguyên lý hoạt động 7 4 Giao thức truyền thông (UART) 9 5 Sơ đồ giải thuật 10 CHƯƠNG III: LẬP TRÌNH ĐIỀU KHIỂN ARDUINO .11 1 Code arduino 11 1.1 Khai báo và hàm setup 11 1.2 Hàm chạy tự động ( Auto ) .12 1.3 Hàm điều khiển bằng tay ( Manual ) 14 1.4 Hàm loop ( vòng lặp ) 15 2 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 2 CHƯƠNG I: TỔNG QUAN 1 Lý do chọn đề tài Việt Nam được xem là một quốc gia có tiềm năng rất lớn về năng lượng mặt trời do có sẵn quanh năm, khá ổn định và phân bố rộng rãi trên các vùng miền của đất nước Tổng số giờ nắng trong năm tại các tỉnh miền Bắc bình quân từ 1.800 - 2.100 giờ (N.T.N Tuất và cộng sự), các vùng miền Trung và miền Nam khoảng 1.400 - 3.000 giờ; số ngày nắng trung bình trên các tỉnh miền Trung và miền Nam là khoảng 300 ngày/năm Bên cạnh đó, cường độ bức xạ mặt trời trung bình nhận được tại mặt đất dao động trong khoảng 3,54 - 5,15 kWh/m2/ngày và tăng dần từ Bắc vào Nam (H.T.T Hường, 2014; Nguyen N.H., 2013) và tiềm năng lý thuyết được đánh giá khoảng 43,9 tỷ TOE/năm (N.T.N Tuất và cộng sự) Tuy nhiên, việc khai thác và sử dụng nguồn năng lượng này hiện nay còn hạn chế, chỉ khoảng 1,2 - 3 MWp (H.T.T Hường, 2014; N.T.N Tuất và cộng sự) Các hoạt động nghiên cứu và sử dụng năng lượng mặt trời ở Việt Nam tập trung vào một số lĩnh vực như cung cấp nước nóng dùng trong sinh hoạt và 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ế và được sự đồng ý của Giáo viên hướng dẫn, nhóm em thực hiện đề 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 khi đề tài được ứng dụng trong thực tế sẽ tạo ra những thiết bị cỡ nhỏ hữu ích phát năng lượng (điện) trong các gia đình, Và làm cơ sở để tạo nên những trạm điện mặt trời trong tương lai 2 Mục tiêu nghiên cứu - Nâng cao hiệu suất chuyển đổi của tấm pin thông qua việc điều khiển vị trí tấm pin luôn luôn vuông 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 2 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 và điều khiển vị trí dùng bộ điều khiển Arduino 3 Mô hình pin mặt trời tự động hiều hướng của người dân 3 Ý nghĩa khoa học và thực tiễn 3.1 Ý nghĩa khoa học -Xây dựng cơ sở khoa học về việc chế tạo mô hình tự động điều hướng pin mặt trời -Chứng minh hiệu quả của 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 cũng như góp phần cải thiện môi trường, đẩy mạnh nguồn tài nguyên mới nói chung 3.2 Ý nghĩa thực tiễn - Việc sử dụng thiết bị năng lượng mặt trời vào sinh hoạt hằng ngày có ý nghĩa rất lời trong việc tiết kiệm năng lượng và bảo vệ môi trường - Mở ra hướng đi mới trong công cuộc khai thác tài nguyên thiên nhiên có sẵn để phục vụ con người 4 CHƯƠNG II: PHÂN TÍCH VÀ THIẾT KẾ 1 Linh kiện phần cứng 1.1 Arduino Uno R3 Arduino UNO R3 là kit Arduino UNO thế hệ thứ 3, với khả năng lập trình cho các ứng dụng điều khiển phức tạp do được trang bị cấu hình mạnh cho các loại bộ nhớ ROM, RAM và Flash, các ngõ vào ra digital I/O trong đó có nhiều ngõ có khả năng xuất tín hiệu PWM, các ngõ đọc tín hiệu analog và các chuẩn giao tiếp đa dạng như UART, SPI, TWI (I2C) Arduino UNO R3 sử dụng vi điều khiển Atmega328p, bộ kit có 14 chân Digital I/O (6 chân hardware PWM) và 6 chân Analog với độ phân giải là10 bit Trong bài tập này, Arduino Uno R3 được dùng để điều khiển cho hai động cơ Servo SG90 để điều khiển hai trục quay cho hệ thống pin mặt trời (giả định) 5 1.2 Động cơ Servo SG90 Động cơ Servo SG90 (góc quay 180) là Servo phổ biến dùng trong các mô hình điều khiển nhỏ và đơn giản như cánh tay robot Động cơ có tốc độ phản ứng nhanh, được tích hợp sẵn Driver điều khiển động cơ, dễ dàng điều khiển góc quay bằng phương pháp điều độ rộng xung PWM Động cơ có 3 dây nối gồm 2 dây cấp nguồn 5V, GND và 1 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 6 Quang trở là một 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 và có giá trị trong bóng tối là 2MΩ Các giá trị cảm biến từ quang trở (cường độ ánh sáng) được sử dụng làm thông số đầu vào cho bài toán điều hướng của hệ thống pin mặt trời (giả định) 2 Sơ đồ nguyên lý 3 Nguyên lý hoạt động Các chân analog của Arduino đọc được giá trị điện áp lớn nhất 5V với độ phân giải 10 bit Bốn giá trị điện áp đọc được từ của các chân A0, A1, A2, A3 theo công thức: I = 5000 1000+ R 7 Bài toán chấp nhận sai số là 50 giá trị tương tự đo được (∼0,2 44 V ) Hệ thống cảm biến bao gồm 4 quang trở sẽ làm nhiệm vụ tiếp nhận ánh sáng từ nguồn sáng Giữa 4 quang trở này sẽ có một vách ngăn hình chữ Thập làm nhiệm vụ phân chia 4 cảm biến quang trở thành 4 hướng khác nhau riêng biệt Vách ngăn này sẽ làm nhiệm vụ định hướng cho 4 quang trở luôn luôn hướng về phía có nguồn sáng mạnh nhất, cụ thể là Mặt trời Khi cụm cảm biến vuông góc với tia bức xạ của mặt trời, giá trị của 4 cảm biến sẽ bằng nhau Tín hiệu từ cụm cảm biến sẽ được truyền trực tiếp về phần tử trung tâm điều khiển Arduino 8 Hình ảnh tổng quát về mô hình 4 Giao thức truyền thông (UART) Giao tiếp Serial của 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 bằng cable USB, thông qua chip USB-to- Serial CH430E trên board, cổng USB của máy tính sẽ được chuyển đổi thành tín hiệu Serial để kết nối với chân TX, RX của board, lúc này, ta có thể dễ dàng trao đổi dữ liệu giữa board và máy tính Và đây cũng là 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 bộ sử dụng UART (Universal Asynchronous Receiver-Transmitter, một bộ phận phần cứng được tích hợp bên trong chip ATmega328 của board Arduino Uno) Như đã giới thiệu từ phần trước, khi sử dụng chuẩn giao tiếp Serial, để trao đổi thông tin một cách hiệu quả, đòi hỏi các thiết bị giao tiếp với nhau cần phải thống nhất với nhau một số quy cách riêng như tốc độ baud (baudrate), khung truyền (frame), start bit, stop bits,… và sau đây chúng ta sẽ lần lượt tìm hiểu: 9 Baudrate Như trong ví dụ về việc truyền 1 bit data sau mỗi 1 micro giây, ta nhận thấy rằng để việc giao tiếp diễn ra thành công, giữa 2 thiết bị cần có những thống nhất rõ ràng về khoảng thời gian truyền cho mỗi bit dữ liệu, hay nói cách khác tốc độ truyền cần phải được thống nhất với nhau Tốc độ này được gọi là tốc độ baud (baudrate), được định nghĩa là số bit truyền trong mỗi giây Ví dụ, nếu tốc độ baud được sử dụng là 9600, có nghĩa thời gian truyền cho 1 bit là 1/9600 = 104.167 micro giây Khung truyền (frame) Bên cạnh tốc độ baud, khung truyền đối với chuẩn giao tiếp Serial cũng hết sức quan trọng để đảm bảo việc truyền nhận được diễn ra chính xác Khung truyền quy định về số lượng bit truyền trong mỗi lần truyền, bao gồm start bit, các bit data, stop bits, ngoài ra còn có thể có parity bit (kiểm tra lỗi dữ liệu trong quá trình truyền nhận) Start bit Đây là bit đầu tiên được truyền vào khung truyền, có chức năng thông báo cho thiết bị nhận biết đang có một chuỗi dữ liệu sắp truyền đến Đối với các dòng AVR nói chung và UnoX nói riêng, ở trạng thái chưa có dữ liệu (Idle) đường truyền luôn kéo lên mức cao Khi có dữ liệu mới, đường truyền được kéo xuống mức thấp, do đó start bit sẽ được quy định là mức 0 Dữ liệu (data) Dữ liệu cần truyền thông thường gồm 8 bits, tuy nhiên chúng ta hoàn toàn có thể tùy chỉnh số lượng bit data cho một gói tin, có thể là 5, 6, 7, 9… Trong quá trình truyền, bit có trọng số thấp nhất (LSB) sẽ được truyền trước, và cuối cùng sẽ là bit có trọng số cao nhất (MSB) Stop bits Stop bits là một hoặc nhiều bit có chức năng thông báo cho thiết bị nhận biết rằng một gói dữ liệu đã được gởi xong Đây là bit quan trọng, cần phải có trong một khung truyền Giá trị của các stop bit luôn bằng mức Idle (mức nghỉ) và ngược với giá trị của start bit Đối với các dòng vi điều khiển AVR các bit kết thúc này luôn là mức cao 5 Sơ đồ giải thuật 10 CHƯƠNG III: LẬP TRÌNH ĐIỀU KHIỂN ARDUINO 1 Code arduino 1.1 Khai báo và 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 min 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 int servovLimitLow = 0; // Góc quay min // Kết nối chân các 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 giữa Arduino và máy tính //Muốn điều khiển đầu tiên cần attach horizontal.attach(9); // attach servo ngang nối ở chân số 9 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 ) // Đọc giá trị 4 biến trở void Auto() { int lt = analogRead(ldrlt); // top left int rt = analogRead(ldrrt); // top right 12 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ố của quang trở trên và dưới int dhoriz = avl - avr;// tính hiệu số của quang trở trái và phải if (-1*tol > dvert || dvert > tol) // Hiệu số dọc lớn hơn sai số thì bắt đầu cho khởi động servo đến khi hiệu số nhỏ hơn 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 } vertical.write(servov); } if (-1*tol > dhoriz || dhoriz > tol) // Hiệu số ngang lớn hơn sai số thì cho khởi động servo đến khi hiệu số nhỏ hơn 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 horizontal.write(servoh); } delay(dtime); } 1.3 Hàm điều khiển bằng tay ( Manual ) void Manual(char chosen, int goc) //chế độ bằng tay điều khiển 2 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 Serial.print(tg1); //tg là các biến trung gian để lưu lại, các kí tự s,e,a,m là các nút bấm bên giao diện của 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 Auto(); } } 2 Lập trình giao diện QT Creator 2.1 Giao diện 2.2 Code 17 18 19 TÀI LIỆU THAM KHẢO 1 https://www.youtube.com/watch?v=GkJ ny_plQE&t=331s&ab_channel=ICVS %C3%A1ngT%E1%BA%A1o 2 https://www.youtube.com/playlist? list=PLUbFnGajtZlXbrbdlraCe3LMC_YH5abao 20

Ngày đăng: 19/03/2024, 12:33

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN