6c088b457167669aa166426502170c0d.jpg

Мониторинг температуры гермозоны с помощью 1-wire датчиков и zabbix 2

СОДЕРЖАНИЕ
0
555 просмотров
07 февраля 2020

Схема соединения

Сделайте соединения согласно приведенной ниже схеме.

Соединяем датчик и Ардуино

  • VCC -> Arduino 5V, плюс резистор 4,7K, идущий от VCC к Data
  • Data -> Пин 7 Arduino
  • GND -> GND Arduino

Соединения для ЖК-дисплея и Arduino UNO

  • Пин 1 -> GND
  • Пин 2 -> VCC
  • Пин 3 -> Arduino Пин 3
  • Пин 4 -> Arduino Пин 33
  • Пин 5 -> GND
  • Пин 6 -> Arduino Пин 31
  • Пин 7-10 -> GND
  • Пин 11 -> Arduino Пин 22
  • Пин 12 -> Arduino Пин 24
  • Пин 13 -> Arduino Пин 26
  • Пин 14 -> Arduino Пин 28
  • Пин 15 -> VCC через резистор 220 Ом
  • Пин 16 -> GND

Подключите потенциометр, как показано выше, к контакту 3 на ЖК-дисплее, для управления контрастностью.

Этот проект работает на температурах до 125° C. В случае наличия некоторого диссонанса в значении показанной температуры дважды проверьте соединения с резистором, подключенным к DS18B20. После соединения всего, что описано выше, мы можем перейти к программированию.

Как подключить несколько сенсоров DS18B20 к Arduino?

Вы можете подключить несколько цифровых датчиков температуры DS18B20 параллельно. При этом библиотека OneWire library позволит вам считывать данные со всех датчиков одновременно.

Ниже описаны два метода подключения сенсоров.

Для большого количества сенсоров (больше 10), надо использовать резисторы с меньшим сопротивлением (например, 1.6 КОм или даже меньше).

Кроме того, если вы подключаете параллельно более 10 датчиков, могут возникнуть проблемы (погрешности при съеме показаний). Поэтому рекомендуется устанавливать дополнительный резистор сопротивлением 100…120 Ом между контактом data на Arduino и data на каждом сенсоре!

Результат работы предыдущего скетча с двумя подключенными сенсорами может выглядет примерно следующим образом:

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 51 1 4B 46 7F FF F 10 FE CRC=FE

Temperature = 21.06 Celsius, 69.91 Fahrenheit

ROM = 28 DA CA 27 5 0 0 49

Chip = DS18B20

Data = 1 4E 1 4B 46 7F FF 2 10 D9 CRC=D9

Temperature = 20.87 Celsius, 69.57 Fahrenheit

No more addresses.

Выбираем правильный сенсор

Было бы неплохо знать, с какого именно сенсора вы получаете данные, когда вы используете параллельно несколько датчиков. Как это сделать?

Серийный номер

Так как датчики цифровые, у каждого из них есть индивидуальный серийный номер, который можно использовать для опознавания того или иного сенсора. Вроде бы все просто. Но… нам ведь надо предварительно определить эти серийные номера, прежде чем использовать их для опознавания сенсора, правильно?

Вы могли обратить на примерах выше, что скетч выдает нам данные в виде 64-битного серийного номера – значение “ROM”. Например:

28 88 84 82 5 0 0 6A или 28 DA CA 27 5 0 0 49 в примере выше.

Не забывайте, если вы используете одновременно большое количество датчиков (10 и больше), надо добавить резисторы 100 … 120 Ом между контактами data с сенсора DS18B20 и пином data на Arduino (для каждого датчика!).

Ниже показана схема параллельного подключения нескольких сенсоров с использованием трех контактов.

Паразитный режим питания

В “паразитном” режиме контакт Vdd остается фактически не задействован. Питание датчика осуществляется через контакт data.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Работа с библиотекой DallasTemperature

Библиотека для Arduino DallasTemperature Sensors OneWire значительно облегчает и упрощает работу с сенсором DS18B20. Описание библиотеки DallasTemperature.h на русском говорит, что датчик управляется несколькими простыми функциями, которые представлены в следующем скетче. Схема подключения датчика не меняется, а скачать библиотеку DallasTemperature.h для Ардуино можно на нашем сайте здесь.

Скетч для датчика ds18b20 Ардуино

#include OneWire.h>
#include DallasTemperature.h>
 
OneWire oneWire(15);  // порт подключения датчика (A1)
DallasTemperature ds(&oneWire);

void setup() {
  Serial.begin(9600);   // инициализация монитора порта
  ds.begin();                 // инициализация датчика ds18b20
}

