Сколько датчиков 18b20 можно подключить на линию

от admin

Arduino.ru

В общем хотел подключить 6 датчиков но обломался при подключении более 5 перестают работать, подлючены дачики все паралельно через один резистор 4.7К, думал шестой датчик не рабочий но поменял его местами с пятым он работает.

использую мегу и такой скетчь

В чем может быть проблема?

  • Войдите на сайт для отправки комментариев

Не факт но попробуйте sensors.requestTemperatures(); delay(1000);

  • Войдите на сайт для отправки комментариев

Одиннадцать штука параллельно работают без проблем. Резистор один.

  • Войдите на сайт для отправки комментариев

trembo аватар

Резистор поменьше- 1к5 поставьте.

  • Войдите на сайт для отправки комментариев

А что в данном случае вы понимаете под словом параллельно? Где и как расположены датчики?

  • Войдите на сайт для отправки комментариев

Gippopotam аватар

А что в данном случае вы понимаете под словом параллельно? Где и как расположены датчики?

а как еще можно подключить эти датчики? Они же на одной шине.

  • Войдите на сайт для отправки комментариев

А что в данном случае вы понимаете под словом параллельно? Где и как расположены датчики?

а как еще можно подключить эти датчики? Они же на одной шине.

раскидать звездой в параллель, достаточно длинными шлейфами.

  • Войдите на сайт для отправки комментариев

Не факт но попробуйте sensors.requestTemperatures(); delay(1000);

Не помогло, такое ощущение что не хватает питания датчикам от ардуины к ней ещё tft экран подключен и реле.

  • Войдите на сайт для отправки комментариев

раскидать звездой в параллель, достаточно длинными шлейфами.

примерно так и есть резистор у самой ардуины далее выходять 20см три провода и к ним уже цепляются разной длины провода ко всем датчикам

  • Войдите на сайт для отправки комментариев

раскидать звездой в параллель, достаточно длинными шлейфами.

примерно так и есть резистор у самой ардуины далее выходять 20см три провода и к ним уже цепляются разной длины провода ко всем датчикам

Насколько помню, правильно — это один шлейф и от него ответвления максимально короткие.

  • Войдите на сайт для отправки комментариев

Насколько помню, правильно — это один шлейф и от него ответвления максимально короткие.

Ну посути у меня отдин шлейф только короткий а отводы на датчики длиные по другому не как, датчики в разных сторонах и на разном растоянии самый далекой метров 15 остальные в пределах 2-5метров.

Подключил отдельное питание стало лучше кажет все 6 датчиков только один самый дальний переодически раз 5-10мин выдает -127

  • Войдите на сайт для отправки комментариев

trembo аватар

Нет таких температур, скорее всего библиотека чует что вы опрашиваете или не существующий или не ответивший датчик и получив 1111 1111 1111 1111 ( резистор привязки) выдаёт вам -127.

  • Войдите на сайт для отправки комментариев

trembo аватар

По поводу количества.
Вторая колонка- номер канала (аналогового пина, так удобнее на Мега128) к которому подключен шлейф.

И это не на столе 20 сантиметров, каждый шлейф по метров 100, запутан по зданию.

Я на нулевом канале насчитал 17 датчиков.

  • Войдите на сайт для отправки комментариев

KVadik аватар

Кроме того, из личного опыта:

— не используйте паразитное питание (1-wire по 2-м проводам), используйте отдельное питание (1-wire по 3-м проводам) лучше всего взять две витые пары из кабеля, по одной пустить питание, по второй данные, землю каждой пары соединить.

— резистор 4.7к это много, по оригинальным спецификациям 2.2к, но можно ещё меньше.

— на длинной и/или кривой лини без активной подтяжки никиак.

При использовании активной подтяжки у меня без проблем работает 20 датчиков на линии 200м+ с ответвлениями на датчики по 2-3 метра.

  • Войдите на сайт для отправки комментариев

Кроме того, из личного опыта:

— не используйте паразитное питание (1-wire по 2-м проводам), используйте отдельное питание (1-wire по 3-м проводам) лучше всего взять две витые пары из кабеля, по одной пустить питание, по второй данные, землю каждой пары соединить.

