Lưu đồ giải thuật trên Esp8266

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 90 - 143)

Bắt đầu chạy chương trình, khởi tạo tốc độ baud 9600, khởi tạo blynk. Sau khi ứng blynk khởi động xong thì nếu ta muốn hệ thống chuyển chế độ từ tự động sang tự chỉnh thì ta có thể nhấn vào nút nhấn chế độ ở trên giao diện blynk (ban đầu hoạt động ở chế độ tự động) lúc này esp8266 đã được kết nối wifi thì sẽ nhận được

tín hiệu từ blynk gửi về nó kiểm tra xem nếu biến giá trị 1 = 1 tức là hệ thống sẽ hoạt động sang chế độ tự chỉnh đồng thời lúc này esp8266 cũng gửi dữ liệu sang cho vi điều khiển, ngược lại nếu biến giá trị 1 = 0 thì hệ thống vẫn hoạt động ở chế độ tự động tín hiệu cũng sẽ được module wifi gửi qua cho vi điều khiển. Tương tự thì các thiết bị như đèn, quạt, máy bơm cũng hoạt động như trên (biến giá trị lần lượt ứng với đèn, quạt, máy bơm là 2,3,4 khi các thiết bị này được bật/tắt trên blynk thì esp8266 sẽ nhận được giá trị tương ứng là 1/0 rồi gửi sang cho vi điều khiển để điều khiển các thiết bị). Nếu hệ thống hoạt động ở chế độ tự động thì module wifi esp8266 kiểm tra xem có dữ liệu từ vi điều khiển gửi qua hay không nếu có thì bắt đầu nhận dữ đó, tiếp theo nó kiểm tra xem biến data có bằng dấu chấm hay không (data=’.’ đây là cú pháp được sử dụng để gửi dữ liệu đã được nói ở phần giải thuật vi điều khiển), nếu thỏa điều kiện đó thì tiếp tục xét điều kiện tiếp theo là dl[0] = ‘t’ hay không (dl[0] là biến dữ liệu vị trí thứ 0 trong mảng – t là kí tự đại diện cho nhiệt độ), nếu thỏa 2 điều kiện đó thì bắt đầu tính toán giá trị nhiệt độ sau đó gửi lên app blynk ở vị trí virtual pin V9 và giá trị này phải đem chia lại cho 10 (vì trước đó vi điều khiển đã nhân 10 để làm tròn thành số nguyên để có thể hiển thị lên màn hình LCD), nếu data khác ‘.’ thì các dữ liệu đó sẽ được liên tục lưu vào chuỗi cho đến khi điều kiện đó đúng thì nó tiếp tục xét điều kiện tiếp theo. Đến phần đọc độ ẩm cũng tương tự như vậy nếu thỏa mãn 2 điều kiện (data = ‘.’ và dl[0] = ‘h’ – h là kí tự đại diện cho độ ẩm có thể tùy chỉnh ký tự khác) thì bắt đầu tính toán giá trị độ ẩm đất sau đó gửi lên cho app blynk ở vị trí V8 đã được quy định. Tiếp tục, xét 3 điều kiện (data = ‘.’ và dl[0] = ‘c’ – c là kí tự đại diện cho thẻ có thể tùy chỉnh ký tự khác), nếu thỏa 2 điều kiện đó rồi xét thêm điều kiện thứ 3 là nếu dl[1] = ‘1’ tức là esp8266 nhận tín hiệu từ vi điều khiển mở cửa với thẻ được quét là thẻ 1 thì led đại diện cho thẻ 1 trên blynk sẽ được bật lên để thể hiện trạng thái. Tương tự cho thẻ 2 cũng được xét như vậy chỉ khác là dùng biến dl[1] = ‘2’, nếu dl[1] = ‘0’ tức là trạng thái không có thẻ nào hết thì 2 led đại diện cho 2 thẻ sẽ được tắt hết. Tiếp tục, vẫn xét 4 điều kiện nếu thỏa 2 điều kiện (data = ‘.’ và dl[0] = ‘b’ – b là kí tự đại diện cho loa) thì xét thêm điều kiện thứ 3 là nếu dl[1] = ‘1’ thì loa ở giao diện blynk sẽ được

