Cách sử dụng cảm biến nhiệt độ LM35 (LM35DZ), LM335 và LM34 với Arduino.


Hướng dẫn này cho biết cách sử dụng cảm biến nhiệt độ LM35 (LM35DZ), LM335 và LM34 với Arduino. Chúng tôi sẽ chỉ cho bạn cách nối dây các cảm biến và viết mã để có được số đọc nhiệt độ. Cuối cùng, chúng tôi làm một ví dụ để hiển thị số đọc cảm biến trên màn hình OLED.


Bạn có thể tham khảo & mua linh kiện tại đây:

  1. Mạch Arduino UNO R3
  2. Màn hình Oled I2C SSD1360 0.96 inch
  3. Test board (Breadboard)
  4. Dây cắm test board
  5. Điện trở 4.7k ôm
  6. LM 35

Giới thiệu cảm biến nhiệt độ LM35, LM335 và LM34

LM35, LM335 và LM34 là các cảm biến nhiệt độ tuyến tính tạo ra điện áp tỷ lệ thuận với giá trị nhiệt độ.

Cảm biến nhiệt độ
Điện áp đầu ra
Tuyến tính
LM35 (LM35DZ)tỷ lệ thuận với nhiệt độ trong Celsius (ºC)10mV/ºC
LM335tỷ lệ thuận với nhiệt độ trong Kelvin (ºK)10mV/ºK
LM34tỷ lệ thuận với nhiệt độ trong Fahrenheit (ºF)10mV/ºF

Các cảm biến này hoạt động theo cách tương tự, nhưng được hiệu chỉnh khác nhau để tạo ra điện áp tỷ lệ thuận với các đơn vị nhiệt độ khác nhau.

LM35 tạo ra nhiệt độ tăng 10 mV mỗi độ C. Theo cách tương tự, LM335 tạo ra nhiệt độ tăng 10 mV mỗi độ Kelvin và LM34 tạo ra nhiệt độ tăng 10 mV mỗi độ Fahrenheit.

Ví dụ: nếu LM35 tạo ra điện áp 345 mV, điều đó có nghĩa là chúng ta có giá trị nhiệt độ là 34.5ºC.

Để biết thêm thông tin về các cảm biến này, bạn có thể tham khảo datasheet của chúng:

LM35 chỉ có ba chânVCCVout và GND.

Tại đây, các kết nối bạn cần thực hiện giữa LM35 và Arduino:

LM35 / LM34Arduino
VCC5V
VoutAny Analog Pin
GNDGND

Lưu ý: nếu bạn sử dụng cảm biến nhiệt độ LM34, thì pinout giống với LM35.

LM335 Pinout

Sơ đồ chân của cảm biến nhiệt độ LM335 hơi khác nhau.



LM335Arduino
AdjDon’t connect
VoutBất kỳ Pin tương tự (kéo lên với điện trở 2k Ohm)
GNDGND

Pin adj có thể được sử dụng để hiệu chỉnh cảm biến và thu được số đọc nhiệt độ chính xác hơn. Chúng tôi đã không sử dụng pin đó trong hướng dẫn này, vì vậy nó sẽ không được kết nối.


LM335 with Arduino

Code – Read Temperature


Đoạn mã sau đọc nhiệt độ từ cảm biến LM35 và hiển thị số đọc trong Serial Monitor.
/*
 * Rui Santos
 * Complete Project Details https://RandomNerdTutorials.com
 */
 
const int sensorPin = A0; 
float sensorValue;
float voltageOut;

float temperatureC;
float temperatureF;

// uncomment if using LM335
//float temperatureK;

