You are on page 1of 23

ĐẠ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:

5000
I=
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 <Servo.h> // 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 )


void Auto()
{
int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right // Đọc giá trị 4 biến trở

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
3. https://create.arduino.cc/projecthub?
_gl=1*7j5giu*_ga*MzM4NTk1MDAyLjE2NjM5ODI1ODc.*_ga_NEXN8H46L5
*MTY2NjUzNjU3My42LjEuMTY2NjUzNjU4Ny4wLjAuMA..

21
22
23

You might also like