Để giải quyết vấn đề này, nhiều hộ dân đã trồng nấm trongnhà kính, với mục tiêu giám sát và điều khiển được các điều kiện như nhiệt độ, độ ẩm, đất, … góp phần giúp nấm sinh trưởng, phát
Trang 1HỆ THỐNG ĐIỀU KHIỂN VÀ GIÁM SÁT NHIỆT ĐỘ, ĐỘ ẨM TRONG NHÀ NẤM DÙNG VI ĐIỀU KHIỂN ,CÓ CODE
Trang 3DANH MỤC CÁC HÌNH VẼ
Trang 4CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 1.1 Giới thiệu đề tài
Nấm Tâm Trúc là loại nấm quý có nhiều đặc tính chữa bệnh Đây là một loài nấm thường mọc trên đất, dọc bờ ruộng, tên thông dụng là Tâm Trúc hay Nữ Hoàng Năm
2019, việc trồng nấm Tâm Trúc đã đem lại nguồn lợi nhuận khổng lồ cho các người dân Tuy nhiên, hiện nay do biến đổi của thời tiết, khí hậu, môi trường, việc chăm sóc nấm phát triển gặp nhiều khó khăn Để giải quyết vấn đề này, nhiều hộ dân đã trồng nấm trongnhà kính, với mục tiêu giám sát và điều khiển được các điều kiện như nhiệt độ, độ ẩm, đất, … góp phần giúp nấm sinh trưởng, phát triển tốt, ổn định, nâng cao chất lượng nấm
và tăng thêm thu nhập cho người dân Đồ án thiết kế hệ thống giám sát nhiệt độ, độ ẩm qua cảm biến DHT22 truyền qua Vi điều khiển để xử lý Hiển thị trực tiếp trên LCD hoặc
vẽ đồ thị thể hiện sự thay đổi nhiệt độ, độ ẩm trên máy tính qua ứng dụng Visual Studio Đồng thời phát tín hiệu điều khiển quạt và máy phun sương để điều chỉnh nhiệt độ, độ ẩmthích hợp, tạo môi trường tốt cho nấm sinh sôi tốt
1.2 Mục đích nghiên cứu
Dựa theo các kiến thức đã được hướng dẫn về linh kiện và điều khiển, ứng dụng cảm biến DHT22 và cách lập trình Vi điều khiển Arduino Mega 2560, Visual Studio để nhận tín hiệu giám sát và gửi tín hiệu điều khiển Đồng thời xử lý các tín hiệu hiển thị lên LCD
1.3 Đối tượng tìm hiểu
● Cảm biến DHT22
● Vi điều khiển Arduino Mega 2560 và giao tiếp UART
● Phần mềm Microsoft Visual Studio
● LCD và giao tiếp I2C
Trang 51.4 Phạm vi nghiên cứu
Trong phạm vi đồ án, hệ thống phù hợp cho sinh viên ứng dụng các hiểu biết để thiết
kế mô hình điều khiển các thiết bị làm thay đổi nhiệt độ, độ ẩm cho phù hợp với môi trường trồng nấm
Trang 6CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Sơ đồ khối của hệ thống
2.1.1 Cảm biến nhiệt độ độ ẩm DHT22
2.1 Hình ảnh DHT22DHT22 Temperature Humidity Sensorlà cảm biến thông dụng vừa có thể
đo được nhiệt độ, vừa có thể đo được độ ẩm Dễ dàng kết nối và giao tiếp với các loại Vi điều khiển để thực hiện các ứng dụng đo nhiệt độ, độ ẩm môi trường Cảm biến có chất lượng tốt, kích thước nhỏ gọn, độ bền và độ ổn định cao
Thông số kỹ thuật:
• Nguồn sử dụng: 3~5VDC
• Dòng sử dụng: 2.5mA max (khi truyền dữ liệu)
• Đo tốt ở độ ẩm 0-100%RH với sai số 2-5%
• Đo tốt ở nhiệt độ -40 to 80°C sai số ±0.5°C
• Tần số lấy mẫu tối đa 0.5Hz (2 giây 1 lần)
• Kích thước 27mm x 59mm x 13.5mm (1.05" x 2.32" x 0.53")
• 4 chân, khoảng cách chân 0.1''
Trang 72.1.2 Vi điều khiển Arduino Mega 2560
2.2 Hình ảnh Board Aruidno Mega 2560Arduino là một board mạch vi điều khiển được phát triển bởi Arduino.cc Arduino baogồm cả bảng mạch lập trình (thường được gọi là vi điều khiển) và một phần mềm hoặc IDE viết bằng ngôn ngữ C# chạy trên máy tính, được sử dụng để viết và tải mã máy tính lên bo mạch
Khi arduino chưa ra đời, để làm được một dự án điện tử nhỏ liên quan đến lập trình, biên dịch, chúng ta cần đến sự hỗ trợ của các thiết bị biên dịch khác để hỗ trợ Ví dụ như, dùng Vi điều khiển PIC hoặc IC vi điều khiển , chúng ta phải thiết kế chân nạp onboard,hoặc mua các thiết bị hỗ trợ nạp và biên dịch Không giống như hầu hết các bo mạch lập trình trước đây, Arduino không cần phần cứng riêng để tải mã mới lên bo mạch - bạn có thể chỉ cần sử dụng cáp USB
Trang 8Chip điều khiển ATmega1280
Trên mạch Mega các chân digital vẫn từ 0-13, analog từ 0-5 và các chân nguồn tương
tự thiết kế của Uno Do vậy chúng ta có thể nối chân Arduino Mega dựa module Arduino Uno
Trang 102.1.3 Giao tiếp UART
2.4 Minh họa giao tiếp UART giữa 2 linh kiệnUART (hay Universal Asynchronous Receiver Transmitter) là chuẩn giao tiếp nối tiếp với sự hỗ trợ của phần cứng UART là chuẩn giao tiếp đơn giản nhất và được sử dụng nhiều nhất trong các kỹ thuật giao tiếp nối tiếp Ngày nay, UART được sử dụng phổbiến trong các ứng dụng như: GPS, Bluetooth, giao tiếp không dây, …
Cách truyền dữ liệu: Hình bên trên cho thấy kết nối giữa các thành phần trong giaotiếp UART Bộ phận truyền UART sẽ nhận dữ liệu từ vi điều khiển thông qua bus điều khiển và bus dữ liệu Với dữ liệu này, UART sẽ thêm vào Start, Parity và Stop bits theo cầu hình và convert nó thành 1 gói dữ liệu Gói dữ liệu này sẽ được chuyển đổi từ song song sang nối tiếp được lưu dưới các thanh ghi – shift register và truyền đi từng bit một qua chân TX
2.5 Minh họa cách truyền dữ liệu
Trang 11Thiết bị nhận UART sẽ nhận dữ liệu từ chân RX và xác định đâu là dữ liệu thực sau khi loại trừ start và stop bits Parity bit được sử dụng để kiểm tra độ chính xác của dữ liệu Phụ thuộc vào sự chia cắt của start, parity và stop bits từ gói dữ liệu, tất cả dữ liệu sẽđược chuyển từ nối tiếp sang song song và được lưu dưới các thanh ghi – shift register Những dữ liệu song song này sẽ được truyền đến vi điều khiển thông qua data bus.
• Start Bit: Start bit là bit dùng để đồng bộ dữ liệu Đây là bit được thêm vào phía
trước dữ liệu thực tế Start bit đánh dấu nơi bắt đầu của gói dữ liệu Thông trường, trong trạng thái idle, khi không có dữ liệu nào được truyền, mức điện áp trên đường truyền là mức CAO – HIGH (1).Khi bắt đầu truyền dữ liệu, UART truyền
sẽ kéo mức điện áp trên bus từ mức CAO xuống mức THẤP (từ 1 xuống 0) UART nhận sẽ phát hiện được sự thay đổi mức điện áp này và sẽ bắt đầu đọc dữ liệu Thông thường, Start bit chỉ có độ dài 1 bit
• Stop Bit: Như cái tên của nó, Stop Bit đánh dấu việc kết thúc gói dữ liệu Nó có
độ dài 2 bit nhưng thông thường, người ta chỉ sử dụng 1 bit Sau khi kết thúc quá trình truyền dữ liệu, mức điện áp trên bus sẽ được giữ ở mức CAO – HIGH (1)
• Parity Bit: Parity bit giúp cho thiết bị nhận UART xác định được gói dữ liệu nhận
được có chính xác hay không Parity là kiểu kiểm tra sai sót ở low-level bao gồm 2biến: Even Parity và Odd Parity Parity bit là optional và thường ít khi được sử dụng
• Data Bits: Là những bits chứa dữ liệu được gửi từ thiết bị truyền sang thiết bị
nhận Độ dài của gói dữ liệu có thể từ 5 đến 9 bits (9 bits nếu như parity bit không được dùng và chỉ có 8 bits khi parity bit được dùng) Thông thường, LSB (bit có giá trị thấp nhất) là bit được truyền đầu tiên
Ưu điểm và nhược điểm UART
• Những ưu và nhược điểm của UART bao gồm những điều sau đây
• Nó chỉ cần hai dây để truyền dữ liệu
• Tín hiệu CLK là không cần thiết
• Nó bao gồm một bit chẵn lẻ để cho phép kiểm tra lỗi
• Sắp xếp gói dữ liệu có thể được sửa đổi vì cả hai mặt được sắp xếp
Trang 12• Kích thước khung dữ liệu tối đa là 9 bit
• Nó không chứa một số hệ thống phụ (hoặc)
• Tốc độ truyền của UART phải ở mức 10% của nhau
Thông số tốc độ Baudrate: Số bit truyền được trong 1s, ở truyền nhận không đồng bộ thì ở các bên truyền và nhận phải thống nhất Baudrate Các thông số tốc độ Baudrate thường hay sử dụng dể giao tiếp với máy tính là 600, 1200, 2400, 4800, 9600, 14400,
19200, 38400, 56000,57600,115200 Ở đây khi mô phỏng C# ta chọn tốc độ 9600
2.1.4 Microsoft Visual Studio và C#
2.6 Giao diện Microsoft Visual Studio và WinformMicrosoft Visual Studio là một môi trường phát triển tích hợp (IDE) từ Microsoft Nóđược sử dụng để phát triển chương trình máy tính cho Microsoft Windows, cũng như các trang web, các ứng dụng web và các dịch vụ web Visual Studio là hệ thống tập hợp tất cảnhững gì liên quan tới phát triển ứng dụng, bao gồm trình biên tập mã code, trình thiết
kế, gỡ lỗi Visual Studio được viết bằng 2 ngôn ngữ đó chính là C# và VB+
Công cụ này có những đặc điểm như:
Trang 13Ít hao tốn dung lượng
Tính năng phong phú, đa dạng và mạnh mẽ
Phần mềm hỗ trợ nhiều nền tảng khác nhau (Linux, Windows, Mac)
Tương thích với nhiều loại ngôn ngữ (HTML, CSS, C#, F#, C/C++, JSON, JavaScript,
…)
Giao diện Winform thân thiện dễ sử dụng Dễ thêm các nút nhấn và hình ảnh gây ấn tượng mạnh mẽ, dễ hình dung cho người xem
Cập nhật đa dạng phiên bản cho nhiều đối tượng sử dụng khác nhau cho phép người dùng
có thể lựa chọn phiên bản phù hợp với mục đích sử dụng của mình
2.7 C#
C# là một ngôn ngữ lập trình hướng đối tượng được phát triển bởi Microsoft, liên quan đến kế hoạch NET của họ C# cung cấp chức năng để hỗ trợ phát triển phần mềm hiện đại C# thường được dùng cho các nhu cầu phát triển ứng dụng Web, Mobile và ứng dụng Desktop
Đặc điểm:
Trang 14_ C# là ngôn ngữ đa nền tảng
_ Sử dụng ít từ khóa hơn so với các ngôn ngữ khác
_ Là ngôn ngữ an toàn và hiệu quả
_ C Sharp là ngôn ngữ hiện đại, thông dụng với giao diện và cấu trúc ngôn ngữ gần gũi, phổ biến, có cộng đồng hỗ trợ phổ biến
2.1.5 LCD 1602
2.8 Hình ảnh LCD 1602 kèm chú thích các chân
• Hiện giờ, thiết bị hiển thị LCD 1602 (Liquid Crystal Display) được dùng trong rất nhiều các ứng dụng của VĐK LCD 1602 có rất nhiều ưu điểm so với các dạng hiển thị khác như: khả năng hiển thị kí tự đa dạng (kí tự đồ họa, chữ, số, ); đưa vàomạch ứng dụng theo nhiều giao thức giao tiếp khác nhau dễ dàng , tiêu tốn rất ít tàinguyên hệ thống, giá thành rẻ,…
Trang 15Chức năng của từng chân LCD 1602:
5 chân cấp nguồn và điều chỉnh đèn nền
- 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 - VE : điều chỉnh độ tương phản của LCD
- Chân số 15 - A : nguồn dương cho đèn nền
- Chân số 16 - K : nguồn âm cho đèn nền
3 chân điều khiển
- Chân số 4 - RS : chân chọn thanh ghi, được nối với logic "0" hoặc logic "1":
+ Logic “0”: Bus DB0 DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0 - DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD
- Chân số 5 - R/W : chân chọn chế độ đọc/ghi (Read/Write), được nối với logic “0” đểghi hoặc nối với logic “1” đọc
- Chân số 6 - E : chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân này như sau: + Ở 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
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp
8 chân dữ liệu
- Chân số 7 đến 14 - D0 đến D7: 8 đường của bus dữ liệu dùng để trao đổi thông tin với MPU Có 2 chế độ sử dụng 8 đường bus này là: Chế độ 8 bit (dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7) và Chế độ 4 bit (dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7)
Trang 162.1.6 Mạch giao tiếp I2C
2.9 Mạch giao tiếp I2CI2C là tên viết tắt của cụm từ tiếng anh “Inter – Integrated Circuit” Nó là một giao thức giao tiếp được phát triển bởi Philips Semiconductors để truyền dữ liệu giữa một
bộ xử lý trung tâm với nhiều linh kiện trên cùng một board mạch chỉ sử dụng hai đường truyền tín hiệu
Mạch giao tiếp I2C giúp ta tiết kiệm số chân kết nối Chỉ cần kết nối 2 chân (SCL, SDA) thay vì 6 chân vi điều khiển để kết nối với LCD 16×2 (RS, EN, D7, D6, D5 và D4)
Trang 17Module I2C LCD1602 Arduino
Bảng minh họa Kết nối giữa các chân Module I2C và Arduino
2.2 Sơ đồ nguyên lý tổng quát
Khởi động DHT22 thu nhận giá trị Vi điều khiển xử lý tín hiệu
Hiển thị giá trị lên LCD và phần
mềm
Xem xét và điều chỉnh nhiệt độ,
Trang 18CHƯƠNG 3 HOẠT ĐỘNG CỦA HỆ THỐNG
● Nguồn cấp năng lượng cho Vi điều khiển, bơm, quạt, … hoạt động
● Cảm biến DHT22 được kích sẽ đo nhiệt độ, độ ẩm và gửi dữ liệu thông tin
về vi điều khiển
● Arduino gửi dữ liệu hiển thị giá trị trên LCD trực tiếp
● Vi điều khiển gửi tín hiệu cho Visual Studio
● Giá trị sẽ được hiển thị qua Winform và vẽ biểu đồ thể hiện sự thay đổi nhiệt độ, độ ẩm theo thời gian
● Để thay đổi nhiệt độ, độ ẩm cho phù hợp, ta nhấn nút bật quạt, bật bơm trênVisual Studio
● Phần mềm để gửi dữ liệu cho vi điều khiển kích role bật, tắt quạt và bơm
Trang 19Sơ đồ khối của hệ thống
Vi điều khiển
Giao diện Winform, C#
Cảm biến
LCD
Thiết bị:
Bơm,
quạt
Trang 203.1 Chương trình giám sát nhiệt độ, độ ẩm:
Cấp nguồn 5 VDC cho mạch hoạt
độ, độ ẩm theo từng mốc thời gian
Trang 213.2 Lưu đồ điều khiển các thiết bị:
Kết thúc
Tắt nút điều khiển quạt, bơm
Trang 22CHƯƠNG 4: THIẾT KẾ MÔ HÌNH 4.1 Thiết kế giao diện
Trang 234.2 Thi công mô hình
Trang 26CHƯƠNG 5: THỰC NGHIỆM VÀ KẾT LUẬN
Dưới đây là một số kết quả thực nghiệm
Trang 30Kết luận: Mô hình tương đối hoàn chỉnh, đơn giản Các thiết bị và tín hiệu trong phần mềm hệ thống kết nối với nhau ổn định Giao diện trực quan, dễ sử dụng, có thể phát triển thêm
Nhược điểm:
_ Hệ thống còn đơn giản
_ Hệ thống hoạt động còn dễ bị nhiễu do ảnh hưởng môi trường xung quanh
Ưu điểm:
_ Đơn giản, dễ hình dung, gọn nhẹ
_ Giao diện thân thiện, trực quan, dễ sử dụng
_ Đồ thị nhiệt độ, độ ẩm giúp dễ dàng xem sự biến đổi giá trị
_ Dữ liệu từ đồ thị giúp thống kê được sự thay đổi nhiệt độ, độ ẩm dựa theo biến đổi của thời tiết, mùa, và các nguyên nhân khác Từ đó có định hướng phát triển, phòng hộ cho việc nuôi trồng trong tương lai xa
Trang 31string line = serialPort1.ReadLine();
this BeginInvoke( new LineReceivedEvent (xuly), line);
}
private void Form1_Load( object sender, EventArgs e)
{
Trang 32comboBox1.DataSource = SerialPort GetPortNames();
GraphPane mypanne = zedGraphControl1.GraphPane;
mypanne.Title.Text = "Biển Đồ" ;
mypanne.YAxis.Title.Text = "Giá trị" ;
mypanne.XAxis.Title.Text = "Thời gian" ;
RollingPointPairList list1 = new RollingPointPairList (60000);
RollingPointPairList list2 = new RollingPointPairList (60000);
LineItem duongline1 = mypanne.AddCurve( "Nhiệt độ" , list1, Color Red,
LineItem duongline1 = zedGraphControl1.GraphPane.CurveList[0] as LineItem ;
LineItem duongline2 = zedGraphControl1.GraphPane.CurveList[1] as LineItem ;
if (duongline1 == null ) return ;
if (duongline2 == null ) return ;
IPointListEdit list1 = duongline1.Points as IPointListEdit ;
IPointListEdit list2 = duongline2.Points as IPointListEdit ;
if (list1 == null ) return ;
if (list2 == null ) return ;
list1.Add(tong, line1);
Trang 33private delegate void LineReceivedEvent ( string line);
private void xuly( string line)
string [] a = line.Split( '*' ); //tác chuổi trước và sao dấu '*'
string [] b = a[1].Split( '#' ); //tác chuổi trước và sao dấu '#'
Trang 34label2.Text = ( "Chưa kết nối" );
label2.ForeColor = Color Red;
Trang 35label2.ForeColor = Color Blue;
Trang 36}
dem1++; }
}
}
Trang 37const int DHTPIN = A0;
const int DHTTYPE = DHT22; //Khai báo loại cảm biến, kết nối cảm biến
Trang 41Serial.println("1"); lcd.setCursor(5, 1);
if (TT_quat == 1) { lcd.print("ON "); }
else {
lcd.print("OFF"); }
}
}
}