Giới thiệu về LM35
LM35 là một cảm biến nhiệt độ tuyến tính, tương tự. Analog có nghĩa là đầu ra điện áp của cảm biến tỉ lệ thuận với nhiệt độ. LM35 tạo ra điện áp đầu ra trực tiếp tính bằng độ C (°C) mà không cần thêm mạch hiệu chuẩn. Khi nhiệt độ tăng lên, cảm biến sẽ tạo ra điện áp đầu ra cao hơn và cứ nhiệt độ tăng thêm 1 độ C thì điện áp đầu ra sẽ tăng thêm 10 mV, rất dễ sử dụng với các vi điều khiển như Arduino.
Sơ đồ chân LM35
Cảm biến nhiệt độ LM35 thường có 3 chân chính:
- Vcc: Chân dương, cung cấp điện áp cho cảm biến. Bạn có thể cung cấp bất kỳ điện áp nào từ 4v đến 20v, Thông thường là 5V.
- GND: Chân âm, kết nối với nguồn đất.
- Analog Output: Chân tín hiệu ra, điện áp tại chân này tỉ lệ thuận với nhiệt độ. Hệ số tỷ lệ là 0.01V tăng trên mỗi độ C
Vì LM35 là thiết bị tương tự và cung cấp đầu ra tương tự. Đầu tiên, nó phải được kết nối với ADC (Analog-to-Digital Converter) hay còn gọi là bộ chuyển đổi tương tự sang số để chuyển đổi tín hiệu tương tự đầu ra thành tín hiệu số.
Sơ đồ chân của cảm biến nhiệt độ LM35 |
Điều tốt là Arduino đã có sẵn ADC. Vì vậy chúng ta chỉ cần nối chân Analog của Arduino với chân Vout của LM35 là được.
Một yếu tố quan trọng khác cần xem xét khi sử dụng LM35 trong dự án của bạn là khả năng tự phát nhiệt thấp do dòng điện rút ra chỉ 60 uA.
Các loại LM35
Có ba biến thể khác nhau của LM35 có trong một gói bóng bán dẫn . LM35A, LM35C và LM35D. Sự khác biệt duy nhất là ở phạm vi đo nhiệt độ.
|
- LM35A có thể đo nhiệt độ từ -55 đến 150 độ C.
- LM35C giữa -40 đến 110
- LM35D trong khoảng từ 0 đến 100 độ C. Trong hướng dẫn này, mình sử dụng biến thể LM35DZ.
Hoạt động
Đây là sơ đồ khối chức năng của một LM35 thông thường mà bạn có thể tìm thấy trong bảng dữ liệu của nó. Ba chân được hiển thị bên dưới:
Sơ đồ khối chức năng LM35 |
Mạch này hoạt động như thế nào?
1. Nó cung cấp điện áp đầu ra phụ thuộc vào nhiệt độ tại đầu N của diode được đệm bởi bộ khuếch đại A2 để cung cấp đầu ra cho chân Vout.
2. Hai bóng bán dẫn này được sử dụng để tạo ra điện áp tham chiếu bandgap, tức là điện áp tham chiếu cố định không đổi bất kể nhiệt độ và sự thay đổi của nguồn điện.
Tham chiếu điện áp không đổi |
3. Và đây chính là lý do tại sao bạn có thể cấp nguồn cho LM35 bằng bất kỳ điện áp nào trong khoảng từ 4 đến 20v.
Theo tài liệu kỹ thuật của thiết bị, cảm biến sẽ cung cấp 10mV/°C. Vì vậy, nếu nhiệt độ trong phòng là 18°C, cảm biến sẽ là 180mV tại chân output, và hình ảnh bên dưới thể hiện cho các bạn điều đó. Nếu bạn sử dụng đồng hồ đo đa năng vào chân output của cảm biến và đo điện áp đầu ra, bạn sẽ thu được một kết quả tương tự.
Bây giờ chúng ta hãy xem cách kết nối cảm biến nhiệt độ với Arduino để in nhiệt độ môi trường xung quanh trên màn hình Serial của Arduino IDE
VD1: Nhiệt kế sử dụng LM35 với Arduino
Kết nối cảm biến với UNO như trong sơ đồ mạch bên dưới.
Sơ đồ mạch điện
Kết nối LM35 với Arduino |
- Vcc nối tới chân 5 v của Arduino.
- GND nối tới chân GND của Arduino.
- Chân tín hiệu Sig/Out nối tới chân Analog A0.
Mình đã đề cập rằng đầu ra tương tự của cảm biến nhiệt độ phải được chuyển đổi thành tín hiệu số trước và hệ số tỷ lệ là 0,01V tăng trên mỗi độ C.
Vì vậy, chúng ta sẽ sử dụng chân analog của Arduino để chuyển đổi các giá trị điện áp đầu ra analog này thành giá trị kỹ thuật số, sau đó sử dụng công thức trong chương trình để chuyển đổi các giá trị kỹ thuật số này thành nhiệt độ tương ứng.
Chương trình
Sao chép chương trình này vào Arduino IDE của bạn.
const int analogPin = A0; // Chân analog kết nối với LM35
const float voltage = 5.0; // Điện áp nguồn
const float sensitivity = 0.01; // Độ nhạy của LM35 (10mV/°C)
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(analogPin);
float voltageRead = sensorValue * voltage / 1023.0;
float temperatureC = voltageRead / sensitivity;
Serial.print("Nhiệt độ: ");
Serial.print(temperatureC);
Serial.println(" °C");
delay(1000);
}
Giải thích đoạn code:
-
Khai báo hằng số và biến:
const int analogPin = A0;
Chỉ định chân analog A0 của Arduino để đọc tín hiệu từ cảm biến LM35.const float voltage = 5.0;
Điện áp nguồn cung cấp cho LM35 (5V).const float sensitivity = 0.01;
Độ nhạy của cảm biến LM35, mỗi độ C tương ứng với 10mV (0.01V).
-
Hàm
setup()
:Serial.begin(9600);
Khởi tạo giao tiếp Serial với tốc độ 9600 bps để in dữ liệu nhiệt độ ra màn hình Serial Monitor.
-
Hàm
loop()
:int sensorValue = analogRead(analogPin);
Đọc giá trị từ cảm biến LM35 qua chân analog (giá trị từ 0-1023).float voltageRead = sensorValue * voltage / 1023.0;
Chuyển đổi giá trị ADC đọc được thành điện áp.
Công thức:float temperatureC = voltageRead / sensitivity;
Tính toán nhiệt độ theo độ C dựa trên điện áp đọc được.
Công thức:Serial.print
vàSerial.println
:
Gửi dữ liệu nhiệt độ ra Serial Monitor.delay(1000);
Chờ 1 giây trước khi đọc giá trị tiếp theo.
Công thức tổng quát:
-
Điện áp đọc được từ cảm biến (voltageRead):
-
Nhiệt độ (temperatureC):
Kết hợp 2 công thức:
Trong trường hợp này:
Kết nối cáp ghi Arduino với máy tính của bạn, chọn cổng COM và nạp chương trình. Bây giờ hãy mở màn hình nối tiếp Serial Monitor. Nhiệt độ phòng được in lên màn hình này. Thử đưa bàn là nóng, tay khò, tay hàn,... lại gần bề mặt LM35 và quan sát sự thay đổi nhiệt độ.
VD2: Khống chế nhiệt độ điều khiển khoạt DC
Đây là một dự án nhỏ mà bạn có thể dễ dàng thực hiện để kiểm soát trạng thái của động cơ DC theo giới hạn nhiệt độ được thiết lập trước, ở trong hướng dẫn này mình để là 40 độ C. Khi nhiệt độ vượt quá 40°C, động cơ DC sẽ chạy.
Các thành phần cần thiết
- LM35 : https://bom.so/tgic-cam-bien-lm35
- Arduino UNO R3: https://bom.so/tgic-arduino-uno-r3
- Mạch mosfet: https://bom.so/tgic-mach-mosfet-1-kenh
- Quạt DC: https://bom.so/tgic-quat-dc-5v
- Nguồn: https://bom.so/tgic-nguon-adapter-1-7a
- DC5525 Đầu Nối Nguồn DC: https://bom.so/tgic-dc5525
- Dây cắm: https://bom.so/tgic-day-cam-test-board
Sơ đồ mạch điện
Kết nối mạch |
Hướng dẫn kết nối phần cứng
-
LM35:
- Vcc → 5V Arduino.
- GND → GND Arduino.
- Sig/Out → Analog A0.
-
Động cơ DC và Nguồn cấp:
- Động cơ nối với Arduino qua MOSFET hoặc module relay để đảm bảo dòng đủ mạnh.
- Chân điều khiển của MOSFET hoặc module relay nối với D8 của Arduino.
Chương trình
Sao chép chương trình này vào Arduino IDE của bạn.
const int analogPin = A0; // Chân analog kết nối với LM35
const int motorPin = 8; // Chân điều khiển động cơ DC
const float voltage = 5.0; // Điện áp nguồn
const float sensitivity = 0.01; // Độ nhạy của LM35 (10mV/°C)
const float tempThreshold = 40.0; // Ngưỡng nhiệt độ để chạy động cơ
void setup() {
pinMode(motorPin, OUTPUT); // Cấu hình chân điều khiển động cơ là OUTPUT
digitalWrite(motorPin, LOW); // Động cơ tắt ban đầu
Serial.begin(9600); // Bắt đầu giao tiếp Serial
}
void loop() {
// Đọc giá trị từ cảm biến LM35
int sensorValue = analogRead(analogPin);
// Chuyển đổi giá trị sang điện áp
float voltageRead = sensorValue * voltage / 1023.0;
// Chuyển đổi điện áp sang nhiệt độ
float temperatureC = voltageRead / sensitivity;
// In nhiệt độ ra màn hình Serial
Serial.print("Nhiệt độ: ");
Serial.print(temperatureC);
Serial.println(" °C");
// Điều khiển động cơ DC theo nhiệt độ
if (temperatureC > tempThreshold) {
digitalWrite(motorPin, HIGH); // Bật động cơ
Serial.println("Động cơ đang chạy...");
} else {
digitalWrite(motorPin, LOW); // Tắt động cơ
Serial.println("Động cơ đang dừng...");
}
// Đợi 1 giây trước khi lặp lại
delay(1000);
}
Mở rộng
- Bạn có thể thay đổi ngưỡng nhiệt độ (40°C) bằng cách sửa giá trị
tempThreshold
thành giá trị khác. - Nếu sử dụng động cơ mạnh hơn, bạn cần module relay hoặc mạch điều khiển riêng để cấp nguồn và bảo vệ Arduino.
VD3: Điều khiển theo ngưỡng với tín hiệu PWM (Động cơ quay nhanh/chậm theo nhiệt độ)
Thay vì bật/tắt động cơ, bạn có thể sử dụng PWM (điều chế độ rộng xung) để điều chỉnh tốc độ động cơ dựa trên mức nhiệt độ. Ví dụ:
- <30°C: Động cơ tắt.
- 30-40°C: Động cơ chạy chậm.
- 40-50°C: Động cơ chạy trung bình.
- Trên 50°C: Động cơ chạy tối đa.
Chương trình
Sao chép chương trình này vào Arduino IDE của bạn.
// Khai báo các chân và tham số
const int analogPin = A0; // Chân analog kết nối với LM35
const int motorPin = 9; // Chân điều khiển động cơ (PWM)
const float voltage = 5.0; // Điện áp nguồn
const float sensitivity = 0.01; // Độ nhạy của LM35 (10mV/°C)
// Các mức nhiệt độ
const float tempSlow = 30.0; // Nhiệt độ để động cơ chạy chậm
const float tempMedium = 40.0; // Nhiệt độ để động cơ chạy trung bình
const float tempMax = 50.0; // Nhiệt độ để động cơ chạy tối đa
void setup() {
pinMode(motorPin, OUTPUT); // Cấu hình chân điều khiển động cơ là OUTPUT
Serial.begin(9600); // Bắt đầu giao tiếp Serial
}
void loop() {
// Đọc giá trị từ cảm biến LM35
int sensorValue = analogRead(analogPin);
// Chuyển đổi giá trị sang điện áp
float voltageRead = sensorValue * voltage / 1023.0;
// Chuyển đổi điện áp sang nhiệt độ
float temperatureC = voltageRead / sensitivity;
// Hiển thị nhiệt độ trên Serial Monitor
Serial.print("Nhiệt độ: ");
Serial.print(temperatureC);
Serial.println(" °C");
// Điều chỉnh tốc độ động cơ dựa trên nhiệt độ
int motorSpeed = 0; // Mặc định động cơ tắt
if (temperatureC < tempSlow) {
motorSpeed = 0; // Dưới 30°C, động cơ tắt
} else if (temperatureC >= tempSlow && temperatureC < tempMedium) {
motorSpeed = map(temperatureC, tempSlow, tempMedium, 64, 128); // Chạy chậm
} else if (temperatureC >= tempMedium && temperatureC < tempMax) {
motorSpeed = map(temperatureC, tempMedium, tempMax, 129, 192); // Chạy trung bình
} else if (temperatureC >= tempMax) {
motorSpeed = 255; // Trên 50°C, chạy tối đa
}
// Gửi tín hiệu PWM đến động cơ
analogWrite(motorPin, motorSpeed);
// Hiển thị tốc độ động cơ trên Serial Monitor
Serial.print("Tốc độ động cơ (PWM): ");
Serial.println(motorSpeed);
// Đợi 1 giây trước khi lặp lại
delay(1000);
}
Nguyên lý hoạt động
-
Phân mức nhiệt độ:
- < 30°C: Động cơ tắt (
motorSpeed = 0
). - 30-40°C: Động cơ chạy chậm (PWM từ 64 đến 128).
- 40-50°C: Động cơ chạy trung bình (PWM từ 129 đến 192).
- > 50°C: Động cơ chạy tối đa (PWM = 255).
- < 30°C: Động cơ tắt (
-
Hàm
map()
và điều chỉnh tuyến tính:- Sử dụng hàm
map()
để chuyển đổi nhiệt độ trong khoảng tương ứng thành giá trị PWM phù hợp.
- Sử dụng hàm
-
PWM:
- Arduino gửi tín hiệu PWM qua chân
motorPin
để điều chỉnh tốc độ động cơ.
- Arduino gửi tín hiệu PWM qua chân
Nhận xét