sáng lên, nếu điều kiện thứ 4 xảy ra là dl[1] = ‘2’ thì led đại diện cho loa ở blynk sẽ được tắt đi. Bây giờ đến các thiết bị còn lại, đầu tiên là đèn cũng xét 4 điều kiện nếu thỏa 2 điều kiện đầu (data = ‘.’ và dl[0] = ‘d’ – d là kí tự đại diện cho đèn) thì tiếp tục xét điều kiện thứ 3 là dl[1] = ‘1’ thì module wifi sẽ gửi dữ liệu lên blynk và đặt vào virtual pin V2 giá trị là 1 tức là đèn được bật lên, nếu thỏa điều kiện thứ 4 (dl[1] = ‘2’) thì module wifi sẽ gửi dữ liệu lên blynk và đặt vào virtual pin V2 giá trị là 0 tức là đèn được tắt đi. Tiếp theo là quạt cũng xét 4 điều kiện nếu thỏa 2 điều kiện đầu (data = ‘.’ và dl[0] = ‘q’ – q là kí tự đại diện cho quạt) thì tiếp tục xét điều kiện thứ 3 là dl[1] = ‘1’ thì module wifi sẽ gửi dữ liệu lên blynk và đặt vào virtual pin V3 giá trị là 1 tức là quạt được bật lên, nếu thỏa điều kiện thứ 4 (dl[1] = ‘2’) thì module wifi sẽ gửi dữ liệu lên blynk và đặt vào virtual pin V3 giá trị là 0 tức là quạt được tắt đi. Tiếp tục là máy bơm cũng xét 4 điều kiện nếu thỏa 2 điều kiện đầu (data = ‘.’ và dl[0] = ‘m’ – m là kí tự đại diện cho máy bơm) thì tiếp tục xét điều kiện thứ 3 là dl[1] = ‘1’ thì module wifi sẽ gửi dữ liệu lên blynk và đặt vào virtual pin V4 giá trị là 1 tức là máy bơm được bật lên, nếu thỏa điều kiện thứ 4 (dl[1] = ‘2’) thì module wifi sẽ gửi dữ liệu lên blynk và đặt vào virtual pin V4 giá trị là 0 tức là máy bơm được tắt đi. Khi đã thực hiện xong những công việc trên thì vòng lặp for bắt đầu được thực hiện xóa dữ liệu cũ trong chuỗi và chuẩn bị cho chu kỳ mới. Cuối cùng khi giá trị nhiệt độ, độ ẩm được tính toán xong ở bước phía trên thì module wifi sẽ kiểm tra lại việc kết nối wifi sau đó gửi nhiệt độ vào Field 1, độ ẩm đất vào Field 2 trên giao diện Thingspeak, dữ liệu trên đấy cứ cách khoảng thời gian tầm 17s nó sẽ được cập nhật một lần.

CHƯƠNG 4: THỰC NGHIỆM 4.1 Tiến trình thực nghiệm

- Bước 1: Cấp nguồn 12V cho hệ thống sau đó điều chỉnh biến trở của mạch hạ áp để điện áp được giảm xuống còn 5V để cung cấp cho vi điều khiển hoạt động, còn module điều khiển động cơ L298 vẫn được sử dụng nguồn 12V để điều khiển máy bơm và quạt.

- Bước 2: Sau khi cấp nguồn thì các thiết bị trong hệ thống bắt đầu khởi động.

- Bước 3: Mở ứng dụng blynk và đăng nhập vào web thingspeak sau đó bắt đầu thực hiện tất cả các tính năng của hệ thống đã đặt ra trước đó.

- Bước 4: Kiểm tra lại các kết quả vừa thực hiện ở trên ứng dụng blynk cũng như là trên web thingspeak.

4.2 Kết quả thực nghiệm

- Sau khi cấp điện 220V cho hệ thống qua adapter thì điện áp giảm xuống còn 12V, do có sử dụng module điều khiển động cơ L298 để điều khiển quạt và động cơ bơm 12V nên dùng adapter 12V để cấp. Vi điều khiển arduino và các thiết bị còn lại trong hệ thống nó cần điện áp hoạt động 5V nên ở đây ta phải dùng mạch hạ áp để giảm điện áp xuống phù hợp.

- Tiếp theo, mở ứng dụng Blynk và đăng nhập vào web Thingspeak để quan sát, hiện tại hệ thống đang hoạt động ở chế độ tự động, cho cảm biến độ ẩm đất vào cốc nước để ví dụ như độ ẩm đất trong vườn đang được đảm bảo không bị giảm xuống quá thấp, lúc này cảm biến nhiệt độ cũng bắt đầu đọc giá trị sau đó vi điều khiển sẽ thu thập dữ liệu từ cảm biến để hiển thị lên màn hình LCD cũng như gửi sang cho module wifi esp8266 để có thể gửi lên app Blynk và server Thingspeak. Kết quả ta thấy: nhiệt độ là 31.4°C, độ ẩm đất là 72%.

Hình 4.2 Các thiết bị bắt đầu hoạt động ở chế độ tự động, cảm biến nhiệt độ, độ ẩm bắt đầu đọc giá trị

- Để mở cửa, đầu tiên ta sẽ quẹt thẻ từ đó vào module RFID thì lúc này nó sẽ bắt đầu làm nhiệm vụ đọc Uid của thẻ từ đó về và kiểm tra xem thẻ từ đó có phải là thẻ chủ (master – thẻ 1) hay không, nếu đúng thì cửa sẽ mở (servo quay) và hiển thị lên màn hình LCD là đúng thẻ, đồng thời vi điều khiển cũng gửi dữ liệu sang cho esp8266 để hiển thị lên app Blynk trạng thái của cửa mở/đóng (led bật/tắt).