void loop() {
  ds.requestTemperatures();                       // считываем температуру с датчика
  
  Serial.print(ds.getTempCByIndex(0));   // выводим температуру на монитор
  Serial.println("C");
}

Скетч для нескольких датчиков на одной шине

Подключите несколько термодатчиков DS18B20 к микроконтроллеру согласно схеме, и загрузите скетч для датчика температуры ds18b20 к Arduino UNO.

#include OneWire.h>
#include DallasTemperature.h>
 
OneWire oneWire(15);  // порт подключения датчиков (A1)
DallasTemperature ds(&oneWire);

byte num;              // количество подключенных датчиков

void setup() {
  Serial.begin(9600);   // инициализация монитора порта
  ds.begin();                 // инициализация датчика ds18b20

  num = ds.getDeviceCount();   // узнаем количество датчиков 
  Serial.print("Number: ");           // выводим полученное количество
  Serial.println(num);
}

void loop() {
// выполняем цикл столько, сколько найдено датчиков на шине
 for (byte i = 0; i Serial.print("Sensor ");
    Serial.print(i);
    Serial.print(": ");
    ds.requestTemperatures();                       // считываем температуру с датчика
    Serial.print(ds.getTempCByIndex(i));
    Serial.println("C");
  } 
Serial.println(""); 
}

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

DS18B20 является цифровым датчиком. Цифровые датчики передают значение измеряемой температуры в виде определенного двоичного кода, который поступает на цифровые или аналоговые пины ардуино и затем декодируется. Коды могут быть самыми разными, ds18b20 работает по протоколу данных 1-Wire. Мы не будем вдаваться в подробности этого цифрового протокола, укажем лишь необходимый минимум для понимания принципов взаимодействия.

Обмен информацией в 1-Wire происходит благодаря следующим операциям:

  • Инициализация – определение последовательности сигналов, с которых начинается измерение и другие операции. Ведущее устройство подает импульс сброса, после этого датчик должен подать импульс присутствия, сообщающий о готовности к выполнению операции.
  • Запись данных – происходит передача байта данных в датчик.
  • Чтение данных – происходит прием байта из датчика.

Для работы с датчиком нам понадобится программное обеспечение:

  • Arduino IDE;
  • Библиотека OneWire, если используется несколько датчиков на шине, можно использовать библиотеку DallasTemperature. Она будет работать поверх OneWire.

Из оборудования понадобятся:

  • Один или несколько датчиков DS18B20;
  • Микроконтроллер Ардуино;
  • Коннекторы;
  • Резистор на 4,7 кОм (в случае подключения одного датчика пойдет резистор номиналом от 4 до 10K);
  • Монтажная плата;
  • USB-кабель для подключения к компьютеру.

К плате Ардуино UNO датчик подключается просто: GND с термодатчика присоединяется к GND Ардуино, Vdd подключается к 5V, Data – к любому цифровому пину.

Простейшая схема подключения цифрового датчика DS18B20 представлена на рисунке.

В режиме паразитного питания контакт Vdd с датчика подключается к GND на Ардуино – в этом случае пригодятся только два провода. Работу в паразитном режиме лучше не использовать без необходимости, так как могут ухудшиться быстродействие и стабильность.

Скетч для Arduino и сенсора DS18B20

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

После того как вы скачали архив с библиотекой, ее надо импортировать. Для этого в Arduino IDE выберите пункт “Sketch” – “Import Library” – “Add Library” и выберите архив, который вы скачали. Если у вас возникли проблемы, с установкой библиотеки, ознакомьтесь с инструкцией по установке библиотек в Arduino.

Загружаем скетч на Arduino

Скетч, который представлен ниже, есть в библиотеке OneWire, в категории examples. Перейдите в “File” – “Examples” – “OneWire” и выберите пример “DS18x20_Temperature”. Код программы представлен ниже.

Данный пример использует библиотеку OneWire Library, для того, чтобы собрать данные со всех подключенных датчиков температуры DS28B20 (как подключить несколько сенсоров описано в конце статьи) и отобразить их в окне серийного монитора Arduino IDE.

В окне серийного монитора вы увидите примерно следующее:

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

Обычное или паразитное питание?

DS18B20 может работать в обычном или в так называемом “паразитном” режиме. В обычном режиме для подключения используется 3 коннектора, в “паразитном” режиме – в его лишь 2.

Вам надо настроить правильный режим в скетче, чтобы снять достоверные показания с датчика:

  • Для “паразитного” режима в строке 65 надо указать: ds.write(0x44, 1);
  • Для обычного режима в строке 65 указывается: ds.write(0x44);

