Урок 10 - Датчик температуры DS18B20, подключаем к Arduino.

.Урок 10 - Датчик температуры DS18B20, подключаем к Arduino.

В предыдущем уроке мы рассмотрели подключения датчика температуры и влажности DHT11 к Arduino. И выяснили что данный датчик не очень точный. Чем же его можно заменить? Одним из распространенных датчиков для измерения температуры являться DS18B20. Рассмотрим в данном уроке варианты подключения датчика, пару примеров программного решения.

Одним из распространенных датчиков для измерения температуры являться DS18B20

Характеристики датчика DS18B20:

  • Погрешность измерения не больше 0,5 С (для температур от -10С до +85С). Не требуется дополнительная калибровка.
  • Диапазон измерений от -55 С до +125 С.
  • Напряжение питания от 3,3В до 5В.
  • Датчик обладает своим уникальным серийным кодом.
  • Не требуются дополнительные внешние элементы.
  • Можно подключить сразу до 127 датчиков к одной линии связи.
  • Информация передается по протоколу Wire.
  • Существует так называемый режим паразитного питания – в нем происходит питание напрямую от линии связи. Для подключения в этом случае нужны только 2 провода. Важно, что в этом режиме не гарантируется корректная работа при температурах выше 100С. Режим паразитного питания удобно обычно применяется для приложений с удаленным температурным датчиком.

Датчик выпускается в открытом корпусе в виде транзистора для измерения температуры воздуха.

Датчик DS18B20 выпускается в открытом корпусе в виде транзистора для измерения температуры воздухаМожно купить датчик в виде модуля DS18B20. Распаренный на плате.

Можно купить датчик в виде модуля DS18B20Также датчик DS18B20 продеться в закрытом корпусе для измерения температуры жидкости.

Также датчик DS18B20 продеться в закрытом корпусе для измерения температуры жидкости

Для урока нам понадобиться:

Подключаем датчик DS18B20 к Arduino NANO вот по такой схеме.

Подключаем датчик DS18B20 к Arduino NANO

Подключение датчика DS18B20 к Arduino UNO будет вот таким.

Подключение датчика DS18B20 к Arduino UNO

Для написания программы нам понадобиться библиотека OneWire.

Данную библиотеку можно установить из менеджера библиотек или скачать отсюда.

Код ниже будет выводить показание температуры в монитор порта каждую секунду.

 <code>#include <OneWire.h>
OneWire ds(2);
void setup() {
    Serial.begin(9600);
}
void loop() {
    byte i;
    byte data[12];
    byte addr[8];
    float celsius;
    // поиск датчика
    if ( !ds.search(addr)) {
        ds.reset_search();
        delay(250);
        return;
    }
    ds.reset();
    ds.select(addr);
    ds.write(0x44, 1); // измерение температуры
    delay(1000);
    ds.reset();
    ds.select(addr); 
    ds.write(0xBE); // начало чтения измеренной температуры
    //показания температуры из внутренней памяти датчика
    for ( i = 0; i < 9; i++) {
        data[i] = ds.read();
    }
    int16_t raw = (data[1] << 8) | data[0];
    // датчик может быть настроен на разную точность, выясняем её 
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс
    else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс
    else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс
    // преобразование показаний в градусы Цельсия 
    celsius = (float)raw / 16.0;
    Serial.print("t=");
    Serial.println(celsius);
}
</code>

Код ниже будет выводить показание температуры в монитор порта каждую секунду

Но данный пример достаточно сложный для понимания. Для упрощения работы с датчиком лучше использовать библиотеку DallasTemperature. Данная библиотека ставиться поверх OneWire. Т.е. для ее роботы должна быть установлена библиотека OneWire.

С библиотекой DallasTemperature устанавливаются примеры. Вы можете воспользоваться любым из них.

Мы рассмотрим более простотой пример.

<code>#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: ");
  //  в Цельсиях:
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print(" - Fahrenheit temperature: ");
  //  в Фаренгейтах:
  Serial.println(sensors.getTempFByIndex(0));
  delay(1000);
}
</code>

В данном примере температура выводиться 1 раз в секунду. И при этом выводится температура в Цельсиях и фарингитах.

В данном примере температура выводиться 1 раз в секунду.

Как видите данный пример намного меньше и более понятен для новичка.


На одну шину можно подключить до 127 датчиков вот по такой схеме.

На одну шину можно подключить до 127 датчиков вот по такой схеме

С библиотекой DallasTemperature идут примеры которые позволяют получать данные с датчиков при током подключении.

Больше фото тут: Фото для урока 10. Подключаем DS18B20 к Arduino

Предыдущий урок: Урок 9 - Подключаем датчик температуры и влажности DHT11 к Arduino


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

Файлы для скачивания

скачать библиотеку OneWire скачать библиотеку OneWire.zip21 Kb Скачивать файлы могут только зарегистрированные пользователи.
скачать библиотеку DallasTemperature скачать библиотеку DallasTemperature.zip32 Kb Скачивать файлы могут только зарегистрированные пользователи.
Вернуться в раздел: Уроки Arduino: Подключение датчиков и модулей к Arduino Дата публикации 16 июня , 2019

Комментарии

Ваше Имя*
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.


Яндекс.Метрика


Portal-PK (Портал ПК) © 2015 - 2019 Робототехника на F-studio.biz
ЧПУ
Подписаться на новости
RSS