- Khi ta quẹt thẻ từ vào module RFID mà thẻ đó chưa được thêm vào bộ nhớ eeprom hoặc thẻ từ đó không phải là thẻ chủ (thẻ 1) ở trên thì cửa vẫn sẽ đóng (servo không quay) thì lúc này nó cũng gửi tín hiệu cho vi điều khiển để hiển thị lên màn hình LCD là sai thẻ, tất nhiên cửa không mở thì cũng không có dữ liệu gửi sang cho esp8266 để hiển thị lên app Blynk được.

- Khi ta quẹt thẻ vào module RFID sai quá 3 lần thì lúc này loa sẽ được bật, trên màn hình LCD cũng hiển thị cảnh báo, dữ liệu cũng được vi điều khiển gửi sang cho esp8266 để hiển thị trạng thái của loa được bật trên app Blynk.

- Ta có thể thêm thẻ từ để mở cửa bằng cách, đầu tiên ta phải mở cửa với thẻ chủ (thẻ master – thẻ 1 – thẻ cố định), trong khoảng thời gian cửa đang mở thì ta sẽ nhấn vào nút nhấn 1 lần thì lúc này màn hình LCD sẽ hiển thị chức năng thêm thẻ.

- Sau khi màn hình LCD hiển thị chức năng thêm thẻ ở phía trên thì lúc này ta sẽ dùng thẻ từ thứ 2 (thẻ thành viên) quẹt vào module RFID thì lúc này nó sẽ bắt đầu làm nhiệm vụ đọc mã Uid của thẻ từ đồng thời kiểm tra xem thẻ này có phải là thẻ 1 (thẻ chủ) hay không nếu phải thì không thể thêm vì thẻ chủ là thẻ cố định không thể thêm hoặc xóa. Ngược lại nếu là thẻ 2 thì sẽ đi tính toán mã Uid đó và lưu nó vào bộ nhớ eeprom (tức là dữ liệu không bị mất đi khi không có nguồn điện). Sau đó thì trên màn hình LCD cũng hiển thị là thành công.

- Khi thêm thẻ từ thành công ở bước trên, bây giờ ta có thể mở cửa với thẻ từ đó. Khi quẹt thẻ từ đó vào module RFID thì nó kiểm tra xem đó là thẻ chủ (thẻ 1) hay là thẻ vừa được thêm (thẻ 2) thông qua mã Uid của mỗi thẻ, nếu nó phát hiện đó là mã Uid của thẻ 2 (thẻ vừa được thêm) thì cửa sẽ được mở ra màn hình LCD hiển thị là đúng thẻ, vi điều khiển cũng gửi sang cho esp8266 để gửi lên app Blynk trạng thái mở/đóng của cửa (sử dụng led trên app để hiển thị trạng thái).

- Ngoài chức năng thêm thẻ ở trên thì ta cũng có thể xóa thẻ từ, đầu tiên để thực hiện được chức năng xóa thẻ thì ta có thể sử dụng thẻ 1 hoặc thẻ 2 để mở cửa ra ở đây ta dùng thẻ 2 (thẻ vừa được thêm ở trên) để mở ra, sau đó ta nhấn nút nhấn 2 lần để có thể hiển thị dòng chữ xóa thẻ trên màn hình LCD.

- Sau khi màn hình LCD hiển thị chức năng xóa thẻ ở phía trên thì lúc này ta sẽ dùng thẻ từ thứ 2 (thẻ thành viên) quẹt vào module RFID thì lúc này nó sẽ bắt đầu làm nhiệm vụ đọc mã Uid của thẻ từ đồng thời kiểm tra xem thẻ này là thẻ 1 (thẻ chủ) hay thẻ 2 (thẻ thành viên – thẻ được thêm trước đó) nếu là thẻ 1 thì không thể thêm vì thẻ chủ là thẻ cố định không thể thêm hoặc xóa hoặc nếu mã thẻ 2 = 0 thì cũng không thể xóa do trước đó nó chưa được thêm. Ngược lại nếu là thẻ 2 thì sẽ đi tính toán mã Uid đó và lưu vào bộ nhớ eeprom mã Uid cho thẻ 2 = 0 hết (nghĩa là xóa mã thẻ đó). Sau đó thì trên màn hình LCD cũng hiển thị là thành công.

