BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM KHOA ĐIỆN- ĐIỆN TỬ BÁO CÁO THỰC TẬP ĐIỀU KHIỂN TỰ ĐỘNG HÓA HỆ THỐNG ĐIỆN CÔNG NGHIỆP Tuần 3: Dùng LM35 đo nhiệt độ môi trườn
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM
KHOA ĐIỆN- ĐIỆN TỬ
BÁO CÁO THỰC TẬP ĐIỀU KHIỂN TỰ ĐỘNG HÓA
HỆ THỐNG ĐIỆN CÔNG NGHIỆP Tuần 3: Dùng LM35 đo nhiệt độ môi trường và hiển thị trên màn
hình LCD.
Giáo viên : PGS.TS Trương Việt Anh
Nhóm : 2 SVTH : Đinh Đức Cường 21142500 Phùng Phú Đại 21142511 Bạch Ngọc Thành 21142174 Thứ 7 tiết 7-12 nhóm 19 CLC
Trang 2MỤC LỤC
Nhiệm vụ 1: Lập trình cho hệ thống dùng LM35 đo nhiệt độ môi trường và
hiển thị trên màn hình LCD, mô phỏng thí nghiệm trong Proteus 2
Các bước thực hiện 3
- Bước 1: Xây dựng mô hình phần cứng mô phỏng trong Protues 3
- Bước 2: Viết chương trình 3
Giải thích chương trình 4
- Bước 3: Kiểm tra code, nạp chương trình và mô phỏng 6
Nhiệm vụ 2: Trả lời các câu hỏi trắc nghiệm và tự luận 6
Câu hỏi tự luận 6
Câu 1: Phân tích cách xử lý và hiệu chỉnh tín hiệu đầu ra từ LM35 để hiển thị nhiệt độ chính xác trên màn hình LCD Hãy đề xuất phương pháp lập trình tối ưu để giảm thiểu sai số đo lường 6
Câu 2: Giải thích tại sao chúng ta cần sử dụng thư viện LCD cho Arduino? Hãy so sánh việc sử dụng thư viện LCD với việc viết trực tiếp các lệnh điều khiển màn hình LCD 7
Câu 3: Mô tả cách thực hiện và phân tích kết quả của việc hiệu chỉnh (calibration) hệ thống đo nhiệt độ bằng LM35 trong Proteus, đặc biệt khi mô phỏng trong các điều kiện nhiệt độ khác nhau Làm thế nào để đối chiếu kết quả mô phỏng với thực tế? 8
Câu 4: Xây dựng một hệ thống báo động trong mô phỏng Proteus sử dụng Arduino, LM35 và LCD, khi nhiệt độ vượt quá ngưỡng cho phép Giải thích chi tiết về cách tích hợp và lập trình để đảm bảo hệ thống hoạt động chính xác và nhanh chóng phát hiện nhiệt độ nguy hiểm 9
Câu hỏi trắc nghiệm 9
Trang 3Nhóm 2 – Lớp chiều thứ 7
Nhiệm vụ 1: Lập trình cho hệ thống dùng LM35 đo nhiệt
độ môi trường và hiển thị trên màn hình LCD, mô phỏng thí nghiệm trong Proteus.
Yêu cầu: Kết nối LCD vào các chân D2,3,4,5,11,12 của arduino Cảm biến LM35 được kết nối với chân A0 của arduino, một nút nhấn được kết nối với chân D8 để chuyển đơn vị của nhiệt độ Viết chương trình thực hiện các yêu cầu sau:
- Hiển thị giá trị nhiệt độ đo được từ cảm biến LM35 lên màn hình LCD với quy ước: dòng 1 hiển thị giá trị XXoC, dòng 2 hiển thị giá trị nhiệt độ cao, ví dụ nhiệt độ hiện tại là 26oC sau 1 khoảng thời gian nhiệt độ tăng đột ngột lên 30oC thì LCD sẽ hiển thị và lưu giá trị nhiệt độ cao nhất từng đo được ở dạng
H=XXoC, và tương tự với nhiệt độ thấp L=XXoC.
- Nút nhấn kết nối với chân D8 thực hiện công việc chuyển đổi đơn vị từ độ C sang độ F khi được nhấn.
Các bước thực hiện
- Bước 1: Xây dựng mô hình phần cứng mô phỏng trong Protues
Trang 4- Bước 2: Viết chương trình
Trang 5Giải thích chương trình
Chương trình được mô tả kiểm tra và hiển thị nhiệt độ từ cảm biến LM35 thông qua màn hình LCD và Serial Monitor trên Arduino Nhiệt độ có thể hiển thị bằng độ C hoặc độ F và người dùng có thể chuyển đổi giữa hai đơn vị bằng cách nhấn nút
Tổng quan chương trình:
Cảm biến LM35 đo nhiệt độ môi trường và đưa ra tín hiệu điện áp tuyến
tính với nhiệt độ, với tỉ lệ 10mV/°C
Arduino sử dụng bộ chuyển đổi ADC (Analog to Digital Converter) để
đọc giá trị điện áp từ LM35 và tính toán nhiệt độ dựa trên công thức chuyển đổi
Màn hình LCD hiển thị nhiệt độ, và Serial Monitor có thể được dùng để
theo dõi kết quả tương tự
Người dùng có thể nhấn nút để thay đổi đơn vị đo từ độ C sang độ F hoặc ngược lại
Thư viện và chân kết nối:
#include <LiquidCrystal.h>: Thư viện điều khiển màn hình LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);: Thiết lập các chân kết nối LCD
Các biến maxC, minC, maxF, minF được dùng để lưu giá trị nhiệt độ lớn nhất và nhỏ nhất cho cả hai đơn vị
ButtonPin=8: Chân kết nối nút nhấn để chuyển đổi giữa độ C và độ F
Trang 6Cài đặt trong hàm setup():
analogReference(INTERNAL);: Đặt điện áp tham chiếu cho bộ chuyển đổi ADC bên trong Arduino là 1,1V Điều này giúp tăng độ chính xác khi
đo những điện áp thấp, như điện áp ngõ ra của LM35
Tính toán nhiệt độ:
LM35 cho tín hiệu 10mV tương ứng với 1°C.
Bộ ADC của Arduino có độ phân giải 10 bit, nghĩa là giá trị đo sẽ nằm trong khoảng từ 0 đến 1023 tương ứng với điện áp từ 0 đến 1,1V (nếu tham chiếu nội được sử dụng)
Công thức tính toán nhiệt độ từ giá trị ADC:
Với 1,1V điện áp tham chiếu và 1024 mức của ADC, mỗi đơn vị của ADC tương ứng với điện áp là 1.1 / 1024 = 0.00107421875 V
LM35 xuất ra điện áp 10mV/°C, do đó ta cần chia kết quả đọc từ ADC cho 0.01
để tính nhiệt độ Điều này dẫn đến hệ số chuyển đổi là 0.10742188 °C/ADC đơn vị
Trong chương trình, phép tính nhiệt độ được thực hiện bằng công thức:
int tempC = sensorValue * 0.10742188; // Tính độ C
Để chuyển từ độ C sang độ F, công thức chuyển đổi là:
float tempF = (tempC * 1.8) + 32; // Tính độ F
Điều khiển hiển thị:
Nhiệt độ sẽ được hiển thị trên LCD và có thể được chuyển đổi giữa độ C
và độ F khi nhấn nút Việc kiểm tra trạng thái nút và chuyển đổi đơn vị đo được thực hiện trong hàm loop()
Tóm lại:
Chương trình này đọc giá trị từ cảm biến LM35, chuyển đổi thành nhiệt độ, và hiển thị trên màn hình LCD với khả năng chuyển đổi giữa độ C và độ F khi nhấn nút.
Trang 7- Bước 3: Kiểm tra code, nạp chương trình và mô phỏng
Nhiệm vụ 2: Trả lời các câu hỏi trắc nghiệm và tự luận Câu hỏi tự luận
Câu 1: Phân tích cách xử lý và hiệu chỉnh tín hiệu đầu ra từ LM35 để hiển thị nhiệt độ chính xác trên màn hình LCD Hãy đề xuất phương pháp lập trình tối ưu để giảm thiểu sai số đo lường.
Trả Lời:
Để xử lý và hiệu chỉnh tín hiệu từ LM35, ta dùng bộ chuyển đổi ADC của vi điều khiển để đọc tín hiệu điện áp tương ứng với nhiệt độ Sau khi đọc giá trị ADC, ta tính toán nhiệt độ dựa trên công thức T= ADC value × Vref
1024 ×0.01 , với Vref là điện áp tham chiếu Để giảm thiểu sai số, có thể lấy trung bình nhiều lần đo, hiệu chỉnh điện áp tham chiếu để đảm bảo ổn định, và bù sai số nếu cần Cuối cùng, nhiệt độ tính toán được hiển thị lên màn hình LCD
Để giảm sai số, có thể:
- Lấy trung bình nhiều lần đọc để giảm nhiễu
Trang 8- Hiệu chỉnh điện áp tham chiếu để đảm bảo độ chính xác.
- Bù sai số nếu có lệch cố định
- Tăng độ phân giải ADC để đo chính xác hơn
-Câu 2: Giải thích tại sao chúng ta cần sử dụng thư viện LCD cho Arduino? Hãy so sánh việc sử dụng thư viện LCD với việc viết trực tiếp các lệnh điều khiển màn hình LCD.
Trả lời:
Chúng ta cần sử dụng thư viện LCD cho Arduino để đơn giản hóa quá trình giao tiếp và điều khiển màn hình LCD Thư viện này cung cấp các hàm có sẵn như lcd.begin(), lcd.print() để dễ dàng khởi tạo và hiển thị dữ liệu mà không cần hiểu sâu về cách hoạt động của các chân và lệnh điều khiển phức tạp của LCD
So sánh:
Sử dụng thư viện LCD: Giúp việc lập trình nhanh chóng, dễ sử dụng, và giảm bớt lỗi do người dùng không cần viết mã điều khiển chi tiết cho các chân kết nối hay lệnh LCD Thư viện cũng hỗ trợ nhiều loại màn hình khác nhau mà không cần thay đổi nhiều trong mã
Viết trực tiếp lệnh điều khiển LCD: Đòi hỏi người lập trình phải hiểu rõ cấu trúc
dữ liệu, cách điều khiển từng chân (như RS, RW, E, và các chân dữ liệu), và các lệnh nội bộ của LCD Việc này tốn thời gian, dễ xảy ra lỗi và không tối ưu nếu chỉ thực hiện các tác vụ đơn giản như in văn bản
Tóm lại, thư viện LCD giúp đơn giản hóa và tiết kiệm thời gian trong khi vẫn đảm bảo tính linh hoạt và độ chính xác khi làm việc với màn hình LCD trên Arduino
Câu 3: Mô tả cách thực hiện và phân tích kết quả của việc hiệu chỉnh
(calibration) hệ thống đo nhiệt độ bằng LM35 trong Proteus, đặc biệt khi
mô phỏng trong các điều kiện nhiệt độ khác nhau Làm thế nào để đối chiếu kết quả mô phỏng với thực tế?
Trả lời:
Cách thực hiện hiệu chỉnh hệ thống đo nhiệt độ bằng LM35 trong Proteus:
- Thiết kế mạch mô phỏng:
Sử dụng phần mềm Proteus để tạo mạch với LM35, vi điều khiển (như Arduino), và màn hình LCD để hiển thị nhiệt độ Kết nối chân Vout của LM35
Trang 9với chân đầu vào analog của vi điều khiển và kết nối LCD với các chân kỹ thuật số
- Cấu hình mô phỏng nhiệt độ:
Trong Proteus, có thể thay đổi giá trị nhiệt độ đầu vào của LM35 để mô phỏng các điều kiện nhiệt độ khác nhau Proteus cho phép bạn nhập các giá trị nhiệt độ
để thấy sự thay đổi của tín hiệu đầu ra từ LM35, và từ đó nhiệt độ sẽ hiển thị trên LCD
- Lập trình Arduino (hoặc vi điều khiển):
Viết chương trình đọc tín hiệu từ LM35 thông qua ADC, tính toán nhiệt độ từ giá trị ADC, và hiển thị kết quả trên LCD Để đảm bảo độ chính xác, có thể sử dụng kỹ thuật lấy trung bình nhiều lần đọc (filtering)
- Hiệu chỉnh (calibration):
So sánh giá trị nhiệt độ đọc được trên LCD với giá trị nhiệt độ đầu vào đã cấu hình trong Proteus Nếu có sự sai lệch, cần điều chỉnh công thức tính toán, điện
áp tham chiếu, hoặc thêm hệ số bù để đạt độ chính xác cao hơn
Phân tích kết quả:
Khi thay đổi nhiệt độ mô phỏng trong Proteus, quan sát sự thay đổi của giá trị nhiệt độ hiển thị trên màn hình LCD Nếu kết quả hiển thị không đúng với nhiệt
độ đã cấu hình, hệ thống có thể cần hiệu chỉnh lại bằng cách thay đổi các thông
số tính toán hoặc thêm bù nhiệt độ
Ví dụ, nếu bạn cấu hình nhiệt độ đầu vào là 25°C nhưng trên LCD hiển thị 24°C, có thể có sự sai lệch từ bộ chuyển đổi ADC, điện áp tham chiếu không chính xác, hoặc do các yếu tố mô phỏng Việc bù sai số có thể được thực hiện bằng cách điều chỉnh công thức trong mã lập trình, ví dụ thêm hệ số bù
Đối chiếu kết quả mô phỏng với thực tế:
- So sánh kết quả mô phỏng với cảm biến thật: Sau khi hoàn thành mô phỏng, bạn có thể đối chiếu kết quả bằng cách xây dựng hệ thống thực tế với các thành phần tương tự (LM35, Arduino, LCD) và thực hiện phép đo nhiệt độ trong các điều kiện khác nhau
- Kiểm tra sai số thực tế: Trong điều kiện thực tế, các yếu tố môi trường (như dao động điện áp, nhiệt độ không đều) có thể gây ra sai số lớn hơn
so với trong mô phỏng Vì Proteus không hoàn toàn mô phỏng được các yếu tố như nhiễu tín hiệu hoặc biến động điện áp, kết quả trong thực tế có thể khác biệt
Trang 10- Hiệu chỉnh thực tế: Nếu sai số giữa mô phỏng và thực tế khác biệt lớn, cần điều chỉnh hệ số bù và các thông số tính toán theo các giá trị đo lường thực tế từ hệ thống thực
Tóm lại, mô phỏng trong Proteus giúp dự đoán được hiệu suất của hệ thống đo nhiệt độ, nhưng để đạt được kết quả chính xác nhất, cần đối chiếu và hiệu chỉnh thêm khi triển khai hệ thống thực tế
Câu 4: Xây dựng một hệ thống báo động trong mô phỏng Proteus sử dụng Arduino, LM35 và LCD, khi nhiệt độ vượt quá ngưỡng cho phép Giải thích chi tiết về cách tích hợp và lập trình để đảm bảo hệ thống hoạt động chính xác và nhanh chóng phát hiện nhiệt độ nguy hiểm.
Trả lời:
Để tạo hệ thống báo động nhiệt độ bằng LM35, Arduino và LCD trong Proteus,
ta thực hiện các bước sau:
- Thiết kế mạch: Kết nối LM35 với chân analog của Arduino để đo nhiệt
độ, LCD để hiển thị và buzzer để cảnh báo
- Lập trình: Đọc giá trị từ LM35, chuyển đổi sang nhiệt độ, hiển thị trên LCD và kiểm tra ngưỡng Nếu nhiệt độ vượt ngưỡng (ví dụ 30°C), bật buzzer và hiển thị cảnh báo trên LCD, nếu dưới ngưỡng thì tắt buzzer
- Mô phỏng: Thay đổi nhiệt độ trong Proteus để kiểm tra chức năng báo động và hiển thị trên LCD
- Đối chiếu thực tế: Hệ thống có thể được triển khai thực tế để đo nhiệt độ môi trường và phát hiện tình trạng nhiệt độ vượt ngưỡng
Câu hỏi trắc nghiệm
Câu hỏi 1: Cảm biến LM35 cung cấp tín hiệu ra dạng gì?
A Tín hiệu số
B Tín hiệu analog
C Tín hiệu PWM
D Tín hiệu I2C
Câu hỏi 2: Chân nào của Arduino thường được sử dụng để đọc giá trị analog từ cảm biến LM35?
A Các chân digital (2-13)
Trang 11C Chân GND
D Chân 5V
Câu hỏi 3: Thư viện nào thường được sử dụng để điều khiển màn hình LCD 16x2 trên Arduino?
A LiquidCrystal
B Servo
C Wire
D SD
Câu hỏi 4: Làm thế nào để cải thiện độ chính xác của hệ thống đo nhiệt độ sử dụng LM35 và Arduino trong mô phỏng Proteus?
A Sử dụng điện trở cao hơn cho LM35
B Tăng tần số đọc dữ liệu từ LM35
C Sử dụng bộ lọc số để giảm nhiễu tín hiệu ADC
D Thay đổi tần số xung nhịp của Arduino
Câu hỏi 5: Trong phần mềm Proteus, thành phần nào được sử dụng để mô phỏng màn hình LCD 16x2?
A LCD
B Text
C LED
D 7-segment
Câu hỏi 6: Để tăng độ chính xác của phép đo nhiệt độ, ta có thể làm gì?
A Tăng điện áp cung cấp cho LM35
B Giảm điện áp cung cấp cho LM35
C Hiệu chỉnh cảm biến bằng cách đo một giá trị nhiệt độ chuẩn
D Thay đổi giá trị tham chiếu của ADC
Câu hỏi 7: Nếu muốn hiển thị nhiệt độ với độ phân giải cao hơn, ta nên làm gì?
A Tăng tần số làm việc của Arduino
B Sử dụng cảm biến nhiệt độ có độ phân giải cao hơn
C Tăng số lần đọc giá trị từ cảm biến
Trang 12D Cả B và C
Câu hỏi 8: Để tạo ngưỡng cảnh báo khi nhiệt độ vượt quá một giá trị nhất định,
ta cần sử dụng cấu trúc điều khiển nào?
A if else
B for
C while
D switch case
Câu hỏi 9: Khi mô phỏng trên Proteus, tại sao giá trị nhiệt độ hiển thị trên LCD lại khác với giá trị đo được trong thực tế?
A Do sai số của cảm biến
B Do sai số của mạch điện
C Do sai số của phần mềm mô phỏng
D Tất cả các yếu tố trên
Câu hỏi 10: Để nâng cao tính ổn định của hệ thống, ta có thể thực hiện biện pháp nào?
A Lọc nhiễu cho tín hiệu analog
B Tăng tốc độ làm việc của Arduino
C Giảm tần số làm tươi màn hình LCD
D Cả A và C