TÓM TẮT BÀI TẬP LỚN Đồ án em tìm hiểu về vi điều khiển Arduino Uno dựa trên vi mạch ATmega328P để thực hiện mô hình tưới cây thông qua cảm biến nhiệt độ môi trường DHT11 và cảm biến độ ẩ
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC QUỐC GIA TP HỒ CHÍ
MINH
KHOA ĐIỆN – ĐIỆN TỬ
BÁO CÁO ĐỒ ÁN 1
ĐỀ TÀI: ĐIỀU KHIỂN TƯỚI VÀ THEO DÕI
NHIỆT ĐỘ VƯỜN
Giảng viên hướng dẫn: Nguyễn Khánh Lợi Sinh viên thực tập: Bùi Xuân Sơn
MSSV: 1914940 Lớp: DD19DV06
Thành phố Hồ Chí Minh – 2024
Trang 2GVHD: Thầy Trương Quang Vinh
LỜI CẢM ƠN
Trong quá trình thực hiện bài báo cáo này, em đã nhận được sự hướng dẫn tận tình của Thầy Nguyễn Khánh Lợi Thầy là người đã dẫn dắt và giúp em nắm được những kiến thức nền tảng, kĩ năng cơ bản để thiết kế mạch điện Sự nhiệt tình trong việc truyền đạt kiến thức và hướng dẫn của thầy trong quá trình học tập và nghiên cứu đã tạo động lực để
em hoàn thành đồ án này
Em xin gửi lời cảm ơn sâu sắc nhất đến thầy Nguyễn Khánh Lợi đã giúp em hoàn thành tốt bài báo cáo này
Cuối cùng, bài báo cáo này tuy được biên soạn với nhiều công sức nhưng chắc chắn vẫn có những thiếu sót cần phải cải tiến Rất mong nhận được sự góp ý của thầy để bài báo cáo có thể hoàn thiện hơn
Xin trân trọng cảm ơn Thầy
Tp Hồ Chí Minh, ngày 25 tháng 05 năm 2024.
Trang 3
TÓM TẮT BÀI TẬP LỚN
Đồ án em tìm hiểu về vi điều khiển Arduino Uno dựa trên vi mạch ATmega328P để thực hiện mô hình tưới cây thông qua cảm biến nhiệt độ môi trường DHT11 và cảm biến
độ ẩm đất bằng điện dung, thông số và các chế độ vận hành được lập trình và cài đặt thông qua màn hình LCD1602 giao tiếp với vi xữ Sau đó dùng 1 module Relay kết nối với máy bơm thông qua chân trên MCU để thực hiện viêc tưới cây Em thiết kế 1 board mạch nhỏ dễ gắn và không chiếm không gian Sản phẩm làm ra sẽ đạt được các chức năng cơ bản và tiêu chí đã nêu ra, đồng thời tạo bước đệm cho nhóm chúng em có hướng phát triển và cải thiện sản phẩm có nhiều tính năng hơn, hoạt động tốt hơn và hoàn thiện hơn trong tương lai
Trang 4MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU 3
1.1 Tổng quan đề tài 3
1.2 Nhiệm vụ đề tài 3
CHƯƠNG 2: LÝ THUYẾT 4
2.1 Cấu trúc của bộ kit Arduino Uno R3 4
2.2 Thiết kế và thực hiện phần cứng 5
2.3 Thiết kế và thực hiện phần mềm 9
2.4 Kết quả thực hiện 14
2.5 Kết luận và hướng phát triển 15
2.5.1 Kết luận 15
2.5.2 Hướng phát triển 15
TÀI LIỆU THAM KHẢO 16
Trang 5CHƯƠNG 1: GIỚI THIỆU 1.1 Tổng quan đề tài
Hiện nay để tiết kiệm thời gian cho việc chăm sóc vườn chung ta có thể ứng dụng hệ thống nhúng để tự động hóa quá trình này Hệ thống điều khiển tưới và theo dõi nhiệt độ vườn bằng kit ATmega328P Lý do chọn kit ATmega328P là vì dòng vi điều khiển này đang khá là phổ biến ở Việt Nam với giá thành rẻ, tốc độ xử lý cao Dùng Ardiuno Uno
để thông qua đó giao tiếp với các linh kiện điện tử như mô đun cảm biến nhiệt độ DHT11, cảm biến đo độ ẩm đất bằng điện dung V1.2 để đo độ ẩm cho đất, 1 màn hình LCD 1602 để hiện vừa đủ thông tin cần thiết và giao tiếp các mode tùy ý thông qua màn hình LCD và nút nhấn Cuối cùng là giao tiếp với máy bơm thông qua Relay để có thể tùy ý tắt mở máy bơm theo ý muốn
1.2 Nhiệm vụ đề tài
Yêu cầu: theo dõi nhiệt độ, độ ẩm không khí và độ ẩm đất hiển thị giá trị lên LCD, điều khiển máy bơm ở hai chế độ tự động và thủ công
- Tự động: Khi nhiệt độ, độ ẩm đất vượt qua khỏi một giá trị cụ thể được cài đặt trước thì máy bơm sẽ hoạt động trong khoảng thời gian nhất định, tránh tình trạng tưới quá lâu gây hao phí nước
- Thủ công: Máy bơm sẽ được điều khiển bằng một nút nhấn, máy bơm hoạt động thủ công tùy theo ý muốn của người sử dụng
Trang 6CHƯƠNG 2: LÝ THUYẾT
2.1 Cấu trúc của bộ kit Arduino Uno R3
Hình 2.1: Cấu trúc Arduino Uno R3
Arduino Uno R3 có tổng cộng 20 chân GPIO (General Purpose Input/Output), trong đó bao gồm các chân số (digital pins), các chân PWM (Pulse Width Modulation), và các chân analog Dưới đây là danh sách các chân của Arduino Uno R3:
- Chân nguồn và đất:
5V: Nguồn 5V
3.3V: Nguồn 3.3V
GND: Đất (Ground)
- Chân số (Digital Pins):
D0 - D13: Các chân số từ 0 đến 13 Chú ý rằng chân D0 và D1 cũng được sử dụng cho giao tiếp serial (TX và RX)
- Chân PWM (Pulse Width Modulation):
- D3, D5, D6, D9, D10, D11: Các chân PWM có thể tạo ra tín hiệu PWM để điều khiển độ sáng của đèn LED, tốc độ của động cơ servo, và nhiều ứng dụng khác
- Chân analog:
- A0 - A5: Các chân analog từ A0 đến A5 Arduino Uno có 6 chân analog có thể được sử dụng để đọc giá trị từ các cảm biến analog hoặc điều chỉnh đầu ra analog
Trang 7- Chân khác:
Vin: Đây là nguồn cung cấp ngoài, thường được sử dụng khi bạn cần cấp nguồn
từ một nguồn ngoài (thường là từ một pin DC hoặc một nguồn điện khác)
AREF: Đây là chân tham chiếu analog, thường được sử dụng khi bạn cần đọc giá trị analog với một tham chiếu tùy chỉnh
Reset: Chân này được sử dụng để reset board Arduino
Chân của Arduino Uno R3 được sắp xếp và gắn nhãn một cách rõ ràng, giúp người dùng dễ dàng kết nối và sử dụng cho các dự án khác nhau
- Ứng dụng: Những tính năng này làm cho vi điều khiển Arduino Uno R3 thích hợp cho một loạt các ứng dụng như điều khiển động cơ, kiểm soát các ứng dụng nâng cao, thiết bị
y tế và thiết bị cầm tay, máy tính và thiết bị ngoại vi chơi game, GPS, ứng dụng công nghiệp, PLC, biến tần, máy in, máy quét, hệ thống báo động, hệ thống liên lạc video, và HVACs
2.2 Thiết kế và thực hiện phần cứng
Yêu cầu thiết kế
o Cảm biến nhiệt độ, độ ẩm không khí, độ ẩm đất tầm hoạt động trong khoảng nhiệt độ
từ 0 – 500C, độ ẩm từ 20 – 90%
o Công suất hệ thống điều khiển thấp dưới 5W Tuổi thọ trên 5 năm
Phân tích thiết kế
o Phương án 1:
Thành phần phần cứng Thông số kỹ thuật
DHT11
Điện áp hoạt động: 3.3 -5 VDC
Dòng sử dụng: 2.5mA max (khi truyền dữ liệu)
Đo tốt ở nhiệt độ: 0-50°C, sai số ± 2°C
Đo tốt ở độ ẩm: 20-90%RH, sai số 5%
Soil Moisture sensor v1.2
Điện áp hoạt động: 3.3~5.5VDC
Điện cực phủ sơn chống ăn mòn cho độ bền và độ ổn định cao
Điện áp xuất ra chân Analog: 0~3VDC
Chuẩn giắc cắm: PH2.54-3P
Trang 8LCD 16x02 Điện áp hoạt động: 3.3V.
Hoạt động ở nhiệt độ -20 đến 70°C
Ưu điểm:
- Giá thành dễ tiếp cận (dòng F1 chi có giá dao động trong khoảng 60 đến 80 nghìn đồng), có hỗ trợ nhiều tài liệu, thông dụng với các mô hình nhỏ, công suất tiêu thụ thấp
- Nhiều chân giao tiếp, giao tiếp với nhiều chuẩn thông dụng
- Bộ nhớ vừa đủ dùng trong các ứng dụng học tập, lập trình
- sử dụng Arduino IDE (Integrated Development Environment), một phần mềm miễn phí và mã nguồn mở được phát triển bởi Arduino.cc Arduino IDE cung cấp một giao diện đơn giản và dễ
sử dụng để viết, biên dịch và tải chương trình vào board Arduino
Khuyết điểm:
- Độ chính xác của cảm biến nhiệt độ độ ẩm môi trường không cao (sai số lớn)
- Thang đo phần trăm độ ẩm đất do người lập trình tự thiết kế, không thể hiện sự chính xác khi so với thiết bị của nhà sản xuất khác
o Phương án 2:
Thành phần phần cứng Thông số kỹ thuật
DHT22
Điện áp hoạt động: 3.3-6VDC
Dòng sử dụng: 2.5mA max (khi truyền dữ liệu)
Đo tốt ở nhiệt độ: -40-80°C, sai số
± 0.5 °C
Đo tốt ở độ ẩm: 0-100%RH, sai số 2-5%
Tín hiệu có thể truyền tối đa 20m Cảm biến độ ẩm đất đầu dò chống ăn mòn Điện áp hoạt động: 3.3~12VDC
Tích hợp đầu dò chống ăn mòn cho độ bền và độ ổn định cao
Tín hiệu đầu ra:
Trang 9Analog: theo điện áp cấp nguồn tương ứng
Digital: High hoặc Low, có thể điều chỉnh độ ẩm mong muốn bằng biến trở thông qua mạch so sánh LM393 tích hợp
Chiều dài dây cảm biến: 1m
Hoạt động ở nhiệt độ -20 đến 70°C
Ưu điểm:
- Độ chính xác cao, công suất tiêu thụ thấp, hoạt động tốt ở những điều kiện khắc nghiệt hơn yêu cầu
- Độ bền tốt hơn, có thể sử dụng liên tục trong thời gian dài
Khuyết điểm
- Giá thành đắt gấp 2, 3 lần phương án 1
Lựa chọn phương án 1 sẽ cho độ chính xác cao phù hợp với yêu cầu của đề tài
Sơ đồ khối:
Hình 2.2: Sơ đồ khối
Tính toán và vẽ sơ đồ mạch chi tiết:
Trang 10Hình 2.3 : Sơ đồ mạch chi tiết trên proteus.
Trang 11 Sơ đồ mach in PCB :
Hình 2.4: Sơ đồ mạch in PCB
2.3 Thiết kế và thực hiện phần mềm
Yêu cầu đặt ra cho phần mềm
o Có khả năng đọc dữ liệu từ cảm biến và hiển thị lên màn hình LCD
o Hiển thị được các chế độ vận hành thông qua LCD và nút nhấn
o Thiết lập ngưỡng độ ẩm đất để điều khiển bơm tùy theo mong muốn người sử dụng
Phân tích
o Yêu cầu 1: Khả năng đọc dữ liệu từ cảm biến và hiển thị lên màn LCD
Đối với DHT11: sử dụng thư viện có sẵn để đọc dữ liệu từ cảm biến, dữ liệu được chuyển lên màn hình LCD
Đối với cảm biến đo độ ẩm đất bằng điện dung: dữ liệu đưa vào từ cảm biến là dữ liệu analog, chuyển analog thành dữ liệu xử lí được, sau đó chuyển thành thang đo phần trăm
và xuất ra màn hình LCD
Trang 12o Yêu cầu 2,3: Điều chỉnh các giá trị ngưỡng nhờ vào các nút bấm, từ đó điều chỉnh hành vi của máy bơm và hiển thị trạng thái ra LCD
Vẽ sơ đồ giải thuật chi tiết và giải thích
Hình 2.5: Sơ đồ giải thuật
Giải thích:
o Hiển thị được các chế độ vận hành thông qua LCD và nút nhấn và thiết lập ngưỡng độ
ẩm đất để điều khiển bơm tỳ theo mong muốn người sử dụng
Khi mới khởi động chương trình, hệ thống vào mode 0 Bơm được tắt Các thông số được hiển thị lên LCD Hệ thống tiến hành kiểm tra độ ẩm đất Nếu:
- Độ ẩm đất > S: tắt máy bơm
- Độ ẩm đất < S: tiến hành kiểm tra nhiệt độ Nếu nhiệt độ > T thì bật máy bơm Ngược lại thì tắt máy bơm
Trang 13 Khi ấn nút Mode button, hệ thống chuyển sang chế độ cài đặt (Mode 1)
Hệ thống sẽ đọc trạng thái các nút nhấ n và thực hiện như sau:
- Nút tăng/ giảm Nhiệt độ dùng để tăng/ giảm giá trị nhiệt độ T Sau khi điều chỉnh được giá trị mong muốn thì nhấn xác nhận, để lưu và trở về Mode 0
- Nút tăng/ giảm Độ ẩm dùng để tăng / giảm giá trị độ ẩm S Sau khi điều chỉnh được giá trị mong muốn thì nhấn xác nhận, để lưu và trở về Mode 0
Code chương trình
#include "DHT.h"
#define DHTPIN
#define DHTTYPE DHT11
DHT dht ( DHTPIN, DHTTYPE ) ;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd ( 0x 27 , 16 , 2 ; // set the LCD address to 0x27 for
a 16 chars and 2 line display
const int NB1 = 2
const int NB2 = 3
const int NB3 = 4
const int NB4 = 5
const int NB5 = 6
const int NB6 = 7
const int Relay = 9
int Mode = 0 , NDD = 30 , DADT = 0 , DADD = 50 ;
Trang 14unsigned long lastDebounceTime [ ] = { 0 , 0 , 0 , 0 , 0 , 0 ; // Debounce time for each button
const unsigned long debounceDelay = 50 ; // Debounce delay time
void setup ()
lcd init () ;
lcd backlight () ;
dht begin () ;
pinMode ( NB1, INPUT_PULLUP ) ;
pinMode ( NB2, INPUT_PULLUP ) ;
pinMode ( NB3, INPUT_PULLUP ) ;
pinMode ( NB4, INPUT_PULLUP ) ;
pinMode ( NB5, INPUT_PULLUP ) ;
pinMode ( NB6, INPUT_PULLUP ) ;
pinMode ( Relay, OUTPUT ) ;
}
void loop () {
float t = dht readTemperature () ;
DADT = map ( analogRead ( A0 ) , 0 , 1023 , 100 , 0 ;
checkButton ( NB1, 0 , toggleMode ) ;
if Mode == 0
if t > NDD + 0.5 )
if DADT < DADD + 0.5 ) {
digitalWrite ( Relay, HIGH ) ;
Trang 15} else
digitalWrite ( Relay, LOW )
}
} else
digitalWrite ( Relay, LOW )
}
displayData ( t, NDD, DADT, DADD ) ;
} else
lcd setCursor ( 0 , 0 )
lcd print ( "NDD:" )
lcd setCursor ( 4 , 0 )
lcd print ( NDD ) ;
lcd setCursor ( 8 , 0 )
lcd print ( "DADD:" ) ;
lcd setCursor ( 13 , 0 ;
lcd print ( DADD )
checkButton ( NB2, 1 , decrementNDD ) ;
checkButton ( NB3, 2 , incrementNDD ) ;
checkButton ( NB4, 3 , decrementDADD )
checkButton ( NB5, 4 , incrementDADD )
checkButton ( NB6, 5 , saveSettings ) ;
}
}
void toggleMode () {
Mode = !Mode;
lcd clear () ;
Trang 16void decrementNDD () {
NDD ;
if NDD <= 20 )
NDD = 40 ;
}
}
void incrementNDD () {
NDD++;
if NDD > 45 ) {
NDD = 20 ;
}
}
void decrementDADD ()
DADD ;
if DADD <= 20 ) {
DADD = 40 ;
}
}
void incrementDADD ()
DADD++;
}
Trang 17void saveSettings () {
lcd setCursor ( 2 , 1 )
lcd print ( " > DaLuu < " )
}
void checkButton ( int pin , int index , void * action)())
int reading = digitalRead ( pin )
if reading == LOW && ( millis () - lastDebounceTime [index] ) >
debounceDelay )
lastDebounceTime [index] = millis () ;
while ( digitalRead ( pin ) == LOW ) {}
action () ;
}
}
void displayData ( float , int NDD , int DADT , int DADD)
lcd setCursor ( 0 , 0 )
lcd print ( "NDT:" )
lcd setCursor ( 4 , 0 )
lcd print ( t, 0 )
lcd setCursor ( 0 , 1 )
lcd print ( "NDD:" )
lcd setCursor ( 4 , 1 )
lcd print ( NDD ) ;
lcd setCursor ( 8 , 0 )
lcd print ( "DADT:" ) ;
lcd setCursor ( 13 , 0 ;
lcd print ( DADT )
lcd setCursor ( 8 , 1 )
Trang 18lcd print ( "DADD:" ) ;
lcd setCursor ( 13 , 1 ;
lcd print ( DADD )
2.4 Kết quả thực hiện
Trong phần này, sinh viên mô tả:
Trình bày cách thức đo đạc, thử nghiệm
- Dùng cảm biến nhiệt độ, độ ẩm DHT11 để đo nhiệt độ, độ ẩm môi trường và so sánh với thông số có sẵn (google, máy điều hòa trong phòng, )
- Dùng cảm biến độ ẩm đất bằng điện dung để đo độ ẩm Dữ liệu xuất ra là tín hiệu điện
áp, từ đó xác định điện áp khi khô và khi hoàn toàn là nước để nhận lại được giá trị điện
áp tương ứng Từ đó quy chuẩn ra thang đo phần trăm để xuất ra màn hình LCD cũng như cài đặt thông số setup
Trình bày số liệu đo đạc
Trang 19Hình 2.6: Kết quả thi công
2.5 Kết luận và hướng phát triển
2.5.1 Kết luận
Ưu điểm:
- Mạch chạy hoàn chỉnh, chạy đúng các thông số đã cài đặt
- Giá thành của hệ thống tương đối rẻ, phù hợp để lắp đặt trong nhà
- Hiển thị đúng các giá trị như nhiệt độ, độ ẩm môi trường, độ ẩm đất bằng điện dung lên LCD
Khuyết điểm:
- Do phần cứng được lắp đặt trên breadboard nên độ ổn định chưa cao.
- Cảm biến có độ sai số lớn nên độ chính xác vẫn chưa cao
- Mạch hoạt động với máy bơm công suất nhỏ nên chỉ mang tính tương đối
2.5.2 Hướng phát triển
- Thiết lập thêm một chế độ vận hành thủ công bằng tay để tưới cây mà không cần phải thông qua độ ẩm hay nhiệt độ môi trường
- Mở rộng mô hình tưới tiêu bằng nhiều máy bơm và máy bơm công suất lớn để áp dụng lên thực tế, tạo thành 1 sản phẩm hoàn chỉnh có thể đưa vào thương mại
- Viết một ứng dụng nhỏ trên điện thoại, sau đó dùng mạch WIFI để giao tiếp với hệ thống, sau đó chuyển dữ liệu lên ứng dụng trên điện thoại và cài đặt thông số cũng như
có thể quan sát và theo dõi dữ liệu từ vườn cây từ xa
Trang 20TÀI LIỆU THAM KHẢO
1 Michael McRoberts (2010) Beginning Arduino.Seed Studio