• Производится отгрузка заказов через пункты выдачи Boxberry!
  • Производится курьерская доставка по г. Москва!
  • Производится курьерская доставка EMS!
  • Остальные способы получения заказа временно недоступны.
  • КОРЗИНА
    0 ТОВАРА
    8 (499) 500-14-56 | ПН. - ПТ. 12:00-20:00
    ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"
     Датчик температуры DS18B20+ для Arduino ардуино

    Датчик температуры DS18B20+ для Arduino

    Модификация
    Артикул: # 36 Наличие: 0 шт.
    Сообщить о поставке на e-mail:
    {{ status }}


    Возможен безналичный расчёт для юридических лиц при оформлении заказа

    С этим товаром берут

    Общие сведения

    Датчик температуры DS18B20+ — позволит измерять температуру окружающей среды.

    Характеристики

    • Диапазон измеряемой температуры: −55… 125 °C
    • Напряжение питания: от 3 В до 5,5 В
    • Точность: ±0,5°C (в пределах −10… 85 °C)
    • Потребляемый ток при опросе: 1 мА

    Подключение

    Для удобства подключения к Arduino воспользуйтесь Trema ShieldTrema Power ShieldMotor Shield или Trema Set Shield.

    • Красный — 5V;
    • Черный — GND;
    • Желтый — любой цифровой вывод Arduino;

    Сигнальный провод (жёлтый) необходимо соединить с проводом питания (красный) через резистор 4.7кОм. При подключении только одного датчика можно воспользоваться резистором на 10кОм (в любом удобном Вам формате: стандартный или для макетирования).

    Подробнее о датчике

    Для работы с модулем предлагаем воспользоваться библиотекой OneWhire.

    Подробнее про установку библиотеки читайте в нашей инструкции..

    Примеры

    Вывод адреса, модели, температуры в монитор последовательного порта.

    #include <OneWire.h>                          // подключаем библиотеку для работы с интерфейсом OneWire
    OneWire  ds(2);                               // Создаём объект с именем ds, и указанием пина, к которому подключен датчик
    
    void setup(void) {
      Serial.begin(9600);                         // инициируем передачу данных в монитор последовательного порта на скорости 9600 бит/сек
    }
    void loop(void) {
      byte i;                                     // задаём переменную для счётчика
      byte present = 0;                           // Флаг сброса шины
      byte type_s;                                // Флаг модели датчика
      byte data[12];                              // массив под значения температуры, считанные с датчика
      byte addr[8];                               // массив под значение адреса датчика
      float celsius, fahrenheit;                  // переменные под значения температуры в градусах Цельсия и Фаренгейта
      if ( !ds.search(addr)) {                    // если функция принимает значение false, значит
        Serial.println("No more addresses.");     // больше устройств не найдено. Выводит в монитор порта сообщение об этом.
        Serial.println();                         // добавляем символ новой строки
        ds.reset_search();                        // функция начинает новый поиск устройства.
        delay(250);                               // задержка 250 мсек
        return;
      }
      Serial.print("ROM =");                      // выводим текст в монитор порта. "ROM" - это адрес устройства
      for ( i = 0; i < 8; i++) {                  // запускаем цикл
        Serial.write(' ');                        // между значениями добавляем пробел
        Serial.print(addr[i], HEX);               // в монитор порта побайтово выводим адрес устройства в 16-ричной кодировке
      }
      if (OneWire::crc8(addr, 7) != addr[7]) {    // выполяем проверка контрольной суммы CRC
        Serial.println("CRC is not valid!");      // если контрольная сумма не верна - отправляем в монитор порта сообщение об этом
        return;
      }
      Serial.println();                           // добавляем символ новой строки
      switch (addr[0]) {// Модель датчика температуры                                       Флаг типа модуля                В данном блоке проверяем значение старшего байта полученного адреса и по нему определяем модель модуля
        case 0x10:          Serial.println("  Chip = DS18S20");                             type_s = 1;        break;
        case 0x28:          Serial.println("  Chip = DS18B20");                             type_s = 0;        break;
        case 0x22:          Serial.println("  Chip = DS1822");                              type_s = 0;        break;
        default:            Serial.println("Device is not a DS18x20 family device.");                          return;
      }
      ds.reset();                                 // производим сброс шины перед началом работы с модулем
      ds.select(addr);                            // указываем устройство, с которым далее будет работать код
      ds.write(0x44, 0);                          // отправка команды выполнить конвертацию
      delay(1000);                                // задержка в 1 сек (для выполнения конвертации)
      present = ds.reset();                       // флаг сброса шины перед приёмом данных с модуля
      ds.select(addr);                            // указываем устройство, с которым далее будет работать код
      ds.write(0xBE);                             // считываем значение из scratchpad-памяти модуля
      Serial.print("  Data = ");                  // в монитор порта выводим текст "Значение"
      Serial.print(present, HEX);                 // выводим в монитор порта значение с модуля, в 16-ричной кодировке
      Serial.print(" ");                          // добавляем символ новой строки
      for ( i = 0; i < 9; i++) {                  // запускаем цикл считывания 9 байт информации с модуля
        data[i] = ds.read();                      // побайтовое чтение значений с модуля
        Serial.print(data[i], HEX);               // выводим в монитор порта значение байта, считанного с модуля
        Serial.print(" ");                        // между значениями добавляем пробел
      }
      Serial.print(" CRC=");                      // выводим в монитор порта текст CRC (контрольная сумма)
      Serial.print(OneWire::crc8(data, 8), HEX);  // выводим в монитор порта значение CRC
      Serial.println();                           // добавляем символ новой строки
      int16_t raw = (data[1] << 8) | data[0];     // конвертация значения температуры в 16-битный тип данных
      if (type_s) {                               // если подключена модель DS18S20
        raw = raw << 3;                           // тогда сдвигаем значение на 3 влево для получения 12-битного разрешения точности температуры
        if (data[7] == 0x10) {                    // если указанный бит совпадает с условием, то
          raw = (raw & 0xFFF0) + 12 - data[6];    // пересчитываем сырое значение
        }
      } else {                                    // для всех остальных моделей
        byte cfg = (data[4] & 0x60);              // для задания разрешения вводится переменная (по умолчанию установлено 12-битное разрешение)
        if (cfg == 0x00) raw = raw & ~7;          // если значение переменной и указанного бита совпадают, тогда устанавливается 9-битное разрешение точности
        else if (cfg == 0x20) raw = raw & ~3;     // если значение переменной и указанного бита совпадают, тогда устанавливается 10-битное разрешение точности
        else if (cfg == 0x40) raw = raw & ~1;     // если значение переменной и указанного бита совпадают, тогда устанавливается 11-битное разрешение точности
      }
      celsius = (float)raw / 16.0;                // переводим значения в градусы Цельсия
      fahrenheit = celsius * 1.8 + 32.0;          // переводим значения в градусы Фаренгейта
      Serial.println("  Temperature = ");         // выводим в монитор порта текста Температура
      Serial.print(celsius);                      // выводим значения в градусах Цельсия
      Serial.println(" Celsius, ");               // выводим в монитор порта текста "градусы Цельсия"
      Serial.print(fahrenheit);                   // выводим значения в градусах Фаренгейта
      Serial.println(" Fahrenheit");              // выводим в монитор порта текста "градусы Цельсия"
    }

    В мониторе порта вы можете наблюдать:

    • ROM - адрес устройства на шине OneWire;
    • Chip - название модуля;
    • Data - сырое значение с модуля
    • Temperature Celsius - температура в градусах Цельсия;
    • Temperature Fahrenheit - температура в градусах Фаренгейта;

    Комплектация

    • 1х датчик температуры DS18B20+;

    Ссылки

    Похожие товары

    Гарантии и возврат Используя сайт Вы соглашаетесь с условями