Lưu đồ giải thuật phần cứng

Một phần của tài liệu Đồ án tốt nghiệp: Hệ thống quan trắc chất lượng nước phục vụ cho môi trường nuôi tôm (Trang 57 - 74)

CHƯƠNG 3 THIẾT KẾ HỆ THỐNG

3.2 THIẾT KẾ PHẦN CỨNG

3.2.2 Lưu đồ giải thuật phần cứng

Hình 3.9: Lưu đồ module thu thập dữ liệu

Module thu thập dữ liệu nhận thông số từ các cảm biến (nhiệt độ, độ mặn, độ pH

và nồng độ oxy hòa tan DO). Sau đó, tạo chuỗi dữ liệu data để gửi đến đến module điều khiển qua mạng Lora.

Hình 3.10: Lưu đồ module điều khiển.

Module điều khiển sử dụng hệ điều hành freeRTOS để chạy 3 tác vụ song song gồm:

- Tác vụ nhận dữ liệu từ Lora: Nhận chuỗi dữ liệu từ module thu thập dữ liệu, lấy các giá trị chỉ số môi trường trong chuỗi và hiển thị lên LCD.

- Tác vụ giao tiếp với Firebase: Cập nhật giữ liệu môi tường ao và trạng thái các nút nhấn lên Firebase. Tác vụ này điều khiển máy bơm oxy ở chế độ tự động.

- Tác vụ điều khiển vật lý: Bật tắt các máy bơm theo trạng thái các nút nhấn vật lý. Tác vụ này điều khiển máy bơm tăng( bơm nước có độ mặn cao vào ao), bơm giảm( bơm nước có độ mặn thấp vào ao) và bơm nước ra khỏi ao ở chế độ tự động. Việc đặt hoạt động tự động của máy bơm oxy trong tác vụ Firebase và các máy bơm còn lại trong tác vụ điều khiển nhằm mục đích để máy bơm oxy hoạt động tự động liên tục và giảm độ trễ của chương trình.

Các biến chỉ số môi trường ao (nhiệt độ, độ mặn, độ pH và DO) và trạng thái các

Hình 3.11: Lưu đồ tác vụ Lora

Khi nhận được dữ liệu là chuỗi data từ gói tin của module thu thập dữ liệu, tác vụ Lora sẽ tách các chỉ số nhiệt độ, độ pH, độ mặn và nồng độ oxy hòa tan và đưa vào các biến tương ứng. Sau đó hiện thị các chỉ số lên màn hình LCD.

Hình 3.12: Lưu đồ tác vụ giao tiếp Firebase

Nút nhấn mode là nút nhấn trên tủ điện của module điều khiển, dùng để thiết lập chế độ điều khiển máy bơm bằng nút nhấn vật lý.

Nút nhấn mode 2 là nút nhấn ảo trên ứng dụng android, dùng để thiết lập chế độ điều khiển máy bơm bằng các nút nhấn trên ứng dụng. Nút mode 2 có độ ưu tiên thấp hơn nút mode.

Đầu tiên, tác vụ sẽ cập nhật giá trị các thông số lên Firebase server. Sau đó đọc giá trị nút nhấn mode 2 từ Firebase.

Bảng 3.11: Bảng chế độ hoạt động của hệ thông theo nút mode và mode 2

Nút mode Nút mode 2 Chế độ

1 x Điều khiển vật lý

0 1 Điều khiển bằng app

0 0 Điều khiển tự động

Hình 3.13: Lưu đồ bật tắt máy bơm oxy tự động

Khi nút nhấn mode và nút nhấn mode 2 cùng không được nhấn, hệ thống sẽ hoạt động ở chế độ tự động. Trong tác vụ này, máy bơm oxy sẽ được điều khiển tự động bằng cách kiểm tra so với ngưỡng được thiết lập sẵn nếu vượt ngưỡng này sẽ tự động bật máy bơm tạo oxy cho ao nuôi.

Hình 3.14: Lưu đồ điều khiển các máy bơm theo app

Ở chế độ điều khiển theo app, module điều khiển sẽ đọc trạng thái các nút nhấn từ Firebase để bật tắt các máy bơm. Sau đó sẽ đặt lại trạng thái máy bơm vào biến tương ứng.

Hình 3.15: Lưu đồ điều khiển máy bơm ra theo App

Đầu tiên, chương trình truy vấn dữ liệu từ Firebase tại đường dẫn "/Bom ra" và lưu kết quả vào biến firebaseData. Sau đó, nó kiểm tra giá trị của firebaseData. Nếu giá trị nhận được là "1", chân in_ra sẽ được đặt lên mức cao (HIGH) bằng cách sử dụng hàm digitalWrite(in_ra, HIGH), đồng thời cập nhật trạng thái state_ra là 1, biểu thị rằng thiết bị đang bật. Ngược lại, nếu giá trị nhận được không phải là "1", chân in_ra sẽ được đặt xuống mức thấp (LOW) bằng cách sử dụng hàm digitalWrite(in_ra, LOW),

