Chức năng DHT22 Pin Pi Pin
GND GND Pin 6
VCC VCC Pin 9
DATA Out Pin 7
Để thực hiện giao tiếp với cảm biến DHT22 qua GPIO của Raspberry Pi, ta sử
dụng thư viện pigpiod_if2. Thuật toán đọc dữ liệu từ cảm biến DHT22 được tham khảo tại đường dẫn: https://abyz.me.uk/rpi/pigpio/code/DHTXXD.zip
Xửlý đo nhiệt độ vật thể
Phát hiện đối tượng có nhiệt độ cao
Từ dữ liệu 160 x 120 với sốlượng điểm ảnh lên đến 19200 thì việc áp dụng các cơng thức tính tốn nhiệt độ lên tồn bộ các điểm ảnh sẽ tạo ra một khối lượng phép tính lớn, làm tốn thời gian và năng lượng để thực hiện tính tốn. Việc này sẽ khơng tối ưu đối với các hệ thống nhúng, do đó trước khi thực hiện các thao tác tính tốn nhiệt độ, ta sẽ áp dụng các thuật toán tiền xử lý nhằm mục đích tìm ra các điểm ảnh tương ứng với các đối tượng cần tính tốn nhiệt độ, cụ thểở đây là các đối tượng có nhiệt độcao hơn ngưỡng đặt trước.
40
Ý tưởng cho thuật toán tiền xửlý được thực hiện như Hình 3.15. Ta sử dụng các hàm threshold(), findCountour(), boundingBox() của thư viện OpenCV cho khung hình đọc được từ camera để thu được các bounding box là tọa độ các hình chữ nhật bao quanh các vật thể hay đối tượng có nhiệt độ cao xuất hiện trong khung hình.
Hình 3.15: Tiền xử lý phát hiện đối tượng có nhiệt độ cao
Chương trình thực hiện thuật toán tiền xử lý áp dụng thư viện OpenCV:
std::vector<cv::Rect> objects; cv::Mat bit_map, dilation_map;
// Apply threshold filter
cv::threshold(input, bit_map, threshold, 255, cv::THRESH_BINARY);
bit_map.convertTo(bit_map, CV_8UC1);
// Apply Dilate Transformation
cv::Mat dila_ele = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3)); cv::dilate(bit_map, dilation_map, dila_ele, cv::Point(-1, -1), 2);
// Find outter contours
std::vector<std::vector<cv::Point>> contours; cv::findContours(dilation_map, contours,
cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
cv::Mat mask = cv::Mat::zeros(input.size(), CV_8UC1);
for (size_t i = 0; i < contours.size(); i++) {
cv::rectangle(mask, cv::boundingRect(contours[i]), cv::Scalar(255, 255, 255));
}
cv::findContours(mask, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// Find bounding box
for ( size_t i = 0; i < contours.size(); i++ ) {
cv::Rect box = cv::boundingRect(contours[i]);
if (std::max(box.width, box.height) > 3)
objects.push_back(box); }
Tính tốn nhiệt độ điểm trên đối tượng
Như đã biết dữ liệu tại mỗi điểm ảnh camera FLIR Lepton xuất đã đã mang giá
trị nhiệt độ camera tính tốn được rồi. Tuy nhiên, nhiệt độ này camera tính tốn
được chỉ dựa trên năng lượng bức xạ hồng ngoại camera thu được từ cảm biến, nên nếu ta lấy đây là nhiệt độ vật thể ln thì sẽ gây ra sai số lớn bởi vì để tính
tốn được nhiệt độ thực của vật thể ta cần dựa vào các thông số emissivity và transmission trong từng trường hợp đo lường cụ thể.
Sau khi đã có được tọa độ các bounding box từ các thuật tốn tiền xử lý đã trình
41 có giá trị lớn nhất để đi tính tốn lại nhiệt độtương ứng với điểm ảnh này. Ta áp dụng công thức PT 3.8 đã trình bày ở phần 3.5 để thực hiện tính tốn.
Hiển thị hình ảnh
Cuối cùng, khi đã có được đầy đủ các dữ liệu về tọa độ điểm có nhiệt độ cao, nhiệt độđiểm tương ứng và tọa độ bounding box của vật thể cần đo nhiệt độ. Ta sẽ thực hiện vẽ chúng lên hình ảnh thu được từ 2 camera FLIR Lepton và Pi
Camera để hiển thị lên màn hình (Hình 3.16).
42
CHƯƠNG 4. THỬ NGHIỆM HỆ THỐNG 4.1 Thử nghiệm đo nhiệt độ sử dụng camera FLIR Lepton 3.5 4.1 Thử nghiệm đo nhiệt độ sử dụng camera FLIR Lepton 3.5
Thiết bị thử nghiệm
Hình 4.1: Bộ thiết bị thử nghiệm đo nhiệt độ với FLIR Lepton 3.5
Bộ thiết bị thử nghiệm gồm có:
• Bộ xử lý trung tâm Raspberry Pi
• Camera nhiệt FLIR Lepton 3.5
• Cảm biến nhiệt độ, độẩm DHT22
• Camera thường Pi Camera
• Đồng hồđo Extech EX330 (Hình 4.2)
• Camera nhiệt cầm tay FLIR I3 (Hình 4.2)
43 Các camera và cảm biến đều được kết nối đến Raspberry Pi 3 thông qua dây nối riêng biệt (Hình 4.1).
Thử nghiệm chứng minh cơng thức
Phương pháp thử nghiệm
Ở thử nghiệm này, ta lựa chọn vật thể khảo sát nhiệt độ là một cốc nước. Ta sẽ
thực hiện đo nhiệt độ nước trong cốc bằng camera FLIR Lepton 3.5. Nhiệt độđo được sẽ tham chiếu với nhiệt độ thực của cốc nước được đo thơng qua đồng hồ đo có đầu đo ngâm vào trong nước. Hệ thống thử nghiệm được bố trí theo mơ
hình như Hình 4.3.
Hình 4.3: Bố trí hệ thống thử nghiệm đo nhiệt độ
Camera FLIR Lepton 3.5 được treo cách cốc nước 1 mét, dữ liệu hình ảnh và nhiệt độ từ camera sẽ được truyền về bộ xử lý trung tâm Raspberry Pi 4 để tính tốn theo PT 3.8.
44
• Thơng số nhiệt độ mơi trường (T )atm và nhiệt độ vật thể phản xạ (T )reft được coi là bằng nhau (vì nước có emissivity cao) và bằng nhiệt độ đo được từ cảm biến DHT22.
• Thơng số transmission ( )τ được tính tốn theo phương pháp được trình bày ở phần 3.5.3.
Hình 4.4: Hình ảnh đo nhiệt độ từ FLIR Lepton 3.5
Ta thực hiện đo nhiệt độ nước với dải thông số emissivity ( )ε từ 0.92 – 0.99, nhiệt độ nước nằm trong khoảng từ 37.78oC – 75.56oC (100K – 168K). Ví dụ cho hình ảnh đo nhiệt độ thu thập được từcamera FLIR Lepton 3.5 được thể hiện trên Hình 4.4.
Các bước tiến hành thử nghiệm lần lượt như sau:
- Bước 1: Ta đọc dữ liệu nhiệt độ mà Camera FLIR đo được và trả ra (dữ
liệu nhiệt độchưa được turning)
- Bước 2: Nhiệt độ ở bước 1 sẽ đóng vai trị là Ttotđể thay vào PT 3.8 và
tính được nhiệt độ thật của vật thể cần đo nhiệt độ (T )obj .
- Bước 3: Ta thực hiện lưu lại các cặp nhiệt độ Ttot−Tobj kết hợp với nhiệt độ đo được bằng đồng hồđo để tính sai số trung bình.
- Bước 4: Ta giữ nguyên giá trị Ttotvà thay đổi giá trị Offset – O trong PT 3.8 để tính ra giá trị Tobj tương ứng khác. Việc thay đổi giá trị Offset này nhằm mục đích tìm ra giá trị tối ưu sao cho sai số trung bình của phép đo
nhiệt độ là nhỏ nhất.
Lưu ý: Nhà sản xuất FLIR cung cấp cho người sử dụng một thông số Offset – O
(PT 3.5) phục vụ turning cho việc đo nhiệt độ chính xác hơn. Do đó, trước tiên ta
sẽ sử dụng thơng số Offset mặc định của FLIR, rồi sau đó sẽ thực hiện turning để
cho ra kết quả đo chính xác nhất.
Kết quả thử nghiệm
Thử nghiệm chứng minh công thức
45