Search Code

Bài 42: Sử dụng cảm biến nhiệt độ LM35 | Khóa học Arduino từng bước

Bài 42: Sử dụng cảm biến nhiệt độ LM35 | Khóa học Arduino từng bước

Trong bài học này, chúng ta sẽ tìm hiểu cách sử dụng cảm biến nhiệt độ LM35 với Arduino để đo và hiển thị nhiệt độ theo độ C, độ F và độ K. Cảm biến này xuất ra điện áp tỷ lệ với nhiệt độ, cho phép chúng ta dễ dàng đọc và xử lý dữ liệu trong chương trình Arduino. Đến cuối hướng dẫn này, bạn sẽ có thể triển khai các hành động dựa trên nhiệt độ trong các dự án của mình.

Cảm biến nhiệt độ LM35 có ba chân: chân bên trái dùng cho nguồn điện, chân giữa xuất ra điện áp tương ứng với nhiệt độ, và chân bên phải dùng cho đất. Cảm biến hoạt động trong dải điện áp từ 4 đến 30 volt và cung cấp đầu ra 10 millivolt trên mỗi độ C. Độ chính xác này cho phép đo nhiệt độ chính xác trong nhiều ứng dụng khác nhau.

Phần cứng được giải thích

Thành phần chính trong dự án này là cảm biến nhiệt độ LM35. Nó được thiết kế để cung cấp đầu ra điện áp tương tự tỷ lệ tuyến tính với nhiệt độ tính theo độ C. Cảm biến phù hợp với nhiều dải nhiệt độ, từ -55°C đến +150°C, khiến nó trở nên linh hoạt cho nhiều môi trường khác nhau.

Sơ đồ chân LM35

LM35 yêu cầu năng lượng tối thiểu (60 microamp) và hoạt động trên dải điện áp rộng. Trở kháng đầu ra của nó thấp, cho phép kết nối trực tiếp với các chân đầu vào tương tự của Arduino mà không cần mạch bổ sung. Sự đơn giản trong thiết kế này khiến LM35 trở thành lựa chọn tuyệt vời cho các tác vụ đo nhiệt độ.

Chi tiết từ bảng dữ liệu

Nhà sản xuất Texas Instruments
Số linh kiện LM35
Điện áp logic/IO 4–30 V
Dòng điện đầu ra (mỗi kênh) 1 mA tối đa
Dải nhiệt độ -55 đến +150 °C
Điện áp đầu ra 10 mV/°C
Độ chính xác ±0,5 °C ở 25 °C
Kiểu đóng gói TO-92

 

  • Đảm bảo nguồn điện phù hợp từ 4V đến 30V để có kết quả đọc chính xác.
  • Điện áp đầu ra tỷ lệ trực tiếp với nhiệt độ (10 mV/°C).
  • Sử dụng tụ điện tách rời gần chân nguồn để ổn định.
  • Duy trì đúng cực tính khi kết nối để tránh hư hỏng.
  • Đảm bảo các kết nối tốt để tránh đầu vào trôi nổi, có thể gây ra kết quả đọc sai.

Hướng dẫn đấu dây

LM35_basic_wiring_bb

Để đấu dây cảm biến nhiệt độ LM35, kết nối chân bên trái (VCC) với đầu ra 5V trên Arduino. Chân giữa (Đầu ra) nên được kết nối với chân đầu vào tương tự A0, chân mà chúng ta sẽ sử dụng để đọc nhiệt độ. Cuối cùng, kết nối chân bên phải (Đất) với một trong các chân đất trên Arduino. Đảm bảo tất cả các kết nối được chắc chắn để tránh bất kỳ sự cố nào trong quá trình hoạt động.

Khi đấu dây, hãy nhớ rằng LM35 có thể được cấp nguồn với điện áp từ 4V đến 30V, nhưng sử dụng 5V là đủ cho các ứng dụng Arduino. Nếu bạn thấy kết quả đọc nhiệt độ bất thường, hãy kiểm tra lại các kết nối và đảm bảo cảm biến được cấp nguồn đúng cách.

Ví dụ mã & hướng dẫn chi tiết

Trong mã Arduino, chúng ta định nghĩa chân đầu vào tương tự để đọc điện áp đầu ra của LM35 với định danh inPin, được đặt là A0. Ngoài ra, chúng ta định nghĩa hằng số LM35_FACTOR được đặt là 0,01 để biểu thị đầu ra của cảm biến trên mỗi độ C.

const int inPin = A0; // có thể thay đổi
const float LM35_FACTOR = 0.01; // không thay đổi

Thiết lập này cho phép chúng ta đọc nhiệt độ một cách trực tiếp. Tiếp theo, chúng ta khởi tạo giao tiếp nối tiếp trong hàm setup() để bắt đầu xuất dữ liệu nhiệt độ ra màn hình nối tiếp.

void setup() {
  Serial.begin(9600);
  Serial.println("Robojax LM35 cho Arduino");
}

Trong hàm loop(), chúng ta liên tục đọc nhiệt độ và in ra bằng các đơn vị khác nhau. Hàm printTemperature() nhận một tham số ký tự để chỉ định định dạng nhiệt độ mong muốn, cho phép chúng ta hiển thị nhiệt độ theo độ C, độ F hoặc độ K.

