Cảm biến nhiệt độ LM35 và cách sử dụng nó trong môi trường Arduino

Giới thiệu, nội dung chính

Cảm biến nhiệt độ LM35 là một loại cảm biến tương tự rất hay được ứng dụng trong các ứng dụng đo nhiệt độ thời gian thực. Vì nó hoạt động khá chính xác với sai số nhỏ, đồng thời với kích thước nhỏ và giá thành rẻ là một trong những ưu điểm của nó. Vì đây là cảm biến tương tự (analog sensor) nên ta có thể dễ dàng đọc được giá trị của nó bằng hàm analogRead(). Nào, cùng nhau tìm hiểu thôi!

Qua bài viết này, mình hi vọng nó sẽ đem lại cho bạn một vài mẹo nhỏ để ứng dụng hàm analogRead() một cách nhuần nhuyển, và bật mí cho bạn cách sử dụng cảm biến LM35 - một cảm biến nhiệt độ rất hay và dễ sử dụng!

Phần cứng

Giới thiệu về cảm biến LM35

LM35 là một cảm biến nhiệt độ analog

Nhiệt độ được xác định bằng cách đo hiệu điện thế ngõ ra của LM35.

→ Đơn vị nhiệt độ: °C.

→ Nhiệt độ thay đổi tuyến tính: 10mV/°C

LM35 pin out
Sơ đồ chân của LM35

LM35 không cần phải canh chỉnh nhiệt độ khi sử dụng.

Độ chính xác thực tế: 1/4°C ở nhiệt độ phòng và 3/4°C ngoài khoảng 2°C tới 150°C

LM35 có hiệu năng cao, công suất tiêu thụ là 60uA

Cảm biến LM35 hoạt động bằng cách cho ra một giá trị hiệu điện thế nhất định tại chân Vout (chân giữa) ứng với mỗi mức nhiệt độ.

Như vậy, bằng cách đưa vào chân bên trái của cảm biến LM35 hiệu điện thế 5V, chân phải nối đất, đo hiệu điện thế ở chân giữa bằng các pin A0 trên arduino (giống y hệt cách đọc giá trị biến trở), bạn sẽ có được nhiệt độ (0-100ºC) bằng công thức:

float temperature = (5.0*analogRead(A0)*100.0/1024.0);

Với LM35, bạn có thể tự tạo cho mình mạch cảm biến nhiệt độ sử dụng LM35 và tự động ngắt điện khi nhiệt độ vượt ngưỡng tối đa, đóng điện khi nhiệt độ thấp hơn ngưỡng tối thiểu thông qua module rơ le...

LM35 thay đổi nhiệt độ nhanh và chính xác.

Lắp mạch

Lập trình

int sensorPin = A0;// chân analog kết nối tới cảm biến LM35

void setup() {
  Serial.begin(9600);  //Khởi động Serial ở mức baudrate 9600
  // Bạn không cần phải pinMode cho các chân analog trước khi dùng nó
}
 
void loop() {
 //đọc giá trị từ cảm biến LM35
 int reading = analogRead(sensorPin);  

 //tính ra giá trị hiệu điện thế (đơn vị Volt) từ giá trị cảm biến
 float voltage = reading * 5.0 / 1024.0; 
 
 // ở trên mình đã giới thiệu, cứ mỗi 10mV = 1 độ C.
 // Vì vậy nếu biến voltage là biến lưu hiệu điện thế (đơn vị Volt)
 // thì ta chỉ việc nhân voltage cho 100 là ra được nhiệt độ!
 
 float temp = voltage * 100.0;
 
 Serial.println(temp);
 /*Mẹo:
   Các bạn phaỉ khai báo phần thực cho toàn bộ các số thực nhé!
 */
 delay(1000);//đợi 1 giây cho lần đọc tiếp theo
}

Lời kết

Nếu bạn sử dụng môi trường Arduino cho việc đọc các tín hiệu cảm biến rồi xuất ra Serial thì việc lập trình nó đơn giản như vậy thôi, nhưng nếu sử dụng các môi trường khác, việc hiểu được các câu lệnh của nó là một vấn đề hơi khó đấy.

Hãy chế những món đề cực cool và không quên uống nước khi mệt, bạn nhé!

Đóng góp từ cộng đồng

Đọc nhiệt độ âm với cảm biến DS20B18

Về đóng góp IC thì nó không khác gì con LM35 nhưng nó có khả năng đọc được nhiệt độ âm và độ sai số ít hơn :). Sau đây là code cách dùng con này, đóng góp của bạn tunggiang185.

#include < onewire.h >
#include < dallastemperature.h >
#include < liquidcrystal.h >
#define ONE_WIRE_BUS 3 //Chân cảm biến DS20B18 được nối với cổng digital D3 (sơ đồ đấu nối chân này thông qua trở 4,7K với chân Vcc 5V

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors( & oneWire);
DeviceAddress cambienDS20B18;

// Khai báo chân xuất ra màn hình tinh thể lỏng lưu ý chân đấu nối

LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
void setup(void) {
    sensors.begin();
    lcd.begin(16, 2);
}

void loop() {
    sensors.requestTemperatures(); // Đọc giá trị từ cảm biến
    float nhietdoDS18B20 = sensors.getTempC(cambienDS20B18);

    // Xuất thông tin cảm biến ra màn hình LCD
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Nhiet do: ");
    lcd.setCursor(10, 0);
    lcd.print(nhietdoDS18B20, 1);
    lcd.write(223);
    lcd.print("C");

}
lên
45 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Lập trình kéo thả cho các dự án IoT sử dụng Node-Red và iNut Platform

Người nông dân Việt Nam muốn làm ra những sản phẩm nông sản chất lượng tốt, nhưng ngặt nổi với việc sử dụng các giải pháp ở Việt Nam và thế giới vẫn còn quá đắt so với lợi nhuận ròng. Trong quá trình nghiên cứu để tìm ra con đường ứng dụng những thành quả của Cách mạng công nghiệp 4.0, tôi và đội ngũ iNut Platform đã tìm ra một giải pháp lập trình kéo thả với chi phí gần như bằng không để các đối tác nghiên cứu triển khai hệ thống IoT của riêng họ một cách nhanh chóng nhất và an toàn nhất. Thống nhất lại quy chuẩn phát triển IoT với khả năng cung cấp firmware số lượng lớn và không giới hạn cho mọi dự án ở mọi kích cỡ khác nhau, ứng dụng mọi lĩnh vực không chỉ trong lĩnh vực nông nghiệp.

lên
4 thành viên đã đánh giá bài viết này hữu ích.

for

Hàm for có chức năng làm một vòng lặp. Vậy vòng lặp là gì? Hãy hiểu một cách đơn giản, nó làm đi làm lại một công việc có một tính chất chung nào đó. Chẳng hạn, bạn bật tắt một con LED thì dùng digitalWrite xuất HIGH delay rồi lại LOW rồi lại delay. Nhưng nếu bạn muốn làm nhiều hơn 1 con LED thì mọi đoạn code của bạn sẽ dài ra (không đẹp và khi chỉnh sửa thì chẳng lẻ ngồi sửa lại từng dòng?

lên
24 thành viên đã đánh giá bài viết này hữu ích.