và trạng thái state_ra được cập nhật là 0, biểu thị rằng thiết bị đang tắt.

Hình 3.16: Lưu đồ điều khiển máy bơm tăng theo App

Đầu tiên, chương trình truy vấn dữ liệu từ Firebase tại đường dẫn "/Bom tang" và lưu kết quả vào biến firebaseData. Sau đó, nó kiểm tra giá trị của firebaseData. Nếu giá trị nhận được là "1", chân in_tang sẽ được đặt lên mức cao (HIGH) bằng cách sử dụng hàm digitalWrite(in_tang, HIGH), đồng thời cập nhật trạng thái state_ra là 1, biểu thị rằng thiết bị đang bật. Ngược lại, nếu giá trị nhận được không phải là "1", chân in_tang sẽ được đặt xuống mức thấp (LOW) bằng cách sử dụng hàm digitalWrite(in_tang, LOW), và trạng thái state_tang được cập nhật là 0, biểu thị rằng

Hình 3.17: Lưu đồ điều khiển máy bơm giảm theo App

Đầu tiên, chương trình truy vấn dữ liệu từ Firebase tại đường dẫn "/Bom giam" và lưu kết quả vào biến firebaseData. Sau đó, nó kiểm tra giá trị của firebaseData. Nếu giá trị nhận được là "1", chân in_tang sẽ được đặt lên mức cao (HIGH) bằng cách sử dụng hàm digitalWrite(in_giam, HIGH), đồng thời cập nhật trạng thái state_giam là 1, biểu thị rằng thiết bị đang bật. Ngược lại, nếu giá trị nhận được không phải là "1", chân in_giam sẽ được đặt xuống mức thấp (LOW) bằng cách sử dụng hàm digitalWrite(in_giam, LOW), và trạng thái state_giam được cập nhật là 0, biểu thị rằng thiết bị đang tắt.

Hình 3.18: Lưu đồ điều khiển máy bơm oxy theo App

Đầu tiên, chương trình truy vấn dữ liệu từ Firebase tại đường dẫn "/Bom oxy" và lưu kết quả vào biến firebaseData. Sau đó, nó kiểm tra giá trị của firebaseData. Nếu giá trị nhận được là "1", chân in_oxy sẽ được đặt lên mức cao (HIGH) bằng cách sử dụng hàm digitalWrite(in_oxy, HIGH), đồng thời cập nhật trạng thái state_ra là 1, biểu thị rằng thiết bị đang bật. Ngược lại, nếu giá trị nhận được không phải là "1", chân in_oxy sẽ được đặt xuống mức thấp (LOW) bằng cách sử dụng hàm digitalWrite(in_oxy, LOW), và trạng thái state_oxy được cập nhật là 0, biểu thị rằng

Hình 3.19: Lưu đồ tác vụ điều khiển vật lý

Trong tác vụ này, hệ thống sẽ đọc giá trị các nút nhấn mode và mode 2 để chọn chế độ và điều khiển các máy bơm (theo bảng 3.11). Nếu nút mode được nhấn thì hệ thống sẽ hoạt động ở chế độ điều khiển bằng nút nhấn vật lý. Nếu nút mode và mode 2 cùng không được nhấn thì hệ thống sẽ hoạt động ở chế độ điều khiển tự động máy bơm tăng, bơm giảm và bơm ra.

Hình 3.20: Lưu đồ điều khiển máy bơm theo nút nhấn vật lý

Ở chế độ điều khiển vật lý, module điều khiển sẽ đọc trạng thái các nút nhấn trên

tủ để bật tắt các máy bơm. Sau đó sẽ đặt lại trạng thái máy bơm vào biến tương ứng.

Chương trình kiểm ra giá trị nút nhấn bơm ra (BTN_RA). Nếu giá trị nút nhấn bằng 1 thì chân in_ra sẽ được đặt lên mức cao (HIGH) bằng cách sử dụng hàm digitalWrite(in_ra, HIGH), đồng thời cập nhật trạng thái state_ra là 1, biểu thị rằng thiết bị đang bật. Ngược lại, nếu giá trị nhận được không phải là 1 thì chân in_ra sẽ được đặt xuống mức thấp (LOW) bằng cách sử dụng hàm digitalWrite(in_ra, LOW),

và trạng thái state_ra được cập nhật là 0, biểu thị rằng thiết bị đang tắt.

Hình 3.22: Lưu đồ điều khiển máy bơm tăng theo nút nhấn vật lý

Chương trình kiểm ra giá trị nút nhấn bơm ra (BTN_TANG). Nếu giá trị nút nhấn bằng 1 thì chân in_tang sẽ được đặt lên mức cao (HIGH) bằng cách sử dụng hàm digitalWrite(in_tang, HIGH), đồng thời cập nhật trạng thái state_tang là 1, biểu thị rằng thiết bị đang bật. Ngược lại, nếu giá trị nhận được không phải là 1 thì chân in_ra

