TỔNG QUÁT VỀ HỆ THỐNG VƯỜN RAU THÔNG MINH
Tổng quát về hệ thống vườn rau thông minh
1.1.1 Giới thiệu về hệ thống tưới rau thông minh
Trong cuộc sống bận rộn ngày nay, nhiều người chọn trồng rau trong không gian trống của nhà như sân thượng hay ban công Tuy nhiên, việc tưới nước cho vườn rau thường gặp khó khăn do lịch trình bận rộn và tốn thời gian Hệ thống vườn rau thông minh giúp tự động hóa quá trình tưới nước, giúp chúng ta yên tâm mà không cần canh thời gian hay kéo ống nước Ứng dụng công nghệ không chỉ tiết kiệm thời gian mà còn đảm bảo nguồn thực phẩm sạch, cho phép chúng ta đi xa mà không lo lắng về việc chăm sóc cây trồng.
1.1.2 Một số hệ thống tưới rau và chọn hệ thống tối ưu
- Hệ thống tưới nước nhỏ giọt:
Hình 1.1: Hệ thống tưới nước nhỏ giọt
Hệ thống tưới nước nhỏ giọt là một kỹ thuật hiệu quả, cung cấp nước trực tiếp vào đất dưới dạng các giọt nhỏ từ thiết bị tạo giọt đặt gần gốc cây Phương pháp này giúp cây trồng hấp thụ nước tối đa, đồng thời giảm thiểu tình trạng nước bị văng ra ngoài, từ đó tiết kiệm nước cho gia đình một cách tối ưu.
- Ưu điểm của hệ thống
Tiết kiệm được tối đa lượng nước cho gia đình bạn
Hạn chế được bay hơi, thất thoát nước
Lượng nước được phân bố đồng đều ở các vị trí gốc cây
- Nhược điểm của hệ thống
Chỉ tưới được ở phần gốc cây
Không kiểm soát được độ ẩm của đất
Dễ bị tắt nghẽn đầu phun nếu không lắp thiết bị lọc
Hệ thống này chỉ phù hợp cho những cây có khả năng chịu được hạn hán cao vì lượng nước đầu ra tương đối ít
- Hệ thống tưới phun mưa:
Hình 1.2: Hệ thống tưới phun mưa
Hệ thống tưới phun mưa là kỹ thuật cung cấp nước cho cây trồng dưới dạng mưa nhân tạo, sử dụng máy bơm nước áp lực cao, ống dẫn và mũi phun Phương pháp này thường được áp dụng để tưới cây, cỏ và trong các mô hình nhà kính.
- Ưu điểm của hệ thống
Lượng nước tưới đều, không bỏ sót khu vực nào
Có thể điều chỉnh được lưu lượng nước tưới ở từng khu vực và từng gốc cây
Ứng dụng tưới cho nhiều loại cây khác nhau
- Nhược điểm của hệ thống
Lưu lượng nước sử dụng lớn
Chi phí lắp đặt cao
Phù hợp cho mọi loại địa hình
Gây lãng phí nước khi cây đã đạt được độ ẩm nhất định
- Hệ thống tưới phun sương:
Hình 1.3: Hệ thống tưới phun sương
Hệ thống tưới phun sương không chỉ mang lại không khí trong lành và dễ chịu mà còn giúp tiết kiệm chi phí điện nước một cách hiệu quả.
- Ưu điểm của hệ thống
Phù hợp cho các giống hoa, rau trồng
Tốn ít lượng nước cần thiết
- Nhược điểm của hệ thống
Nước dễ bị bay hơi
Rễ cây hấp thụ được ít nước
Chỉ phù hợp với một số hệ thống nhà kính trồng rau
1.1.3 Mục tiêu của đề tài
- Có thể giám sát được độ ẩm và nhiệt độ của hệ thống
- Sử dụng cảm biến độ ẩm đất để biết được cây trồng có thiếu nước hay không
Từ đó, tưới nước cho cây cho hợp lý và tránh tình trạng gây lãng phí nước
- Ứng dụng, sử dụng được thiết bị di động để kiểm tra được độ ẩm, nhiệt độ và gửi về điện thoại thông minh
1.1.4 So sánh và lựa chọn hệ thống
Sau khi khảo sát các hệ thống tưới rau, nhóm chúng em quyết định chọn hệ thống tưới rau phun mưa vì nó hiệu quả hơn so với hệ thống tưới phun sương và tưới nhỏ giọt Hệ thống tưới phun sương có lượng nước đầu phun ít và dễ bay hơi, chỉ phù hợp cho một số loại hoa hoặc rau trong nhà kính Trong khi đó, hệ thống tưới nhỏ giọt chỉ thích hợp với cây chịu hạn, do lượng nước đầu ra thấp Hơn nữa, các hệ thống này thường hoạt động thủ công và không đo được độ ẩm của đất, dẫn đến khó khăn trong việc tưới cây và lãng phí nước Là sinh viên ngành tự động hóa, chúng em đã nghiên cứu và thiết kế các tính năng mới để hệ thống tưới rau phun mưa hoạt động hoàn toàn tự động, giảm bớt công sức tưới nước cho vườn rau.
Trong quá trình thực tập tốt nghiệp tại nhà máy và tham quan các doanh nghiệp sản xuất, chúng tôi đã quan sát được nhiều quy trình tự động hóa trong sản xuất Bên cạnh đó, sự phổ biến ngày càng tăng của thiết bị điện thoại di động trong cuộc sống hiện đại cũng là một điểm đáng chú ý.
Với nhu cầu cuộc sống ngày càng gia tăng, ý tưởng phát triển mô hình vườn rau thông minh bằng Mô-đun Sim800L đã ra đời.
TỔNG QUAN VỀ ARDUINO VÀ GIỚI THIỆU PHẦN CỨNG
Tổng quan về Arduino
Arduino là nền tảng mã nguồn mở lý tưởng cho việc phát triển các dự án điện tử, bao gồm bảng mạch lập trình (vi điều khiển) và phần mềm IDE để lập trình, viết và tải mã máy tính lên bo mạch.
Arduino, nhờ vào sự đơn giản và dễ tiếp cận, đã trở thành nền tảng phổ biến cho hàng nghìn dự án và ứng dụng Phần mềm Arduino không chỉ thân thiện với người mới bắt đầu mà còn đủ linh hoạt để phục vụ cho người dùng nâng cao Khác với các bo mạch lập trình trước đây, Arduino không yêu cầu phần cứng riêng biệt để tải mã mới; chỉ cần một cáp USB là đủ Hơn nữa, Arduino IDE sử dụng phiên bản đơn giản của C++, giúp việc học lập trình trở nên dễ dàng hơn.
Nếu bạn muốn tạo ra robot hoặc đèn nháy theo nhạc, hiệu ứng LED trên biển quảng cáo nhưng thiếu thời gian và kiến thức về điện tử, Arduino chính là lựa chọn lý tưởng cho bạn.
Hình 2.1: Các nhà sáng lập ra Arduino
Hiện nay, có nhiều phiên bản Arduino được thiết kế phục vụ cho các mục đích khác nhau tùy thuộc vào nhu cầu của người sử dụng Arduino Nano nổi bật với sự nhỏ gọn và tiện dụng, trong khi Arduino Mega2560 thường được sử dụng cho các dự án phức tạp cần nhiều chân I/O Bên cạnh đó, còn nhiều loại khác như Arduino Uno R3 CH340, Arduino Pro Mino và Arduino Industrial.
Khi nhắc đến mạch Arduino, Arduino Uno là dòng sản phẩm đầu tiên mà nhiều người nghĩ tới Hiện tại, dòng mạch này đã phát triển đến thế hệ thứ 3 (R3) Việc tìm hiểu về Arduino Uno sẽ giúp bạn dễ dàng nắm bắt và lập trình các dòng Arduino khác trong tương lai.
- Các thông số của Arduino Uno R3:
Vi xử lý: Atmega328P Điện áp hoạt động : 5 Volts
Dòng tiêu thụ : khoảng 30mA
Số chân Digital I/O : 14 (với 6 chân là PWM)
Dòng tối đa trên mỗi chân I/O : 30 mA
Dòng ra tối đa (5V) : 500 mA
Dòng ra tối đa (3.3V) : 50 mA
Bộ nhớ flash : 32 KB với 0.5 KB dùng bở bootloader
- Sơ đồ chân của Arduino Uno R3
Hình 2.3: Sơ đồ chân của Arduino Uno R3
Arduino cung cấp nhiều các chân I/O (hay còn gọi là Pin) để ta giao tiếp hay gửi lệnh điều khiển các thiết bị (xem Hình 2.3)
Arduino Uno R3 sở hữu 14 chân digital từ 0 đến 13, cho phép đọc và xuất tín hiệu với điện áp điều khiển từ 0V đến 5V Mỗi chân có dòng vào/ra tối đa 40 mA Đặc biệt, một số chân digital còn hỗ trợ chức năng PWM.
Chân PWM, được đánh dấu bằng dấu ‘~’, cho phép xuất xung PWM với độ phân giải 8 bit, tương ứng với giá trị từ 0 đến 255 Điều này có nghĩa là mức giao động điện áp của chân PWM có thể thay đổi từ 0V đến 5V, trong khi các chân không phải PWM chỉ cho phép chọn giá trị cố định 0V hoặc 5V.
Arduino Uno có 6 chân analog (A0 đến A5) cung cấp độ phân giải tín hiệu 10 bit
Arduino UNO có khả năng đọc giá trị điện áp trong khoảng từ 0V đến 5V với độ phân giải từ 0 đến 1023 Đặc biệt, nó được trang bị hai chân A4 (SDA) và A5 (SCL) để hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.
Chân TXD và RXD trên Arduino Uno là các chân Serial dùng để truyền (TX) và nhận (RX) dữ liệu, cho phép giao tiếp với các thiết bị khác Ngoài việc truyền nhận dữ liệu, hai chân này còn có thể được sử dụng để nạp code cho mạch mà không cần thông qua cổng USB.
2.1.4 Phần mềm lập trình cho Arduino
Mạch Arduino và các mạch dựa trên nền tảng Arduino được lập trình bằng một ngôn ngữ riêng, tương tự như ngôn ngữ C đơn giản, giúp người dùng dễ dàng tiếp cận Để lập trình, gửi lệnh và nhận tín hiệu từ mạch Arduino, người dùng cần sử dụng môi trường lập trình Arduino IDE.
Hình 2.4: Phần mềm lập trình Arduino IDE
Giới thiệu về phần cứng
In this project, we will utilize key components including the Sim 800L module, Arduino Uno R3, humidity sensor, temperature sensor, rain sensor, relay module, LM2596 voltage regulator, circuit breaker, indicator light, and contactor.
2.2.1 Giới thiệu về Mô-đun Sim800L
Mô- đun sim 800L dùng để điều khiển các thiết bị hoặc cảnh báo từ xa thông qua mạng di động như gọi điện, nhắn tin, GPRS (xem Hình 2.5)
Dễ giao tiếp với các họ vi điều khiển như Pic, 8051, AVR, Arduino …
Mô-đun Sim 800L được sử dụng phổ biến trong các ứng dụng như phòng thông minh, ngôi nhà thông minh và IoT Việc điều khiển mô-đun này rất đơn giản nhờ vào bộ lệnh AT, đồng thời nó cũng tiêu thụ điện năng thấp, phù hợp cho các dự án cần sử dụng pin hoặc ắc-quy.
Lưu ý rằng trong quá trình khởi động, module có thể tiêu thụ dòng lên đến 2A và điện áp giao tiếp UART là 2.8V Do đó, cần cung cấp nguồn cho board với đặc tính 4V/2A và chuyển đổi điện áp giao tiếp để đảm bảo module hoạt động hiệu quả nhất.
Chân 12 Điện áp hoạt động 3.7V – 4.2V
Dòng khi hạt động 100mA – 1mA (nên chọn nguồn trên 1A
Dòng ở chế độ chừo 10 mA
TXD : Chân truyền Uart TX
RXD : Chân nhận Uart RX
SPKP, SPKN: Ngõ ra âm thanh, nối với loa
MICP, MICN: Ngõ vào âm thanh, phải gắn thêm Micro để thu âm thanh
Reset : Chân khởi động lại sim800L
RING : Báo có cuộc gọi đến
- Tập lệnh AT điều khiển cuộc gọi
Mô tả: Hiển thị thông tin cuộc gọi đến
Lệnh: ATD[Số_Điện_Thoại];
Mô tả: Lệnh thực hiện cuộc gọi
Mô tả: Lệnh thực hiện kết thúc cuộc gọi, hoặc cúp máy khi có cuộc gọi đến
Mô tả: Lệnh thực hiện chấp nhận khi có cuộc gọi đến
Mô tả: Lệnh đưa SMS về chế độ Text, phải có lệnh này mới gửi nhận tin nhắn dạng Text
Lệnh AT+CMGR =x x là địa chỉ tin nhắn cần đọc
Mô tả: Đọc một tin nhắn vừa gửi đến, lệnh được trả về nội dung tin nhắn, thông tin người gửi, thời gian gửi
Lệnh: AT+CMGDA=”DEL ALL”
Mô tả: Xóa toàn bộ tin nhắn trong các hộp thư
Mô tả: Hiển thị nội dung tin nhắn ngay khi có tin nhắn đến
Sau mỗi lệnh các bạn thường thấy được thực chất nó là hai mã điều khiển tương ứng 0x0D(hexa), tương ứng 0x0A(hexa) [2]
Mạch giảm áp LM2596 là một mô-đun điều chỉnh dòng ra lên đến 3A, sử dụng IC nguồn tích hợp Khi cấp nguồn 9V vào mô-đun, nó có khả năng giảm áp để cung cấp nguồn điện 3A với các mức điện áp như 5V hoặc 3,3V.
Kích thước mạch : 53mmx26mm
Để sử dụng mô-đun, chỉ cần cấp nguồn thô vào chân INPUT + và INPUT –, sau đó nhận nguồn ra từ chân OUTPUT + và OUTPUT – Bạn có thể điều chỉnh điện áp đầu ra bằng cách vặn biến trở trên mô-đun; nếu không thấy thay đổi, hãy thử vặn thêm 10 vòng nữa hoặc ngược lại.
Rơ-le là một loại công tắc (khóa K) đặc biệt, được kích hoạt bằng điện thay vì bằng tay Điều này cho phép rơ-le hoạt động như một công tắc điện tử, với hai trạng thái cơ bản: đóng và mở.
Hình 2.7: Mô-đun Rơ-le
Thời gian tác động: 10ms
Thời gian nhã hãm: 5ms
Nhiệt độ hoạt động: -45 o C đến 75 o C
- Sơ đồ cấu tạo rơ-le
Chân 1 và chân 2: được nối vào cuộn hút, khi có điện vào cuộn hút sẽ hút tiếp điểm chuyển từ vị trí 4 xuống tiếp điểm
Chân 3: đặt điện áp (nếu là loại 12V thì đặt 12V DC vào)
Chân 4 và chân 5: là tiếp điểm (xem Hình 2.8)
Hình 2.8: Sơ đồ cấu tạo Rơ-le
Cảm biến mưa là thiết bị nhận biết giọt nước hoặc lượng mưa, hoạt động như một công tắc Nó bao gồm hai phần chính: đệm cảm biến và mô-đun cảm biến Khi mưa rơi lên bề mặt tấm cảm biến, mô-đun sẽ đọc dữ liệu và chuyển đổi thành đầu ra tương tự hoặc kỹ thuật số Đầu ra của cảm biến này có hai dạng tín hiệu: tương tự (Analog AO) và kỹ thuật số (Digital DO).
Mạch cảm biến mưa hoạt động dựa trên việc so sánh hiệu điện thế của cảm biến ngoài trời với giá trị định trước, có thể điều chỉnh thông qua một biến trở màu xanh Khi có sự thay đổi, mạch sẽ phát ra tín hiệu để đóng hoặc ngắt rơ-le qua chân D0.
Khi thời tiết khô ráo, chân D0 của mô-đun cảm biến duy trì mức cao từ 5V đến 12V Ngược lại, khi có nước xuất hiện trên bề mặt do mưa, đèn LED màu đỏ sẽ bật sáng và chân D0 sẽ giảm xuống mức thấp (0V).
Điện áp hoạt động trong khoảng từ 3-5V
Hoạt động dựa trên nguyên lý: Nước rơi vào board sẽ tạo ra môi trường dẫn điện
Có 2 dạng tín hiệu: Analog (AO) và Digital (DO)
Dạng tín hiệu: TLL, đầu ra 100 mA (có thể sử dụng trực tiếp Rơ-le, còi công suất nhỏ …)
Điều chỉnh độ nhạy bằng biến trở
Sử dụng LM358 để chuyển AO DO
- Cách nối dây Arduino và cảm biến mưa
2.2.5 Cảm biến nhiệt độ DS18B20
Cảm biến nhiệt độ DS18B20d dây mềm là phiên bản chống nước và chống ẩm của cảm biến DS18B20, được sản xuất bởi hãng MAXIM với độ phân giải cao 12bit Thiết bị này sử dụng giao tiếp 1 dây, giúp dễ dàng lập trình và thiết lập Cảm biến còn có chức năng cảnh báo khi nhiệt độ vượt ngưỡng và có thể cấp nguồn từ chân data (parasite power) Mặc dù có thể hoạt động ở nhiệt độ lên đến 125°C, nhưng với cáp bọc PVC, nên hạn chế nhiệt độ dưới 100°C Đây là cảm biến kỹ thuật số, đảm bảo không bị suy hao tín hiệu khi sử dụng với đường dây dài.
Hình 2.10: Cảm biến nhiệt độ
Dải đo nhiệt độ : -55 đến 125 0 C (-57 đến 267 0 F)
Sai số : ± 0.5 0 C khi đo ở dải -10 – 85 0 C
Độ phân giải : Người dùng có thể chọn từ 9 – 12 bits
Chuẩn giao tiếp : 1-wire (1 dây)
Đường kính đầu dò : 6mm
Thời gian chuyển đổi nhiệt độ tối đa 750ms (khi chọn độ phân giải 12 bit)
Có cảnh báo nhiệt khi vượt ngưỡng cho phép và cấp nguồn từ chân data
Mỗi IC có một mã riêng (lưu trên EEPROM của IC) nên có thể giao tiếp nhiều DS18B20 trên cùng 1 dây
Ống thép không gỉ (chấm ẩm, nước) đường kính 6mm, dài 50mm
Cảm biến độ ẩm đất hoạt động với đầu ra ở mức thấp (0V) khi đất khô và mức cao (5V) khi đất đủ nước Độ nhạy của cảm biến có thể được điều chỉnh bằng biến trở Đầu đo của cảm biến được cắm vào đất để phát hiện độ ẩm, và khi độ ẩm đạt ngưỡng thiết lập, đầu ra DO sẽ chuyển từ mức thấp lên mức cao Nhờ vậy, người dùng có thể sử dụng tín hiệu Analog hoặc Digital từ vi điều khiển để đọc giá trị từ cảm biến.
Hình 2.11: Cảm biến độ ẩm
Kích thước PCB : 3cm * 1.6cm
DO : Đầu ra tín hiệu số (0 và 1)
AO : Đầu ra Analog (Tín hiệu tương tự)
Led đỏ báo nguồn vào, Led xanh báo độ ẩm
Khi cấp nguồn, đèn LED báo nguồn sẽ sáng, với mạch có hai đầu ra D0 (Digital Output) và A0 (Analog Output) Ở chân Digital Output, mạch hoạt động bằng cách cài đặt ngưỡng so sánh thông qua biến trở Điện trở của cảm biến tỷ lệ thuận với độ ẩm: độ ẩm cao dẫn đến điện trở cao, từ đó điện áp đầu ra của mạch phân áp cũng tăng theo Khi độ ẩm thay đổi, điện trở cảm biến thay đổi, làm thay đổi điện áp đầu ra vào cổng so sánh trên op-amp Nếu điện áp từ cảm biến chưa vượt ngưỡng, đầu ra D0 sẽ ở mức thấp và LED không sáng; ngược lại, khi điện áp vượt ngưỡng, D0 sẽ ở mức cao và LED sẽ sáng Ở chân Analog Output, tín hiệu điện áp được truyền trực tiếp từ mạch phân áp của cảm biến đến đầu ra A0, phục vụ cho các mục đích đo lường, quan trắc và giám sát.
Hình 2.12: Sơ đồ nguyên lý
Màn hình LCD (Liquid Crystal Display) được ứng dụng rộng rãi trong các vi điều khiển nhờ vào nhiều ưu điểm vượt trội so với các loại hiển thị khác LCD có khả năng hiển thị đa dạng các ký tự, bao gồm chữ, số và ký tự đồ họa, giúp người dùng dễ dàng tích hợp vào mạch ứng dụng thông qua nhiều giao thức giao tiếp khác nhau Hơn nữa, nó tiêu tốn rất ít tài nguyên hệ thống, làm cho nó trở thành lựa chọn lý tưởng cho nhiều dự án công nghệ.
Điện áp hoạt động là 5V
Khoảng cách giữa hai chân kết nối là 0.1 inch tiện dụng khi kết nối với Bereadboard
Tên các chân được ghi ở mặt sau của màn hình LCD hổ trợ việc kết nối, đi dây điện
Có đèn led nền, có thể dùng biến trở hoặc PWM điều chỉnh độ sáng để sử dụng ít điện năng hơn
Có thể điều khiển với 6 dây tín hiệu
Có bộ ký tự được xây dựng hỗ trợ tiếng Anh và tiếng Nhật
- Chức năng của từng chân của LCD 16x2 (xem Hình 2.14)
Chân số 1 – VSS: chân nối đất cho LCD được nối với GND của mạch điều khiển
Chân số 2- VDD: chân cấp nguồn cho LCD, được nối với VCC = 5V của mạch điều khiển
Chân số 3 – VưE: điều chỉnh tương phản của LCD
Chân số 4 – RS: Chân chọn thanh ghi, được nối với logic “0” hoặc logic “1”
Chân số 5 – R/W: chân chọn chế độ đọc/ghi (Read/Write), được nối với logic
Chân số 6 – E (Enable) cho phép các tín hiệu trên bus DB0-DB7 được chấp nhận Các lệnh chỉ có hiệu lực khi nhận được tín hiệu cho phép từ chân này.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào thanh ghi bên trong khi phát hiện một xung (high - to – low transition của tín hiệu chân E
Khi ở chế độ đọc, dữ liệu từ LCD sẽ được xuất ra các chân DB0-DB7 khi phát hiện sự chuyển đổi từ mức thấp sang mức cao (low-to-high transition) tại chân E Dữ liệu này sẽ được giữ lại trên bus cho đến khi chân E trở về mức thấp.
TÍNH TOÁN THIẾT KẾ VÀ CHẾ TẠO MÔ HÌNH
Sơ đồ khối trong hệ thống
Hình 3.1: Sơ đồ khối của hệ thống
Khi cảm biến nhiệt độ và độ ẩm đất ghi nhận giá trị thấp hơn hoặc vượt quá ngưỡng cho phép, vi điều khiển sẽ gửi tín hiệu đến Rơ-le để điều khiển máy bơm Cảm biến mưa giúp kiểm tra mực nước trong hệ thống và phát hiện lỗi Màn hình LCD hiển thị các giá trị từ cảm biến nhiệt độ và độ ẩm trong nhà kính, trong khi điện thoại được sử dụng để giám sát trạng thái và các thông số này Mô-đun 2596 đảm bảo ổn định điện áp cho mô-đun sim800L.
Thiết kế các khối trong hệ thống
Việc tính toán thiết kế là một bước quan trọng không thể thiếu trong bất kỳ đề tài nào, ảnh hưởng lớn đến kết quả cuối cùng Để đạt được hiệu quả tối ưu, mọi thiết bị và linh kiện cần được tính toán một cách kỹ lưỡng.
Theo sơ đồ nguyên lý, nhóm chúng em sẽ thiết kế theo sơ đồ nguyên lý gồm có các phần:
Khối xử lý trung tâm : 1 Arduino Uno R3
Khối cảm biến : cảm biến độ ẩm, cảm biến nhiệt độ, cảm biến mưa
Khối chấp hành : Rơ-le
Khối chuyển đổi : Mô-đun hạ áp LM2596
Khối nguồn : Nguồn 12V lấy từ Adapter
Smartphone : 1 điện thoại thông minh
- Khối xử lý trung tâm : gồm có 1 vi điều khiển được lập trình để (xem Hình 3.2):
Nhận dữ liệu từ các mô-đun cảm biến
Điều khiển hệ thống qua mô-đun sim800L
Hình 3.2: Khối xử lý trung tâm
Cảm biến độ ẩm đất:
Nhóm chúng em đã chọn cảm biến độ ẩm đất E2000115 để đáp ứng yêu cầu thiết kế, nhờ vào ưu điểm nhỏ gọn, giá thành thấp và dễ sử dụng Cảm biến này sẽ được kết nối chân tín hiệu vào A2 của Arduino Uno R3, như thể hiện trong sơ đồ nguyên lý Hình 3.3.
Hình 3.3 Mô-đun cảm biến độ ẩm đất kết nối với Arduino Uno R3
Dựa trên yêu cầu thiết kế, nhóm chúng em đã lựa chọn cảm biến mưa để phát hiện sự tồn tại của nước trong hệ thống Cảm biến này được ưa chuộng nhờ vào giá thành rẻ, kích thước nhỏ gọn và tính dễ sử dụng (xem Hình 3.4).
Hình 3.4: Cảm biến mưa kết nối với Arduino Uno R3
Dựa trên yêu cầu thiết kế, nhóm chúng em cần một cảm biến đo nhiệt độ môi trường và đã nghiên cứu nhiều loại cảm biến như DHT12 và LM35 Cuối cùng, chúng em quyết định chọn cảm biến nhiệt độ DS18B20 vì nó nhỏ gọn, giá thành thấp và dễ sử dụng Cảm biến này được kết nối với chân tín hiệu D9 của Arduino Uno R3 theo sơ đồ nguyên lý.
Hình 3.5: Cảm biến nhiệt độ
Hình 3.6: Cảm biến nhiệt độ kết nối với Arduino Uno R3
Dựa trên yêu cầu thiết kế, nhóm chúng em cần một thiết bị có khả năng hiển thị nhiệt độ và độ ẩm của đất Để đáp ứng yêu cầu này, chúng em đã quyết định sử dụng màn hình LCD 16x2, vì đây là lựa chọn tối ưu với đủ số dòng cần thiết và được hỗ trợ bởi thư viện giao tiếp.
Trong sơ đồ nguyên lý (xem Hình 3.7) thì LCD được kết nối 2 chân SCL và SDA vào chân A4 và A5 của Arduino Uno R3 để truyền dữ liệu qua giao thức I2C
Hình 3.7: LCD kết nối với Arduino Uno R3
Sau khi nhận tín hiệu từ Arduino, thiết bị chấp hành sẽ đóng cắt dòng điện để bảo vệ an toàn cho phần điều khiển, tránh sự cố Để đáp ứng yêu cầu này, chúng tôi chọn rơ-le 12V (xem Hình 3.8) là giải pháp tối ưu, với nhiều ưu điểm như kích thước nhỏ gọn, chi phí thấp và dễ sử dụng.
Hình 3.8: Các chân của Rơ-le
Để cung cấp nguồn cho mô-đun Sim800L, cần hạ áp xuống 4.2V, vì vậy chúng tôi sử dụng mô-đun hạ áp LM2596 để cấp nguồn cho mô-đun này (xem Hình 3.9).
Hình 3.9: Mô-đun hạ áp LM2596
Nguồn cấp cho Arduino Uno R3, Rơ-le 12VDC
Nguồn cấp cho cảm biến nhiệt độ, độ ẩm và LCD lấy từ chân 5V Arduino
Nguồn cấp cho mô-đun Sim800L được cấp từ LM2596 với điện áp 4.2V/2A
Nguồn cấp cho động cơ bơm là 220VAC
Các phần trong hệ thống
Hình 3.10 là hình ảnh mạch in mà chúng em đã thiết kế và vẽ trên phần mềm Altium
Mạch điều khiển nhận giá trị từ cảm biến độ ẩm, nhiệt độ (độ ẩm < 60 % và nhiệt độ >
Khi nhiệt độ đạt 24°C, rơ-le sẽ đóng tiếp điểm cung cấp điện cho Contactor, khiến máy bơm hoạt động và gửi tin nhắn "Máy bơm bật" đến điện thoại Nếu máy bơm hoạt động mà cảm biến mưa không có tín hiệu, hệ thống sẽ gửi tin nhắn "Hệ thống hết nước" đến số điện thoại đã thiết lập và tắt máy bơm Sau khi đọc lại giá trị từ cảm biến nhiệt độ và độ ẩm, nếu độ ẩm vượt quá 70% và nhiệt độ dưới 20°C, mạch điều khiển sẽ gửi tín hiệu đến rơ-le, ngắt điện cho Contactor, tắt máy bơm và gửi tin nhắn "Máy bơm tắt" đến điện thoại Xem Hình 3.11 để hiểu rõ hơn về nguyên lý hoạt động của mạch.
- Các linh kiện có trong mạch
Nguồn : Dùng Apdapter hạ áp 220VAC – 12VDC-2A
Mô-đun hạ áp LM2596 : hạ áp xuống 4.2V-2A
Mô-đun Sim800L : nơi gắn sim trực tiếp và điều khiển qua điện thoại
Rơ-le 12V : Đóng cắt khi nhận tín hiệu điều khiển
Cảm biến mưa : Cảm biến nước từ máy bơm để đưa tín hiệu về Arduino
Arduino Uno R3 là bộ xử lý trung tâm, nhận tín hiệu từ mô-đun Sim800L và các cảm biến, giúp xử lý và truyền tín hiệu để điều khiển rơ-le một cách hiệu quả.
Nguyên lý hoạt động của tủ điện điều khiển dựa trên việc cấp nguồn điện áp định mức cho contactor, tạo ra lực từ hút lõi từ di động, hình thành mạch kín và kích hoạt máy bơm.
Hình 3.13: Sơ đồ hoàn chỉnh
- Nguyên Lý hoạt động của Hình 3.13:
Mô hình hoạt động bằng cách cấp nguồn cho hệ thống với hai nguồn điện: 220V AC từ lưới điện cho mạch động lực và 12V DC từ Adapter cho mạch điều khiển Sau khi khởi động, LCD sẽ hiển thị nhiệt độ và độ ẩm từ cảm biến, đồng thời mô-đun Sim800L gửi tin nhắn "Da san sang" Chế độ hoạt động có thể được chọn bằng công tắc 3 vị trí Trong chế độ tự động, nếu nhiệt độ vượt quá 24°C hoặc độ ẩm dưới 60%, rơ-le sẽ kích hoạt máy bơm Nếu máy bơm hoạt động mà không có cảm biến mưa, hệ thống sẽ gửi tin nhắn "He thong het nuoc" và dừng hoạt động Để khởi động lại, cần bổ sung nước Hệ thống tự động tắt máy bơm khi độ ẩm vượt 70% hoặc nhiệt độ dưới 20°C, và sẽ tiếp tục bơm nếu chưa đạt yêu cầu Khi máy bơm tắt, một tin nhắn "may bom tat" sẽ được gửi.
Khi mạch điều khiển gặp sự cố, người dùng có thể điều khiển mạch động lực bằng cách xoay công tắc 3 vị trí sang chế độ bằng tay Trong chế độ này, máy bơm sẽ tiếp tục hoạt động và bơm nước cho đến khi được tắt.
Hình ảnh sản phẩm thực tế
Những linh kiện có trong mạch điều khiển ở Hình 3.14 gồm:
Hình 3.14: Mạch điều khiển thực tế
- 1 Mô-đun hạ áp LM2596
- 1 Cảm biến độ ẩm đất
Những linh kiện có trong mạch điều khiển ở Hình 3.15 gồm:
Hình 3.15: Mạch động lực thực tế
Hình 3.16 là mô hình thực tế mà chúng em đã hoàn thành
Hình 3.17: Mô hình thực tế
LẬP TRÌNH ĐIỀU KHIỂN
Quy trình công nghệ
Đầu tiên, hệ thống được cấp nguồn điện từ hai nguồn: nguồn 220V AC từ lưới điện để cung cấp cho mạch động lực và nguồn 12V để phục vụ các yêu cầu khác của hệ thống.
DC được cung cấp từ Adapter cho mạch điều khiển, sau khi cấp nguồn, mạch sẽ hoạt động và hiển thị nhiệt độ, độ ẩm trên LCD Mô-đun Sim800L sẽ gửi tin nhắn “Da san sang” để báo hiệu bắt đầu chọn chế độ tự động hoặc bằng tay qua công tắc 3 vị trí Trong chế độ tự động, nếu nhiệt độ > 24°C hoặc độ ẩm < 60%, rơ-le sẽ đóng, cấp điện cho Contactor và máy bơm sẽ hoạt động Nếu máy bơm bật mà cảm biến mưa không tác động, mạch sẽ gửi tin nhắn “He thong het nuoc” và tắt máy bơm Hệ thống sẽ tự động tắt máy bơm khi độ ẩm > 70% hoặc nhiệt độ < 20°C, và khi tắt, sẽ gửi tin nhắn “may bom tat” Nếu chưa đạt điều kiện, máy bơm sẽ tiếp tục hoạt động cho đến khi thỏa mãn yêu cầu.
Khi mạch điều khiển gặp sự cố, người dùng vẫn có thể điều khiển hệ thống bằng chế độ tay Khi chế độ điều khiển tay được chọn, máy bơm sẽ hoạt động liên tục cho đến khi công tắc được xoay về vị trí chính giữa, lúc đó máy bơm sẽ tắt.
Lưu đồ thuật toán
Khi hệ thống được cấp điện, mô-đun sẽ khởi tạo và gửi tin nhắn "Da san sang" đến số điện thoại đã thiết lập Mạch điều khiển sẽ đọc các giá trị từ cảm biến độ ẩm và nhiệt độ, hiển thị trên LCD Ngoài việc xem trên LCD, người dùng có thể gửi tin nhắn "KT" để nhận thông tin về nhiệt độ và độ ẩm hiện tại Hệ thống sẽ kiểm tra để bật máy bơm khi nhiệt độ > 24°C hoặc độ ẩm < 60% Nếu máy bơm đã bật nhưng cảm biến mưa không tác động, mô-đun Sim800L sẽ gửi tin nhắn "He thong het nuoc" và "May bom tat" Nếu cảm biến mưa được tác động, máy bơm sẽ dừng khi nhiệt độ dưới 20°C hoặc độ ẩm trên 70%.
Hình 4.1: Lưu đồ thuật toán
Chương trình điều khiển
Chương trình con cho hệ thống đã sẵn sàng
Chương trình này có nhiệm vụ chính là sẽ gửi một tin nhắn về số điện thoại mà ta đã thiệt lập với nội dung là “Da san sang”
Chương trình về hệ thống đã sẵn sàng void sansang()
{ mySerial.println("AT+CMGS=\"+84357770321\""); delay(500); mySerial.print("Da san sang"); delay(500); mySerial.write(26);
Serial.print("Da gui tin nhan\n");
Chương trình con về việc máy bơm tắt
Chương trình con này có nhiệm vụ là nhắn tin về số điện thoại đã được thiết đặt với nội dung tin nhắn là “May bom da tat”
Chương trình con về máy bơm đã bật void maybomtat()
{ delay(500); mySerial.println("AT+CMGS=\"+84357770321\""); delay(500); mySerial.print("May bom da tat"); delay(500); mySerial.write(26);
Chương trình con về việc máy bơm bị lỗi
Chương trình này sẽ báo đến số điện thoại được thiết đặt với nội dung là “He thong het nuoc”
Chương trình con về máy bơm lỗi
{ delay(500); mySerial.println("AT+CMGS=\"+84357770321\""); delay(500); mySerial.print("He thong het nuoc"); delay(500); mySerial.write(26);
Chương trình con về việc máy bơm đã bật
Chương trình con này sẽ gửi tin nhắn về số điện thoại đã được thiết lập với nội dung là “ May bom da bat”
Chương trình về máy bơm đã bật
{ delay(500); mySerial.println("AT+CMGS=\"+84357770321\""); delay(500); mySerial.print("May bom da bat"); delay(500); mySerial.write(26);
Chương trình con này có nhiệm vụ đọc giá trị từ cảm biến nhiệt độ và độ ẩm, sau đó hiển thị chúng lên màn hình LCD Đối với cảm biến độ ẩm, cần thực hiện tính toán và chuyển đổi giá trị ảo thành giá trị thực để hiển thị chính xác trên LCD Nếu không thực hiện quá trình chuyển đổi, kết quả hiển thị độ ẩm đất sẽ bị ngược.
Chương trình đọc giá trị cảm biến void cambien()
{ sensors.requestTemperatures(); lcd.setCursor(0,0); lcd.print("Nhietdo: "); lcd.setCursor(9,0); nhietdo = sensors.getTempCByIndex(0); lcd.print(sensors.getTempCByIndex(0)); // vì 1 ic nên dùng 0 lcd.write(1); lcd.print("C");
Chúng ta sẽ sử dụng một vòng lặp for để đọc giá trị cảm biến 10 lần, từ đó tính toán giá trị trung bình nhằm đạt được độ chính xác cao nhất.
Để tính giá trị trung bình, sử dụng công thức TBcb=doc_cb/10 Giá trị analog được chuyển đổi thành phần trăm thông qua hàm phantramao = map(TBcb, 0, 1023, 0, 100) Giá trị phần trăm thực được tính bằng cách lấy 100 trừ đi phantramao, tức là phantramthuc = 100 - phantramao, từ đó chuyển đổi điện thế từ khô sang ẩm với biến doam = phantramthuc Cuối cùng, hiển thị giá trị phần trăm thực trên màn hình LCD bằng lệnh lcd.print(phantramthuc) khi phantramthuc nhỏ hơn 100.
} lcd.print('%'); delay (500); doc_cb=0;
Chương trình con về kiểm tra tin nhắn
Chương trình con này kiểm tra tin nhắn đến và phản hồi khi nhận được nội dung "KT", cung cấp thông tin về nhiệt độ và độ ẩm hiện tại của hệ thống Đặc biệt, tin nhắn gửi đi không cần phải viết hoa, vì chương trình đã lập trình để tự động chuyển đổi các ký tự thành chữ hoa Điều này giúp tránh lỗi chính tả, đảm bảo rằng hệ thống sẽ gửi các giá trị cảm biến chính xác về điện thoại.
Chương trình kiểm tra tin nhắn void CheckSMS()
{ incomingByte = mySerial.read(); inputString += incomingByte;
Serial.println(inputString); inputString.toUpperCase(); if (inputString.indexOf("KT") > -1)
The code initiates the process of sending an SMS by first printing a message to the serial monitor It then introduces a delay of 500 milliseconds before sending an AT command to the specified phone number, "+84777967757" Following this, it sends temperature data labeled "Nhiet do" along with the temperature value, formatted to one decimal place, and includes a percentage for humidity labeled "Do am" After another brief delay, the code concludes the message by writing a control character to signify the end of the SMS.
Chương trình chính thì sẽ các nhiệm vụ sau:
Để bật máy bơm, cần đảm bảo nhiệt độ và độ ẩm ở mức quy định, cụ thể là nhiệt độ phải lớn hơn 24°C hoặc độ ẩm phải nhỏ hơn 50% Ngoài ra, máy bơm phải không gặp lỗi và đang ở trạng thái tắt.
Chương trình máy bơm bật: if(((nhietdo>24) || (doam10000) if(!CheckRainSensor() && maybom)
Serial.println("Da tat may bom"); maybom=0; maybomloi();
Hiển thị lên màn hình máy tính các giá trị về độ ẩm, nhiệt độ và trạng thái máy bơm và cảm biến mưa (On hay Off)
Các lệnh hiển thị cho phép chúng ta theo dõi giá trị của cảm biến và trạng thái của máy bơm từ, giúp đánh giá sự ổn định trong hoạt động của chúng Nếu phát hiện phần tử nào hư hỏng hoặc không hoạt động, chúng ta có thể nhanh chóng xác định và tiến hành thay thế hoặc sửa chữa.
Chương trình hiển thị lên màn hình máy tính: cambien();
Serial.print("May bom "); if(digitalRead(12)) Serial.print("ON"); else Serial.print("OFF");
Serial.print("CB mua: "); if(!digitalRead(6)) Serial.print("ON"); else Ser;ial.println("OFF");
OneWire oneWire(ONE_WIRE_BUS);
The code initializes a SoftwareSerial object with transmit and receive pins set to 3 and 2, respectively It defines a relay on pin 12 and a sensor connected to analog pin A2, while also declaring variables for sensor readings, temperature, humidity, and a pump control Key variables include `doc_cb` for sensor data, `TBcb` for threshold values, and `luu` for storing data, with a pump controlled by pin 11 Additionally, it sets up floating-point variables for temperature and humidity measurements, along with integer variables for timing and error handling, ensuring efficient monitoring and control of the system.
String inputString; char incomingByte; void setup()
Serial.println("Initializing "); mySerial.begin(9600);//SIM mySerial.println("AT"); delay(100); updateSerial(); mySerial.println("AT+CMGF=1");
// Configuring TEXT mode updateSerial(); mySerial.println("AT+CNMI=1,2,0,0,0");
// Decides how newly arrived SMS messages should be handled mySerial.println("AT+CMGDA=\"DEL ALL\""); updateSerial();
Serial.println("HE THONG DA SAN SANG!"); sansang(); pinMode (cb, INPUT);
//Tín hiệu vào từ cảm biến pinMode (mua, INPUT); pinMode (relay, OUTPUT);
//Tín hiệu xuất ra từ relay digitalWrite (relay, LOW); lcd.init(); // khoi tao lcd lcd.backlight(); // bat den lcd lcd.print("Nhiet do: ");
// in ra man nhietdo lcd.createChar( 1,degree) ; lcd.setCursor(0,1);
// thiết lập vị trí con trỏ ở hàng đầu tiên lcd.print("Do am : ");
{ mySerial.println("AT+CMGS=\"+84357770321\""); delay(500); mySerial.print("Da san sang"); delay(500); mySerial.write(26);
Serial.print("Da gui tin nhan\n");
//Forward what Serial received to Software Serial Port
//Forward what Software Serial received to Serial Port
{ delay(500); mySerial.println("AT+CMGS=\"+84357770321\""); delay(500); mySerial.print("May bom da tat"); delay(500); mySerial.write(26);
{ delay(500); mySerial.println("AT+CMGS=\"+84357770321\""); delay(500); mySerial.print("He thong het nuoc"); delay(500); mySerial.write(26);
{ delay(500); mySerial.println("AT+CMGS=\"+84357770321\""); delay(500); mySerial.print("May bom da bat"); delay(500); mySerial.write(26);
{ sensors.requestTemperatures(); lcd.setCursor(0,0); lcd.print("Nhietdo: "); lcd.setCursor(9,0); nhietdo = sensors.getTempCByIndex(0); lcd.print(sensors.getTempCByIndex(0));
// vì 1 ic nên dùng 0 lcd.write(1); lcd.print("C"); for(int i=0;i -1)
The code initiates the process of sending an SMS by printing "Sending SMS " to the serial monitor and then introducing a delay of 500 milliseconds It sends a command to the GSM module to send a message to the specified phone number, "+84357770321" The message includes temperature data formatted as "Nhiet do: [temperature] degreeC" and humidity data formatted as "Do am: [humidity] %" After preparing the message, another delay of 500 milliseconds is introduced before the code sends the SMS by writing a control character (26).
CheckSMS(); if(digitalRead(12)) if((millis()-time1)>10000) if(!CheckRainSensor() && maybom)
Serial.println("Da tat may bom"); maybom=0; maybomloi();
Serial.print("May bom "); if(digitalRead(12)) Serial.print("ON"); else Serial.print("OFF");
Serial.print("CB mua: "); if(!digitalRead(6)) Serial.print("ON"); else Serial.println("OFF"); if(((nhietdo>24) || (doam