Lưu đồ giải thuật trên vi điều khiển Arduino Uno

Một phần của tài liệu HỆ THỐNG vườn THÔNG MINH có CỔNG gắn THẺ RFID mở cửa (Trang 87 - 90)

Bắt đầu chạy chương trình, các phần cứng khởi tạo xong (LCD, ADC…). Nếu đang hoạt động ở chế độ tự động thì sau khoảng thời gian 2 - 3s thì cảm biến nhiệt độ gửi lệnh lấy và nhận giá trị về bằng 1 hàm, lấy kết quả vừa nhận đi nhân cho 10 để làm tròn thành số nguyên để có thể hiện thị lên LCD dễ dàng hơn. Tiếp theo, cảm biến độ ẩm bắt đầu đọc trung bình 10 lần để kết quả có thể giảm đi sự sai số, sau đó lấy kết quả vừa đọc được đem chia lại cho 10 và áp dụng công thức tính adc để tính ra độ ẩm tương ứng, tiếp tục lấy kết quả vừa nhận được đem phủ định lại 1 lần nữa vì cảm biến độ ẩm đất phân áp ngược có nghĩa là khi ướt thì 2 chân

này nó dẫn với nhau nên giá trị nhận được sẽ là mức 0, khi khô thì 2 chân được hở ra nhờ có Vcc đổ xuống nên giá trị nhận được là mức 1 tương ứng là 5V (100% độ ẩm). Tiếp theo, sẽ đọc quang trở dựa vào giá trị nhận được phân biệt biết trời sáng/tối và thiết lập điều kiện để có thể tắt/bật đèn (giá trị quang trở > 900 thì bật đèn và ngược lại, đèn được bật dựa vào giá trị quang trở gửi cho arduino, vi điều khiển nhận được sẽ phát tín hiệu mức cao điều khiển relay đóng tiếp điểm thường hở ngõ ra điều khiển tải điện áp cao như đèn sáng lên), cũng như quang trở thì nhiệt độ, độ ẩm đất cũng tương tự như vậy nếu nhận được các giá trị vượt ngưỡng cài đặt trước đó thì các thiết bị như máy bơm và quạt sẽ được bật lên (nếu nhiệt độ lớn hơn 35 thì quạt sẽ được bật lên, độ ẩm đất bé hơn 60% thì máy bơm sẽ được bật cấp nước cho đất). Đồng thời các kết quả và trạng thái trước đó (chế độ, đèn, quạt, máy bơm, nhiệt độ, độ ẩm) cũng được vi điều khiển gửi sang cho module wifi esp8266 theo cú pháp (với nhiệt độ và độ ẩm thì theo cú pháp: “ký tự đầu” + hàng trăm + hàng chục + hàng đơn vị + “ký tự kết thúc”, còn với đèn, quạt, máy bơm thì cú pháp sẽ là “ký tự đầu” + 1 con số bất kỳ theo ý muốn để phân biệt + "ký tự kết thúc”). Sau đó nhiệt độ, độ ẩm lần lượt được xuất lên màn hình hiển thị LCD. Tiếp theo, đến phần đọc thẻ từ, đầu tiên nó kiểm tra xem có thẻ từ quẹt vào module RFID hay không nếu có thì nó bắt đầu đọc uid của thẻ đó về và kiểm tra xem đó có phải là thẻ chủ (thẻ 1 - master) hay là thẻ tớ (thẻ 2) nếu đúng 1 trong 2 thẻ thì biến trạng thái mở = 1 và sẽ gửi dữ liệu sang cho esp8266 theo cú pháp tương tự như quạt, ngược lại nếu trạng thái mở = 0 tức là thẻ quẹt vào không phải là thẻ chủ (thẻ 1) cũng không là thẻ 2 (lúc này chưa được thêm) màn hình sẽ xuất ra với dòng chữ là sai thẻ, nếu quẹt sai quá 3 lần thì hàm báo sai sẽ bắt đầu hoạt động loa được bật lên đồng thời gửi lên màn hình cảnh báo đếm ngược trong vòng 10 giây lúc này dữ liệu cũng được gửi sang module wifi esp8266 trạng thái của loa với cú pháp như đèn ở trên, sau 10 giây loa cũng được tắt và trạng thái của loa cũng được gửi sang esp8266 1 lần nữa, sau đó màn hình sẽ hiện lên chữ mời quét thẻ. Còn khi biến trạng thái mở lên 1 thì nó đến hàm kiểm tra nút nhấn xem biến trạng thái thêm đang có giá trị là bao nhiêu, nếu biến trạng thái thêm = 0 thì cửa sẽ được mở khoảng 5s

(biến chạy < 30) trong lúc mở cửa thì dữ liệu cũng được xuất ra màn hình LCD với dòng chữ là đúng thẻ, khi điều kiện biến chạy sai (>30) thì cửa tự động được đóng lại các biến trạng thái cũng được cài đặt lại giá trị = 0. Trong lúc cửa mở (trạng thái mở = 1) nếu biến trạng thái thêm = 1 tức là nút nhấn được nhấn thì lúc này màn hình LCD hiện là thêm thẻ, hàm thêm thẻ từ sẽ bắt đầu đọc dữ liệu nó cũng bắt đầu kiểm tra xem thẻ quẹt vào có phải là thẻ chủ hay không nếu đó là thẻ chủ thì xuất ra màn hình là không thể thêm vì thẻ này là thẻ cố định, ngược lại nếu không phải là thẻ chủ thì nó bắt đầu công việc đọc mã uid của thẻ đó bằng cách tách mã uid đó thành 4 thanh ghi 8 bit lưu vào bộ nhớ eeprom sau đó đọc giá trị đấy rồi tính gộp giá trị đó lại thành 1 thanh ghi 32 bit hoàn chỉnh lúc này trên màn hình cũng xuất ra chữ thêm thẻ thành công. Trong lúc cửa mở (trạng thái mở = 1) nếu biến trạng thái thêm = 2 tức là nút nhấn được nhấn 2 lần lúc này màn hình LCD sẽ hiện là xóa thẻ, hàm xóa thẻ từ sẽ bắt đầu đọc dữ liệu sẽ bắt đầu đọc dữ liệu nó cũng bắt đầu kiểm tra xem thẻ quẹt vào có phải là thẻ chủ hay là thẻ 2 nếu đó là thẻ chủ hoặc là thẻ 2 mà thẻ 2 chưa được thêm trước đó thì xuất ra màn hình là không thể thêm và không thể xóa thẻ chủ vì thẻ chủ là thẻ cố định, ngược lại nếu là thẻ 2 đã được thêm vào bộ nhớ eeprom trước đó thì nó sẽ cho 4 giá trị ứng với 4 thanh ghi 8 bit các giá trị là 0 tức là sau khi gộp lại thì ta được 1 thanh ghi 32 bit với mã uid = 0 nghĩa là đã xóa thẻ thành công (vì không có thẻ từ nào có mã uid = 0 cả), lúc này màn hình cũng được xuất ra với dòng chữ là xóa thẻ thành công, các biến trạng thái cũng được cài đặt quay về bằng 0 để tiếp tục chu kỳ mới. Nếu làm việc với chế độ chỉnh tay thì khi vi điều khiển nhận được tín hiệu từ module wifi esp8266 nó sẽ chuyển từ chế độ tự động sang chế độ chỉnh tay ngay lập tức, lúc này các cảm biến và cổng rfid vẫn hoạt động bình thường không bị ảnh hưởng gì hết, còn lại khi nhận được dữ liệu với các chuỗi kí tự được ta quy định từ module wifi esp8266 nếu đúng điều kiện thì các biến trạng thái được thiết lập cho quạt, máy bơm, đèn sẽ được thỏa điều kiện nhờ đó thì các thiết bị đấy sẽ được bật/tắt bằng tay khi ta điều khiển trên app Blynk.

Một phần của tài liệu HỆ THỐNG vườn THÔNG MINH có CỔNG gắn THẺ RFID mở cửa (Trang 87 - 90)