Измерване на температура с Arduino NANO и DS18B20 сензор

Измерване на температура с Arduino NANO и DS18B20 сензор

В тази статия ще разгледаме как да използваме Arduino Nano и сензор DS18B20 за измерване на температурата. Ще използваме библиотеките OneWire и DallasTemperature, които могат лесно да бъдат инсталирани през Arduino IDE. Ще разгледаме кода и ще обясним как всяка част от него работи.

Необходими компоненти:

  • Arduino NANO
  • DS18B20 температурен сензор
  • 4.7 kΩ pull-up резистор
  • Кабели за свързване

Свързване на хардуера

Измерване на температура с Arduino NANO и DS18B20 сензор Схема

Arduino Nano е нашата страница в която може да се запознаете с параметрите и конфигурацията на пинове (pinout) на тази платформа.

Свържете VCC на DS18B20 към 5V на Arduino Nano, GND към земята, а DQ (сигналния пин) към пин D2 на Nano. За стабилна комуникация, свържете pull-up резистор 4.7kΩ между VCC и DQ.

Документация на DS18B20 сензора

DS18B20-datasheet

Инсталиране на библиотеки

  1. Отворете Arduino IDE.
  2. Отидете на Sketch -> Include Library -> Manage Libraries.
  3. В прозореца за управление на библиотеките потърсете DallasTemperature и OneWire, и натиснете Install. Започнете с инсталацията на DallasTemperature. В процеса на инсталация ще видите, че трябва да се инсталира и OneWire. Тогава ще ви се появи прозорец който ще ви пита “Искате ли да инсталирате липсващите зависимости (библиотеки)”. Щракнете на “Install All”, за да инсталирате двете библиотеки.
  4. Може да ги инсталирате ръчно като ги изтеглите от тук: OneWire, DallasTemperature.
Измерване на температура с Arduino NANO и DS18B20 сензор инсталиране на библиотеките

Ако не сте се запознали с възможностите на Arduino IDE и как се инсталират библиотеки в него, разгледайте нашата страница: Arduino IDE бърз преглед.

С тези библиотеки можем да управляваме DS18B20 сензора чрез Arduino Nano. Ако не

Код за изчитане на температурата с Arduino и DS18B20

Ето и кода, който ще използваме за измерване на температурата с DS18B20:

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup(void) {
  Serial.begin(9600);
  sensors.begin();
}

void loop(void) { 

  sensors.requestTemperatures();

  float tempC = sensors.getTempCByIndex(0);

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

Обяснение на кода

1. Импортиране на библиотеки

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

Първите два реда включват библиотеките OneWire и DallasTemperature. OneWire осигурява комуникация по 1-Wire (една жица), който използва DS18B20, докато DallasTemperature ни позволява лесно да четем данни от сензора.

2. Дефиниране на пин и създаване на обекти

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

Тук дефинираме пина, към който е свързан DS18B20 (в нашия случай D2 на Arduino Nano). След това създаваме обект oneWire, който използва този пин за комуникация. Обектът sensors е създаден с помощта на DallasTemperature библиотеката и ще използва oneWire за комуникация със сензора.

3. Настройки на програмата

void setup(void) {
  Serial.begin(9600);
  sensors.begin();
}

Във функцията setup() стартираме сериен монитор с Serial.begin(9600), за да можем да виждаме резултатите на компютър. С sensors.begin() инициализираме температурния сензор и го подготвяме за работа.

4. Основен цикъл за измерване на температура

void loop(void) { 

  sensors.requestTemperatures();

  float tempC = sensors.getTempCByIndex(0);

Във функцията loop() първо извикваме sensors.requestTemperatures(), за да кажем на сензора да започне измерване на температурата. След това, с getTempCByIndex(0), получаваме измерената температура в градуси Целзий за първия (или единствен) свързан сензор.

5. Проверка за правилно изчитане на данните

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

След като получим стойността на температурата, проверяваме дали резултатът е валиден. Ако температурата е различна от DEVICE_DISCONNECTED_C (индикатор, че няма връзка с устройството), тя се отпечатва на серийния монитор. В противен случай изписваме съобщение за грешка “Error: Could not read temperature data”.

Видео презентация на кода:

Заключение

Този код показва колко лесно можем да свържем и прочетем данни от DS18B20 температурен сензор, използвайки Arduino NANO и библиотеките OneWire и DallasTemperature. Програмата непрекъснато изисква и показва температурата на сензора в реално време. Това решение е подходящо за различни проекти, включително системи за мониторинг на околната температура, домашна автоматизация и много други.

Съвети за използване:

  • Можете да използвате повече от един DS18B20 сензор на една и съща 1-Wire линия, като всяко устройство има уникален адрес.
  • В случай на проблеми с конвертирането на температурата, проверете връзките и резистора (pull-up резисторът между VCC и DQ е задължителен).