void loop() {
  printTemperature('C');
  printTemperature('F');
  printTemperature('K');
  delay(1000); // Chờ 1000ms
}

Để thực hiện hành động dựa trên nhiệt độ, chúng ta có thể kiểm tra xem nhiệt độ có vượt quá một ngưỡng nhất định hay không bằng hàm getTemperature(). Hàm này tính toán nhiệt độ trung bình qua một số lượng mẫu được chỉ định.

Để biết thêm chi tiết, hãy xem video liên quan để có phần hướng dẫn mã hoàn chỉnh (trong video tại 10:15).

Trình diễn / Điều gì sẽ xảy ra

Khi cảm biến LM35 được kết nối đúng cách và mã Arduino được tải lên, bạn sẽ thấy nhiệt độ được hiển thị theo độ C, độ F và độ K trên màn hình nối tiếp. Nếu bạn tác động nhiệt lên cảm biến, bạn sẽ quan sát thấy các kết quả đọc nhiệt độ tăng tương ứng.

Lưu ý rằng việc đấu dây sai có thể dẫn đến các kết quả đọc nhiệt độ bất thường, chẳng hạn như giá trị cực cao hoặc cực thấp. Luôn đảm bảo cảm biến được kết nối đúng cách để tránh các sự cố như vậy (trong video tại 12:30).

Mốc thời gian video

  • 00:00 - Giới thiệu về LM35
  • 02:30 - Hướng dẫn đấu dây
  • 05:00 - Giải thích mã
  • 10:15 - Trình diễn kết quả đọc nhiệt độ
  • 12:30 - Các sự cố thường gặp và khắc phục

Hình ảnh

LM35_basic_project
LM35_basic_project
LM35_basic_wiring_bb
LM35_basic_wiring_bb
LM35_pinout
LM35_pinout
503-Lesson 42: Using an LM35 Temperature Sensor with Arduino
Ngôn ngữ: C++
++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 42: Introduction to LM35
 * This Arduino sketch is to use LM35 to measure temperature
 * This code has two ways to get temperature
 * 1-To print the temperature either in C, F or K on the serial monitor
 * 2-To return the value in C, F and K
 *


  Please watch video instruction here https://youtu.be/DRIC4wDu878
 This code is available at http://robojax.com/course1/?vid=lecture37
 
with over 100 lectures free on YouTube. Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339

 * Written by Ahmad Shamshiri on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
 * in Ajax, Ontario, Canada. www.robojax.com
 *


 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.


*/

const int inPin =A0;//can change
const int iteration = 1000; //can change (see video)
const float LM35_FACTOR =0.01;// do not change

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
  Serial.begin(9600);
  Serial.println("Robojax LM35 for Arduino");
  delay(500);
}

// the loop routine runs over and over again forever:
void loop() {
 //robojax.com LM35 Code for Arduino
  printTemperature('C');
  Serial.println();
  printTemperature('F');
  Serial.println();
  printTemperature('K');
  Serial.println();
  Serial.println();
//  Serial.print(" Temperature: ");
//  printDegree();
//  Serial.print(getTemperature('C'));
if(getTemperature('C') >87)
{
 // do something here (watch video)
}
//  Serial.println();
  delay(1000);//Wait for 1000ms (change it if you want)
}

/*
 * getTemperature()
 * @brief gets the average temperature
 * @param average temperature
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 * @return returns one of the values above
 * Written by Ahmad Shamshiri for robojax.com
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
float getTemperature(char type)
{
	// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
    float value,voltage,temperature;//define variables
    int sensorValue;
    float averageTemperature =0;

    for(int i=0; i< iteration; i++)
    {
      sensorValue = analogRead(inPin);//read analog value
      voltage = sensorValue * (5.0 / 1023.0); //convert it to voltage
      temperature = voltage / LM35_FACTOR; //convert voltage to temperature
      averageTemperature += temperature;//add
    }

    averageTemperature /=iteration;
  if(type =='F')
   {
    value = averageTemperature *9/5 + 32;//convert to Fahrenheit
   }else if(type =='K')
   {
    value = averageTemperature + 273.15;//convert to Kelvin
   }else{
    value = averageTemperature;// return Celsius
   }
    return value ;
}//getTemperature()

/*
 * printTemperature()
 * @brief prints  temperature on serial monitor
 * @param charact type
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 * @return none
 * Written by Ahmad Shamshiri for robojax.com
 * on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
 */
void printTemperature(char type)
{
	// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
    float value;
    float temp = getTemperature(type);
   Serial.print(temp);
    printDegree();
  if(type =='F')
   {
     Serial.print("F");
    }else if(type =='K')
   {
     Serial.print("K");
   }else{
     Serial.print("C");
   }

}//printTemperature()

/*
 * @brief prints degree symbol on serial monitor
 * @param none
 * @return returns nothing
 * Written by Ahmad Shamshiri on July 13, 2019
 * for Robojax Tutorial Robojax.com
 */
void printDegree()
{
    Serial.print("\\xC2");
    Serial.print("\\xB0");
}

Nghĩ bạn có thể cần

Tài nguyên & tài liệu tham khảo

Tập tin📁

Không có tệp nào khả dụng.