— резистор 4.7к это много, по оригинальным спецификациям 2.2к, но можно ещё меньше.

— на длинной и/или кривой лини без активной подтяжки никиак.

При использовании активной подтяжки у меня без проблем работает 20 датчиков на линии 200м+ с ответвлениями на датчики по 2-3 метра.

У меня используется 3 провода питание минус и сигнальный пин на всех датчиках, попробую конечно уменьшить до 2К резистор просто у меня нет в наличии 2.2К есть по 1К.

Что такое активная подтяжка? если использовать к примеру вроли шины витую пару то как к ней цеплять датчики? разрезать шину на отводы к каждому датчику и скручивать?

  • Войдите на сайт для отправки комментариев

KVadik аватар

У меня используется 3 провода питание минус и сигнальный пин на всех датчиках, попробую конечно уменьшить до 2К резистор просто у меня нет в наличии 2.2К есть по 1К.

-[1к]-+-[1к]- = -[2к]- , но и 1к будет работать.

Что такое активная подтяжка?

Что-то типа такого:

если использовать к примеру вроли шины витую пару то как к ней цеплять датчики? разрезать шину на отводы к каждому датчику и скручивать?

  • Войдите на сайт для отправки комментариев

Блин замучался уже (((( не фига работать нормально не хочет, последний самый удаленный датчик переодически выдает ошибку -127 уже и повесил на одну шину и резистор поставил на 2К и датчик заменил и питание отдельное на датчики, незнаю что ещё придумать. Самое прикольное что чем больше датчиков тем чаще эта ошибка. К примеру если на шине 3 датчика то ошибка возникает где то раз в час иногда реже, если 6 датчиков то ошибка раз в 5-10 минут и уже глюкает не только последний на и предпоследний.

Самое печальное, что от этих датчиков работает реле то есть по разнице показаний температуры включается и выключается и когда ошика реле срабатывает (((

Ещё прикол в том что всю зиму эти же датчики только 4 штуки отработали с NANO без проблем, а вот решил всё перевести на мегу с tft и начались проблемы ((

Может есть варианты програмно обойти ошибку ну что бы её игнорировать?

  • Войдите на сайт для отправки комментариев

KVadik аватар

. переодически выдает ошибку -127.

. если на шине 3 датчика то ошибка возникает где то раз в час иногда реже.

. если 6 датчиков то ошибка раз в 5-10 минут.

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

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

  • Войдите на сайт для отправки комментариев

Вот мой полный скетч который сечас работает

програмно я бы хотел так что есть -127 то на экране остаются старые значения с датчика

  • Войдите на сайт для отправки комментариев

Из вариантов, с бубном. Рядом с последним датчиком повесьте кондеры электролит мкФ на 100-1000 + керамику 0,1-10мкФ.

А по «-127» — If (переменная <=-127);

  • Войдите на сайт для отправки комментариев

trembo аватар

Интересная строка имеется в файле DallasTemperature.h

#define DEVICE_DISCONNECTED -127

Вам это ничто не напоминает?

А в файлеDallasTemperature.cpp

// returns temperature in degrees F
// TODO: — when getTempC returns DEVICE_DISCONNECTED
// -127 gets converted to -196.6 F

  • Войдите на сайт для отправки комментариев

Интересная строка имеется в файле DallasTemperature.h

#define DEVICE_DISCONNECTED -127

Вам это ничто не напоминает?

А в файлеDallasTemperature.cpp

// returns temperature in degrees F
// TODO: — when getTempC returns DEVICE_DISCONNECTED
// -127 gets converted to -196.6 F

Это я уже видел и понял что -127 возникает когда нет связи с датчиком, но как это решает проблему?

  • Войдите на сайт для отправки комментариев

А датчики и соединения между ними у вас на пайке или разъемах?

  • Войдите на сайт для отправки комментариев

А датчики и соединения между ними у вас на пайке или разъемах?

просто скрутка и изолента, что их паять если ещё сто раз пооду перебирать придется (( да и с nano так же все было.

Шина у меня ввиде провода ПВС 3х0,75 и отводы на датчики то же такие же, а около датчика 1метр роного тоненького кабеля датчики у меня водонепроницаемы в гильзах с 1метром провода.

  • Войдите на сайт для отправки комментариев

KVadik аватар

Шина у меня ввиде провода ПВС 3х0,75.

А Вы знаете толк в извращениях. Возьмите витую пару.

  • Войдите на сайт для отправки комментариев

А Вы знаете толк в извращениях. Возьмите витую пару.

думаете сечение проводов играет роль? вроде чем больше тем меньше потерь

  • Войдите на сайт для отправки комментариев

KVadik аватар

А Вы знаете толк в извращениях. Возьмите витую пару.

думаете сечение проводов играет роль? вроде чем больше тем меньше потерь

Ну вы же не мощьность передаете 🙂 Я не буду Вам сейчас лекцию читать почему витая пара для 1-wire гораздо предпочтительнее, чем Ваш провод. Попробуйте поверить так.

  • Войдите на сайт для отправки комментариев

А Вы знаете толк в извращениях. Возьмите витую пару.

думаете сечение проводов играет роль? вроде чем больше тем меньше потерь

  • Войдите на сайт для отправки комментариев

А Вы знаете толк в извращениях. Возьмите витую пару.

думаете сечение проводов играет роль? вроде чем больше тем меньше потерь

то есть нужно 2 GND провода цеплять к одному проводу GND датчика? так же кто как делает на витой паре просто у каждого датчика разрезаем её и вкручиваем датчик или может использует кто скажем тройники витой пары и обжимает? почему с nano в обще звездно образная система работала без проблем, а тут с мега такие косяки даже с шиной на тех же проводах? может косячат библиотеки с nano было всего три OneWire.h и DallasTemperature.h и EEPROM.h а в мегу засунул ещё две UTFT.h и max6675.h может они друг с другом так косячат?

  • Войдите на сайт для отправки комментариев

trembo аватар

1. При токах аж 1 миллиампер нужен ну очень толстый кабель. 😉

2. Главная проблема Далласа- ёмкость кабеля.
Разряжает её на землю сам датчик, и с этим неплохо справляется его выходной транзистор, а вот заряжается она через резистор.
То есть фронты из » 0 » в » 1 » обычно затянуты.
И конденсатор по питанию обычно бесполезен.
1 миллиампер легко обеспечит ЛЮБОЙ кондёр на выходе ЛЮБОГО блока питания.

А вот уменьшить раз в 5 длительность именно этого фронта можно просто- уменьшив сопротивление в 5 раз.
Ток будет 5 миллиамперов, что полностью соответствует документации.

Я уже говорил вам об этом- но вы не слушаете.

Да, и не путайте повышенную защищённость от внешних помех в витой паре с искажениями сигнала внутри кабеля.

  • Войдите на сайт для отправки комментариев

1. При токах аж 1 миллиампер нужен ну очень толстый кабель. 😉

2. Главная проблема Далласа- ёмкость кабеля.
Разряжает её на землю сам датчик, и с этим неплохо справляется его выходной транзистор, а вот заряжается она через резистор.
То есть фронты из » 0 » в » 1 » обычно затянуты.
И конденсатор по питанию обычно бесполезен.
1 миллиампер легко обеспечит ЛЮБОЙ кондёр на выходе ЛЮБОГО блока питания.

А вот уменьшить раз в 5 длительность именно этого фронта можно просто- уменьшив сопротивление в 5 раз.
Ток будет 5 миллиамперов, что полностью соответствует документации.

Я уже говорил вам об этом- но вы не слушаете.

Да, и не путайте повышенную защищённость от внешних помех в витой паре с искажениями сигнала внутри кабеля.

Дак я и так уменьшил сопротивление заменив 4.7К на 2К вроде у меня и длина шины то всего метров 10-15 и датчиков 6 штук должно всего должно же хватать.

Про мой провод просто изначально он у меня был в наличии я на нем и собрал с nano и работало все и с резистором 4.7к и без внешнего питания, а тут перешол на мегу и получил косяки эти и с меньшим сопротивлением и с внешним питанием. буду пробовать витую пару последний вариант походу

  • Войдите на сайт для отправки комментариев

Gippopotam аватар

А Вы знаете толк в извращениях. Возьмите витую пару.

думаете сечение проводов играет роль? вроде чем больше тем меньше потерь

Ну вы же не мощьность передаете 🙂 Я не буду Вам сейчас лекцию читать почему витая пара для 1-wire гораздо предпочтительнее, чем Ваш провод. Попробуйте поверить так.

Соглашусь, что ПВС — это перебор.

Но вы попробуйтн меня аргументировано убедить, что витая пара в реальных условиях лучше, чем ШВВП.

  • Войдите на сайт для отправки комментариев

KVadik аватар

Соглашусь, что ПВС — это перебор.

Но вы попробуйтн меня аргументировано убедить, что витая пара в реальных условиях лучше, чем ШВВП.

Зачем мне это? Если Вы этого не понимаете и ленитесь поискать и разобраться — это Ваши проблемы.

  • Войдите на сайт для отправки комментариев

Вчера потратил несколько часов пересобирая шину на витойпаре (((( успел только подключить 4 датчика из 6 и все напрасно ошибка -127 все равно лезет но значительно реже то есть словил я её пару раз за 6 часов, думаю если подключу оставшиеся 2 дачика время участится ((( витую делал как предложили выше VCC x GND, SIG x GND

Попробую наверно со всеми 6 датчиками времено поставить nano без экрана посмотрю будет там ошибка или нет, бельше уже не знаю на что думать.

  • Войдите на сайт для отправки комментариев

KVadik аватар

И чем Вам мешает -127 (сбой) один раз в 6 часов (даже раз в несколько минут при постоянном считывании оно не критично, имхо)? Там инертность датчика такая, что потратить ещё секунду-другую на повторное обращение к датчику ничего не должно изменить.

  • Войдите на сайт для отправки комментариев

И чем Вам мешает -127 (сбой) один раз в 6 часов (даже раз в несколько минут при постоянном считывании оно не критично, имхо)? Там инертность датчика такая, что потратить ещё секунду-другую на повторное обращение к датчику ничего не должно изменить.

Она возникает на датчике самом дальнем который служит для управления циркулярным насосом то есть в коде есть условие когда температура датчика 6 меньше температуры дачика 5 насос отключается, вот и выходит что когда возникает -127 на шестом дотчике реле насоса отключается

  • Войдите на сайт для отправки комментариев

KVadik аватар

Она возникает на датчике самом дальнем который служит для управления циркулярным насосом то есть в коде есть условие когда температура датчика 6 меньше температуры дачика 5 насос отключается, вот и выходит что когда возникает -127 на шестом дотчике реле насоса отключается

Фейспалм. А в программе задать условие при котором при считывании -127 попробовать считать повторно релингия не позволяет?

  • Войдите на сайт для отправки комментариев

trembo аватар

CRC на шине иногда могут и возникать — и это нормальное явление.
Но на ваших метрах. Что-то здесь не так.
Подобное наблюдал когда два шлейфа на одном пине сидело- один с несколькими датчиками, а другой с одним на конце.
Длина кабелей была одинаковая.
Выяснилось что из-за длинных ( метров по 60) линий
при подключении второго переставал работать и первый и наоборот.

Предположил что при опросе дальнего датчика в любом из кабелей
со второго приходил отражённый сигнал от его «оборванного» конца ( а его не спрашивали- поэтому он молчал).
И это эхо приходило одновременно с тем, полезным, с первого кабеля.

Вылечилось вставлением в тот кабель что был с одним датчиком куска метров 20. в бухте.
Эхи «разбежались» по времени и больше не мешали.
Но это не правильно, просто выхода другого не было- кабеля были замазаны в стенки

  • Войдите на сайт для отправки комментариев

Вот моя приблизительная схема обозначил растояние по шине мужду датчиками и длину отводов от шины до датчиков

Пока прикрутил пятый датчик и дописал условие

if (temp1 <= -127) <
temp1 = sensors.getTempC(Thermometer1);
>

если датчик выдает -127 то повторно опрашивается

вроде пару часов без глюков уже работает, но все равно смущает такой выход датчик может и повторно прислать -127 тогда реле вырубится и котелок закипит (((

  • Войдите на сайт для отправки комментариев

Puhlyaviy аватар

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

ДИКТУЮ БОЛЬШИМИ БУКВАМИ

просто скрутка и изолента, что их паять

  • Войдите на сайт для отправки комментариев

Или еще добавить 8 метров кабеля и соединить по правильному.

  • Войдите на сайт для отправки комментариев

куда добавить ещё 8 метров? как раз осталось витой столько ))) соеденить я хочу вот на такие троиники все

что бы было возможно легко снимать и менять датчики.

Пока вроде изменения в коде вернее условие повтора опроса последнего датчика при ошибке работает без проблем со всеми 6 датчиками по крайне мере за 10 часов не одной ошибки

  • Войдите на сайт для отправки комментариев

Puhlyaviy аватар

куда добавить ещё 8 метров? как раз осталось витой столько ))) соеденить я хочу вот на такие троиники все

что бы было возможно легко снимать и менять датчики.

Пока вроде изменения в коде вернее условие повтора опроса последнего датчика при ошибке работает без проблем со всеми 6 датчиками по крайне мере за 10 часов не одной ошибки

маразм крепчает? зачем снимать и менять датчики? они у вас что гореть будут? тут на форуме есть товарищ у него эти датчики гроздьями висят почти по 100 штук на ветке. воду он там куда то дистилирует. паять нужно, а не скручивать изолентой.. тогда и сигнал перестанет пропадать.

  • Войдите на сайт для отправки комментариев

а они работают в таких условиях один греется ежедневно от 40 до 95г иногда по недосмотру и до 110 бывает, другой погружной в воду то же греется и остывает постоянно, так что иногда выходят из строя в основном погружной и основная причина выхода из строя это окисляются ножки их и отваливаются по крайне мере за 2 года я поменял 5 штук и спайкой будет геморно менять

  • Войдите на сайт для отправки комментариев

куда добавить ещё 8 метров? как раз осталось витой столько ))) соеденить я хочу вот на такие троиники все

что бы было возможно легко снимать и менять датчики.

Пока вроде изменения в коде вернее условие повтора опроса последнего датчика при ошибке работает без проблем со всеми 6 датчиками по крайне мере за 10 часов не одной ошибки

маразм крепчает? зачем снимать и менять датчики? они у вас что гореть будут? тут на форуме есть товарищ у него эти датчики гроздьями висят почти по 100 штук на ветке. воду он там куда то дистилирует. паять нужно, а не скручивать изолентой.. тогда и сигнал перестанет пропадать.

нууу не сто конечно а максимум что было 86, только макимум энтот не потому, что не шмогла, а потому, что на одной шине больше не нужно было , и шин таких теперь уже ПЯТЬ. И шина с 86 датчиками длиной, порядка 50 метров и поболее. И сбоила только когда рядом варили электросваркой и когда гроза была ( по сбоям есть статистика за пару лет). И вообще по моему мнению, если её правильно готовить, 1-wire классная штука.

Avgaz-у я посоветовал бы вертикальные сегменты делать не более 50см, резитор подтяжки поставить в конце линии, на питание в конце линии повесить электролит порядка 47 мкф. Питание ( плюс и минус) пустить витой парой, сигнал и минус пустить второй парой. Горизонталь неразрывным шлейфом, ответвления через rj-45.

Хрень вся эта работает у мну из-под бунты через адаптеры USb-1-Wire не помню название, есть на сайте радуги. Дрова owfs. Все остальное писано на пхп , пихается в мискл и показывается апачем — собственное.

ЗЫ. Не дистиллирую я воду , а ректифицирую вакуумно, с целью удаления из оной СТРАШНАГО ДЕЙТЕРИЯ. То есть из H2O+HDO удаляю HDO.

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

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

Читать:
Почему нельзя мыть велосипедную цепь бензином

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#include <onewire.h>
#include <dallastemperature.h>
#define ONE_WIRE_BUS 2

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

void setup(void)
<
Serial.begin(115200);
sensors.begin();
>

void loop(void)
<
sensors.requestTemperatures();
Serial.print(«температура»);
Serial.print(sensors.getTempC(sensor1));
Serial.print(«температура»);
Serial.print(sensors.getTempC(sensor2));
Serial.print(«температура»);
Serial.print(sensors.getTempC(sensor3));
delay(1000);
>

И всё. Чё усложнять?

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

Как подключить несколько датчиков ds18b20

Использование датчиков ds18b20 стало очень популярным в различных проектах, связанных с измерением температуры. Эти датчики имеют высокую точность, цифровой интерфейс и простоту использования. Однако, возникает вопрос: как подключить и настроить несколько датчиков ds18b20 в одном проекте?

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

Если вы начинающий электронщик или программист и хотите узнать, как подключить и настроить несколько датчиков ds18b20 – эта статья для вас!

Что такое ds18b20?

ds18b20 — это цифровой термометр, работающий по протоколу 1-Wire. Он имеет микроконтроллер, который позволяет преобразовывать температуру в цифровую форму.

Такой датчик относительно недорогой, но обладает высокой точностью измерения, составляющей ±0,5°C. Он также может работать в широком температурном диапазоне от -55°C до +125°C.

ds18b20 имеет уникальный идентификатор, что позволяет подключать несколько датчиков к одному контроллеру. Он имеет три вывода: Vcc (питание), GND (земля) и DQ (цифровой выход).

Применение

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

Плюсы и минусы

Плюсы Минусы
Доступность и низкая стоимость Низкая скорость измерения
Высокая точность Требуется конвертер датчика для подключения к USB
Идентификатор каждого датчика, что позволяет подключать несколько датчиков к одному контроллеру Не самый длинный кабель соединения

Как подключить ds18b20?

Ваш датчик ds18b20 нужно подключить к вашей плате Arduino. Перед тем, как приступить к подключению следует убедиться, что все компоненты находятся в нужном порядке и вам доступны все необходимые инструменты для работы.

Шаг 1: Подготовка платы Arduino

Плату Arduino следует подготовить к подключению датчика следующим образом:

  • Подключить плату к компьютеру.
  • Открыть Arduino IDE и выбрать правильную плату и порт.

Шаг 2: Подключение датчика ds18b20

Подключите датчик ds18b20 к вашей плате Arduino, используя следующее подключение:

  1. Подключите кабель датчика к цифровому пину 2, плюс кабеля подключите к 5V, а минус – к GND на плате Arduino.

Однако, если у вас несколько датчиков, следует использовать более сложную схему подключения. Информацию по этой схеме вы можете найти на различных ресурсах.

Шаг 3: Написание кода

После того, как вы подготовили плату Arduino и подключили датчик, перейдите к написанию кода. Напишите программу для считывания данных с датчика ds18b20. Примеры кода можно найти на множестве сайтов и ресурсов для разработчиков.

Как настроить ds18b20 в Arduino IDE?

Шаг 1: Подключение датчика к Arduino

Перед подключением ds18b20 проверьте, что Вы подключили правильные пины к Ардуино. Наиболее распространенный способ подключения — к контакту 5V, GND и пину данных, который может быть настраиваемым (по умолчанию — 2).

Подключите ds18b20 к плате Arduino, убедитесь, что Вы используете правильный пин для данных. Обращаем Ваше внимание: При использовании нескольких сенсоров, Вам необходимо будет подключать каждый датчик к своему пину данных.

Шаг 2: Подготовка библиотеки и скетча

Для использования ds18b20 в Arduino IDE необходимо скачать и подключить библиотеку «OneWire». Для этого перейдите в меню «Sketch» -> «Include Library» -> «Manage Libraries», найдите библиотеку «OneWire» и нажмите кнопку «Install».

Далее, откройте новый проект в Arduino IDE, и подключите библиотеку «OneWire» следующей строкой в начале Вашего скетча:

Шаг 3: Написание скетча для работы с ds18b20

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

Загрузите скетч на Arduino и запустите его. В Serial Monitor должны появиться показания температуры.

Как считывать данные с ds18b20?

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

Перед тем как начать считывать данные с ds18b20 необходимо подключить датчик к микроконтроллеру. Для этого используются три вывода датчика: VCC, GND и DATA. Вывод VCC подключается к питанию, GND к земле, а DATA к любому свободному цифровому входу микроконтроллера.

Структура команды для считывания данных

Команда для считывания данных с ds18b20 состоит из нескольких шагов:

  1. Отправка команды сброса мастера;
  2. Отправка команды определения присутствия устройства;
  3. Отправка команды чтения серийного номера датчика;
  4. Отправка команды инициализации измерения температуры;
  5. Ожидание завершения измерения температуры;
  6. Отправка команды чтения температуры;
  7. Получение результата измерения.

Использование библиотеки OneWire

Чтобы сделать считывание значений более удобным, можно использовать библиотеку OneWire для Arduino. Данная библиотека включает в себя набор готовых функций для работы с ds18b20, что значительно упрощает разработку.

Обработка и вывод данных

Получив значение температуры от ds18b20, его можно обработать и вывести, например, на экран OLED-дисплея или в серийный порт микроконтроллера. Для этого нужно использовать специальные функции для работы с выводами и библиотеки, подключенные к проекту.

Как подключить несколько ds18b20?

1. Провода и резисторы:

Для подключения нескольких датчиков ds18b20 понадобятся провода, резисторы и плата Arduino. Длина проводов должна быть достаточной для того, чтобы датчики могли быть расположены на разном расстоянии друг от друга. Резисторы нужны для защиты от электрических помех.

2. Зачем нужен резистор?

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

3. Подключение датчиков:

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

4. Программирование:

Для работы с датчиками ds18b20 необходимо загрузить библиотеку в Arduino IDE. После этого можно приступать к написанию программы. В программе нужно указать, сколько датчиков нужно использовать, определить номера пинов для каждого датчика и задать параметры для измерения температуры.

5. Тестирование:

После написания программы и подключения всех датчиков, следует провести тестирование. Запустите программу на плате Arduino и проверьте, корректно ли работают датчики. Для этого можно вывести информацию на LCD-дисплей или выводить на серийный порт компьютера.

Как считывать данные с нескольких ds18b20?

Шаг 1: Подключите датчики к вашей плате Arduino

Для того, чтобы считывать данные с нескольких датчиков ds18b20, вам нужно подключить каждый датчик к своему собственному порту на плате Arduino. Для этого просто подключите пины GND и 5V к соответствующим пинам на плате, а пин DQ подключите к порту данных на плате Arduino.

Шаг 2: Настройте библиотеку OneWire

Для работы с несколькими датчиками ds18b20, вам понадобится настроить библиотеку OneWire для работы с несколькими портами. Сначала вы должны загрузить библиотеку OneWire в ваш проект Arduino. Затем вам нужно создать экземпляр объекта OneWire для каждого порта датчика.

Пример кода:

Шаг 3: Считывайте данные с каждого датчика

Теперь, когда у вас есть объект OneWire для каждого датчика, вы можете использовать его для считывания температурных данных. Просто вызывайте команду ds.reset(), ds.select(), ds.write() и ds.read() для каждого объекта OneWire, чтобы получить данные с каждого датчика.

Пример кода:

И вот! Теперь у вас есть температурные данные с нескольких датчиков ds18b20.

Что делать, если ds18b20 не работает?

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

Первым шагом, в случае неисправности датчика, следует проверить правильность его подключения. Убедитесь, что контакты датчика корректно подключены к микроконтроллеру и питанию. Кроме того, необходимо проверить правильность подключения резистора на линию данных.

Проверьте программный код

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

Проверьте повреждения датчика

Если подключение и программа написаны правильно, но датчик все равно не работает, возможно, он поврежден. Проверьте датчик на наличие механических повреждений и царапин на корпусе. Кроме того, убедитесь, что контакты датчика не окислены и не затерты, а провода не повреждены и не оборваны.

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

Вопрос-ответ

Как подключить датчики ds18b20 к Arduino?

Датчики ds18b20 подключаются к плате Arduino через OneWire-интерфейс, каждый датчик имеет свой уникальный код. Примерная схема подключения: VCC — 5V, GND — GND, DAT — D2. Далее необходимо установить библиотеку OneWire и библиотеку DallasTemperature.

Сколько датчиков ds18b20 можно подключить к Arduino?

Количество датчиков ds18b20, которые можно подключить к Arduino, зависит от памяти микроконтроллера. Однако в среднем можно подключить до 20 датчиков без проблем.

Как узнать адреса подключенных датчиков ds18b20?

Чтобы узнать адреса подключенных датчиков ds18b20, необходимо воспользоваться примером скетча OneWire, который можно найти в библиотеке OneWire. После загрузки скетча в мониторе порта появятся адреса подключенных датчиков.

Как проверить работу подключенных датчиков ds18b20?

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

Как настроить точность измерений датчиков ds18b20?

Для настройки точности измерений датчиков необходимо установить соответствующее разрешение, используя функцию setResolution(). Значение разрешения может быть от 9 до 12 бит, что соответствует разрешению от 0,5°C до 0,0625°C.

Могут ли датчики ds18b20 работать на больших расстояниях от Arduino?

Датчики ds18b20 могут работать на больших расстояниях от Arduino до 100 метров, если использовать дополнительный модуль уровня сигнала TTL. Иначе датчики будут работать только на коротких расстояниях.

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

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

Как подключить датчик ds18b20 к Arduino

Как подключить термодатчик DS18B20 к Ардуино

Как подключить к Ардуино термодатчик DS18B20 и DS18B22, чтобы сделать термометр с помощью библиотеки OneWire — рассмотрим в этом уроке. В отличие от датчика температуры и влажности DHT11, сенсор работает в широком диапазоне температур и способен измерять отрицательные температуры. Интегральный датчик температуры DS18B20 для Arduino имеет разрешающую способность измерений до 0,0625 °C.

Датчик DS18B20 распиновка, характеристики

Подключение и распиновка термодатчика ds18b20

Подключение и распиновка термодатчика ds18b20

Характеристики DS18B20 Arduino (datasheet)
  • диапазон измерения температуры -55 … +125 °C;
  • погрешность сенсора не превышает 0,5 °C;
  • разрешающая способность достигает 0,0625 °C;
  • сенсор DS18B20 откалиброван при изготовлении;
  • можно подключить до 127 датчиков на одной линии;
  • для подключения требуется только 3 провода.

Цифровой датчик DS18B20 отправляет данные по Wire шине и может работать на одной линии с множеством других устройств. Каждый датчик имеет свой персональный 64-битный код, позволяющий микроконтроллеру Arduino общаться на одной шине сразу с несколькими сенсорами. Датчик преобразует температуру окружающей среды в цифровой код, т.е. для подключения не требуется дополнительного АЦП.

Подключение к Ардуино датчика ds18b20

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • термодатчик DS18B20;
  • макетная плата;
  • резистор на 4.7 кОм;
  • провода «папа-мама», «папа-папа».

Схема подключения датчика ds18b20 к Arduino Uno

Схема подключения датчика ds18b20 к Arduino Uno

Для подключения DS18b20 к Arduino следует использовать макетную плату. Среднюю ножку сенсора (DATA) следует подключить к цифровому пину 2 платы Ардуино и подтянуть эту шину через резистор 4,7 кОм к линии +5 Вольт. Подключите датчик температуры DS18B20 к микроконтроллеру Arduino Uno согласно схеме, представленной на картинке выше и загрузите следующий скетч.

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

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

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

Пояснения к коду:
  1. для сенсора можно использовать любой порт микроконтроллера общего назначения, указав его в скетче;
  2. перед загрузкой программы, необходимо установить библиотеки DallasTemperature и OneWire.

Датчик температуры ds18b20 подключение к Ардуино

ds18b20 подключение к Ардуино нескольких датчиков

ds18b20 подключение к Ардуино нескольких датчиков

DS18B20 и DS18B22 работает по интерфейсу wire, для этого способа подключения необходима только одна шина данных и резистор на 4.7 кОм в качестве «Подтяжки». Все сенсоры DS18B20 для Ардуино содержат собственный 64-битый код, хранящийся в ПЗУ устройства. Благодаря этому количество датчиков подключаемых к микроконтроллеру по одной шине с библиотекой OneWire.h, почти неограниченно.

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

Пояснения к коду:
  1. DallasTemperature датчик подключается к цифровому порту 2 платы;
  2. цикл for выполняется столько раз, сколько обнаружено сенсоров на одой шине.

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

Похожие публикации