You are on page 1of 16

BÀI 7: LẬP TRÌNH ĐIỀU KHIỂN

HỆ THỐNG GIÁM SÁT NHIỆT


ĐỘ
BÀI 7: LẬP TRÌNH ĐIỀU KHIỂN HỆ THỐNG GIÁM SÁT NHIỆT
ĐỘ
Mục tiêu:
- Thành thạo lập trình
biến
đổi ADC
-Viết được chương
trình điều khiển hệ thống
giám sát nhiệt độ

AUT208 Lập trình Arduino


7.1. Thiết kế sơ đồ nguyên lý – Cảm biến nhiệt
độ

Để giám sát được nhiệt độ, mạch phải sử dụng cảm biến để đo nhiệt độ của
môi trường cần giám sát. Có nhiều loại cảm biến nhiệt độ, nhưng ở bài học này
ta sẽ sử dụng cảm biến nhiệt độ LM35.
LM35 hiển thị các giá trị dưới dạng
điện áp đầu ra thay vì độ C. Điện
áp đầu ra của LM35 tỷ lệ với nhiệt
độ C. Hệ số thang đo là 0,01 V / °
C. Ví dụ nhiệt độ 27oC thì cảm biến
sẽ cho đầu ra là 0.27V
AUT208 Lập trình Arduino
7.1. Thiết kế sơ đồ nguyên lý
ARD1 LCD1
LM016L

Sơ đồ nguyên RV1

ON
Reset BTN

www.TheEngineeringProjects.com
lý của toàn VEE

63%
AREF

VDD
VSS

VEE

RW
RS
13

D0
D1
D2
D3
D4
D5
D6
D7
E
PB5/SCK
12 RS 10k

mạch
PB4/MISO
RESET
~ PB3/MOSI/OC2A
11 EN

11
1
2

4
5
6
3

7
8
9
10

12
13
14
~ PB2/OC1B
10
~ PB1/OC1A 9
8 GiaNhiet
PB0/ICP1/CLKO

EN
RS

D4
D5
D6
D7
VEE
ATMEGA328P-PU
1121
7 TANG U1

ANALOG IN
PD7/AIN1
6 1
GIAM
A0 ~ PD7/AIN1
5
CB PC0/ADC0 D4
A1 ~ PD5/T1/OC0B
4
PC1/ADC1 D5
A2 PD4/T0/XCK
3
PC2/ADC2 D6 52.0
A3 ~
2
PC3/ADC3 PD3/INT1/OC D7
A4 PC4/ADC4/SDA 1
2B
A5 PC5/ADC5/SCL PD2/INT0 0 R1 R2 VOUT
2
CB
PD1/TXD 10k 10k
PD0/RXD
ARDUINO UNO TANG GIAM
3 LM35

RL1 V1
D1 5V VSINE RXD
1N4001
TXD

R3 Q1 L1 RTS
GiaNhiet 2N2222 220V
1k CTS

AUT208 Lập trình Arduino


7.1. Thiết kế sơ đồ nguyên
lý Các giá trị nhiệt độ được hiển thị trên LCD. Dòng 1 hiển thị nhiệt độ thiết
lập (nhiệt độ mà người dùng muốn duy trì). Dòng 2 hiển thị nhiệt độ hiện tại.
Để thay đổi giá trị thiết lập,
người dùng sẽ sử dụng 2 nút nhấn. Hai nút nhấn
này được nối vào 2 chân
digital (6, 7) của Arduino
Thanh gia nhiệt được đóng
ngắt bởi một rơ le. Rơ le này được điều khiển bởi một transistor. Transistor
được kích hoạt bởi chân digital (8) của Arduino.
Cảm biến nhiệt độ LM35
được nối vào chân analog (A0) của Arduino.
AUT208 Lập trình Arduino
Mạch hoạt động theo
7.2. Biên soạn chương trình – Lưu đồ thuật toán

Trước tiên cần khai báo 2 biến sẽ sử Start

dụng trong chương trình. Khai báo a là nhiệt


độ đo được
Biến a lưu giá trị nhiệt độ đo được
Biến b lưu giá trị nhiệt độ do người dùng Khai báo b là nhiệt
độ thiết lập
thiết lập
Bất kỳ khi nào máy hoạt động thì quạt sẽ Bật quạt Điểm bắt đầu
vòng lặp
được bật.
đúng
Nếu nút TANG được nhấn thì tăng b một Nút TANG
b=b+1
được nhấn
đơn vị
sai

INE214 Vi điều khiển


7.2. Biên soạn chương trình – Lưu đồ thuật toán

Nếu nút GIAM được nhấn thì giảm b một


đúng
đơn vị Nút GIAM
b=b-1
được nhấn

sai

Ghi vào biến a giá trị đọc được ở chân Đọc giá trị ADC rồi ghi
vào biến a
ADC
Biến a thành giá trị
Biến đổi a thành giá trị nhiệt độ nhiệt độ

INE214 Vi điều khiển


7.2. Biên soạn chương trình – Lưu đồ thuật toán

So sánh a với b. Nếu a>b thì tắt thanh gia đúng


Tắt thanh gia
nhiệt, nếu a<b thì bật thanh gia nhiệt a>b
nhiệt

sai

Bật thanh gia nhiệt

Hiển thị a, b lên LCD Hiển thị a, b lên LCD

Quay lại điểm bắt


đầu vòng lặp

INE214 Vi điều khiển


