Giới thiệu về DS18B20
Cảm biến nhiệt độ DS18B20 IC đo nhiệt độ mới của hãng MAXIM với độ phân giải cao (12bit), cảm biến nhiệt độ IC sử dụng giao tiếp 1 dây rất gọn gàng, dễ lập trình và giao tiếp nhiều DS18B20 trên cùng 1 dây. IC còn có chức năng cảnh báo nhiệt độ khi vượt ngưỡng và đặc biệt hơn là có thể cấp nguồn từ chân data (parasite power).
Để đo được nhiệt độ ta cần thêm 1 điện trở 4.7k Ohm nối từ chân DQ lên VCC
THÔNG SỐ KỸ THUẬT
Nguồn: 3 – 5.5V
Dải đo nhiệt độ: -55 – 125 độ C ( -67 – 257 độ F)
Sai số: +- 0.5 độ C khi đo ở dải -10 – 85 độ C
Độ phân giải: người dùng có thể chọn từ 9 – 12 bits
Chuẩn giao tiếp: 1-Wire (1 dây).
Có cảnh báo nhiệt khi vượt ngưỡng cho phép và cấp nguồn từ chân data.
Thời gian chuyển đổi nhiệt độ tối đa: 750ms ( khi chọn độ phân giải 12bit ).
Mỗi IC có một mã riêng (lưu trên EEPROM của IC), DS18B20 có mã nhận diện lên đến 64-bit, vì vậy bạn có thể kiểm tra nhiệt độ với nhiều IC DS18B20 mà chỉ dùng 1 dây dẫn duy nhất để giao tiếp với các IC này.

Code lập trình nhiều cảm biến trên một dây

#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(DS18B20_PIN);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
Serial.println("Do nhieu cam bien nhiet do DS18B20");
sensors.begin(); // DS18B20 start
Serial.print("Sensor: ");
}
void loop(){
sensors.requestTemperatures();
for(byte i=0;i<sensors.getDeviceCount();i++)
{
show_temperature(i+1,sensors.getTempCByIndex(i));
}
delay(2000);
}
void show_temperature(byte num,float temp){
Serial.print("Sensor ");
Serial.print(num);
Serial.print(": ");
Serial.print(temp);
Serial.print(" ");
Serial.write(176); // um das °-Zeichen korrekt darzustellen
Serial.println("C");
Code khác:
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into digital pin 2 on the Arduino
#define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any OneWire device
OneWire oneWire(ONE_WIRE_BUS);
// Pass oneWire reference to DallasTemperature library
DallasTemperature sensors(&oneWire);
int deviceCount = 0;
float tempC;
void setup(void)
{
sensors.begin(); // Start up the library
Serial.begin(9600);
// locate devices on the bus
Serial.print("Locating devices...");
Serial.print("Found ");
deviceCount = sensors.getDeviceCount();
Serial.print(deviceCount, DEC);
Serial.println(" devices.");
Serial.println("");
}
void loop(void)
{
// Send command to all the sensors for temperature conversion
sensors.requestTemperatures();
// Display temperature from each sensor
for (int i = 0; i < deviceCount; i++)
{
Serial.print("Sensor ");
Serial.print(i+1);
Serial.print(" : ");
tempC = sensors.getTempCByIndex(i);
Serial.print(tempC);
Serial.print((char)176);//shows degrees character
Serial.print("C | ");
Serial.print(DallasTemperature::toFahrenheit(tempC));
Serial.print((char)176);//shows degrees character
Serial.println("F");
}
Serial.println("");
delay(1000);
}
//Nguồn: https://lastminuteengineers.com/