Arduino:Примеры/Гайд по использованию температурного датчика DS18B20 с Arduino

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Черновик


Гайд по использованию температурного датчика DS18B20 с Arduino[1]

Это руководство объясняет, как считывать температуру при помощи температурного датчика DS18B20 и платы Arduino.

Температурный датчик DS18B20

Температурный датчик DS18B20 – это 1-проводной цифровой температурный датчик. Ему требуется очень простая электрическая цепь. Он коммуницирует через общую шину, и это значит, что вы можете считывать данные с нескольких температурных датчиков, используя всего один цифровой контакт Arduino.

Как видно на картинке ниже, этот датчик оснащен всего тремя контактами:

У датчика DS18B20 есть и водонепроницаемая версия:

Функции

Главные функции температурного датчика DS18B20:

  • Коммуникация: через 1-проводную шину
  • Диапазон измеряемой температуры: от -55°C до 125°C
  • Точность: +/- 0,5% (в диапазоне от -10°C до 85°C)

Считывание температуры с помощью DS18B20 и Arduino

Проект, который мы создадим, будет считывать температуру при помощи датчика DS18B20 и платы Arduino, а считанные значения будут показаны в мониторе порта IDE Arduino.

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

  • Одна плата Arduino Uno
  • Одна макетная плата
  • Один температурный датчик DS18B20
  • Один резистор на 4700 Ом
  • Провода-перемычки

Схема

Датчик DS18B20 может работать в двух режимах:

  • Нормальный режим. В этом случае нужно будет подключить все три контакта DS18B20. Ниже – схема того, каким должно быть подключение:
  • Паразитный режим. В этом случае нужно подключить только два контакта DS18B20: GND и контакт для передачи данных. Питание к датчику будет идти через контакт для данных.

Ниже – схема того, каким должно быть подключение:

Вы можете считывать температуру сразу с нескольких датчиков DS18B20, используя всего один цифровой контакт Arduino. Для этого вам нужно подключить контакты DQ от всех датчиков к цифровому контакту Arduino.

Код

Вам нужно будет установить две библиотеки: OneWire и Dallas Temperature.

Установка библиотеки OneWire

  1. Кликните здесь, чтобы скачать библиотеку OneWire. В результате в вашу папку загрузок должен скачаться ZIP-файл.
  2. Распакуйте этот ZIP-файл. В результате у вас должна получиться папка под названием «OneWire-master».
  3. Переименуйте папку «OneWire-master» на «OneWire».
  4. Переместите папку «OneWire» в папку библиотек IDE Arduino.
  5. Откройте IDE Arduino.

Установка библиотеки DallasTemperature

  1. Кликните здесь, чтобы скачать библиотеку DallasTemperature. В результате в вашу папку загрузок должен скачаться ZIP-файл.
  2. Распакуйте этот ZIP-файл. В результате у вас должна получиться папка под названием «Arduino-Temperature-Control-Library-master».
  3. Переименуйте папку «Arduino-Temperature-Control-Library-master» на «DallasTemperature».
  4. Переместите папку «DallasTemperature» в папку библиотек IDE Arduino.
  5. Наконец, откройте IDE Arduino.

После установки необходимых библиотек загрузите в IDE Arduino скетч, показанный ниже:

/*********
  Автор - Руи Сантос (Rui Santos)
  Более подробно о проекте на: http://randomnerdtutorials.com 
  За основу взят пример «Dallas Temperature Library»
*********/

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

// контакт для данных подключаем к цифровому контакту 2 на Arduino: 
#define ONE_WIRE_BUS 2

// создаем экземпляр класса OneWire, чтобы с его помощью
// общаться с однопроводным устройством
// (т.е. в нашем случае – с температурным датчиком):
OneWire oneWire(ONE_WIRE_BUS);

// передаем объект oneWire объекту sensors: 
DallasTemperature sensors(&oneWire);

void setup(void)
{
  // запускаем последовательную коммуникацию (в отладочных целях): 
  Serial.begin(9600);
  // запускаем библиотеку:
  sensors.begin();
}


void loop(void){ 
  // вызываем функцию sensors.requestTemperatures(), 
  // которая приказывает всем устройствам, подключенным к шине,
  // выполнить конверсию температурных данных:

  sensors.requestTemperatures();
  
  Serial.print("Celsius temperature: ");
  //  "Температура в Цельсиях: "
  // почему «byIndex»? к одной шине может быть подключено 
  // больше одного датчика; самое первое устройство на шине – это «0»:
  Serial.print(sensors.getTempCByIndex(0)); 
  Serial.print(" - Fahrenheit temperature: ");
  //  " - Температура в Фаренгейтах: "
  Serial.println(sensors.getTempFByIndex(0));
  delay(1000);
}

Наконец, открываем монитор порта IDE Arduino на скорости 9600 бод. В нем должны появиться данные о температуре – в градусах Цельсия и Фаренгейта.

См.также

Внешние ссылки