CẢNH báo NHIỆT độ và độ ẩm QUA SMS DÙNG PIC (có code và layout) CẢNH báo NHIỆT độ và độ ẩm QUA SMS DÙNG PIC (có code và layout) CẢNH báo NHIỆT độ và độ ẩm QUA SMS DÙNG PIC (có code và layout) CẢNH báo NHIỆT độ và độ ẩm QUA SMS DÙNG PIC (có code và layout) CẢNH báo NHIỆT độ và độ ẩm QUA SMS DÙNG PIC (có code và layout)
Trang 1CẢNH BÁO NHIỆT ĐỘ VÀ ĐỘ ẨM
QUA SMS DÙNG PIC
Trang 2DANH MỤC CÁC TỪ VIẾT TẮT VII
CHƯƠNG 1 GIỚI THIỆU 1
1.1 GIỚI THIỆU CHUNG 1
1.1.1 Mục đích thực hiện đề tài 1
1.1.2 Nhiệm vụ đề tài 1
1.1.3 Hướng thực hiện 1
1.2 CƠ SỞ LÝ THUYẾT 2
1.2.1 Tập lệnh RISC 2
1.2.2 Giao thức USART 3
CHƯƠNG 2 THIẾT KẾ PHẦN CỨNG 4
2.1 SƠ ĐỒ KHỐI 4
2.2 GIỚI THIỆU LINH KIỆN SỬ DỤNG 5
2.2.1 PIC 16F877A 5
2.2.2 LCD (Liquid crystal display) 16x2 9
2.2.3 Cảm biến DHT11 11
2.2.4 Module SIM 800A 14
2.3 THIẾT KẾ MẠCH 20
CHƯƠNG 3 PHẦN MỀN 21
3.1 SƠ ĐỒ GIẢI THUẬT 21
3.2 VIẾT CHƯƠNG TRÌNH 21
3.3 THI CÔNG 22
CHƯƠNG 4 KẾT QUẢ 23
4.1 KẾT QUẢ 23
CHƯƠNG 5 NHẬN XÉT 24
Trang 36.1 KẾT LUẬN 25 6.2 HƯỚNG PHÁT TRIỂN 25
TÀI LIỆU THAM KHẢO 26 PHỤ LỤC 27
Trang 4Hình 1- 2: Sơ đồ khối của khối truyền dữ liệu USART
Hình 2- 1: Sơ đồ khối 4
Hình 2- 2: Cảm biến DHT11 5
Hình 2- 3: Sơ đồ kết nối vi xử lý 6
Hình 2- 4: Gửi tín hiệu Start 6
Hình 2- 5: PIC 16F877A 8
Hình 2- 6: Kiến trúc John von Neumann 9
Hình 2- 7: Kiến trúc Harvard và John von Neumann 9
Hình 2- 8: Chức năng cơ bản PIC 16F877A 10
Hình 2- 9: Sơ đồ khối PIC 16F877A 11
Hình 2- 10: Sơ đồ chân PIC 16F877A 12
Hình 2- 11: LCD KeyPad Shield 12
Hình 2- 12: Sơ đồ chây kết nối LCD và Arduino 13
Hình 2- 13: Module SIM800A 14
Hình 2- 14: Sơ đồ mạch điều khiển linh kiện 20
Hình 2- 15: Sơ đồ mạch in 20Y Hình 3- 1: Mạch in trên board đồng 2 Hình 4- 1: Mạch thực tế 23
Hình 4- 2: Kết quả tin nhắn trên điện thoại 24
Trang 5LCD Liquid crystal display
PIC Programable Intelligent Computer
RISC Reduced Instruction Set Computer
SIM Subscriber Identity Module
SMS Short Message Services
UART universal asynchronous receiver-transmitter
USAR
T Universal Synchronous Asynchronous Receiver Transmitter
Trang 6CHƯƠNG 1 GIỚI THIỆU
1.1 Giới thiệu chung
Với kĩ thuật hiện vi xử lý nay thì việc phát triển tích hợp và lập trình là tương đối dễdàng Để làm một mạch báo nhiệt độ là tương đối dễ đàng, nhưng điều đó chưa đủ.Chúng ta cần phải có những mạch chuẩn đoán với nhiều tính năng hơn và thôngminh hơn
1.1.1 Mục đích thực hiện đề tài
Sử dụng vi điều khiển Pic và các linh kiện, ta có thể dễ dàng làm ra một mạch cảnhbáo nhiệt độ, độ ẩm Và với ý tưởng đó chúng ta có thể áp dụng vào nhà kính đểcảnh báo nhiệt độ, độ ẩm cây trồng để tạo điều kiện thích phát triển hoặc một vài ví
dụ khác như: sư dụng cho vật nuôi, báo cáo nhiệt độ cho nhà, v.v…
số liệu được thông qua rồi xuất dữ liệu qua Module SIM
Mạch điều khiển thiết bị ta có thể sử dụng relay và kết hợp transitor dể điều khiểngiúp thiết bị hoạt động ổn định và hiệu quả
1.2 Cơ sở lý thuyết
1.1.4 Tập lệnh RISC
Tập lệnh rút gọn của RISC, bao gồm 35 lệnh, chia thành 3 nhóm cơ bản:
Thao tác trên bit
Thao tác trên byte
Trang 8Đồng bộ _ Master mode.
Đồng bộ _ Slave mode
Hình 1- 2 : Sơ đồ khối của khối truyền dữ liệu USART
Trang 9Khối xử lý đống vai trò chính trong hệ thống Thực hiện các chức năng trao đổi dựliệu thông qua khối nhận dữ liệu Từ đó đưa ra các yêu cầu đến khối gửi thông tin
và khối hiện thị Ở đây, PIC 16F877A đóng vai trò là khối xử lý
Khối xử lý phát lệnh tới khối hiển thị, nhằm thể hiện thông tin để người dùng dễtheo dõi trực quan, sử dụng LCD nhằm hiển thị đầy đủ thông tin cần thiết
Trang 10Khối gửi thông tin là khối sau cùng của hệ thống Nhận thực hiện các yêu cầu củakhối xử lý để điều khiển phát tín hiệu như SMS Để có thể kiểm soát thông tin cácthiêt bị hiểu quả Ta có thể sử dụng Module SIM.
1.4 Khối cảm biến
Hình 2- 2 : Cảm biến DHT11
DHT11 là một con cảm biến nhiệt độ, độ ẩm Nó được ra đời để kiểm tra nhiệt độ,
độ ẩm khi cần độ chính xác ít cao hơn
Thông số kỹ thuật:
Đo độ ẩm: 20%-95%
Đo nhiệt độ: 0-50ºC
Sai số độ ẩm, nhiệt độ: ±5%,±2ºC
Trang 11Bước 1: gửi tín hiệu Start
Hình 2- 4: Gửi tín hiệu Start
MCU sẽ thiết lập chân DATA là Output, kéo chân DATA xuống mức 0 trong khoảng thời gian lớn hơn 18ms Lúc đó cảm biến DHT11 sẽ hiểu MCU muốn đo giá trị nhiệt độ và độ ẩm
Trang 12MCU đẩy chân DATA lên 1, rồi thiết lập lại là chân đầu vào.
Khoảng 20-40us sau đó, DHT11 sẽ kéo chân DATA xuống thấp Nếu lớn hơn 40us
mà chân DATA ko được kéo xuống thấp thì nghĩa là không thể giao tiếp được với DHT11
Khi chân DATA ở mức thấp 80us sau đó nó được DHT11 kéo lên cao trong 80us Bằng việc giám sát chân DATA, MCU có thể biết được có giao tiếp được với DHT11 ko Nếu tín hiệu đo được DHT11 lên cao, khi đó hoàn thiện quá trình giao tiếp của MCU với DHT
Bước 2: đọc giá trị trên DHT11
Cảm biến DHT11 sẽ trả giá trị nhiệt độ, độ ẩm trở về dưới dạng 5 byte Trong đó:Byte 1: value phần nguyên độ ẩm (RH%)
Byte 2: value phần thập phân độ ẩm (RH%)
Byte 3: value phần nguyên nhiệt độ (TC)
Byte 4 : value phần thập phân nhiệt độ (TC)
Byte 5 : kiểm tra tổng
Nếu Byte 5 = (8 bit) (Byte1 +Byte2 +Byte3 + Byte4) giá trị đưa ra chính xác, ngượclại kết quả không có ý nghĩa
Đọc dữ liệu:
Khi giao tiếp với DHT11, DHT11 sẽ gửi 40 bit 0 hoặc 1 về MCU, tương ứng chia thành 5 byte đó là kết quả của nhiệt độ và độ ẩm
Sau khi tín hiệu được đưa về 0, ta đợi chân DATA của MCU được DHT11 kéo lên
1 Chân DATA trong khoảng 26-28 us thì là 0, 70us là 1 Do đó trong lập trình ta bắt sườn lên của chân DATA, sau đó làm trễ 50us Giá trị đo 0 là bit 0, 1 là bit 1
Cứ như thế ta đọc các bit tiếp theo
1.5 Khối xử lý
PIC 16F877A được sử dụng cho khối xử lý
Trang 13Hình 2- 5 : PIC 16F877A
PIC 16F877A là mạch vi xử lý, nhằm để điều khiển.Kiến trúc PIC gồm 2 dạng: John von Neumann và HavardJohn von Neumann:
Trang 14Hình 2- 6 : Kiến trúc John von Neumann
Với John von Neumann thì gồm bộ nhớ dữ liệu và bộ nhớ chương trình nằm chungtrong một bộ nhớ, dễ cân đối bộ nhớ chương trình và bộ nhớ dữ liệu Tuy nhiên cầnđòi hỏi tốc độ xử lý CPU rất cao không thì vô nghĩa, cho nên kiến trúc John vonNeumann không thích hợp với kiến trúc một vi điều khiển
Havard:
Hình 2- 7 : Kiến trúc Harvard và John von Neumann
Nhìn vào kiến trúc của Havard và John von Neumann sự khác biệt là cấu trúc bộnhớ dữ liệu và bộ nhớ chương trình
Kiến trúc Harvard bộ nhớ dữ liệu và bộ nhớ chương trình tách làm hai phần riêngbiệt, nhờ vậy tốc độ xử lý sẽ được cải thiện đáng kể
Kiến trúc Havard là một khái niệm mới hơn John von Neumann Nhờ sự cải thiện
về tốc độ xử lý nên tạo ra khái niệm Việc tách rời bộ nhớ chương trình và bộ nhớ
Trang 15dữ liệu, bus chương trình và bus dữ liệu, CPU có thể cùng lúc truy xuất dữ liệu giúptang tốc độ xử lý lên gấp đôi.
PIC16F877A là loại vi điều khiển 8bit tầm trung của hãng microchip
PIC16F877A có kiến trúc Havard, sử dụng tập lệnh kiểu RISC (Reduced InstructionSet Computer) với chỉ 35 lệnh cơ bản
Tất cả các lệnh được thực hiện trong một chu kì lệnh ngoại trừ các lệnh rẽ nhánh.Chức năng cơ bản:
Hình 2- 8 : Chức năng cơ bản PIC 16F877A
Sơ đồ khối:
Trang 16Hình 2- 9 : Sơ đồ khối PIC 16F877A
Trang 17Sơ đồ chân:
Hình 2- 10 : Sơ đồ chân PIC 16F877A
1.6 Khối hiển thị
Hình 2- 11 : LCD KeyPad Shield
Trang 18Màn hình LCD (Liquid crystal display) là loại một loại thiết bị hiển thị cấu tạo bởicác tế bào,(các điểm ảnh) chứa tinh thể lỏng có khả năng thay đổi tính phân cực củaánh sáng cho nên thay đổi cường độ ánh sáng truyền qua khi kết hợp với các kínhlọc phân cực LCd 16x2 có 2 hàng và 16 cột.
Sơ đồ sử dụng các chân khi gắn shield
Hình 2- 12 : Sơ đồ chây kết nối LCD và Arduino
VSS: tương đương với GND - cực âm
VDD: tương đương với VCC - cực dương (5V)
Constrast Voltage (Vo): điều khiển độ tương phản màn hình
Register Select (RS): điều khiển địa chỉ ghi dữ liệu
Read/Write (RW): Đọc (read mode), ghi (write mode) dữ liệu
Enable pin: Chấp nhận cho phép ghi vào LCD
Trang 19Hình 2- 13 : Module SIM800A
Module GSM SIM800 có khả năng nhắn tin SMS, nghe, gọi,… như một điện thoại
có kích thước nhỏ nhất trong các loại module SIM (25 mm x 22 mm) Để điều khiểnmodule sim ta sử dụng tập lệnh AT
Nguồn cấp: 3.7 - 4.2VDC, có thể sử dụng với nguồn dòng thấp từ 500mA trở lên (như cổng USB, nguồn từ board Arduino).Dùng nguồn 1A để mạch chạy ổn định.Khe cắm SIM: MicroSIM
Trang 20cấp nguồn hoạt động cho module
Vmax= 4.5V Vmin=3.4V Vnorm=4.0 V
BACKUP I/O Ngõ vào nguồn cho bộ thời gian thực
của module khi không có nguồn chính Và cung cấp một dòng ra dành cho nguồn dự trữ khi có nguồn
chính,để tiết kiệm năng lượng của nguồn dự trữ.
Vmax=2.0V Vmin=1.2V Vnorm=1.8
V Inorm= 20uA CHG_IN I Nguồn cung cấp cho bộ sạc pin của
module Đồng thời giúp cho module nhận ra bộ sạc.
Vmax=5.25
V Vmin=1.1
*VBAT Vnorm=5.1 V
số.
PWRKEY I Ngõ vào dùng để mở và tắt nguồn
chính của module Chân này được nối với một nút nhấn Để mở và tắt nguồn của module,phải nhấn nút nhấn để giữ chân này ở mức thấp trong một
khoảng thời gian ngắn.
VILmax=0.3
*VBAT VIHmin=0.7
*VBAT VImax=VB AT
Trang 21BUZZER O Ngõ ra dành cho còi báo.
tương tự.
DISP_D0 I/O Ngõ vào ra để kiểm tra đường truyền
dữ liệu.
VILmin=0V VILmax=0.9 VIHmin=2.0 VIHmax= 3.2
VOLmin=G
ND VOLmax=0 2V
VOHmin=2.
7 VOHmax=2 9
DISP_CLK O Ngõ ra kiểm tra xung Clock.
DISP_A0 O Ngõ ra kiểm tra dữ liệu và địa chỉ (có
VOLmin=G
ND VOLmax=0 2V
Trang 227 VOHmax=2 9
Các ngõ vào ra với mục đích chung.
NETLIGHT O Ngõ ra cho biết trạng thái hoạt động
của module GSM.
VILmin=0V VILmax=0.9 VIHmin=2.0 VIHmax= 3.2 VOLmin=GN
D VOLmax=0.2
V VOHmin=2.7 VOHmax=2.9
STATUS O Ngõ ra cho biết các trạng thái hoạt
động của các ứng dụng khác có trong module.
GPIO5
GPIO32
I/O Ngõ vào ra dùng chung cho các mục
đích khác.
Port nối tiếp 1
DTR I Ngõ vào cho biết giao tiếp đã sẵn
sàng.
VILmin=0V VILmax=0.9 VIHmin=2.0 VIHmax= 3.2 VOLmin=GN
D VOLmax=0.2
V VOHmin=2.7 VOHmax=2.9
RI O Ngõ ra cho biết trạng thái hoạt động.
DCD O Ngõ ra cho biết dữ liệu đã được gửi
đi.
Port nối tiếp 2
DEBUG_TX O Port dùng để sửa lỗi và giao tiếp
bằng tập lệnh AT.
DEBUG_R
X
I
Các chân dành cho SIM card
card
Có 2 loại nguồn cung cấp 1.8V và
Trang 232.85V.Được lựa chọn bởi phần mềm.
SIM_DATA I/O Chân truyền nhận dữ liệu với
SIM.
VILmin=0V VILmax=0.3* VSIM VIHmin=0.7* VSIM VIHmax= VSIM +0.3
VOLmin=GND VOLmax=0.2V VOHmin= VSIM - 0.2
0-TEMP_BAT I Ngõ vào cho biết nhiệt độ
của pin.
1.8 Thiết kế mạch
Trang 24Hình 2- 14 : Sơ đồ mạch điều khiển linh kiện
Sử dụng khối nguồn với LM2596 để cấp điện áp vi điều khiển khi cấp nguồn vào khối điều khiển Khối điều khiển sẽ có transistor và thạch anh để thiết bị có thể cấp xung và an toàn
Hình 2- 15 : Sơ đồ mạch in
CHƯƠNG 3 SƠ ĐỒ VÀ THI CÔNG
1.9 Sơ đồ giải thuật
Trang 251.10 Viết chương trình
Sử dụng ngôn ngữ lập trình C và tập lệnh AT để viết code điều khiển cho PIC16F877A và Module SIM800A
Trang 28Hình 4- 2 : Kết quả tin nhắn trên điện thoại
Kết quả tin nhắn khi Module SIM800A gửi qua số điện thoại Kết quả hiển thị đúngnhư kết quả đã hiện thị trên LCD
Trang 29CHƯƠNG 5 NHẬN XÉT
1.13 Nhận xét 1
Hệ thống chạy rất ổn định, đạt đúng yêu cầu đề tài đưa ra tuy nhiên khi thay đổinhiệt độ và độ ẩm liền thì thời gian đọc có hơi chậm vài giây nhưng kết quả vẫn rấtchính xác
1.14 Nhận xét 2
Để mạch có thể cảnh báo nhiệt độ qua SMS ta phải thường xuyên kiểm tra SIM để
có thể biết được SIM còn tiền hay không nhằm mục đích gửi tin nhắn
Trang 30Ngoài ra có thể nâng cấp lên khi thay DHT11 bằng SHT1x để có mức chính xác caohơn.
Trang 31TÀI LIỆU THAM KHẢO
Tiếng Việt:
[1] Tài liệu tham khảo cho PIC 16F877A http://ebookbkmt.forumvi.com/t6-topic[2] Màn hình tinh thể lỏng https://vi.wikipedia.org/wiki/Màn_hình_tinh_thể_lỏng[3] 16F877 www.alldatasheet.com
Trang 32PHỤ LỤC
#include <main.h>
#define LCD_ENABLE_PIN PIN_C0
#define LCD_RS_PIN PIN_E0
#define LCD_RW_PIN PIN_A5
#define LCD_DATA4 PIN_A3
#define LCD_DATA5 PIN_A2
#define LCD_DATA6 PIN_A1
#define LCD_DATA7 PIN_A0
#include <lcd.c>
#define DATA PIN_b0
void doc_cam_bien(unsigned int16 *nhiet_do, unsigned int16 *do_am);unsigned int16 nhiet=0,am=0;
Trang 34case 1: fprintf(UART,"T = %f, H = %f",T,H);break;
case 2: fprintf(UART,"Canh bao nhiet do cao %f",T) ; W1 = 1; break; case 3: fprintf(UART,"Canh bao do am cao %f",H) ; W2 = 1; break; case 4: fprintf(UART,"Canh bao nhiet do cao %f, do am cao
Trang 38fprintf(UART,"AT+CMGF=1\r\n") ;
delay_ms(200);
fprintf(UART,"AT+CMGDA=\"DEL ALL\"\r\n") ;}