Đo nhiệt độ và độ ẩm hiển thị trên excel
BỘ NÔNG NGHIỆP VÀ PHÁT TRIỂN NÔNG THÔN
HỌC VIỆN NÔNG NGHIỆP VIỆT NAM
KHOA CƠ ĐIỆN
-----o0o-------
Đồ án vi xử lý trong điều khiển
Đề tài : ĐO NHIỆT ĐỘ VÀ ĐỘ ẨM HIỂN THỊ TRÊN
EXCEL
Sinh viên thực hiện :
Lớp :
Nguyễn Văn Tân
576221
Nguyễn Huy Nguyên
576206
K57 - TDHB
Chương 1.Tổng quan về đề tài nghiên cứu
Như chúng ta biết ,nhiệt độ và độ ẩm là những thành phần vật lý rất quan trọng trong cuộc
sống con người. Việc thay đổi nhiệt độ, độ ẩm ảnh hưởng rất nhiều đến sự sinh trưởng và
phát triển của động vật, thực vật và cấu tạo, tính chất vật lý của vật chất. Ví dụ, sự thay đổi
nhiệt độ của 1 chất khí sẽ làm thay đổi thể tích , áp suất của chất khí trong bình. Vì vậy, trong
nghiên cứu khoa học, trong công nghiệp và trong đời sống sinh hoạt, thu thập các thong số
và điều khiển nhiệt độ là điều rất cần thiết. Trong các lò nhiệt, máy điều hoà, máy lạnh hay
cả trong lò, điều khiển nhiệt độ là tính chất quyết định cho sản phẩm ấy. Trong ngành luyện
kim, cần phải đạt đến một nhiệt độ nào đó để kim loại nóng chảy, và cũng cần đạt một nhiệt
độ nào đó để ủ kim loại nhằm đạt được tốt các đặc tính cơ học như độ bền, độ dẻo, độ chống
gỉ sét .Trong ngành thực phẩm, cần duy trì một nhiệt độ nào đó để nướng bánh , đển nấu, để
bảo quản . Việc thay đổi thất thường nhiệt độ, không chỉ gây hư hại đến chính thiết bị đang
hoạt động, còn ảnh hưởng đến quá trình sản xuất, ngay cả trên chính sản phẩm ấy. Trong
ngành nông nghiệp, nhiệt độ và độ ẩm ảnh hưởng trực tiếp đến năng xuất và chất lượng sản
phẩm.
Vì vậy việc điều khiển được nhiệt độ và việc thu thập dữ liệu thời tiết và điều kiện khí hậu tại
chính trang trại của mình để có được một lượng thông tin cần thiết sử dụng trong tương lai.
Giống như công nghệ trồng trọt trong nhà kính của các nước tiến bộ như Israel hay Nhật
Bản, phần lớn yếu tố quyết định vẫn là thông tin.
Chương 2. Giới thiệu đề tài
- Mô hình hệ thống:
Cảm biến DHT22
Arduino UNO R3
Hiển thị lên Excel
Khi cảm biến nhận , đọc tín hiệu từ môi trường sau đó sẽ xử lý tín hiệu và gửi về bộ vi
xử lý ( Arduino UNO R3) , bộ vi xử lý sẽ xử lý tín hiệu sau đó gửi lên máy tính qua
cổng COM và hiển thị lên Excel qua PLX-DAQ.
Linh kiện và thiết bị sử dụng :
- Cảm biến DHT22: có nhiệm vụ cảm biến, đọc giá trị của nhiệt độ , độ ẩm 1 cách chính
xác để đưa tín hiệu về cho Arduino xử lý.
Cảm biến nhiệt độ độ ẩm DHT22 là cảm biến thông dụng tích hợp vừa đo được nhiệt
độ và độ ẩm, độ chính xác khá cao. Giao tiếp với vi điều khiển qua chuẩn giao tiếp 1
dây.
Chân 1 - VDD chân nối nguồn (5V).
Chân 2 - DATA chân dữ liệu vào ra.
Chân 3 - NC
Chân 4 - GND chân nối mass (0V).
Thông số kỹ thuật :
+ Điện áp hoạt động 3.3V – 5.5V.
+ Dải do độ ẩm 0 - 100%.
+ Sai số độ ẩm ±2%.
+ Dải đo nhiệt độ -40 – 80oC.
+ Sai số nhiệt độ ±0.5oC.
+ Tần số lấy mẫu tối đa 0.5Hz ( 2 giây/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''.
Nguyên lý hoạt động :
+ Cấu tạo và thuật toán hoạt động :
Là sự tích hợp gồm 2 cảm biến : cảm biến độ ẩm điện dung và một nhiệt điện trở để đo không
khí xung quanh và cảm biến nhiệt độ có 2 chất liệu kim loại khác nhau, hàn dính một đầu.
Cảm biến độ ẩm điện dung kết hợp một nhiệt điện trở để đo không khí xung quanh, và
đưa ra một tín hiệu kỹ thuật số trên pin dữ liệu.
Cảm biến nhiệt độ có nguyên lý: Nhiệt độ thay đổi cho ra sức điện động thay đổi (mV),
1 đầu gọi là đầu nóng ( hay đầu đo), hai đầu còn lại gọi là đầu lạnh ( hay là đầu chuẩn ). Khi
có sự chênh lệch nhiệt độ giữa đầu nóng và đầu lạnh thì sẽ phát sinh 1 sức điện động V tại
đầu lạnh.
Cảm biến sẽ được kết hợp với 1 mạch riêng xử lý tín hiệu đọc được từ 2 loại cảm biến từ đó
hiệu chỉnh được hệ số bộ nhớ trong chip xử lý của module và chip xử lý sẽ đưa ra các bit tín
hiệu ra các chân tín hiệu của module.
Ví dụ cho thuật toán cẩm biến :
0000 0010 1000 1100 0000 0001 0101 1111 1110 1110
16 bit dữ liệu RH 16 bit T kiểm tra dữ liệu tổng hợp
Ở đây chúng ta chuyển đổi 16 bit dữ liệu RH từ hệ thống nhị phân để hệ thống thập phân,
0000 0010 1000 1100 → 652
hệ thống nhị phân hệ thống thập phân
RH = 652/10 = 65,2% RH RH = 652/10 = 65,2% RH RH = 652/10 = 65,2% RH RH = 652/10
= 65,2% RH
Ở đây chúng ta chuyển đổi dữ liệu 16 bit T từ hệ nhị phân để hệ thống thập phân,
0000 0001 0101 1111 → 351
hệ thống nhị phân hệ thống thập phân
T = 351/10 = 35,1 T = 351/10 = 35,1 T = 351/10 = 35,1 T = 351/10 = 35,1 ℃
Khi bit cao nhất của nhiệt độ là 1, nó có nghĩa là nhiệt độ dưới 0 độ C.
Ví dụ: 1000 0000 0110 0101, T = trừ đi 10,1 ℃
16 bit dữ liệu T
Sum = 0000 0010 + 1000 1100 + 0000 0001 + 0101 1111 = 1110 1110
Kiểm tra-sum Kiểm tra-sum Kiểm tra-sum Kiểm tra-sum = 8 bit cuối của Sum = 1110 1110
Module cảm biến DHT22:
Ngoài ra còn cảm biến DHT11 cũng dùng để đọc, đo nhiệt độ, độ ẩm nhưng tín hiệu không
chính xác và không ổn định bằng DHT22.
- Arduino Uno R3:
Arduino Uno R3 có nhiệm vụ xử lý tín hiệu đưa vào nhận từ cảm biến DHT22 sau đó
đưa lên máy tính qua cổng COM để hiện lên Excel.
Thông số :
Vi điều khiển
ATmega328 họ 8bit
Điện áp hoạt động
5V DC (chỉ được cấp qua cổng USB)
Tần số hoạt động
16 MHz
Dòng tiêu thụ
khoảng 30mA
Điện áp vào khuyên dùng
7-12V DC
Đ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
Dòng ra tối đa (5V)
500 mA
Dòng ra tối đa (3.3V)
50 mA
Bộ nhớ flash
32 KB (ATmega328) với 0.5KB dùng
bởi bootloader
SRAM
2 KB (ATmega328)
EEPROM
1 KB (ATmega328)
Arduino UNO có thể sử dụng 3 vi điều khiển họ 8bit AVR là ATmega8, ATmega168,
ATmega328. Bộ não này có thể xử lí những tác vụ đơn giản như điều khiển đèn LED
nhấp nháy, xử lí tín hiệu cho xe điều khiển từ xa, làm một trạm đo nhiệt độ - độ ẩm và
hiển thị lên màn hình LCD,…
Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn ngoài
với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V. Thường thì cấp nguồn
bằng pin vuông 9V là hợp lí nhất nếu bạn không có sẵn nguồn từ cổng USB. Nếu cấp
nguồn vượt quá ngưỡng giới hạn trên, bạn sẽ làm hỏng Arduino UNO.
GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi bạn dùng các
thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với
nhau.
5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA.
3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA.
Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của
nguồn với chân này và cực âm của nguồn với chân GND.
IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo ở chân
này. Và dĩ nhiên nó luôn là 5V. Mặc dù vậy bạn không được lấy nguồn 5V từ chân này
để sử dụng bởi chức năng của nó không phải là cấp nguồn.
RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc
chân RESET được nối với GND qua 1 điện trở 10KΩ.
Bộ nhớ
Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng:
32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ trong bộ nhớ Flash
của vi điều khiển. Thường thì sẽ có khoảng vài KB trong số này sẽ được dùng cho
bootloader nhưng đừng lo, bạn hiếm khi nào cần quá 20KB bộ nhớ này đâu.
2KB cho SRAM (Static Random Access Memory): giá trị các biến bạn khai báo khi
lập trình sẽ lưu ở đây. Bạn khai báo càng nhiều biến thì càng cần nhiều bộ nhớ RAM.
Tuy vậy, thực sự thì cũng hiếm khi nào bộ nhớ RAM lại trở thành thứ mà bạn phải bận
tâm. Khi mất điện, dữ liệu trên SRAM sẽ bị mất.
1KB cho EEPROM (Electrically Eraseble Programmable Read Only Memory): đây
giống như một chiếc ổ cứng mini – nơi bạn có thể đọc và ghi dữ liệu của mình vào đây
mà không phải lo bị mất khi cúp điện giống như dữ liệu trên SRAM.
Các cổng vào/ra
Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng chỉ có 2 mức điện áp
là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA.
Một số chân digital có các chức năng đặc biệt như sau:
2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX)
dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân
này. Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây. Nếu
không cần giao tiếp Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết
Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với độ phân
giải 8bit (giá trị từ 0 → 2 8-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói
một cách đơn giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến
5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác.
Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngoài các chức năng
thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các
thiết bị khác.
LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút Reset,
bạn sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân này
được người dùng sử dụng, LED sẽ sáng.
Arduino UNO có 6 chân analog để đọc giá trị điện áp trong khoảng 0V → 5V.
Lập trình cho Arduino
Các thiết bị dựa trên nền tảng Arduino được lập trình bằng ngôn riêng.
Nó là “ngôn ngữ Arduino”. Ngôn ngữ Arduino bắt nguồn từ C/C++ phổ biến hiện nay do đó
rất dễ học, dễ hiểu.
Để lập trình cũng như gửi lệnh và nhận tín hiệu từ mạch Arduino, nhóm phát triển dự án này
đã cũng cấp đến cho người dùng một môi trường lập trình Arduino được gọi là Arduino IDE
(Intergrated Development Environment) như hình dưới đây.
Thuật toán của Arduino trong chương trình:
Khi có tín hiệu dạng xung từ cảm biến đến Arduino chip xử lý sẽ nhận tín hiệu và đọc,
gửi thông số nhận được qua cổng COM để hiển thị theo dung chương trình ta viết trên
IDE đã nạp vào. Thạch anh sẽ xử lý tần số nhận, gửi, hiển thị tín hiệu phù hợp với tần
số mà module cảm biến có thể đạt được (cụ thể 2s/lần).
- Phần mềm PLX-DAQ :
PLX-DAQ là một add-on (tiện ích) hữu ích đơn giản giúp giao tiếp dữ liệu giữa cổng
giao tiếp của máy tính với các cell (ô dữ liệu) trong file Excel. Ta có thể ứng dụng addon này để giúp lưu trữ và hiển thị các kết quả do Arduino gửi về dưới dạng các đồ thị
hoặc sơ đồ.
Parallax Data Acquisition cụ (PLX-DAQ) phần mềm là một thêm-Microsoft Excel nó
cung cấp phân tích những dữ liệu thu thập dữ liệu từ thiết bị cảm ứng và thời gian thực
thiết bị giám sát và hiển thị lên Excel.
Trong folder PLX-DAQ đã cài đặt sẽ có 2 shortcuts:
PLX-DAQ Help File sẽ giúp kích hoạt phần trợ giúp vớii tài liệu mô tả chi tiết về addon này. Ở đây, bạn có thể tìm hiểu thêm các cấu trúc lệnh để lập trình cho Arduino.
PLX-DAQ Spreadsheet sẽ giúp mở một file Excel đã nhúng sẵn macro StampDAQ .
Add-on này sẽ kích hoạt cổng giao tiếp & sẵn sàng kế nối dữ liệu. Khi mở file này,
thông thường thì hệ thống bảo vệ máy tính sẽ cảnh báo (tùy mức security đã đặt). Bạn
phải cho phép để sử dụng add-on này.
Khi đã mở file Excel với PLX-DAQ đã được kích hoạt, cửa sổ Data Acquisationfor Excel
như hình dưới đây sẽ xuất hiện:
Bạn cần thực hiện lựa chọn cổng giao tiếp (Port) và tốc độ truyền (Baud) tương ứng với kết
nối của arduino, sau đó kết nối (Connect) để PLX-DAQ bắt đầu thực hiện việc nhận dữ liệu.
Khi hoàn tất, dữ liệu sẽ được cập nhật vào các Cell tương ứng do Arduino định trước trong
Sheet đầu tiên của file Excel.
Thuật toán điều khiển :
Phần mềm PLX-DAQ là phần mềm giúp giao tiếp giữa Arduino và Excel đồng thời
cho phép hiện thời gian thực khi xử lý tín hiệu để theo dõi tốt hơn. Nó như là một
thông dịch lệnh điều khiển cho phép dữ liệu được tải vào một bảng tính Excel.
Về phía Arduino việc sử dụng các Serial.print () và các chức năng khác trên PLX-DAQ
bằng print tương tự hiện trên LCD.
Lệnh : Serial.println("LABEL,Time, …(các thông số muốn hiển thị)… "); trên Arduino
sẽ đưa tín hiệu lên cổng COM.
Việc sử dụng PLX-DAQ để hiển thị sẽ như tạo 1 file excel và thao tác tương tự như 1
file thông thường.
+ Khi bạn mở file chương trình PLX-DAQ lên , nó sẽ tự động mở 1 file Excel và hỏi :
bạn sẽ chạy 1 file Excel lớn qua chương trình PLX-DAQ bạn có muốn mở không ? Khi
đồng ý PLX-DAQ sẽ mở file Excel kèm bảng điều khiển. Vì là phần mềm phát triển
riêng cho Arduino nên nó sẽ có mục chọn các COM kết nối và tần số đọc tín hiệu. Khi
có tín hiệu gửi từ Arduino lên PLX-DAQ sẽ tự động nhận tín hiệu từ cổng COM vừa
chọn và hiển thị vào các cell tương ứng với chương trình trên Aruino đồng thời cập
nhật ngay giá trị thời gian thực tương ứng cho tín hiệu hiển thị và vẽ đồ thị tương ứng
với giá trị và tự cập nhật như 1 file Excel thông thường.
Chương 3. Thiết kế :
Kết nối :
Ta kết nối cảm biến và Arduino như sau :
Data – Chân 12
GND – Chân 11
VCC – Chân 13.
Lưu đồ thuật toán :
Bắt đầu
Khai báo biến
T1, H1, i=0
0
≤
H1 ≤ 100%
S
S
-40ºC ≤ T1 ≤ 80ºC
Đ
Hiển thị lên Excel
Đ
i=i+1
i = 40000
Đ
Kết thúc
Sau 2S
S
S
* Chương trình điều khiển :
#include "DHT.h" // Thư viện cho cảm biến DHT
int DHT1Type = DHT22; // Loại cảm biến DHT22
int DHT1_Data = 12; // Pin Data kết nối với chân 12
int DHT1_GND = 11; // Pin GND kết nối với chân 11
int DHT1_VCC = 13; // Pin VCC kết nối với chân 13
float t1 = 0;
// Các biến dùng để chứa dữ liệu nhiệt độ & độ ẩm
float h1 = 0;
int Count = 0;
// Biến Count dùng để xác định số bộ dữ liệu gửi trong 1 vòng
DHT dht1(DHT1_Data, DHT1Type);
// Khai báo các cảm biến DHT
//
void setup()
{
pinMode(DHT1_GND, OUTPUT);
// Set & connect Pin_GND của DHT1 = GND
digitalWrite(DHT1_GND, LOW);
pinMode(DHT1_VCC, OUTPUT);
// Set & connect Pin_VCC của DHT1 = 5V
digitalWrite(DHT1_VCC, HIGH);
dht1.begin();
// Khởi động cảm biến DHT22
Serial.begin(128000);
Serial.println("CLEARDATA"); // xóa dữ liệu trên sheet đầu tiên của file excel
Serial.println("LABEL,Time,Temp 1 (oC),Humid 1 (%RH)"); // Nhãn (label) cho 3 cột đầu
tiên trên sheet đầu tiên của file excel
}
void loop() {
Count++;
Serial.print("DATA,TIME,"); // Gán giá trị cho cột đầu tiên = thời gian hiện hành
t1 = dht1.readTemperature(); // Đọc nhiệt độ trên DHT1
Serial.print(t1);
// giá trị cho cột thứ 2
Serial.print(",");
// chuyển sang cột tiếp theo
h1 = dht1.readHumidity();
// Đọc độ ẩm tren DHT1
Serial.print(h1);
// giá trị cho cột thứ 3
Serial.print(",");
// chuyển sang cột tiếp theo
if (Count >= 40000) {
chồng lên dữ liệu cũ
// giới hạn số bộ dữ liệu trong 40000 lần gửi, sau đó lặp lại & lưu
Count = 0;
Serial.println("ROW,SET,2"); // Bắt đầu từ Row 2 của sheet Excel
}
delay(2000);
// Quyết định tần suất đọc & gửi dữ liệu
}
Kết quả thực tế:
Chương 4. Kết quả thảo luận
- Mạch chạy tương đối ổn định, chương trình chạy tốt, độ chính xác tương đối cao. Chấp
nhận được so với những gì đặt ra ý tưởng ban đầu.
- Hạn chế :
+ Khả năng và trình độ Excel chưa tốt, còn hiện 2 cột cho giá trị ảo có thể do phiên bản
PLX-DAQ chưa thích hợp với phiên bản Excel hoặc do trình độ xử lý Excel chưa tốt.
- Hướng phát triển và hoàn thiện:
+ Cần kỹ năng xử lý Excel tốt và thành thạo hơn.
+ Có thể phát triển kèm theo bộ điều khiển điều chỉnh nhiệt độ và độ ẩm.
+ Có thể kết hợp kèm hệ thống không dây để phù hợp với thực tế.
Kiến nghị : do chưa có nhiều kinh nghiệm và kiến thức thực tế nên mô hình của em
còn nhiều hạn chế và thiếu sót. Em mong thầy thông cảm và giúp đỡ em.
EM XIN TRÂN THÀNH CẢM ƠN THẦY !