void setup() {
  pinMode(sensorPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  voltageOut = (sensorValue * 5000) / 1024;
  
  // calculate temperature for LM35 (LM35DZ)
  temperatureC = voltageOut / 10;
  temperatureF = (temperatureC * 1.8) + 32;

  // calculate temperature for LM335
  //temperatureK = voltageOut / 10;
  //temperatureC = temperatureK - 273;
  //temperatureF = (temperatureC * 1.8) + 32;

  // calculate temperature for LM34
  //temperatureF = voltageOut / 10;
  //temperatureC = (temperatureF - 32.0)*(5.0/9.0);

  Serial.print("Temperature(ºC): ");
  Serial.print(temperatureC);
  Serial.print("  Temperature(ºF): ");
  Serial.print(temperatureF);
  Serial.print("  Voltage(mV): ");
  Serial.println(voltageOut);
  delay(1000);
}

Mã hoạt động như thế nào

Bạn bắt đầu bằng cách xác định chân được kết nối với đầu ra cảm biến. Nó phải là một pin tương tự. Chúng tôi sử dụng pin A0nhưng bạn có thể sử dụng bất kỳ pin tương tự khác.
const int sensorPin = A0;
Xác định một biến sẽ giữ giá trị tương tự đọc từ cảm biến:
float sensorValue;
Biến voltageOut sẽ lưu trữ giá trị đầu ra điện áp thực tế đến từ cảm biến.
float voltageOut;
Sau đó, tạo các biến sẽ lưu trữ giá trị nhiệt độ. Ở đây, chúng tôi tạo ra một biến temperatureC và một biến temperatureF để giữ nhiệt độ tương ứng bằng Celsius và Fahrenheit.
float temperatureC;
float temperatureF;
Nếu bạn sử dụng cảm biến LM335, bạn cũng cần một biến để giữ nhiệt độ trong Kelvin. Vì vậy, nếu bạn sử dụng cảm biến đó, bạn cần bỏ dòng sau:
//float temperatureK;
Trong setup(), khai báo sensorPin làm đầu vào:
pinMode(sensorPin, INPUT);
Khởi tạo giao tiếp nối tiếp ở tốc độ baud là 9600. Bạn cần khởi tạo giao tiếp nối tiếp để có thể hiển thị các bài đọc trên Màn hình nối tiếp:
Serial.begin(9600);
Trong hàm loop()đọc giá trị đến từ cảm biến của bạn và lưu nó vào biến voltageOut . Để đọc một giá trị tương tự với Arduino, bạn chỉ cần sử dụng hàm analogRead() và truyền mã pin bạn muốn đọc làm đối số.
voltageOut = analogRead(sensorPin);
Như đã đề cập trước đây, các cảm biến này tạo ra một giá trị điện áp tỷ lệ thuận với nhiệt độ.

Các giá trị tương tự được đọc từ Arduino có thể có giá trị từ 0 đến 1024, trong đó 0 tương ứng với 0V và 1024 đến 5V. Vì vậy, chúng ta có thể dễ dàng có được điện áp đầu ra của cảm biến trong mV.
voltageOut = (sensorValue * 5000) / 1024
Trong trường hợp cảm biến LM35, chúng tôi đã thấy rằng 10mV tương ứng với mức tăng nhiệt độ Celsius. Vì vậy, nhiệt độ tính bằng Celsius tương ứng với điện áp đọc từ cảm biến tính bằng mV chia cho 10mV.
temperatureC = voltageOut / 10;
Để có được nhiệt độ bằng Fahrenheit, chúng ta chỉ cần sử dụng chuyển đổi Celsius -> Fahrenheit:

Serial.print("Temperature(ºC): ");
Serial.print(temperatureC);
Serial.print("  Temperature(ºF): ");
Serial.print(temperatureF);
Đối với mục đích gỡ lỗi, chúng tôi cũng in điện áp.

Serial.print("  Voltage(mV): ");
Serial.println(voltageOut);
Hàm loop() iđược lặp mỗi giây

delay(1000);

Biên dịch và kết quả

Tải mã lên Arduino IDE của bạn. Đừng quên chọn đúng board và cổng COM bên phải trong menu Công cụ.

Sau đó, mở Serial Monitor ở tốc độ baud là 9600. Bạn sẽ thấy được giá trị nhiệt độ mới mỗi giây. Bạn có thể che cảm biến bằng ngón tay để xem giá trị nhiệt độ tăng.


Chỉ số nhiệt độ trong màn hình OLED

Phần này chúng tôi sẽ chỉ cho bạn cách hiển thị số đọc cảm biến của bạn trong màn hình OLED.

Để có hướng dẫn chuyên sâu về cách sử dụng màn hình OLED với Arduino, hãy làm theo hướng dẫn tiếp theo:


Linh kiện và đồ dùng cần thiết

Đối với ví dụ này, bạn sẽ cần các phần sau:
Sơ đồ
Đấu dây tất cả các thành phần như trong sơ đồ tiếp theo:
Cài đặt thư viện OLED
Để điều khiển màn hình OLED, bạn cần các thư viện adafruit_SSD1306.hadafruit_GFX.hThực hiện theo các hướng dẫn tiếp theo để cài đặt các thư viện.

1. Mở Arduino IDE của bạn và đi đến Sketch Include Library > Manage Libraries. Trình quản lý thư viện sẽ mở.

2. Nhập vào  “SSD1306, trong hộp tìm kiếm và cài đặt thư viện SSD1306 từ Adafruit.


3. Sau khi cài đặt thư viện SSD1306 từ Adafruit, hãy nhập GFX trực tiếp vào hộp tìm kiếm và cài đặt thư viện.


4. Sau khi cài đặt các thư viện, hãy khởi động lại Arduino IDE của bạn.

Code – Display Readings on OLED

Sau khi đấu dây mạch và cài đặt các thư viện cần thiết, hãy tải đoạn mã sau lên bảng Arduino của bạn.

/*
 * Rui Santos
 * Complete Project Details https://RandomNerdTutorials.com
 */

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

const int sensorPin = A0; 
float sensorValue;
float voltageOut;

float temperatureC;
float temperatureF;

// uncomment if using LM335
//float temperatureK;

void setup() {
  pinMode(sensorPin, INPUT);
  Serial.begin(9600);

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  voltageOut = (sensorValue * 5000) / 1024;
  
  // calculate temperature for LM35 (LM35DZ)
  temperatureC = voltageOut / 10;
  temperatureF = (temperatureC * 1.8) + 32;

  // calculate temperature for LM335
  //temperatureK = voltageOut / 10;
  //temperatureC = temperatureK - 273;
  //temperatureF = (temperatureC * 1.8) + 32;

  // calculate temperature for LM34
  //temperatureF = voltageOut / 10;
  //temperatureC = (temperatureF - 32.0)*(5.0/9.0);

  Serial.print("Temperature(ºC): ");
  Serial.print(temperatureC);
  Serial.print("  Temperature(ºF): ");
  Serial.print(temperatureF);

  // clear display
  display.clearDisplay();

  // display temperature Celsius
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0,10);
  display.print(temperatureC);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");

  // display temperature Fahrenheit
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(temperatureF);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("F");

  display.display();    
  delay(1000);
 }

Biên dịch và kết quả

Bây giờ, bạn có thể kiểm tra số đọc cảm biến trong màn hình OLED. Chỉ số nhiệt độ mới được cập nhật theo từng giây.


Kết luận

LM35, LM335 và LM34 là các cảm biến nhiệt độ tuyến tính tạo ra điện áp tỷ lệ thuận với giá trị nhiệt độ. Chúng có thể được cung cấp năng lượng bởi chân Arduino 5V và để đọc điện áp, bạn sử dụng chân analog.

Đọc điện áp từ cảm biến cũng dễ như sử dụng chức năng analogRead() trên chân cảm biến. Sau đó, bạn chỉ cần thực hiện một phép tính đơn giản để có được nhiệt độ trong đơn vị mong muốn của bạn.

Thanks for reading.

Post a Comment

Previous Post Next Post