sẽ được đặt xuống mức thấp (LOW) bằng cách sử dụng hàm digitalWrite(in_tang, LOW), và trạng thái state_tang được cập nhật là 0, biểu thị rằng thiết bị đang tắt.

Hình 3.23: Lưu đồ điều khiển máy bơm giảm theo nút nhấn vật lý

Chương trình kiểm ra giá trị nút nhấn bơm ra (BTN_GIAM). Nếu giá trị nút nhấn bằng 1 thì chân in_giam sẽ được đặt lên mức cao (HIGH) bằng cách sử dụng hàm digitalWrite(in_giam, HIGH), đồng thời cập nhật trạng thái state_ra là 1, biểu thị rằng thiết bị đang bật. Ngược lại, nếu giá trị nhận được không phải là 1 thì chân in_giam sẽ được đặt xuống mức thấp (LOW) bằng cách sử dụng hàm digitalWrite(in_giam, LOW), và trạng thái state_giam được cập nhật là 0, biểu thị rằng thiết bị đang tắt.

Hình 3.24: Lưu đồ điều khiển máy bơm oxy theo nút nhấn vật lý

Chương trình kiểm ra giá trị nút nhấn bơm ra (BTN_OXY). Nếu giá trị nút nhấn bằng 1 thì chân in_oxy sẽ được đặt lên mức cao (HIGH) bằng cách sử dụng hàm digitalWrite(in_oxy, HIGH), đồng thời cập nhật trạng thái state_oxy là 1, biểu thị rằng thiết bị đang bật. Ngược lại, nếu giá trị nhận được không phải là 1 thì chân in_oxy sẽ được đặt xuống mức thấp (LOW) bằng cách sử dụng hàm digitalWrite(in_oxy, LOW),

và trạng thái state_oxy được cập nhật là 0, biểu thị rằng thiết bị đang tắt.

Hình 3.25: Lưu đồ điều khiển máy bơm tăng, giảm và ra tự động

Ở tác vụ này, chế độ điều khiển tự động sẽ điều khiển máy bơm nước ra, bơm tăng (nước có độ mặn cao) và bơm giảm (nước có độ mặn thấp) theo chỉ số độ mặn để điều chỉnh độ mặn trong ao.

Khi độ mặn thấp hơn ngưỡng dưới (10‰), máy bơm tăng sẽ được bật để tăng độ mặn của ao. Đồng thời, máy bơm nước ra khỏi ao cũng hoạt động để giữ mực nước

Khi độ mặn cao hơn ngưỡng trên (25‰), máy bơm giảm sẽ được bật để giảm độ mặn của ao. Đồng thời, máy bơm nước ra khỏi ao cũng hoạt động để giữ mực nước trong ổn định. Hai máy bơm sẽ hoạt động 5 giây sau đó sẽ tắt và chờ 15 giây để nước

có độ mặn thấp có thời gian trung hòa độ mặn của ao.

Hình 3.26: Lưu đồ hàm tách chuỗi

Hàm tach_chuoi nhận vào hai chuỗi ký tự: data và data_comp. Nó tìm chuỗi con data_comp trong chuỗi data. Nếu tìm thấy, hàm sẽ lấy phần chuỗi ngay sau data_comp đến trước dấu phẩy hoặc ký tự kết thúc chuỗi và chuyển đổi phần chuỗi này thành giá trị số thực (float).

Trong chương trình chính chuỗi data là chuỗi dữ liệu nhận được từ module thu thập dữ liệu, chuỗi con data_comp là nhãn của thông tin cụ thể mà ta muốn trích xuất

giá trị từ chuỗi dữ liệu data. Ví dụ, nếu ta muốn lấy giá trị pH từ chuỗi data, thì data_comp sẽ là "pH: ".

Giả sử chuỗi dữ liệu data chứa các thông tin về các chỉ số môi trường và có định dạng: "temperature: 25.5, pH: 7.2, Doman: 50, DO: 8.3,\n".

- Nếu ta muốn trích xuất giá trị pH, ta có thể gọi hàm tach_chuoi với data_comp là

"pH: ": float pH_value = tach_chuoi(data, "pH: " );

- Hàm tach_chuoi sẽ tìm vị trí của chuỗi "pH: " trong data, sau đó lấy phần giá trị ngay sau đó cho đến khi gặp dấu phẩy hoặc ký tự kết thúc chuỗi và chuyển đổi phần chuỗi này thành giá trị số thực. Trong ví dụ này, giá trị pH_value sẽ là 7.2.

Tương tự, nếu ta muốn trích xuất giá trị nhiệt độ, data_comp sẽ là "temperature: ",

và nếu ta muốn trích xuất giá trị DO, data_comp sẽ là "DO: ".

Một phần của tài liệu Đồ án tốt nghiệp: Hệ thống quan trắc chất lượng nước phục vụ cho môi trường nuôi tôm (Trang 57 - 74)

Tải bản đầy đủ (PDF)

(106 trang)