Cách lập trình cảm biến nhiệt độ DS18B20 với Arduino siêu chi tiết

Cách lập trình cảm biến nhiệt độ DS18B20 với Arduino siêu chi tiết

13 phút đọc Hướng dẫn chi tiết lập trình cảm biến DS18B20 với Arduino, giúp bạn dễ dàng đo nhiệt độ chính xác và ứng dụng trong nhiều dự án.
(0 Đánh giá)
Khám phá cách lập trình cảm biến nhiệt độ DS18B20 với Arduino qua bài viết siêu chi tiết, từ kết nối phần cứng đến viết code và xử lý dữ liệu, giúp bạn ứng dụng hiệu quả trong các dự án IoT và tự động hóa.
Cách lập trình cảm biến nhiệt độ DS18B20 với Arduino siêu chi tiết

Cách Lập Trình Cảm Biến Nhiệt Độ DS18B20 Với Arduino Siêu Chi Tiết

Khám phá sức mạnh của DS18B20 trong đo nhiệt độ

Bạn đã từng tự hỏi làm thế nào để đo nhiệt độ một cách chính xác, tiết kiệm chi phí và dễ dàng tích hợp vào các dự án điện tử của mình? Cảm biến nhiệt độ DS18B20 chính là câu trả lời. Đây là một trong những cảm biến nhiệt độ kỹ thuật số phổ biến nhất hiện nay, nổi bật với độ chính xác cao, giao tiếp đơn giản qua một dây tín hiệu duy nhất, và khả năng đo nhiệt độ trong khoảng rộng từ -55°C đến +125°C.

Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu cách lập trình cảm biến nhiệt độ DS18B20 với Arduino một cách chi tiết và dễ hiểu nhất, từ khâu kết nối phần cứng, cài đặt thư viện, viết code đến xử lý dữ liệu thực tế. Bạn sẽ không chỉ nắm bắt được lý thuyết mà còn có thể áp dụng ngay vào các dự án IoT, hệ thống tự động hóa hay các ứng dụng đo nhiệt độ khác.


Giới thiệu về cảm biến DS18B20 và Arduino

DS18B20 là gì?

DS18B20 là cảm biến nhiệt độ kỹ thuật số do Dallas Semiconductor (nay là Maxim Integrated) phát triển. Điểm nổi bật của DS18B20 bao gồm:

  • Giao tiếp 1-Wire: chỉ cần một dây tín hiệu duy nhất để giao tiếp với vi điều khiển.
  • Độ phân giải có thể lập trình từ 9 đến 12 bit, cho phép độ chính xác lên đến 0.0625°C.
  • Dải đo rộng từ -55°C đến +125°C, phù hợp với nhiều ứng dụng.
  • Có thể cấp nguồn qua dây tín hiệu (parasite power) hoặc nguồn riêng.
  • Có thể kết nối nhiều cảm biến trên cùng một dây tín hiệu.

Arduino – nền tảng lập trình linh hoạt

Arduino là nền tảng vi điều khiển phổ biến, dễ sử dụng, với cộng đồng lớn và nhiều thư viện hỗ trợ. Việc kết hợp Arduino với DS18B20 tạo nên một bộ đôi hoàn hảo để đo nhiệt độ trong các dự án DIY, tự động hóa nhà cửa, thiết bị y tế, hoặc các hệ thống giám sát môi trường.


Phần cứng cần chuẩn bị

  • Arduino Uno (hoặc bất kỳ phiên bản Arduino nào)
  • Cảm biến nhiệt độ DS18B20
  • Điện trở 4.7 kΩ
  • Dây nối
  • Breadboard (bảng mạch thử)

Sơ đồ kết nối

DS18B20         Arduino
---------------------------------
VDD (pin 3)  -> 5V (Arduino 5V)
GND (pin 1)  -> GND (Arduino GND)
DQ (pin 2)   -> Digital Pin 2 (Arduino)
Điện trở 4.7kΩ giữa VDD và DQ