Убедитесь, что вы указали корректные пины!

В строке 10, где указано “OneWire ds(2);” устанавливается пин, к которому подключен контакт data с сенсора.

В этом примере использован пин 2, но значения пина по умолчанию в примере OneWire стоит на 10. Можно использовать и его.

#include &ltOneWire.h&gt

// пример использования библиотеки OneWire DS18S20, DS18B20, DS1822

OneWire ds(2); // на пине 10 (нужен резистор 4.7 КОм)

void setup(void) {

Serial.begin(9600);

}

void loop(void) {

byte i;

byte present = 0;

byte type_s;

byte data;

byte addr;

float celsius, fahrenheit;

if ( !ds.search(addr)) {

Serial.println(“No more addresses.”);

Serial.println();

ds.reset_search();

delay(250);

return;

}

Serial.print(“ROM =”);

for( i = 0; i

Serial.write(‘ ‘);

Serial.print(addr, HEX);

}

if (OneWire::crc8(addr, 7) != addr) {

Serial.println(“CRC is not valid!”);

return;

}

Serial.println();

// первый байт определяет чип

switch (addr) {

case 0x10:

Serial.println(” Chip = DS18S20″); // или более старый DS1820

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); // начинаем преобразование, используя ds.write(0x44,1) с “паразитным” питанием

delay(1000); // 750 может быть достаточно, а может быть и не хватит

// мы могли бы использовать тут ds.depower(), но reset позаботится об этом

present = ds.reset();

ds.select(addr);

ds.write(0xBE);

Serial.print(” Data = “);

Serial.print(present, HEX);

Serial.print(” “);

for ( i = 0; i

data = ds.read();

Serial.print(data, HEX);

Serial.print(” “);

}

Serial.print(” CRC=”);

Serial.print(OneWire::crc8(data, 8), HEX);

Serial.println();

// конвертируем данный в фактическую температуру

// так как результат является 16 битным целым, его надо хранить в

// переменной с типом данных “int16_t”, которая всегда равна 16 битам,

// даже если мы проводим компиляцию на 32-х битном процессоре

int16_t raw = (data

if (type_s) {

raw = raw

if (data == 0x10) {

raw = (raw & 0xFFF0) + 12 – data;

}

} else {

byte cfg = (data & 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 мс

//// разрешение по умолчанию равно 12 бит, время преобразования – 750 мс

}

celsius = (float)raw / 16.0;

fahrenheit = celsius * 1.8 + 32.0;

Serial.print(” Temperature = “);

Serial.print(celsius);

Serial.print(” Celsius, “);

Serial.print(fahrenheit);

Serial.println(” Fahrenheit”);

}

Схема подключения DS18B20

Что такое разрешение?

В технических характеристиках сообщается, что датчик DS18B20 может измерять температуру с различным разрешением. Разрешение — это как у линейки: миллиметры между сантиметрами. Так же и c разрешением у DS18B20 — это шаг между последовательными ступенями градусов Цельсия.

Разрешение выбирается с помощью количества бит. Диапазон выбора от 9 до 12 бит. Выбор разрешения влечет за собой определенные последствия. Чем выше разрешение, тем дольше придется ждать результат измерений.

Для 9 битного разрешения есть 2 шага между последовательными уровнями:

  • 0,0 °C
  • 0,5 °C

То есть, вы можете прочитать температуру с разрешением 0,5 °C. Для 9 битного разрешения время измерения составляет 93,75 мс. То есть, вы можете выполнять 10,6 измерений в секунду.

Для 10 битного разрешения есть 4 шага между последовательными уровнями:

  • 0,0 °C
  • 0,25 °C
  • 0,5 °C
  • 0,75 °C

В этом случае мы считываем температуру с разрешением 0,25 °C. Время измерения для 10 битного разрешения составляет 187,5 мс, что позволяет выполнить 5,3 измерений в секунду.

Для 11 битного разрешения есть 8 шагов между последовательными уровнями:

  • 0,0 °C
  • 0,125 °C
  • 0,25 °C
  • 0,375 °C
  • 0,5 °C
  • 0,625 °C
  • 0,75 °C
  • 0,875 °C

То есть разрешение составляет 0,125 °C. Время измерения для 11 битного разрешения составляет 375 мс. Это позволяет выполнить 2,6 измерения в секунду.

Для 12 битного разрешения есть 16 шагов между последовательными уровнями:

  • 0,0 °C
  • 0,0625 °C
  • 0,125 °C
  • 0,1875 °C
  • 0,25 °C
  • 0,3125 °C
  • 0,375 °C
  • 0,4375 °C
  • 0,5 °C
  • 0,5625 °C
  • 0,625 °C
  • 0,6875 °C
  • 0,75 °C
  • 0,8125 °C
  • 0,875 °C
  • 0,9375 °C

Следовательно, разрешение составляет 0,0625 °C. Время измерения для 12 битного разрешения в районе 750 мс. То есть вы можете сделать 1,3 измерений в секунду.

Что такое точность измерения?

Ничто в мире, и особенно в электронике, не является совершенным. Можно только приближаться к совершенству, тратя все больше и больше денег и сил. Так же и с этим датчиком. Он имеет некоторые неточности, о которых вы должны знать.

В технических характеристиках сказано, что в диапазоне измерения от -10 до 85 °C датчик DS18B20 имеет точность на уровне +/- 0,5 °C. Это значит, что, когда в комнате у нас температура 22,5 °C, то датчик может вернуть нам результат измерения от 22 до 23 °C. То есть, может показать на 0,5 °C больше или меньше. Все это зависит от индивидуальной характеристики датчика.

В диапазоне от -55 до 125 °C погрешность измерения может возрасти до +/- 2 °C. То есть, когда вы измеряете что-то с температурой 100 °C, то датчик может показать температуру от 98 до 102 °C.

Все эти отклонения могут несколько отличаться для каждой температуры, но при измерении одной и той же температуры, отклонение всегда будет одинаковым.

Что такое дрейф измерения?

Дрейф измерения — это наиболее худшая форма неточности. Суть дрейфа измерения заключается в том, что при измерении постоянной температуры — при одном измерении датчик может показывать одну температуру, а при последующем другую (на величину дрейфа).

Дрейф датчика температуры DS18B20 +/- 0.2 °C. Например, когда в комнате постоянная температура составляет 24 °C, датчик может выдавать результат в диапазоне от 23,8 °C до 24,2 °C.

Скачать datasheet DS18B20 (379,0 KiB, скачано: 999)

Датчики температуры для работы с Ардуино

При работе с микроконтроллером Ардуино наиболее часто используются следующие датчики температуры: DS18B20, DHT11, DHT22, LM35, TMP36.

Датчик температуры DS18B20

DS18B20 – цифровой 12-разрядный температурный датчик. Устройство доступно в 3 вариантах корпусов – 8-Pin SO (150 mils), 8-Pin µSOP, и 3-Pin TO-92, чаще всего используется именно последний. Он же изготавливается во влагозащитном корпусе с тремя выходами. Датчик прост и удобен в использовании, к плате Ардуино можно подключать сразу несколько таких приборов. А так как каждое устройство обладает своим уникальным серийным номером, они не перепутаются в результате измерения

Важной особенностью датчика является возможность сохранять данные при выключении прибора. Также DS18B20 может работать в режиме паразитного питания, то есть без внешнего питания через подтягивающий резистор

Подробная статья о ds18b20.

Датчики температуры DHT

DHT11 и DHT22 – две версии датчика DHT, обладающие одинаковой распиновкой. Разливаются по своим характеристикам. Для DHT11 характерно определение температуры в диапазоне от 0С до 50С, определение влажности в диапазоне 20-80% и частота измерений 1 раз в секунду. Датчик DHT22 обладает лучшими характеристиками, он определяет влажность 0-100%, температурный диапазон увеличен – от -40С до 125С, частота опроса 1 раз за 2 секунды. Соответственно, стоимость второго датчика дороже. Оба устройства состоят из 2 основных частей – это термистор и датчик влажности. Приборы имеют 4 выхода – питание, вывод сигнала, земля и один из каналов не используется. Датчик DHT11 обычно используется в учебных целях, так как он показывает невысокую точность измерений, но при этом он очень прост в использовании. Другие технические характеристики устройства: напряжение питания от 3В до 5В, наибольший ток 2,5мА. Для подключения к ардуино между выводами питания и выводами данных нужно установить резистор. Можно купить готовый модуль DHT11 или 22 с установленными резисторами.

Датчик температуры LM35

LM35 – интегральный температурный датчик. Обладает большим диапазоном температур (от -55С до 150С), высокой точностью (+-0,25С) и калиброванным выходом. Выводов всего 3 – земля, питание и выходной мигнал. Датчик стоит дешево, его удобно подключать к цепи, так как он откалиброван уже на этапе изготовления, обладает низким сопротивлением и линейной зависимостью выходного напряжения. Важным преимуществом датчика является его калибровка по шкале Цельсия. Особенности датчика: низкая стоимость, гарантированная точность 0,5С, широкий диапазон напряжений (от 4 до 30В) ток менее 60мА, малый уровень собственного разогрева (до 0,1С), выходное сопротивление 0,1 Ом при токе 1мА. Из недостатков можно выделить ухудшение параметров при удалении на значительное расстояние. В этом случае источниками помех могут стать радиопередатчики, реле, переключатели и другие устройства. Также существует проблема, когда температура измеряемой поверхности и температура окружающей среды сильно различаются. В этом случае датчик показывает среднее значение между двумя температурами. Чтобы избавиться от этой проблемы, можно покрыть поверхность, к которой подключается термодатчик, компаундом.

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

Примеры применения:

  • Использование в схемах с развязкой по емкостной нагрузке.
  • В схемах с RC цепочкой.
  • Использование в качестве удаленного датчика температуры.
  • Термометр со шкалой по Цельсию.
  • Термометр со шкалой по Фаренгейту.
  • Измеритель температуры с преобразованием напряжение-частота.
  • Создание термостата.

TMP36 – аналоговый термодатчик

Датчик температуры Использует технологии твердотельной электроники для определения температуры. Устройства обладают высокой точностью, малым износом, не требуют дополнительной калибровки, просты в использовании и стоят недорого. Измеряет температуру в диапазоне от -40С до 150С. Параметры схожи с датчиком LM35, но TMP36 имеет больший диапазон чувствительности и не выдает отрицательное значение напряжения, если температура ниже нуля. Напряжение питания от 2,7В до 5,5В. Ток – 0.05мА. При использовании нескольких датчиков может возникнуть проблема, при которой полученные данные будут противоречивы. Причиной этого являются помехи от других термодатчиков. Чтобы исправить эту неполадку нужно увеличить задержку между записью измерений. Низкое выходное сопротивление и линейность результатов позволяют подключать датчик напрямую к схеме контроля температуры. TMP36 также, как и LM34 обладает малым нагревом прибора в нормальных условиях.

Подключение датчика DS18B20 к микроконтроллеру

Типовая схема подключения датчиков DS18B20 к микроконтроллеру:Как видно из схемы, датчик DS18B20 (или датчики) подключаются к микроконтроллеру, если они имеют общее питание, тремя проводниками:— вывод №1 — общий провод (масса, земля)— вывод №2 — он же DQ, по которому происходит общение между МК и DS18B20, подключается к любому выводу любого порта МК. Вывод DQ обязательно должен быть «подтянут» через резистор к плюсу питания— вывод №3 — питание датчика — +5 вольт
Если в устройстве используется несколько датчиков температуры, то их можно подключить к разным выводам порта МК, но тогда увеличится объем программы. Датчики лучше подключать как показано на схеме — параллельно, к одному выводу порта МК.Напомню о величине подтягивающего резистора:«Сопротивление резистора надо выбирать из компромисса между сопротивлением используемого кабеля и внешними помехами. Сопротивление резистора может быть от 5,1 до 1 кОм. Для кабелей с высоким сопротивлением жил надо использовать более высокое сопротивление. А там где присутствуют промышленные помехи – выбирать более низкое сопротивление и использовать кабель с более большим сечением провода. Для телефонной лапши (4 жилы) для 100 метров необходим резистор 3,3 кОм. Если вы применяете «витую пару» даже 2 категории длина может быть увеличена да 300 метров»

Описание датчика DS18B20 для Arduino

DS18B20 – это цифровой температурный датчик, обладающий множеством полезных функций. По сути, DS18B20 – это целый микроконтроллер, который может хранить значение измерений, сигнализировать о выходе температуры за установленные границы (сами границы мы можем устанавливать и менять), менять точность измерений, способ взаимодействия с контроллером и многое другое. Все это в очень небольшом корпусе, который, к тому же, доступен в водонепроницаемом исполнении.

Микросхема имеет три выхода, из которых для данных используется только один, два остальных – это земля и питание. Число проводов можно сократить до двух, если использовать схему с паразитным питанием и соединить Vdd с землей. К одному проводу с данными можно подключить сразу несколько датчиков 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 код.

Список источников

  • microkontroller.ru
  • ArduinoMaster.ru
  • ArduinoPlus.ru
  • www.joyta.ru
  • xn--18-6kcdusowgbt1a4b.xn--p1ai
  • arduino-diy.com

Похожие статьи

Комментировать
0
555 просмотров

Если Вам нравятся статьи, подпишитесь на наш канал в Яндекс Дзене, чтобы не пропустить свежие публикации. Вы с нами?

Adblock
detector