Ds18b20 по одной шине

Статья предназначена для специалистов и продвинутых радиолюбителей. Она касается всех систем с датчиками DS18B20, а также — всех других систем с контактами и микроамперными токами, протекающими через них.
Хочу рассказать свои мысли по вопросу соединения и разводки термодатчиков.
В техподдержке Кситала мне сообщили следующее:
Все термодатчики должны быть соединены почти строго «в линию», без длинных ответвлений «в сторону» (максимум 20см). Это необходимо якобы потому, что в противном случает получается несогласованная по волновому сопротивлению линия и якобы за счет отражений система показывает в результате либо +85оС, либо прочерк вместо температуры. И добавляют, что оба этих результата могут быть также по причине плохого контакта в разъемах.
На мой вопрос » — какова тактовая частота на шине?» получил ответ «- низкая».
Я не очень понимаю такую логику «отражений» потому, что на длинах в единицы-десятки метров и низкой тактовой частоте волновое сопротивление и его согласование не имеет никакого значения. А также — из-за «странного» совпадения с причиной «плохой контакт».
Итак, я считаю, что причина периодического искажения результатов замера температуры — именно плохой контакт (исключение — Примечание 2):
Дело в том, что при микроамперных токах (а входной ток датчика DS18B20 наверняка мизерный), контакты через которые течет этот ток могут быть слегка окислены, или загрязнены и микроток банально не пробивает этот зазор, в отличие от миллиамперных и более высоких токов. Эффект этот специалистам известен. Т.е., если сигнал на шине проходит через контакты, то ему нужен «заметный» ток, причем, что очень важно — этот повышенный ток должен проходить через абсолютно все сигнальные контакты шины (через все последовательно соединенные разъемы).
Т.е., для того, чтобы контакт стал лучше нужен ток побольше, чем микроамперы — хотя бы (очень приблизительно) от 1 миллиампера. Возможно, что не случайно на схемах с использованием DS18B20 с линии данных на питание всегда нарисован резистор 4,7кОм, что как раз обеспечит ток около 1мА.
Как же правильно организовать (улучшить) бессбойный обмен информацией с такими датчиками?
Есть 4 варианта:
1. Рабоче-крестьянский (для пользователей): при проблемах промывать/чистить контакты, или заменять разъемы (тройники там обычные, их телефонные аналоги продаются во «всех» магазинах).
Остальные варианты — «профессиональные», для разработчиков Кситала (впрочем хороший радио-монтажник сможет это переделать и самостоятельно):