- Để đèn bật ở chế độ tự động, đầu tiên ta che quang trở lại (tức là trời tối) khi quang trở được che giá trị analog đọc được lớn hơn 900 lúc này vi điều khiển sẽ cấp tín hiệu mức cao (high – 5V) cho ngõ vào relay, khi relay nhận được tín hiệu mức cao thì công tắc sẽ đóng đèn sẽ được bật (do ta sử dụng relay ở chế độ thường mở - nối chân COM và NO), ngược lại khi giá trị analog nhỏ hơn 900 thì vi điều khiển sẽ cấp cho ngõ vào relay tín hiệu mức thấp (low – 0V) thì công tắc sẽ mở đèn sẽ được tắt. Mỗi lần đèn sáng hay tắt thì vi điều khiển đều sẽ gửi sang esp8266 để esp8266 gửi dữ liệu các trạng thái bật/tắt của đèn hiển thị lên app Blynk.

- Để điều khiển quạt ở chế độ tự động, ta dùng bật lửa đốt cảm biến nhiệt độ để nhiệt độ có thể tăng lên và vượt ngưỡng ta thiết lập thì lúc này vi điều khiển sẽ kích ngõ vào IN2 của module điều khiển động cơ L298 ở mức cao (high) khi đó ngõ ra Out 1, Out 2 nối với quạt sẽ được tác động và quạt sẽ được chạy. Đồng thời vi điều khiển cũng sẽ gửi dữ liệu sang cho esp8266 và esp8266 sẽ gửi dữ liệu lên app Blynk giá trị nhiệt độ khi thay đổi cũng như là trạng thái bật/tắt của quạt.

- Để động cơ bơm nước hoạt động ở chế độ tự động, ví dụ ta bỏ cảm biến độ ẩm đất ra khỏi cốc nước (tức là xem nó đang ở trạng thái khô). Do độ ẩm đất hiện tại thấp hơn ngưỡng mà ta thiết lập (<60%) thì lúc này vi điều khiển sẽ kích ngõ vào IN3 của module điều khiển động cơ L298 ở mức cao (high) khi đó ngõ ra Out 3, Out 4 nối với động cơ bơm sẽ được tác động và động cơ bơm sẽ được chạy. Đồng thời vi điều khiển cũng sẽ gửi dữ liệu sang cho esp8266 và esp8266 sẽ gửi dữ liệu lên app Blynk giá trị độ ẩm đất khi thay đổi cũng như là trạng thái bật/tắt của động cơ bơm.

- Đây là kết quả chung sau khi được mô tả ở phía trên, hệ thống hoạt động ở chế độ tự động lúc này đèn, quạt tản nhiệt và động cơ bơm đủ điều kiện để hoạt động.

- Để chuyển chế độ từ tự động sang tự chỉnh, đầu tiên ta nhấn vào nút nhấn trên giao diện Blynk ở vị trí là V1. Khi nhấn vào thì giá trị sẽ chuyển từ 0 lên 1 lúc này module wifi esp8266 sẽ gửi sang cho vi điều khiển (arduino) 1 tín hiệu khi đó vi điều khiển sẽ kiểm tra tín hiệu đó để biết hệ thống đã được chuyển sang chế độ tự chỉnh hay chưa.

- Để chuyển về chế độ tự động, thì ta tiếp tục nhấn vào nút nhấn trên giao diện Blynk ở vị trí là V1. Khi nhấn vào thì giá trị sẽ chuyển từ 1 xuống 0 lúc này module wifi esp8266 sẽ gửi sang cho vi điều khiển (arduino) 1 tín hiệu khi đó vi điều khiển sẽ kiểm tra tín hiệu đó để biết hệ thống đã được chuyển sang chế độ tự động hay chưa.

- Ở chế độ tự chỉnh này thì việc đóng/mở cửa, cảm biến nhiệt độ và cảm biến độ ẩm đất vẫn hoạt động bình thường như ở chế độ tự động. Để bật đèn thì ta có thể ấn vào nút nhấn trên giao diện ứng dụng Blynk ở vị trí V2. Khi nhấn vào thì giá trị sẽ chuyển từ 0 lên 1 lúc này module wifi esp8266 sẽ gửi sang cho vi điều khiển (arduino) 1 tín hiệu khi đó vi điều khiển sẽ kiểm tra tín hiệu đó sau đó sẽ kích ngõ vào relay ở mức cao (high – 5V) thì lúc này công tắc sẽ đóng lại đèn cũng được bật sáng. Để tắt đèn thì ta có thể ấn vào nút nhấn trên giao diện ứng dụng Blynk ở vị trí V2 1 lần nữa. Khi nhấn vào thì giá trị sẽ chuyển từ 1 xuống 0 lúc này module wifi esp8266 sẽ gửi sang cho vi điều khiển (arduino) 1 tín hiệu khi đó vi điều khiển sẽ kiểm tra tín hiệu đó sau đó sẽ kích ngõ vào relay xuống mức thấp (low – 0V) thì lúc này công tắc mở ra đèn sẽ được tắt đi.

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 90 - 143)