Lưu ý: Nếu bạn muốn sử dụng chế độ cấp nguồn parasite, bạn có thể bỏ qua kết nối VDD và nối pin VDD của DS18B20 vào GND.


Cài đặt phần mềm và thư viện

Để lập trình DS18B20 với Arduino, bạn cần cài đặt thư viện "OneWire" và "DallasTemperature" trong Arduino IDE:

  1. Mở Arduino IDE.
  2. Vào Sketch > Include Library > Manage Libraries...
  3. Tìm kiếm "OneWire" và cài đặt.
  4. Tìm kiếm "DallasTemperature" và cài đặt.

Thư viện OneWire giúp Arduino giao tiếp với các thiết bị sử dụng giao tiếp 1-Wire, còn DallasTemperature hỗ trợ trực tiếp cho cảm biến DS18B20.


Viết code chi tiết

Dưới đây là ví dụ code đầy đủ, có chú thích rõ ràng:

#include <OneWire.h>
#include <DallasTemperature.h>

// Chân kết nối data của DS18B20
#define ONE_WIRE_BUS 2

// Khởi tạo đối tượng OneWire
OneWire oneWire(ONE_WIRE_BUS);

// Khởi tạo đối tượng DallasTemperature
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(9600);
  sensors.begin(); // Khởi động cảm biến
  Serial.println("DS18B20 Temperature Sensor Initialized");
}

void loop() {
  sensors.requestTemperatures(); // Yêu cầu đo nhiệt độ
  float temperatureC = sensors.getTempCByIndex(0); // Lấy nhiệt độ cảm biến đầu tiên

  if (temperatureC == DEVICE_DISCONNECTED_C) {
    Serial.println("Error: Could not read temperature data");
  } else {
    Serial.print("Temperature: ");
    Serial.print(temperatureC);
    Serial.println(" °C");
  }

  delay(1000); // Đợi 1 giây trước khi đo lại
}

Phân tích code:

  • OneWire oneWire(ONE_WIRE_BUS); tạo giao tiếp 1-Wire trên chân số 2.
  • DallasTemperature sensors(&oneWire); tạo đối tượng cảm biến DS18B20.
  • sensors.begin(); khởi tạo cảm biến.
  • sensors.requestTemperatures(); gửi lệnh đo nhiệt độ.
  • sensors.getTempCByIndex(0); lấy giá trị nhiệt độ của cảm biến đầu tiên trên bus.

Nếu có nhiều cảm biến, bạn có thể dùng getTempC(DeviceAddress deviceAddress) để lấy nhiệt độ từng cảm biến riêng biệt.


Xử lý nhiều cảm biến DS18B20 trên cùng một bus

DS18B20 cho phép kết nối nhiều cảm biến trên cùng một dây dữ liệu, rất thuận tiện cho việc giám sát nhiệt độ ở nhiều vị trí.

Tìm địa chỉ từng cảm biến

DeviceAddress tempDeviceAddress;

