3.3. THIẾT KẾ PHẦN MỀM
3.3.1. Lưu đồ giải thuật
a.Lưu đồ giải thuật của hệ thống
Với yêu cầu trên, nhóm thiết kế các lưu đồ giải thuật đáp ứng yêu cầu của hệ thống ở bộ xử lý trung tâm nhƣ hình sau:
BẮT ĐẦU
KHỞI TẠO CÁC GIÁ TRỊ BAN ĐẦU (CÁC CHÂN I/O, LCD…)
ĐỌC GIÁ TRỊ CẢM BIẾN
HIỂN THỊ LCD
ĐIỀU KHIỂN ĐỘNG CƠ BƠM
GIAO TIẾP VỚI MẠNG DI DỘNG
GIAO TIẾP VỚI WEB SERVER
KẾT THÚC
Hình 3.10:Lưu đồ giải thuật của bộ xử lý trung tâm Giải thích lưu đồ:
Đầu tiên là khởi tạo các giá trị ban đầu nhƣ: khai báo thƣ viện, chân I/O, các biến.
Tiếp đến là vòng lặp gồm:
Đọc các giá trị cảm biến từ các chân Analog, Digital
Hiển thị LCD: hiển thị các giá trị cảm biến đo đƣợc, trạng thái động cơ lên màn hình LCD.
Điều khiển động cơ bơm: dựa vào giá trị đọc đƣợc trên cảm biến siêu âm đo mực nước để điều khiển động cơ.
Giao tiếp với mạng di động: gửi tin nhắn cảnh báo khi cảm biến vƣợt ngƣỡng, nhận tin nhắn, kiểm tra cú pháp và thực hiện yêu cầu.
Giao tiếp với webserver: gửi các thông số từ hệ thống lên webserver, đồng thời nhận các giá trị cài đặt ngƣỡng cảnh báo.
b. Lưu đồ giải thuật đọc giá trị cảm biến BẮT ĐẦU
BẬT CHÂN TRIG DELAY 10us TẮT CHÂN TRIG
NẾU CÓ XUNG DỘI VỀ CHÂN ECHO
ĐÚNG
ĐO ĐỘ RỘNG XUNG CAO CHÂN ECHO TÍNH TOÁN KHOẢNG CÁCH
KẾT THÚC
SAI
ĐỌC GIÁ TRỊ pH ĐỌC GIÁ TRỊ NHIỆT ĐỘ
Hình 3.11: Lưu đồ giải thuật đọc giá trị cảm biến
Giải thích lưu đồ:
Bắt đầu chương trình, ta tiến hành đọc giá trị nhiệt độ và độ pH.
Sau đó bật chân TRIG, sau đó delay khoảng thời gian là 10us nhằm tạo 1 xung có độ rộng là 10us từ chân phát TRIG, rồi sau đó tắt chân TRIG.
Nếu có xung dội về chân ECHO thì tiến hành đo độ rộng của xung, tương ứng với khoảng thời gian từ lúc phát đến lúc gặp vật cản và dội về cảm biến.
Tiếp đến tính khoảng cách dựa vào thời gian đo đƣợc.
c. Lưu đồ giải thuật điều khiển động cơ bơm
BẮT ĐẦU
MỰC NƯỚC NHỎ HƠN NGƢỠNG
MỞ ĐỘNG CƠ BƠM TẮT ĐỘNG CƠ BƠM
SAI
ĐÚNG
KẾT THÚC
Hình 3.12: Lưu đồ điều khiển động cơ bơm
Giải thích lưu đồ:
Ta so sánh giá trị mực nước thu được từ cảm biến siêu âm, nếu nhỏ hơn ngƣỡng cài đặt thì mở động cơ bơm, nếu lớn hơn thì tắt động cơ bơm.
d. Lưu đồ giải thuật giao tiếp với mạng di động
BẮT ĐẦU
THÔNG SỐ NHIỆT ĐỘ VƢỢT NGƢỠNG
ĐÚNG GỬI TIN NHẮN CẢNH
BÁO NHIỆT ĐỘ
THÔNG SỐ PH VƢỢT NGƢỠNG
GỬI TIN NHẮN CẢNH BÁO PH
THÔNG SỐ MỰC NƯỚC VƯỢT
NGƢỠNG
GỬI TIN NHẮN CẢNH BÁO MỰC NƯỚC
ĐÚNG
KẾT THÚC SAI
SAI
ĐÚNG
SAI
TIN NHẮN TỚI LÀ DATN
GỬI TIN NHẮN CÁC THÔNG SỐ NHIỆT ĐỘ,
PH, MỰC NƯỚC ĐÚNG SAI
Hình 3.13: Lưu đồ giải thuật giao tiếp với mạng di động Giải thích lưu đồ:
Đầu tiên ta kiểm tra giá trị nhiệt độ đo đƣợc với ngƣỡng, nếu lớn hơn ngƣỡng thì gửi tin nhăn cảnh báo nhiệt độ.
Tiếp đến ta kiểm tra giá trị độ pH với ngƣỡng, nếu lớn hơn ngƣỡng thì gửi tin nhắn cảnh báo pH.
Tiếp theo là kiểm tra giá trị mực nước, nếu lớn hơn ngưỡng thì gửi tin nhắn cảnh báo mực nước.
Cuối cùng nếu có tin nhắn tới có cú pháp là “DATN” thì gửi tin nhắn chứa các giá trị đo đƣợc từ các cảm biến của hệ thống.
e. Lưu đồ giao tiếp với Web Server
BẮT ĐẦU
NHẬN DỮ LIỆU GIỚI HẠN TỪ WEB SERVER
KIỂM TRA TỪNG KÍ TỰ TRONG CHUỖI CÓ PHẢI LÀ
DẤU “?” KHÔNG
TẠO MẢNG CHỨA CÁC VỊ TRÍ DẤU “?”
CẮT MẢNG TỪ CHUỖI DỮ LIỆU DỰA VÀO VỊ
TRÍ DẤU “?”
ĐÚNG
SAI
KẾT THÚC CÀI GIÁ TRỊ GIỚI HẠN
CHO CẢM BIẾN GỬI DỮ LIỆU CẢM BIẾN
LÊN WEB SERVER
Hình 3.14: Lưu đồ giải thuật giao tiếp với Web Server Giải thích lưu đồ:
Bắt đầu chương trình, ta gửi các giá trị cảm biến đo được lên Web Server.
Sau đó đọc dữ liệu nhận đƣợc từ Web Server gửi về.
Tiến hành cắt chuỗi xử lý dữ liệu nhận đƣợc dựa vào ký tự “?” và cài làm giới hạn cho các cảm biến.
f. Lưu đồ của Raspberry Pi
Với các yêu cầu của hệ thống, nhóm thiết kế lưu đồ cho Raspberry Pi như hình sau:
Bắt Đầu
Khởi tạo cổng giao tiếp RS232, giới hạn
cảm biến ban đầu
Kết nối cơ sở dữ liệu
Đọc dữ liệu nhận đƣợc
Dữ liệu nhận đƣợc khác rỗng
Xử lý và đƣa lên cơ sở dữ
liệu
Đọc giá trị giới hạn khác với giá trị ban
đầu
Gửi dữ liệu cho Arduino Đúng Sai
KẾT THÚC Nếu nhấn Ctrl C
Đúng
Sai
Hình 3.15: Lưu đồ chương trình chính ở Raspberry Pi
Giải thích lưu đồ:
Bắt đầu chương trình, ta khởi tạo cổng RS232, các giá trị giới hạn ban đầu.
Sau đó kết nối với cơ sở dữ liệu.
Đọc chuỗi dữ liệu cảm biến nhận đƣợc ở chân RX. Nếu dữ liệu nhận đƣợc khác rỗng, tiến hành cắt chuỗi, gửi lên Web Server.
Sau đó đọc các giá trị giới hạn của cảm biến. Kiểm tra nếu giá trị giới hạn khác với giá trị cài cũ thì gửi qua Arduino.