Cảm biến nhiệt độ DS18B20 có giải đo rộng (–55°C –> +125°C) độ chính xác cao, sai số nhỏ và giá thành hợp lý. Sử dụng kết nối chuẩn 1-wire cho phép tiết kiệm chân nối vi xử lý đồng thời giao tiếp cũng thuận tiện hơn.
Cảm biến có thể tận dụng đường Data để cấp nguồn, nghĩa là chỉ cần 2 dây (Data & GND). Điện áp nguồn nuôi từ 3.0V đến 5.5V.
Sai số chỉ ±0.5°C trong khoảng –10°C đến +85°C. Nó còn cho phép đặt cảnh báo nếu nhiệt độ vượt ngưỡng.
Khi sử dụng cần treo trở chân Data lên cao:
Sơ đồ nối dây:
Trong chương trình có sử dụng thư viện bổ sung:
/*************************************************************/ // First we include the libraries #include <OneWire.h> #include <DallasTemperature.h> #include <LiquidCrystal.h> /**************************************************************/ // Data wire is plugged into pin 10 on the Arduino #define ONE_WIRE_BUS 10 /**************************************************************/ // Setup a oneWire instance to communicate with OneWire devices // (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); /**************************************************************/ // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); /**************************************************************/ // LCD display const int rs = 12, en = 11, d4 = 2, d5 = 3, d6 = 4, d7 = 5; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // unsigned long CurrentTime = 0; unsigned long LastRead = 0; unsigned long ReadInterval = 500; // void setup(void) { // start serial port Serial.begin(9600); Serial.println("Dallas Temperature IC Control"); // Start up the library sensors.begin(); // LCD 16x2 lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("Nhiet do: "); // } void loop(void) { CurrentTime = millis(); // if (CurrentTime - LastRead > ReadInterval) { // call sensors.requestTemperatures() to issue a global temperature // request to all devices on the bus /**********************************************************/ Serial.print(" Requesting temperatures..."); sensors.requestTemperatures(); // Send the command to get temperature readings // Serial.println("DONE"); /**************************************************************/ Serial.print("Temperature is: "); Serial.println(sensors.getTempCByIndex(0)); // lcd.setCursor(10, 0); lcd.print(sensors.getTempCByIndex(0)); lcd.print("C"); // You can have more than one DS18B20 on the same bus. // 0 refers to the first IC on the wire LastRead = millis(); } }