void printAddress(DeviceAddress deviceAddress) {
  for (uint8_t i = 0; i < 8; i++) {
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

void setup() {
  Serial.begin(9600);
  sensors.begin();
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount());
  Serial.println(" devices.");

  for (int i = 0; i < sensors.getDeviceCount(); i++) {
    if (sensors.getAddress(tempDeviceAddress, i)) {
      Serial.print("Device ");
      Serial.print(i);
      Serial.print(" Address: ");
      printAddress(tempDeviceAddress);
      Serial.println();
    } else {
      Serial.println("Unable to find address for Device ");
      Serial.println(i);
    }
  }
}

void loop() {
  sensors.requestTemperatures();
  for (int i = 0; i < sensors.getDeviceCount(); i++) {
    if (sensors.getAddress(tempDeviceAddress, i)) {
      float tempC = sensors.getTempC(tempDeviceAddress);
      Serial.print("Sensor #");
      Serial.print(i);
      Serial.print(" Temperature: ");
      Serial.print(tempC);
      Serial.println(" °C");
    }
  }
  delay(2000);
}

Giải thích:

  • getDeviceCount() trả về số lượng cảm biến trên bus.
  • getAddress() lấy địa chỉ 64-bit của cảm biến.
  • getTempC(deviceAddress) lấy nhiệt độ theo địa chỉ.

Việc này giúp bạn kiểm soát từng cảm biến riêng biệt, thuận tiện cho các hệ thống giám sát nhiều điểm nhiệt độ.


Những lưu ý quan trọng khi sử dụng DS18B20

  • Chọn điện trở kéo lên (pull-up resistor) đúng giá trị: Thông thường 4.7 kΩ là phù hợp cho khoảng cách dây ngắn. Nếu dây dài hơn 5 mét, nên sử dụng điện trở nhỏ hơn hoặc nguồn riêng cho cảm biến.
  • Cấp nguồn ổn định: Nếu dùng chế độ parasite power, lưu ý rằng nó có thể gây lỗi khi nhiều cảm biến hoạt động cùng lúc hoặc dây dẫn dài.
  • Kiểm tra kết nối dây: Đảm bảo dây data không bị đứt hoặc lỏng để tránh mất tín hiệu.
  • Sử dụng thư viện chuẩn: DallasTemperature và OneWire được cộng đồng kiểm chứng và tối ưu, tránh sử dụng code thủ công kém hiệu quả.

Ứng dụng thực tế của cảm biến DS18B20 với Arduino

1. Hệ thống giám sát nhiệt độ môi trường

Bạn có thể xây dựng hệ thống theo dõi nhiệt độ trong nhà, kho lạnh, hoặc nông nghiệp thông minh. Kết hợp DS18B20 với Arduino và module hiển thị LCD hoặc gửi dữ liệu lên Internet qua module WiFi.

2. Điều khiển nhiệt độ tự động

Dựa trên nhiệt độ đo được, Arduino có thể điều khiển quạt, máy sưởi hoặc thiết bị làm lạnh để duy trì nhiệt độ ổn định.

3. Dự báo thời tiết DIY

Kết hợp nhiều cảm biến DS18B20 đo nhiệt độ các vị trí khác nhau cùng với các cảm biến khác như độ ẩm, áp suất để xây dựng trạm dự báo thời tiết cá nhân.

4. Hệ thống cảnh báo quá nhiệt

Áp dụng trong các thiết bị điện tử, máy móc để phát hiện và cảnh báo khi nhiệt độ vượt ngưỡng an toàn.


Kết luận và lời khuyên

Việc lập trình cảm biến nhiệt độ DS18B20 với Arduino không chỉ đơn giản mà còn mở ra rất nhiều cơ hội sáng tạo trong các dự án điện tử và tự động hóa. Qua bài viết này, bạn đã nắm rõ cách kết nối phần cứng, cài đặt thư viện, viết code đo nhiệt độ chính xác và xử lý nhiều cảm biến cùng lúc.

Để dự án thành công, hãy chú ý đến phần cứng, đặc biệt là điện trở kéo lên và nguồn cấp cho cảm biến. Đồng thời, tận dụng các thư viện chuẩn để giảm thiểu lỗi và tối ưu hóa hiệu năng.

Cuối cùng, đừng ngại thử nghiệm và mở rộng ứng dụng của DS18B20 trong các hệ thống IoT, giúp cuộc sống và công việc của bạn trở nên thông minh hơn. Chúc bạn thành công với dự án đo nhiệt độ Arduino của mình!


Tài liệu tham khảo

Đánh giá bài viết

Thêm bình luận & đánh giá

Đánh giá của người dùng

Dựa trên 0 đánh giá
5 Star
0
4 Star
0
3 Star
0
2 Star
0
1 Star
0
Thêm bình luận & đánh giá
Chúng tôi sẽ không bao giờ chia sẻ email của bạn với bất kỳ ai khác.