Datasheet maxim ds18s20
Содержание:
- Datasheets
- Библиотека OneWire для работы с DS18B20
- Способ 2: чтение датчика DS18B20 по адресу
- Использование и применение
- Подключение датчика DS18B20 к Arduino
- Описание датчика DS18B20 для Arduino
- Как работают современные датчики температуры
- Примеры работы для Arduino
- Особенности
- Подключение устройства
- Взаимосвязь между разрешением датчика DS18B20 и температурой
- Программа 3
- Назначение выводов
Datasheets
Datasheet
PDF, 487 Кб
Выписка из документа
DS18S20 High-Precision 1-Wire Digital Thermometer General Description The DS18S20 digital thermometer provides 9-bit Celsius temperature measurements and has an alarm function with nonvolatile user-programmable upper and lower trigger points. The DS18S20 communicates over a 1-Wire bus that by definition requires only one data line (and ground) for communication with a central microprocessor. It has an operating temperature range of 55°C to +125°C and is accurate to ±0.5°C over the range of 10°C to +85°C. In addition, the DS18S20 can derive power directly from the data line («parasite power»), eliminating the need for an external power supply. Each DS18S20 has a unique 64-bit serial code, which allows multiple DS18S20s to function on the same 1-Wire bus. Thus, it is simple to use one microprocessor to control many DS18S20s distributed over a large area. Applications that can benefit from this feature include HVAC environmental controls, temperature monitoring systems inside buildings, equipment, or machinery, and process monitoring and control systems. Benefits and Features Unique 1-Wire Interface Requires Only One Port Pin for Communication Maximize System Accuracy in Broad Range of Thermal Management Applications Measures Temperatures from -55°C to +125°C (-67°F to +257°F) ±0.5°C Accuracy from -10°C to +85°C 9-Bit Resolution No External Components Required Parasite Power Mode Requires Only 2 Pins for Operation (DQ and GND) Simplifies Distributed Temperature-Sensing Applications with Multidrop Capability Each Device Has a Unique 64-Bit Serial Code Stored in On-Board ROM Flexible User-Definable Nonvolatile (NV) Alarm Settings with Alarm Search Command Identifies Devices with Temperatures Outside Programmed Limits Available in 8-Pin SO (150 mils) and 3-Pin TO-92 Packages Applications Thermostatic Controls Industrial Systems Consumer Products Thermometers Thermally Sensitive Systems Pin ConfigurationsTOP VIEW DS18S201 2 3 N.C. N.C. VDD GND 1 2 3 4 + DS18S20 8 7 6 5 N.C. N.C. N.C. GND SO (150 mils) (DS18S20Z) GND DQ VDD 2 3 1 Ordering Information appears at end of data sheet. 1-Wire is a registered trademark of Maxim Integrated Products, Inc. BOTTOM VIEW 1 TO-92 (DS18S20) 19-5474; Rev 2; 1/15 DS18S20 High-Precision 1-Wire Digital Thermometer Absolute Maximum RatingsVoltage Range on Any Pin Relative to Ground .-0.5V to +6.0V Continuous Power Dissipation (TA = +70°C) 8-Pin SO (derate 5.9mW/°C above +70°C).470.6mW 3-Pin TO-92 (derate 6.3mW/°C above +70°C) .500mW Operating Temperature Range . -55°C to +125°C Storage Temperature Range . -55°C to +125°C Lead …
Библиотека OneWire для работы с DS18B20
DS18B20 использует для обмена информацией с ардуино протокол 1-Wire, для которого уже написана отличная библиотека. Можно и нужно использовать ее, чтобы не реализовывать все функции вручную. Скачать OneWire можно здесь. Для установки библиотеки скачайте архив, распакуйте в папку library вашего каталога Arduino. Подключается библиотека с помощью команды #include <OneWire.h>
Основные команды библиотеки OneWire:
- search(addressArray) – ищет температурный датчик, при нахождении в массив addressArray записывается его код, в ином случае – false.
- reset_search() – производится поиск на первом приборе.
- reset() – выполнение сброса шины перед тем, как связаться с устройством.
- select(addressArray) – выбирается устройство после операции сброса, записывается его ROM код.
- write(byte) – производится запись байта информации на устройство.
- write(byte, 1) – аналогично write(byte), но в режиме паразитного питания.
- read() – чтение байта информации с устройства.
- crc8(dataArray, length) – вычисление CRC кода. dataArray – выбранный массив, length – длина кода.
Важно правильно настроить режим питания в скетче. Для паразитного питания в строке 65 нужно записать ds.write(0x44, 1);
Для внешнего питания в строке 65 должно быть записано ds.write(0x44).
Write позволяет передать команду на термодатчик. Основные команды, подаваемые в виде битов:
- 0x44 – измерить температуру, записать полученное значение в SRAM.
- 0x4E – запись 3 байта в третий, четвертый и пятый байты SRAM.
- 0xBE – последовательное считывание 9 байт SRAM.
- 0х48 – копирование третьего и четвертого байтов SRAM в EEPROM.
- 0xB8 – копирование информации из EEPROM в третий и четвертый байты SRAM.
- 0xB4 – возвращает тип питания (0 – паразитное, 1 – внешнее).
Способ 2: чтение датчика DS18B20 по адресу
Мы знаем, что каждому DS18B20 назначен уникальный 64-битный адрес, чтобы отличать их друг от друга. В этом методе мы найдем этот адрес для соответствующей маркировки каждого датчика. Затем этот адрес можно использовать для считывания каждого датчика в отдельности.
Поиск адресов датчиков DS18B20s на шине
Следующий скетч обнаруживает все DS18B20, присутствующие на шине, и печатает их адреса на 1-Wire в монитор последовательного порта.
Вы можете подключать только один датчик за раз, чтобы определить его адрес (или последовательно добавлять по одному новому датчику, чтобы вы могли идентифицировать каждый из них по его адресу). Затем вы можете пометить каждый датчик.
Теперь откройте монитор последовательного порта. Вы должны получить что-то подобное:
Рисунок 6 – Нахождение адресов 1-Wire всех датчиков DS18B20 на шине
Скопируйте все адреса, так как они нам понадобятся в следующем скетче.
Чтение показаний датчиков DS18B20 по адресу
Следующий скетч считывает температуру датчиков DS18B20 по их адресам. Прежде чем приступить к загрузке скетча, вам нужно изменить адреса датчиков DS18B20 на те, которые вы определили в предыдущем скетче.
Вывод вышеприведенного эскиза выглядит так
Рисунок 7 – Вывод показаний нескольких датчиков DS18B20 методом адреса
Объяснение кода
Как обычно, скетч начинается с включения библиотек, объявления вывода, к которому подключена шина датчиков, и создания объекта библиотеки .
Далее мы вводим адреса, которые были найдены ранее для каждого датчика температуры. В нашем случае имеем следующее.
Во фрагменте настройки мы инициализируем библиотеку путем вызова функции и инициализируем последовательную связь с ПК.
В цикле мы просто посылаем команду всем датчикам для преобразования температуры, используя функцию .
Затем, чтобы напечатать температуру датчика, мы вызываем пользовательскую функцию , для которой передается в качестве параметра.
Вышеприведенная функция просто вызывает библиотечные функции для отображения температуры в градусах Цельсия и для отображения температуры в градусах Фаренгейта.
Использование и применение
Применяется программируемый датчик Ардуино в различных задачах, в том числе в схемах для умных домов. С помощью легко настраиваемого сенсора можно решать, как простые, так и сложные задачи:
- Определение t воды в аквариуме для рыб. Особенно актуальный способ в летнюю жару. Сенсор среагирует на показатель, который оказался за пределами нормы и оповестит вас об этом по каналам связи. Естественно, можно подвязать дополнительное действие при нагревании воды, например, запускать Аэрацию.
- Оповещение о нагретой воды в бойлере. При достижении определенной t в бойлере, на компьютер, или подключенный LCD-дисплей вам поступит уведомление. Можно с схему добавить реле, которое будет отключать бойлер. Конечно, современные водонагревающие устройства могут оснащаться автоматикой и термостатом, но часто с помощью дополнительных датчиков реализуются более сложные системы управления умным домом, чем автономная автоматика водонагревателя.
- Замер температуры в холодильной витрине. Комплект из нескольких датчиков на достаточно простой схеме может замерять и выдавать температуру в каждой секции витрины. Выставленный диапазон значений может указывать, когда температура вышла за пределы нормы и уведомлять о нарушениях стационарного режима.
- Замер точного градуса воды в чайнике. Выпитый натощак стакан теплой воды помогает запустить желудок. При этом нужно выпить подогретую до температуры тела воду. Самодельный термодатчик способен решить подобную задачу, определив градус с точностью до 0,5 °С.
- Определение температуры воды в ванной, джакузи, бассейне. Набирая воду для водных процедур, нужно, чтобы она была комфортной. С помощью терморегулятора Arduino можно определить комфортный уровень и подобрать нужный градус для себя. Дополнительно, пороговыми значениями температуры можно реагировать на снижение или увеличения t воды и держать все время воду подогретой.
Подключение датчика DS18B20 к Arduino
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► Датчик температуры DS18b20+ x 2 шт.
► Резистор 4.7 кОм x 1 шт.
► Макетная плата MB-102 (Breadboard) x 1 шт.
Подключение:
Для подключения датчика DS18b20 к Arduino UNO, будем использовать макетную плату BreadBoard, принципиальную схему можно посмотреть на рисунке ниже. Установим датчик в макетную плату BreadBoard, как показано на рисунке, между ногой DQ и VDD необходимо установить резистор на 4,7 кОм, а ногу VDD подключить в выводам +5V (Arduino) и ногу GND к выводу GND (Arduino), ногу DQ необходимо подключить к выводу 2 (Arduino) (в этом примере использую pin 2), схема собрана.
Для этого эксперимента необходимо скачать и установить библиотеку «DallasTemperature v.3.4» и «OneWire v.2.2» (скачать их можно в конце статьи). Далее, запускаем среду программирования IDE Arduino, копируем пример кода в в окно программы и загружаем в контроллер.
/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 12.11.2016г.
*/
#include <OneWire.h> // Подключаем библиотеку OneWire
#include <DallasTemperature.h> // Подключаем библиотеку DallasTempature
#define ONE_WIRE_BUS 2 // Указываем, к какому выводу подключена DQ
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup(void)
{
Serial.begin(9600); // Задаем скорость передачи данных
sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит
}
void loop(void)
{
Serial.print(» Запрос температуры…»);
sensors.requestTemperatures(); // Запрос на считывание температуры
Serial.println(«Считано»);
Serial.print(» Температура датчика 1: «);
Serial.print(sensors.getTempCByIndex(0)); // Отображение температуры датчика 1
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/* */ OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); voidsetup(void) { Serial.begin(9600);// Задаем скорость передачи данных sensors.begin();// Запуск библиотеки, по умолчанию 9 бит } voidloop(void) { Serial.print(» Запрос температуры…»); sensors.requestTemperatures();// Запрос на считывание температуры Serial.println(«Считано»); Serial.print(» Температура датчика 1: «); Serial.print(sensors.getTempCByIndex());// Отображение температуры датчика 1 } |
Далее, открываем мониторинг порта, котором увидим показания температура с датчика.
Описание датчика DS18B20 для Arduino
DS18B20 – это цифровой температурный датчик, обладающий множеством полезных функций. По сути, DS18B20 – это целый микроконтроллер, который может хранить значение измерений, сигнализировать о выходе температуры за установленные границы (сами границы мы можем устанавливать и менять), менять точность измерений, способ взаимодействия с контроллером и многое другое. Все это в очень небольшом корпусе, который, к тому же, доступен в водонепроницаемом исполнении.
Микросхема имеет три выхода, из которых для данных используется только один, два остальных – это земля и питание. Число проводов можно сократить до двух, если использовать схему с паразитным питанием и соединить Vdd с землей. К одному проводу с данными можно подключить сразу несколько датчиков DS18B20 и в плате Ардуино будет задействован всего один пин.
Где купить датчик
Влагозащищенный датчик температуры DS18B20 с длиной провода 1 м от надежного магазина | Комплект из 10 микросхем DS18B20 TO92 | Модуль DS18B20 для удобного подключения к Ардуино от Keyestudio |
Беспроводной модуль DS18B20 на ESP8266 ESP-01 ESP-01S для проектов умного дома | Шилд датчика DS18B20 для платы D1 MINI – беспроводная передача данных | Датчик DS18B20 с модулем для подключения к Ардуино |
Особенности цифрового датчика DS18B20
Погрешность измерения не больше 0,5 С (для температур от -10С до +85С), что позволяет точно определить значение температуры. Не требуется дополнительная калибровка.
Температурный диапазон измерений лежит в пределах от -55 С до +125 С.
Датчик питается напряжением от 3,3В до 5В.
Можно программно задать максимальную разрешающую способность до 0,0625С, наибольшее разрешение 12 бит.
Присутствует функция тревожного сигнала.
Каждое устройство обладает своим уникальным серийным кодом.
Не требуются дополнительные внешние элементы.
Можно подключить сразу до 127 датчиков к одной линии связи.
Информация передается по протоколу 1-Wire.
Для присоединения к микроконтроллеру нужны только 3 провода.
Существует так называемый режим паразитного питания – в нем происходит питание напрямую от линии связи. Для подключения в этом случае нужны только 2 провода
Важно, что в этом режиме не гарантируется корректная работа при температурах выше 100С. Режим паразитного питания удобно обычно применяется для приложений с удаленным температурным датчиком.
Память датчика состоит из двух видов: оперативной и энергонезависимой – SRAM и EEPROM. В последнюю записываются регистры конфигурации и регистры TH, TL, которые могут использоваться как регистры общего назначения, если не используются для указания диапазона допустимых значений температуры.
Основной задачей DS18B20 является определение температуры и преобразование полученного результата в цифровой вид. Мы можем самостоятельно задать необходимое разрешение, установив количество бит точности – 9, 10, 11 и 12. В этих случаях разрешающие способности будут соответственно равны 0,5С, 0,25С, 0,125С и 0,0625С.
Во время включения питания датчик находится в состоянии покоя. Для начала измерения контроллер Ардуино выполняет команду «преобразование температуры». Полученный результат сохранится в 2 байтах регистра температуры, после чего датчик вернется в первоначальное состояние покоя. Если схема подключена в режиме внешнего питания, микроконтроллер регулирует состояние конвертации. Во время выполнения команды линия находится в низком состоянии, после окончания программы линия переходит в высокое состояние. Такой метод не допустим при питании от паразитной емкости, так как на шине постоянно должен сохраняться высокий уровень сигнала.
Полученные температурные измерения сохраняются в SRAM датчика. 1 и 2 байты сохраняют полученное значение температуры, 3 и 4 сохраняют пределы измерения, 5 и 6 зарезервированы, 7 и 8 используются для высокоточного определения температуры, последний 9 байт хранит устойчивый к помехам CRC код.
Как работают современные датчики температуры
Блок-схема датчика температуры типа DS18B20 выглядит следующим образом:
Исходя из вышеприведенной структуры, рассматриваемый датчик состоит из:
- регистра конфигурации, программируемого пользователем (9–12 разрядов);
- датчика температуры;
- верхнего Th и нижнего Tl порога срабатывания сигнала тревоги;
- 64-битной памяти типа ROM и блока обработки протокола 1-Wire;
- внутреннего источника питания, способного работать как от внешнего источника, так и от «паразитных» импульсов.
Принцип работы
Основная функция микросхемы DS18B20 — трансформация показаний встроенного датчика температуры в цифровой код. Это преобразование зависит от разрешения преобразования, установленного пользователем, которое варьируется от 9 до 12 бит (0,5°–0,625°С). Если настройки не производились, то установка регистра конфигурации соответствует 12 битам.
В начальном состоянии DS18B20 находится в состоянии покоя или иными словами в низком энергетическом уровне. Для начала измерений микроконтроллер подает сигнал , после чего полученные данные сохраняются в регистр, а сам датчик переходит в режим «покоя».
При работе цифрового датчика температуры DS18B20 от независимого источника питания микроконтроллер способен контролировать процесс выполнения команды , которая осуществляет измерение температуры. Таким образом, датчик температуры DS18B20 сформирует логический «0» во время трансформации показаний температурного режима и логическую «1» в случае окончания процесса преобразования.
Если питание микросхемы осуществляется при помощи «паразитного метода», то контроль логических «0» и «1» невозможен, поскольку на шине будет постоянно дежурить высокий уровень напряжения питания.
После снятия и обработки сигнала с датчика температуры в микросхеме DS18B20 полученные данные в градусах Цельсия сохраняются в виде 16-битного числа с признаком (S), который отвечает за знак «+» или «-» температуры. Структура регистра температуры будет выглядеть так, как показано ниже.
Если показания температуры выше «0», то показатель S=0, если же значение температуры отрицательное, то S=1. Ниже представлена таблица соответствия данных и температуры.
Примеры работы для Arduino
Один датчик
Рассмотрим простой пример — подключения одного датчика.
Сенсор подключается к управляющей плате через один сигнальный пин.
При подключении к Arduino в компактном формфакторе, например Arduino Micro или Iskra Nano Pro, воспользуйтесь макетной платой и парочкой нажимных клеммников.
Между сигнальным проводом и питанием установите сопротивление 4,7 кОм.
При коммуникации сенсора со стандартными платами Arduino формата Rev3, Arduino Uno или Iskra Neo, используйте Troyka Slot Shield совместно с модулем подтяжки.
Код программы
Выведем температуру сенсора в Serial-порт.
- simple.ino
-
// библиотека для работы с протоколом 1-Wire #include <OneWire.h> // библиотека для работы с датчиком DS18B20 #include <DallasTemperature.h> // сигнальный провод датчика #define ONE_WIRE_BUS 5 // создаём объект для работы с библиотекой OneWire OneWire oneWire(ONE_WIRE_BUS); // создадим объект для работы с библиотекой DallasTemperature DallasTemperature sensor(&oneWire); void setup(){ // инициализируем работу Serial-порта Serial.begin(9600); // начинаем работу с датчиком sensor.begin(); // устанавливаем разрешение датчика от 9 до 12 бит sensor.setResolution(12); } void loop(){ // переменная для хранения температуры float temperature; // отправляем запрос на измерение температуры sensor.requestTemperatures(); // считываем данные из регистра датчика temperature = sensor.getTempCByIndex(); // выводим температуру в Serial-порт Serial.print("Temp C: "); Serial.println(temperature); // ждём одну секунду delay(1000); }
Серия датчиков
Каждый сенсор DS18B20 хранит в своей памяти уникальный номер, такое решение позволяет подключить несколько датчиков к одному пину.
Добавим к предыдущем схемам подключения ещё по паре датчиков в параллель.
Код программы
Просканируем все устройства на шине и выведем температуру каждого сенсора отдельно в Serial-порт.
- multipleSensors.ino
-
// библиотека для работы с протоколом 1-Wire #include <OneWire.h> // библиотека для работы с датчиком DS18B20 #include <DallasTemperature.h> // сигнальный провод датчика #define ONE_WIRE_BUS 5 // создаём объект для работы с библиотекой OneWire OneWire oneWire(ONE_WIRE_BUS); // создадим объект для работы с библиотекой DallasTemperature DallasTemperature sensors(&oneWire); // создаём указатель массив для хранения адресов датчиков DeviceAddress *sensorsUnique; // количество датчиков на шине int countSensors; // функция вывода адреса датчика void printAddress(DeviceAddress deviceAddress){ for (uint8_t i = ; i < 8; i++){ if (deviceAddressi < 16) Serial.print("0"); Serial.print(deviceAddressi, HEX); } } void setup(){ // инициализируем работу Serial-порта Serial.begin(9600); // ожидаем открытия Serial-порта while(!Serial); // начинаем работу с датчиком sensors.begin(); // выполняем поиск устройств на шине countSensors = sensors.getDeviceCount(); Serial.print("Found sensors: "); Serial.println(countSensors); // выделяем память в динамическом массиве под количество обнаруженных сенсоров sensorsUnique = new DeviceAddresscountSensors; // определяем в каком режиме питания подключены сенсоры if (sensors.isParasitePowerMode()) { Serial.println("Mode power is Parasite"); } else { Serial.println("Mode power is Normal"); } // делаем запрос на получение адресов датчиков for (int i = ; i < countSensors; i++) { sensors.getAddress(sensorsUniquei, i); } // выводим полученные адреса for (int i = ; i < countSensors; i++) { Serial.print("Device "); Serial.print(i); Serial.print(" Address: "); printAddress(sensorsUniquei); Serial.println(); } Serial.println(); // устанавливаем разрешение всех датчиков в 12 бит for (int i = ; i < countSensors; i++) { sensors.setResolution(sensorsUniquei, 12); } } void loop(){ // переменная для хранения температуры float temperature10; // отправляем запрос на измерение температуры всех сенсоров sensors.requestTemperatures(); // считываем данные из регистра каждого датчика по очереди for (int i = ; i < countSensors; i++) { temperaturei = sensors.getTempCByIndex(i); } // выводим температуру в Serial-порт по каждому датчику for (int i = ; i < countSensors; i++) { Serial.print("Device "); Serial.print(i); Serial.print(" Temp C: "); Serial.print(temperaturei); Serial.println(); } Serial.println(); // ждём одну секунду delay(1000); }
Особенности
- Для проводного 1wire хватит одного порта связи с контроллером;
- Каждое устройство имеет свой «серийник» размером 64 разряда;
- Возможность кооперации нескольких измерителей в одну линию;
- Не требователен к внешним компонентам;
- Питается от линии связи;
- Диапазон рабочих температур от -55 до + 125, при погрешности достигающей до 0.5 градусов Цельсия;
Проводной датчик температуры DS18S20
- Разрешение преобразование задается управляющим (9…12 бит);
- Интервал измерения не превышает 750 мс;
- Гибкая настройка тревожного сигнала;
- Сигнал передает информацию о датчике, у которого произошел выход за предельно допустимую норму;
- Широкая область применения.
Подключение устройства
На вопрос о том, как подключить датчик теплого пола, каждый специалист даст ответ, что можно это сделать двумя способами:
- прямое подсоединение «кабель – термостат»;
- с использованием распаечного короба.
Подключаются датчики теплого пола обычно к отдельной электролинии щитка с использованием медных силовых проводов, сечение которых составляет примерно 2,5 кв. мм. Чтобы обезопасить систему от утечки электрического тока следует в щиток вмонтировать УЗО и автоматический выключатель.
Непосредственно в комнате, где находятся полы с подогревом, устанавливается еще один распределительный короб, к которому и подводится кабель от основного щитка. Затем от короба в пол проводятся две трубки с основным нагревательным кабелем и тому, который будет подпитывать установленный датчик.
Итог
В зависимости от того какой датчик температуры был выбран эффективность функционирования системы подогрева полов будет меняться. Надежнее будет довериться профессионалам, которые могут взять на себя ответственность за все этапы работ – от закупки необходимых устройств, материалов и инструментов до монтажа системы подогрева и введения ее в эксплуатацию.
Взаимосвязь между разрешением датчика DS18B20 и температурой
На самом деле, рассмотреть взаимосвязь между разрешением прибора DS18B20 и температурой можно с помощью следующей картинки:
Однако, предлагаю сделать это более детально.
Начнем с девяти-битного разрешения. При этой величине температура может принимать следующие значения:
- 0.00 °C;
- 0.50 °C.
Таким образом, при разрешении 9 бит можно сделать 10.5 измерений/сек для вышеназванных температурных величин.
При расширении 10 бит температура принимать такие величины:
- 0.00 °C;
- 0.25 °C;
- 0.50 °C;
- 0.75 °C;
Можно сделать вывод, что при разрешении 10 бит можно сделать 5.3 измерений/сек для вышеназванных температурных величин.
При разрешении 11 бит температура имеет возможность принять следующий вид:
- 1) 0.00 °C;
- 2) 0.125 °C;
- 3) 0.25 °C;
- 4) 0.375 °C;
- 5) 0.50 °C;
- 6) 0.625 °C;
- 7) 0.75 °C;
- 8) 0.875 °C.
Таким образом, при разрешении 11 бит можно сделать 2.6 измерений/сек для вышеназванных температурных величин.
При разрешении 12 бит температура может принимать следующие значения:
- 1) 0,00 °C;
- 2) 0,0625 °C;
- 3) 0,125 °C;
- 4) 0,1875 °C;
- 5) 0,25 °C;
- 6) 0,3125 °C;
- 7) 0,375 °C;
- 8) 0,4375 °C;
- 9) 0,50 °C;
- 10) 0,5625 °C;
- 11) 0,625 °C;
- 12) 0,6875 °C;
- 13) 0,75 °C;
- 14) 0,8125 °C;
- 15) 0,875 °C;
- 0,9375 °C.
Это говорит о том, что при расширении 12 бит можно сделать 1.3 измерений/сек для вышеназванных температурных величин.
Программа 3
Следующая задача – опросить два термометра и вывести их текущие показания и разность.
- Для начала прошьём пример address_read из библиотеки microDS18B20
- Поочерёдно подключим два датчика, увидим их адреса и скопируем в блокнот
Далее аналогично примеру one_pin_many_sensors записываем полученные адреса в массивы и создаём два датчика. Дальнейшая работа ведётся с двумя датчиками:
#include <LiquidCrystal_I2C.h> // подключаем библу LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес, столбцов, строк // полученные адреса uint8_t s1_addr[] = {0x28, 0xE1, 0x57, 0xCF, 0x4E, 0x20, 0x1, 0x3D}; uint8_t s2_addr[] = {0x28, 0xFF, 0x36, 0x94, 0x65, 0x15, 0x2, 0x80}; #include <microDS18B20.h> MicroDS18B20<2, s1_addr> sensor1; // Создаем термометр с адресацией MicroDS18B20<2, s2_addr> sensor2; // Создаем термометр с адресацией void setup() { lcd.init(); // инициализация lcd.backlight(); // включить подсветку } void loop() { // запрашиваем температуру sensor1.requestTemp(); sensor2.requestTemp(); // ждём delay(1000); // получаем и записываем в переменные float t1 = sensor1.getTemp(); float t2 = sensor2.getTemp(); lcd.home(); lcd.print(t1, 1); // температура 1 lcd.write(223); // градус lcd.print('-'); // "минус" lcd.print(t2, 1); // температура 2 lcd.write(223); // градус lcd.print('='); // "равно" lcd.print(t1 - t2, 1); // ищем разность и выводим lcd.write(223); // градус }
Назначение выводов
Как уже говорилось, есть два варианта поставки термодатчика — микросхема с 8 ножками (8-PIN SOIC) или 3 (ТО-92). Из рисунка ниже видно, какие контакты для чего предназначены, включая их полную распиновку.
Линия связи при подключении должна быть задействована через подтягивающий резистор 4.7 кОм. Требование обуславливается работой самого протокола 1-Wire. Питание корпуса, хоть это и не рекомендуется для температур свыше 100 °С, можно организовать от линии данных шины:
Работа вышеописанной схемы обеспечивается внутренним конденсатором Cpp, накапливающим заряд от линии. Ее минус — в моменты трансляции измеренных данных в цифровой вид, из-за повышенного потребления, мощности может просто не хватить на само устройство. Поэтому и рекомендуется использовать схемы с раздельным питанием.
Схема подключения с использованием внешнего источника будет выглядеть по-другому:
Или же, следуя советам профессионалов, выполнить подключение можно также таким образом:
В представленном варианте, схема будет работать от сохраненного через диод заряда в конденсаторе. К сожалению, необходимость в двух проводах никуда не делась.
Если возникает необходимость в определении именно вида поступающего питания на сенсор, то можно произвести опрос самого термодатчика DS18B20, отправив сначала ему команду CС следом B4. На выходе будет 0, если применяется паразитное питание или 1 при раздельном.