2. Он, правда, не идеально соответствует логике использования датчиков с разными длинами проводов: надо подводить к каждому датчику 2 провода, но обязательно оба их запаивать на ножке датчика, а не пропускать, как сейчас сделано через дополнительный тройник. И тоже обязательно на обоих концах нашей шины (на дальнем датчике и в самом Кситале должны быть установлены резисторы примерно по 10кОм (чтобы в сумме было около 4,7кОм).

Читайте также: Давление в шинах маз 6317

3. Диапазон допустимых нагрузочных сопротивлений шины, равный 1-5,1кОм дает нам третий вариант — возможность подключить простейшим путем до 9-ти датчиков (и других устройств), зашунтировав на питание вход каждого резистором 10кОм. В блоке Кситал — тоже резистор, 10кОм.
В этом случае не нужна единая шинная линия, а можно произвольно соединять датчики через удобно расположенные разъемы. Только резисторы надо припаять прямо на датчиках.

Ds18b20 по одной шине

4. Есть и четвертый вариант более корректного подключения датчиков на шину Кситала — «паразитный» способ питания по двухпроводной шине.
Если использовать «паразитный» способ питания датчика, то ток через «входные» контакты разветвителей будет складываться из входного тока в сигнальный вход и тока питания датчика, что в сумме в несколько раз больше, чем только входной ток.
Поискал в документации на датчик — ток потребления датчика может достигать 1,5мА, что вполне можно считать четвертым вариантом. Правда, при это будет несколько ограничена суммарная длина используемых проводов — до 50 метров. Хотя, я бы резисторы все равно ставил (см. Примечания).
***
Считаю оптимальным 3-ий вариант и предлагаю разработчикам Кситала его реализовать в своих последующих системах.
Примечания:
1. Вообще-то, со всех точек зрения суммарное сопротивление всех резисторов на линии (шине) лучше сделать минимально допустимым, то есть — около 1 кОма.
2. Кстати, длинные провода к датчикам являются хорошими приемными антеннами для помех. Указанные мной резисторы, кроме вышесказанного еще и снизят входное сопротивление этих антенн и, как следствие, снизят уровень помехи в системе.
Можно еще почитать: О погрешностях измерений на примере датчика DS18B20.
На всякий случай привожу раскладку разъема.

Видео:Программирование МК STM32. Урок 94. DS18B20. Несколько датчиков на одной шине. Часть 1Скачать

Программирование МК STM32. Урок 94. DS18B20. Несколько датчиков на одной шине. Часть 1

Взаимодействие нескольких DS18B20, цифровых датчиков температуры, с Arduino

Одним из самых больших преимуществ датчиков температуры DS18B20 является то, что на одной шине 1-Wire могут сосуществовать несколько таких датчиков. Поскольку каждый DS18B20 имеет уникальный 64-битный последовательный код, зашитый на заводе, их легко отличать друг от друга.

Ds18b20 по одной шине

Взаимодействие с несколькими DS18B20, цифровыми датчиками температуры, с Arduino

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

Это может показаться пугающим, но, прежде чем углубляться в это руководство, вы должны быть знакомы с основами работы с однопроводными датчиками температуры DS18B20. Если вы не знакомы с ними, посмотрите следующую статью:

А теперь, без дальнейших задержек, давайте подключим датчики DS18B20 к нашей плате Arduino.

Видео:FLProg - Урок 17. Как подключить несколько датчиков ds18b20 к одной шинеСкачать

FLProg - Урок 17. Как подключить несколько датчиков ds18b20 к одной шине

Подключение нескольких датчиков DS18B20 к Arduino

Подключение довольно простое.

Начните с подключения всех датчиков DS18B20 параллельно, то есть объединения всех выводов VDD, выводов GND и сигнальных выводов. Затем подключите шину VDD к выходу 5V на Arduino, GND к выводу земли Arduino, и подключите сигнальные выводы к цифровому выводу 2 на Arduino.

Читайте также: Давление шин приора р14

Затем, чтобы обеспечить стабильную передачу данных, вам нужно добавить один подтягивающий резистор 4,7 кОм для всей шины между сигнальными выводами и выводами питания (внутренние подтягивающие резисторы на ардуино не работают).

Ds18b20 по одной шине

Рисунок 1 – Подключение нескольких датчиков температуры DS18B20 с Arduino

Видео:Подключение несколько DS18B20 на одну шину.Скачать

Подключение несколько DS18B20 на одну шину.

Установка библиотеки для DS18B20

Протокол Dallas 1-Wire несколько сложен и требует много кода для парсинга связи. Чтобы скрыть эту ненужную сложность, мы установим библиотеку DallasTemperature.h, чтобы мы могли выполнять простые команды для получения показаний температуры от датчика.

Чтобы установить библиотеку, перейдите в раздел «Скетч»→ «Подключить библиотеку» → «Управление библиотеками…». Подождите, пока менеджер библиотеки загрузит индекс библиотек и обновит список установленных библиотек.

Ds18b20 по одной шине

Рисунок 2 – Установка библиотеки Arduino – выбор управления библиотеками в Arduino IDE

Чтобы отфильтровать результаты поиска, введите « ds18b20 ». Там должна быть пара записей. Ищите DallasTemperature от Miles Burton. Нажмите на эту запись, а затем выберите Установка.

Ds18b20 по одной шине

Рисунок 3 – Установка библиотеки DallasTemperature в Arduino IDE

Эта библиотека DallasTemperature является аппаратно-зависимой библиотекой, которая обрабатывает функции более низкого уровня. Она должна быть связана с библиотекой OneWire для связи с любым устройством 1-Wire, а не только с DS18B20. Установите и эту библиотеку.

Ds18b20 по одной шине

Рисунок 4 – Установка библиотеки OneWire в Arduino IDE

Видео:Программирование МК STM32. Урок 94. DS18B20. Несколько датчиков на одной шине. Часть 3Скачать

Программирование МК STM32. Урок 94. DS18B20. Несколько датчиков на одной шине. Часть 3

Способ 1: чтение показаний DS18B20 по индексу

В этом методе библиотека Dallas Temperature при инициализации обнаруживает все датчики, использующие одну шину. Она рассматривает всю шину как массив датчиков и присваивает им индексы. Поэтому мы можем точно выбрать каждый датчик по его индексу и прочитать показания температуры.

Вывод вышеприведенного скетча выглядит так:

Ds18b20 по одной шине

Рисунок 5 – Вывод показаний нескольких датчиков DS18B20 индексным методом

Объяснение кода

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

В настроечной части кода мы сначала вызываем функцию begin() . Она инициализирует шину и обнаруживает все DS18B20, присутствующие на ней. Затем каждому датчику присваивается индекс и устанавливается разрешение в 12 бит.

Затем мы вызываем функцию getDeviceCount() , чтобы получить количество устройств, найденных на шине.

В циклической части кода мы используем функцию requestTemperatures() , чтобы отправить команду всем датчикам для преобразования температуры.

Теперь, используя простой цикл for(int i = 0; i , мы можем перебирать массив датчиков и считывать температуру DS18B20 по индексу i , просто вызывая getTempCByIndex(i) .

Видео:STM32 #4. DS18B20 - подключение любого количества датчиков на одну линию UART`а.Скачать

STM32 #4. DS18B20 - подключение любого количества датчиков на одну линию UART`а.

Способ 2: чтение датчика DS18B20 по адресу

Мы знаем, что каждому DS18B20 назначен уникальный 64-битный адрес, чтобы отличать их друг от друга. В этом методе мы найдем этот адрес для соответствующей маркировки каждого датчика. Затем этот адрес можно использовать для считывания каждого датчика в отдельности.

Читайте также: Давление в шинах лада приора седан летом

Поиск адресов датчиков DS18B20s на шине

Следующий скетч обнаруживает все DS18B20, присутствующие на шине, и печатает их адреса на 1-Wire в монитор последовательного порта.

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

Теперь откройте монитор последовательного порта. Вы должны получить что-то подобное:

Ds18b20 по одной шине

Рисунок 6 – Нахождение адресов 1-Wire всех датчиков DS18B20 на шине

Скопируйте все адреса, так как они нам понадобятся в следующем скетче.

Чтение показаний датчиков DS18B20 по адресу

Следующий скетч считывает температуру датчиков DS18B20 по их адресам. Прежде чем приступить к загрузке скетча, вам нужно изменить адреса датчиков DS18B20 на те, которые вы определили в предыдущем скетче.

Вывод вышеприведенного эскиза выглядит так

Ds18b20 по одной шине

Рисунок 7 – Вывод показаний нескольких датчиков DS18B20 методом адреса

Объяснение кода

Как обычно, скетч начинается с включения библиотек, объявления вывода, к которому подключена шина датчиков, и создания объекта библиотеки DallasTemperature .

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

Во фрагменте настройки мы инициализируем библиотеку путем вызова функции begin() и инициализируем последовательную связь с ПК.

В цикле мы просто посылаем команду всем датчикам для преобразования температуры, используя функцию requestTemperatures() .

Затем, чтобы напечатать температуру датчика, мы вызываем пользовательскую функцию printTemperature(DeviceAddress deviceAddress) , для которой deviceAddress передается в качестве параметра.

Вышеприведенная функция просто вызывает библиотечные функции getTempC(deviceAddress) для отображения температуры в градусах Цельсия и DallasTemperature::toFahrenheit() для отображения температуры в градусах Фаренгейта.

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.

Ясен пень тоже самое, но без функций и лишних печатей. Вы этим уроком что хотели преподнести? Как функции работают или как датчики подключать. Уроки для начинающих? Надо думать как начинающий. Нахрена туда пихать лишнее. Кое как разобрался в вашей писанине. Проще надо быть и люди потянутся.

Что именно усложнено? Какие циклы?
Вы переписали всё то же самое, но без отдельной функции печати температуры в градусах Цельсия и Фаренгейта с символами градусов ‘°’.

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

#include
#include
#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

Здравствуйте. Подскажите, пожалуйста, в каком порядке датчикам присваиваются индексы? Могут ли одни и те же датчики получать разные индексы? Спасибо.


🔍 Видео

Подключение нескольких датчиков температуры DS18B20 к ArduinoСкачать

Подключение нескольких датчиков температуры DS18B20 к Arduino

67. Термометр с датчиками DS18B20 и PIC16F84A на одной шине (Урок 58. Теория)Скачать

67. Термометр с датчиками DS18B20 и PIC16F84A на одной шине (Урок 58. Теория)

4 датчика DS18B20 на одной шине с автосканированиемСкачать

4 датчика DS18B20 на одной шине с автосканированием

Подключение нескольких термодатчиков DS18B20 к ArduinoСкачать

Подключение нескольких термодатчиков DS18B20 к Arduino

ATtiny13 + датчик температуры DS18B20. Выводим температуру на светодиодный индикаторСкачать

ATtiny13 + датчик температуры DS18B20. Выводим температуру на светодиодный индикатор

Датчики температуры которые не нужно калибровать (DS18B20)Скачать

Датчики температуры которые не нужно калибровать (DS18B20)

Программирование МК STM32. Урок 94. DS18B20. Несколько датчиков на одной шине. Часть 2Скачать

Программирование МК STM32. Урок 94. DS18B20. Несколько датчиков на одной шине. Часть 2

56. Взаимодействие датчиков DS18B20 по шине 1 Wire с микроконтроллером PIC (Урок 47. Теория)Скачать

56. Взаимодействие датчиков DS18B20 по шине 1 Wire с микроконтроллером PIC (Урок 47. Теория)

Подключение нескольких устройств, датчиков по I2C (АйТуСи) шинеСкачать

Подключение нескольких устройств, датчиков по I2C (АйТуСи) шине

Подключение нескольких DS18B20 к ATmega8 на одну шинуСкачать

Подключение нескольких DS18B20 к ATmega8 на одну шину

Цифровой термометр DS18B20 и arduinoСкачать

Цифровой термометр DS18B20  и  arduino

STM32 DS18B20 подключение датчика температурыСкачать

STM32 DS18B20 подключение датчика температуры

Датчик температуры DS18B20. Вы точно не знали о нем этого.Скачать

Датчик температуры DS18B20. Вы точно не знали о нем этого.

Автоопределение DS18B20Скачать

Автоопределение DS18B20

Термостат на Arduino, до 5 датчиков DS18B20Скачать

Термостат на Arduino, до 5 датчиков DS18B20
Поделиться или сохранить к себе:
Технарь знаток