7.2. Biên soạn chương trình – Các câu lệnh liên
quan
#include <LiquidCrystal.h> // Khai báo này để trình biên dịch Arduino biết
sẽ sử dụng các hàm sẵn có trong file LiquidCrystal.h.
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
//Khai báo hằng số: const int rs=5;
const : là chỉ thị khai báo hằng
int : là kiểu của
hằng (kiểu nguyên)
rs : là tên của hằng (đặt theo nguyên tắc đặt tên của ngôn ngữ lập
trình C. Tên phải không có dấu, không có dấu “cách”, bắt đầu bằng chữ cái,
không có ký tự đặc biệt.
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Thiết lập giao tiếp giữa
Arduino với LCD bằng 6 chân điều khiển tương ứng với 6 biến trong hàm
lcd(a,b,c,d,e,f) với a là chân của arduino sẽ nối với chân RS của LCD
INE214 b
Vi là
điềuchân
khiển của arduino sẽ nối với chân EN của LCD
7.2. Biên soạn chương trình – Các câu lệnh liên
quan lcd.begin(16, 2); //thiết lập giao tiếp với lcd 16 cột và 2 dòng. Nếu sử
dụng
LCD 20 cột và 4 dòng sẽ dùng lệnh: lcd.begin(20, 4);
lcd.clear(); //xoá tất cả nội dung trên màn lcd, đưa
vị trí con trỏ về toạ
độ (0,0)
lcd.setCursor(x, y); //Đưa vị trí con trỏ về toạ độ cột
x và dòng y. Con trỏ là vị
trí trên LCD sẽ bắt đầu ghi ký tự.
lcd.print("THIET LAP: "); //Hiển thị chữ THIET LAP
trên LCD tại vị trí con trỏ
Ví dụ 1:
lcd.setCursor(3, 0);
INE214 Vi điều khiển lcd.print(“Hello");
7.2. Biên soạn chương trình – Các câu lệnh liên
quan Serial.begin(9600); //Thiết lập giao tiếp nối tiếp giữa Arduino với các thiết
bị có
chuẩn UART. Ở trong bài này, sẽ thiết lập giao tiếp
giữa Arduino với máy tính. Vì máy tính không còn chuẩn giao tiếp UART
nhưng Arduino lại có một IC đảm nhận việc chuyển đổi từ UART thành USB
nên có thể coi câu lệnh này là thiết lập giao tiếp giữa Arduino và PC thông qua
USB (UART giả lập bằng USB).
Serial.write(b); //Chuyển ra cổng UART giá trị của
biến b
Serial.write(“Hello”); //Chuyển ra cổng UART chữ
Hello
Serial.write(0x13); //Chuyển ra cổng UART số 0x13
(số 13 trong mã Hexa) Theo bảng mã ASCII (xem trang 12) thì số 0x13 sẽ
tương
INE214 ứng
Vi điềuvới mã hiển thị của ký tự “xuống dòng”. Do đó, trên màn hình hiển
khiển
7.2. Biên soạn chương trình – Các câu lệnh liên quan

Bảng mã
ASCII. Bảng
mã hiển thị
của các số

INE214 Vi điều khiển


7.2. Biên soạn chương trình - Chương trình điều
khiển
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 =
2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int a=50; //đặt một biến tên là a với kiểu int(nguyên) có giá trị ban đầu là 50
void
int b;setup() {
lcd.begin(16, 2); //thiết lập giao tiếp với lcd 16 cột và 2 dòng
lcd.clear(); //xoá tất cả nội dung trên màn lcd
pinMode(8, OUTPUT);//thiết lập chân 8 là đầu ra để điều khiển thanh gia nhiệt
pinMode(6, INPUT); //Chân nối với nút GIAM
pinMode(7, INPUT); //Chân nối với nút TANG
Serial.begin(9600);
}

INE214 Vi điều khiển


7.2. Biên soạn chương trình – Chương trình điều khiển
void loop() {
lcd.setCursor(0, 0); //đặt con trỏ về đầu dòng 1
lcd.print("THIET LAP: "); //Hiển thị chữ THIET LAP trên LCD tại vị trí con
trỏ if(a<10){lcd.print(" ");} //nếu a<10 thì in 1 dấu "cách"
lcd.print (a); lcd.print("oC"); //in ra giá trị của a rồi in ra chữ oC
b=analogRead(A0); b=(b-2)/2; //đọc giá trị adc từ chân A0 rồi biến thành giá
trị nhiệt độ
lcd.setCursor(1, 1); lcd.print("DO DUOC : "); //đặt vị trí con trỏ về cột 2 dòng
2 rồi in chữ DO DUOC:
if(b<10){lcd.print(" ");} //nếu a<10 thì in 1 dấu "cách"
lcd.print(b); lcd.print("oC");//
Serial.write("Do Duoc:");
Serial.write(b);Serial.write("o
C");Serial.write(0x13);delay(2
00);
INE214 Vi điều khiển
7.2. Biên soạn chương trình – Chương trình điều
khiển
if(a<b){digitalWrite(8, 0);} //nếu nhiệt độ thiết lập nhỏ hơn nhiệt độ đo được
thì tắt thanh gia nhiệt
if(a>b){digitalWrite(8, 1);} //nếu nhiệt độ thiết lập lớn hơn nhiệt độ đo được
thì bật thanh gia nhiệt
if(digitalRead(6)==0){ //nếu chân số 6 có điện áp 0V
a=a-1; //giảm a xuống 1 đơn vị
delay (200);
}
if(digitalRead(7)==0){ //nếu chân số 6 có điện áp 0V
a=a+1; //tăng a lên 1 đơn vị
delay (200);
}
}

INE214 Vi điều khiển


Thực hành lab 4-1

AUT208 Lập trình Arduino

You might also like