Hệ thống tưới cây tự động là một công nghệ đang được áp dụng rộng rãi trong lĩnh vực nông nghiệp.. Ngoài ra, hệ thống tưới cây tự động cũng được ứng dụng trong các ứng dụng khác như tưới
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐHQG HÀ NỘI
NGÀNH CN KỸ THUẬT CƠ ĐIỆN TỬ
-o0o -BÁO CÁO ĐỀ TÀI
LẬP TRÌNH NÂNG CAO
Nhóm 5
Đề tài: Hệ thống chăm sóc và theo dõi quá trình
sinh trưởng cây cà chua bi
Giảng Viên: Nguyễn Quang Nhã
Sinh viên : Kiều Văn Tiến – 20021195
Đoàn Trung Nghĩa – 20021170 Bùi Tá Phong - 20021174
Hà Nội, tháng 4, năm 2023
Trang 2Lời nói đầu
Chúng ta đang sống trong thời đại 4.0, thời đại của công nghiệp hoá, hiện đại hoá với mục tiêu là biến quá trình sản xuất mà trước kia ta phải làm thủ công thành một dây chuyền tự động Tự động hoá không chỉ trong công nghiệp mà nó còn được ứng dụng mạnh mẽ trong nhiều lĩnh vực khác như nông nghiệp, dịch vụ,… Hệ thống tưới cây tự động là một công nghệ đang được áp dụng rộng rãi trong lĩnh vực nông nghiệp Đây
là một phương tiện hiệu quả để cung cấp nước và chất dinh dưỡng cho cây trồng một cách tự động và hiệu quả hơn so với phương pháp tưới nước thủ công truyền thống.
Hệ thống tưới cây tự động có nhiều lợi ích như giảm chi phí, tiết kiệm thời gian và nước, tăng năng suất và chất lượng sản phẩm, cải thiện môi trường Ngoài ra, hệ thống tưới cây tự động cũng được ứng dụng trong các ứng dụng khác như tưới nước cho các công viên, khu đô thị và các bảo tàng vườn quốc gia.
Trong bài viết này, chúng ta sẽ tìm hiểu thêm về hệ thống tưới cây tự động, cách thức hoạt động, các thành phần và lợi ích của nó Hy vọng những thông tin này sẽ giúp mọi người hiểu rõ hơn về hệ thống tưới cây
tự động cũng như áp dụng công nghệ này một cách hiệu quả trong công việc của mình.
Trang 3Mục Lục CHƯƠNG I : Tổng Quan Về Hệ Thống Chăm Sóc và Theo dõi Quá Trình
sinh Trưởng của cây cà chua bi
Giới Thiệu Tính Năng Hệ Thống
Khả năng ứng dụng trong thực tế của để tài
CHƯƠNG II : Phân tích công nghệ hệ thống
Giới thiệu linh kiện và cảm biến
Phân tích quy trình thực hiện
CHƯƠNG III : Thiết kế, chế tạo và lập trình điều khiển hệ thống
Sơ đồ hệ thống
Sơ đồ thuật toán
Nguyên Lý Hoạt Động
CHƯƠNG IV : Thiết kế giao diện điều khiển giám sát
Trình tự các bước, thao tác chính thiết kế hệ thống
Vận hành giao diện điều khiển giám sát
CHƯƠNG V : Kết Luận và Kiến Nghị
Phụ Lục
Tài Liệu Tham Khảo
Trang 4CHƯƠNG I
Tổng quan về hệ thống thăm sóc và theo dõi quá trình sinh
trưởng của cây cà chua bi
1.1 Giới thiệu tính năng hệ thống
Hệ Thống chăm sóc và theo dõi quá trình sinh trưởng của cây cà chua bi do nhóm tự thiết kế và phát triển, dựa trên các linh kiện như Raspberry pi 3, Esp32, Module Sim 800I, cảm biến ánh sáng
Hệ thống được thiết kế dựa trên ý tưởng của 1 hệ thống có khả năng dựa vào độ
ẩm không khí, đất; nhiệt độ trong không khí; cường độ ánh sáng; từ đó hệ thống sẽ
tự động đưa ra các phương pháp tưới nước hợp lý Trước khi xử lý tình huống, hệ thống sẽ sao lưu kết quả đo đạc và gửi lên web và gmail
Hình 1.1 Tổng quan thiết bị
1.2 Khả năng ứng dụng trong thực tế của đề tài
Trong thực tế, việc môi trường đang thay đổi thời tiết ngày một khó lường thì việc có 1 hệ thống có khả năng thay thế con người trong việc theo dõi thời tiết, thực hiện chăm sóc cây trồng một cách tự động là hoàn toàn cần thiết Người sử dụng hệ thống hoàn toàn có thể chủ động hơn trong việc chăm sóc cây trồng, cùng với đó là đưa ra những phương pháp đáp ứng kịp thời đối với mỗi tình huống đã và
Trang 5đang xảy ra.
Hiện nay, việc chế tạo nên 1 hệ thống có khả năng như trên đã không còn là hiếm,có thể dễ dàng tìm thấy những hệ thống tự động tương tự trên web Nhóm đã chọn đề tài này do nó có khá nhiều ứng dụng thiết thực trong thực tế cũng như đáp ứng được những yêu cầu mà môn học đề ra, cùng với đó là niềm hứng thú khi có thể tự chế tạo nên 1 hệ thống tuy chưa hoàn chỉnh nhưng đã có thể áp dụng trong đời sống.
Trang 7HDMI hỗ trợ phiên bản 1.3/1.4 và Composite RCA (PAL and NTSC) 10/100 BaseT Ethernet socket
Camera interface (CSI), để kết nối với camera
Display interface (DSI): được sử dụng để kết nối Raspberry Pi với màn hình cảm ứng
Khe cắm thẻ microSD: đễ lưu trữ dữ liệu
Micro USB power source
VideoCore IV multimedia/3D graphics core @ 400MHz/300MHz
2.1.2 ESP 32
Hình 2.2 ESP 32
Giới thiệu
ESP32 là một series các vi điều khiển trên một vi mạch giá rẻ, năng lượng thấp
có tích hợp WiFi và dual-mode Bluetooth (tạm dịch: Bluetooth chế độ kép) Dòng ESP32 sử dụng bộ vi xử lý Tensilica Xtensa LX6 có hai biến thể lõi kép và lõi đơn, và bao gồm các công tắc antenna tích hợp, RF balun, bộ khuếch đại công suất,
bộ khuếch đại thu nhiễu thấp, bộ lọc và module quản lý năng lượng.
Thông số kỹ thuật chính
CPU: Xtensa Dual-Core LX6 microprocessor.
Chạy hệ 32 bit
Trang 8Tốc độ xử lý từ 160 MHz đến 240 MHz
ROM: 448 Kb
Tốc độ xung nhịp từ 40 Mhz ÷ 80 Mhz (có thể tùy chỉnh khi lập trình) RAM: 520 Kb SRAM liền chip Trong đó 8 Kb RAM RTC tốc độ cao – 8 Kb RAM RTC tốc độ thấp (dùng ở chế độ DeepSleep).
2 bộ chuyển đổi số sang tương tự (DAC) 8 bit
18 kênh bộ chuyển đổi tương tự sang số (ADC) 12 bit.
2 cổng giao tiếp I²C
3 cổng giao tiếp UART
3 cổng giao tiếp SPI (1 cổng cho chip FLASH )
2 cổng giao tiếp I²S
10 kênh ngõ ra điều chế độ rộng xung (PWM)
Trang 9Cảm biến độ ẩm đất có thể sử dung tưới hoa tự động khi không có người quản
lý khu vườn của bạn hoặc dùng trong những ứng dụng tương tự như trồng cây.
Độ nhạy của cảm biến độ ẩm đất có thể tùy chỉnh được (bằng cách điều chỉnh chiết áp màu xanh trên board mạch) Phần đầu DO được cắm vào đất để phát hiện
độ ẩm của đất, khi độ ầm của đất đạt ngưỡng thiết lập, đầu ra DO sẽ chuyển trạng thái từ mức thấp lên mức cao.
Thông số kỹ thuật
Điện áp làm việc 3.3V ~ 5V
Có lỗ cố định để lắp đặt thuận tiện
PCB có kích thước nhỏ 3.2 x 1.4 cmỗ
Sử dung chip LM393 để so sánh, ổn định làm việc
2.1.4 Cảm biến độ ẩm, nhiệt độ không khí
Hình 2.4 Cảm biến DHT11
Giới thiệu
DHT11 là một cảm biến kỹ thuật số giá rẻ để cảm nhận nhiệt độ và độ ẩm Cảm biến này có thể dễ dàng giao tiếp với bất kỳ bộ vi điều khiển vi nào như Arduino, Raspberry Pi, để đo độ ẩm và nhiệt độ ngay lập tức DHT11 là một cảm biến độ
ẩm tương đối Để đo không khí xung quanh, cảm biến này sử dụng một điện trở nhiệt và một cảm biến độ ẩm điện dung Cảm biến DHT11 bao gồm một phần tử cảm biến độ ẩm điện dung và một điện trở nhiệt để cảm nhận nhiệt độ Tụ điện cảm biến độ ẩm có hai điện cực với chất nền giữ ẩm làm chất điện môi giữa chúng Thay đổi giá trị điện dung xảy ra với sự thay đổi của các mức độ ẩm IC đo, xử lý các giá trị điện trở đã thay đổi này và chuyển chúng thành dạng kỹ thuật số Để đo
Trang 10nhiệt độ, cảm biến này sử dụng một nhiệt điện trở có hệ số nhiệt độ âm, làm giảm giá trị điện trở của nó khi nhiệt độ tăng Để có được giá trị điện trở lớn hơn ngay cả đối với sự thay đổi nhỏ nhất của nhiệt độ, cảm biến này thường được làm bằng gốm bán dẫn hoặc polymer.
Thông số kỹ thuật
Điện áp hoạt động: 3,3 ~ 5V.
Dòng tiêu thụ: max 2,5mA khi truyền dữ liệu.
Dải đo độ ẩm: 20% - 90% RH, sai số ±5%RH.
Dải đo nhiệt độ: 0°C ~ 50°C, sai số ±2°C.
Tần số lấy mẫu tối đa: 1Hz (1 giây 1 lần).
Thông số kỹ thuật chính
Điện áp đầu vào: 6 – 12V ( điện áp khuyên dùng: 9 – 12 V DC – 1A) Dòng điện tiêu thụ: 0.5 – 0.7 A
Trang 11Đường kính động cơ: 27mm
Đường kinh đầu máy bơm: 44mm
Tổng chiều dài máy bơm: 60mm
Lưu lượng bơm: 1,5 – 2L /Min
Chiều dài ống hút giới hạn: 2m
Khả năng đẩy cao: 3m
Phiên bản hiện tại của Arduino Uno R3 đi kèm với giao diện USB, 6 chân đầu vào analog, 14 cổng kỹ thuật số I / O được sử dụng để kết nối với các mạch điện tử, thiết bị bên ngoài Trong đó có 14 cổng I / O, 6 chân đầu ra xung PWM cho phép các nhà thiết kế kiểm soát và điều khiển các thiết bị mạch điện tử ngoại vi một cách trực quan.
Thông số kỹ thuật chính
Trang 12Vi điều khiển: ATmega328P(8bits)
Điện áp hoạt động: 5V
Tần số hoạt động: 16 MHz
Điện áp đầu vào khuyên dùng: 7VDC - 12VDC
Điện áp vào giới hạn: 6-20V DC
Số chân Digital I/O 14 (6 chân hardware PWM)
Số chân Analog 6 (độ phân giải 10bit)
Dòng tối đa trên mỗi chân I/O 30 mA
LCD 2004 sử dụng driver HD44780, có khả năng hiển thị 4 dòng với mỗi dòng
20 ký tự, màn hình có độ bền cao, rất phổ biến, nhiều code mẫu và dễ sử dụng thích hợp cho những người mới học và làm dự án.
Thông số kỹ thuật
Điện áp hoạt động là 5V
Kích thước: 98 x 60 x 13.5 mm
Chữ đen, nền xanh dương/ chữ trắng, nền xanh dương
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
Trang 22Phụ Lục
Code của Raspberry pi 3b
# Khai báo các thư viện thời gian, firebase
Trang 23if ser.in_waiting > 0: # nếu nhận tín hiệu gửi từ arduino
Doamdat = float(ser.readline().decode('utf-8').rstrip()) # đọc dữ liệu từ arduino bỏ các ký tự /n, khoảng trắng và ép về kiểu nguyên
print("Do am dat: " + str(Doamdat))
# tạo dữ liệu trên firebase
dulieu1 = {"DoAmDat": Doam, "NhietDoKhongKhi": Nhietdokk,"Doamcaidat": Doamcaidat} dulieu2 = {"Giay": Giay, "Gio": Gio, "Phut": Phut}
# Khởi tạo dữ liệu trên firebase set liên tục
Trang 24SoftwareSerial serialSIM900(RX_PIN, TX_PIN); // Cài đặt modulsim
const int DHTTYPE = DHT11;
DHT dht(DHTpin, DHTTYPE); // Cảm biến nhiệt độ, độ ẩm không khí
void tinnhan(float nhietdo, float doamkk, float doamdat) { // Thông báo bằng tin nhắn
//Nội dung tin nhắn muốn gửi
//Thiết lập định dạng tin nhắn là ASCII để có thể gửi tin nhắn dạng text
serialSIM900.println("AT+CMGF=1\r\n");
delay(1000); //Cứ mỗi lệnh AT ta cần có thời gian delay để Sim800 thực thi
//Cài đặt số điện thoại muốn gửi tin nhắn đến, và nội dung tin nhắn
void inramanhinh(float temp, float humi, float doamdat) {
lcd.clear(); // Xóa màn hình trước khi hiển thị lại
Trang 25// Tính thời gian tính được ở đơn vị giờ, phút, giây
unsigned long thoigiangiay = thoigianbom / 1000;
unsigned long gio = thoigiangiay / 3600;
unsigned long phut = (thoigiangiay % 3600) / 60;
unsigned long giay = (thoigiangiay % 3600) % 60;
// Tính thời gian tính được ở đơn vị giờ, phút, giây
unsigned long thoigiangiay = thoigianbom / 1000;
unsigned long gio = thoigiangiay / 3600;
unsigned long phut = (thoigiangiay % 3600) / 60;
unsigned long giay = (thoigiangiay % 3600) % 60;
Trang 26// Tính thời gian tính được ở đơn vị giờ, phút, giây
unsigned long thoigiangiay = thoigianbom / 1000;
unsigned long gio = thoigiangiay / 3600;
unsigned long phut = (thoigiangiay % 3600) / 60;
unsigned long giay = (thoigiangiay % 3600) % 60;
dht.begin(); //Khởi động cảm biến
serialSIM900.begin(9600); // Định tốc độ bau với modulsim 800A
float h = dht.readHumidity(); //Đọc độ ẩm không khí
float t = dht.readTemperature(); //Đọc nhiệt độ không khí
float doamdat = map(analogRead(cbdoam), 330, 1020, 100, 0);
float anhsang = analogRead(cbanhsang);
unsigned long thoigianbatdau = 0;
unsigned long thoigianbom = 0;
int doamcaidat1 = 70;
delay(1000);
if (Serial.available() > 0) {
int Chonchedo = Serial.parseInt();
int CdDACD = Serial.parseInt();
lcd.setCursor(0, 3);
Trang 27int tinhieubom = Serial.parseInt();
int tinhieuden = Serial.parseInt();
Trang 28card { background-color: white; box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5); } cards { max-width: 700px; margin: 0 auto; display: grid; grid-gap: 2rem; grid-template-columns:repeat(auto-fit, minmax(320px, 1fr)); }
reading { font-size: 2.8rem; }
timestamp { color: #bebebe; font-size: 1rem; }
card-title{ font-size: 1.2rem; font-weight : bold; }
card.temperature { color: #B10F2E; }
Trang 29transition: 4s;
}
input:checked + slider { background-color: #2196F3; }
input:focus + slider {
box-shadow: 0 0 1px #2196F3; }
input:checked + slider:before { -webkit-transform: translateX(26px); -ms-transform: translateX(26px); transform: translateX(26px); }
/* Rounded sliders */
slider.round {
border-radius: 34px;
Trang 30<p><span style="font-size:30px"> CHỌN CHẾ ĐỘ </span></p>
<p><label>CHẾ ĐỘ TỰ ĐỘNG : </label><button onclick="cdtd()">Auto</button></p> <p><label>CHẾ ĐỘ CÀI ĐẶT : </label><button onclick="cdcd()">Set</button></p>
<p><label>CHẾ ĐỘ THỦ CÔNG : </label><button onclick="cdtc()">Manual</button></p>
<label> HỆ THỐNG ĐANG Ở CHẾ ĐỘ : </label>
<div class="card temperature">
<p class="card-title"><i class="fas fa-thermometer-half"></i> NHIỆT ĐỘ </p><p><spanclass="reading"><span id="t1"></span> °C</span></p><p class="timestamp">Last Reading: <spanid="rt1"></span></p>
</div>
<div class="card humidity">
<p class="card-title"><i class="fas fa-tint"></i> ĐỘ ẨM KHÔNG KHÍ </p><p><spanclass="reading"><span id="h1"></span> %</span></p><p class="timestamp">Last Reading: <spanid="rh1"></span></p>
</div>
Trang 31class="reading"><span id="h2"></span> %</span></p><p class="timestamp">Last Reading: <spanid="rh1"></span></p>
</div>
<div class="card temperature">
<p class="card-title"><i class="fas fa-tint"></i> THỜI GIAN BƠM </p><p><spanclass="reading"><span id="t2"></span></span></p><p class="timestamp">Last Reading: <spanid="rh1"></span></p>
<input type="checkbox" checked id="myCheck1" onclick="myFunction1()">
<span class="slider round"></span>
</label>
<p><span style="font-size:30px"> TRẠNG THÁI BƠM </span><div id="tt3"></div></p> <label class="switch" id="switch1" >
<input type="checkbox" checked id="myCheck2" onclick="myFunction2()">
<span class="slider round"></span>
</label>
<p><span style="font-size:30px"> CẤU HÌNH WIFI ĐO </span></p>
Trang 32<label>PASS1: </label>
<input type="text" id="pass1"><br><br>
<button onclick="sendwifiinfo()"> Send</button>
<script src="https://www.gstatic.com/firebasejs/8.2.9/firebase-app.js"></script> <script src="https://www.gstatic.com/firebasejs/8.2.9/firebase-database.js"></script>
Trang 33var doam = snapshot.val();
var cdgiay = snapshot.val();
document.getElementById("t2").innerHTML = cdgio + " : " + cdphut + " : " + cdgiay ;});
Trang 34});
document.getElementById("tt2").innerHTML = "TẮT"}
db.ref("/tdtt").update({
"bom":0
});
document.getElementById("tt3").innerHTML = "TẮT"}
function cdcd() {
db.ref("/chonchedo").update({