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

Подключение датчика температуры DS18B20 к микроконтроллеру Флюс и припой

Библиотека dallastemperature.h

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

// Подключаем необходимые библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>

// Шину данных подключаем к выводу №2 Arduino
#define ONE_WIRE_BUS 2

// Создаём экземпляр класса для нашей шины и ссылку на него
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// ФУНКЦИЯ ПРЕДУСТАНОВОК
void setup(void)
{
  Serial.begin(9600); // Инициализация серийного порта
  sensors.begin(); // Инициализация шины
}

// ОСНОВНОЙ ЦИКЛ
void loop(void)
{ 
	Serial.print("Reading Temperature...");
	// Подаём команду на чтение
	sensors.requestTemperatures();
	Serial.println("Read");
	Serial.print("Sensor Temperature 1: ");
	// Отображаем значение температуры
	Serial.print(sensors.getTempCByIndex(0));
}

Результат работы программы показан на рисунке №7

Рисунок №7 – результат чтения температуры при помощи библиотеки DallasTemperature.h

Библиотека onewire.h


Рассмотрим для начала работу с библиотекой OneWire.h. Ниже приведён перечень её функций с кратким описанием.

Данная функция является конструктором класса OneWire и создаёт объект temperatureSensor, т.е. открывает канал связи с датчиком или групой датчиков на выводе pinNumber. В наших примерах (рисунки 3-5) это вывод “D2” Arduino Nano. Именно к нему мы подключали шину данных DQ DS18B20.

Пример:

OneWire temperatureSensor(D2); // Датчик или группа датчиков подключены к выводу D2 

Где можно использовать

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

Читайте также:  Припой f2000

Датчик температуры ds18b20. набираем комплектуху для самодельных, именных часов проекта super clock. продолжение. много фоток, ссылок, текста. осторожно трафик!

(покупал за 176,47 руб. с доставкой)

Продолжу рассказ про проект часов

Super Clock

.

Предыдущий обзор

. Набираем радиодетали. Рассмотрим подробнее устройство. Кому интересно прошу под кат.

Итак, матрицы я купил. Посмотрим что ещё нужно для часов.

Первоначально в схеме в качестве датчика температур использовался

DS18B20

Вот его я и купил у этого продавца

Товар пришёл в антистатическом пакетике, упакованным в стандартный, почтовый, пакет из бумаги с пупыркой с обратной стороны

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

Покупка совершалась

04.10.2022

. подробностей уже не помню, но товар пришёл в срок, товар годный, продавца рекомендую

Такой датчик я использовал (и сейчас использую в качестве уличного)

«Сердцем» часов является ATMEGA32A-AU 05.11.2022 мне удалось купить 2 шт. за 101,38 руб. Что составило цену 50,70 руб. за 1 штуку.
Этого товара в продаже сейчас нет, но тогда мне это обошлось в US $0.79 за штуку при бесплатной доставке
Самая дешёвая, что я сейчас вижу, это наверно эта, если брать поштучно 121 рубль за штуку с доставкой

Микроконтроллер управляет анодами матриц, через сдвиговый регистр 74HC595
Их я покупал за 33,37 руб., за 10 шт.04.10.2022 ну или US $0.52 за 10 шт. (если верить истории покупок)
Товара в настоящее время не существует на странице продавца
Купить его наверное можно вот тут, если брать так-же 10 шт. Но это почти в 2 раза дороже чем брал я в прошлом году

Этих регистров требуется столько, сколько матриц — т.е. в нашем случае 3 шт.

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

За время в этих часах отвечают Часы Реального ВремениDS3231
На момент покупки самым выгодным было взять эту микросхему в составе модуля для arduino — выходило дешевле и бонусом гнездо под батарейку
Покупал я их 04.10.2022, и тогда с доставкой мне они обошлись в US $0.43 за штуку
Сейчас самые дешёвые US $1.63 с доставкой тут
Тогда я отдал за свои по 27,60 руб. за штуку
Брал 4 штуки за110,37 руб.

Товар прибыл в антистатических, запаянных пакетиках

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

Батарейки нет

На платке есть чем ещё поживиться кроме микросхемы часов (если использовать модуль как донора)

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

Вид с другой стороны:

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

Товар прибыл вовремя (уже не помню на сколько «вовремя»), но спора я не открывал, товар годный (рабочий) с этой платы использовал гнездо под батарейку и саму микросхему часов. А ещё с неё очень удачно можно забрать угловой разъём соединения, для подключения датчика давления

BMP180

. Ну и ещё, с неё можно потянуть светодиод. Остальное я, за ненадобностью, не трогал

Модуль датчика давления BMP180
Я его покупал дважды у этого продавца 15.11.2022 и 23.11.2022 и покупка от 23 обошлась дешевле 🙂
15.11.2022 мне товар обошёлся в 170,21 руб., а 23.11.2022 я заплатил 163,61 руб.
Хотя товар был по одной цене если в баксах US $2.48
Сейчас-же, он и в баксах подешевел US $2.24, что в рублях на сегодняшний день составляет 132,75 руб.
А если поискать, то сейчас этот товар можно купить ещё дешевле например тут

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

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

Но, так как для соединения с платой часов я использовал угловой разъём с модуля

DS3231

, этот разъём был за ненадобностью

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

Размер платки модуля 21 на 18 мм

Напряжение питания 1,8V — 6V

Платка модуля имеет свой регулятор напряжения, а так-же резисторы подтяжки напряжения к линии I2C

По этому в схеме часов лист 1 указано, при использовании

BMP180

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

DS3231

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

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

Так-же в нём присутствует датчик температуры

Так что с подключённым этим датчиком, температура внутри помещения уже будет отображаться часами

Датчик температуры и влажности DHT22/AM2302
Товар, который я тогда покупал в настоящее время отсутствует самый дешёвый что я нашёл тут
Я покупал 2 шт.
Было это 06.10.2022 тогда это мне обошлось по $2.44 за штуку
В рублях это вышло за 2 шт.314,78 руб.

Датчики пришли в целлофановом пакете с застёжкой

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

Даташит

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

С этими датчиками на часах были определённые проблемы, обсуждалось

начиная отсюда

Датчик занижал показания влажности

Сложно сказать, что является причиной, но разные датчики на одних и тех-же часах показывают разные данные и порой сильно заниженные

Датчики купленные у продавца, которые я брал год назад — работают более или менее правдоподобно, но того продавца уже нет на али

Так что лотерея…

Bluetooth Модуль HC-05
Покупал несколько раз тут

Что там ещё по схеме?
Транзисторы BC817?
Они у меня были, нужно 9 штук
Lm1117-3,3?
Тоже — выдернул с карты
Бузер (пищалка) с генератором частоты — купил на рынке
Резисторы — прикупил недостающие
Диоды индикаторные — СМД, зелёненькие — прикупил, красные на модуле часов есть
Батарейку, гнездо СМД под неё — на рынке в Ростове на Дону
Разъёмчики — валялись — были
Кнопки в местном магазе РОДИОДЕТАЛИ подобрал (есть у нас такой — нам везёт в этом плане)
Управление жестами — не заработало у меня нормально
Постоянно от бегущей индикации переходило в режим отражения бегущей строки, по этому даже там где есть — пришлось отключить.
Разъём mini USB — был
Ну, что поехали?

Лирическое отступление — про мотивацию

Вообще, часов было несколько

Мне в предыдущем обзоре высказывали своё мнение, что часы — должны быть часами, а не универсал-комбайном

В принципе, — согласен.

Но, тогда я хотел, загодя, подготовиться и сделать хороший подарок брату.

Живёт он в Подмосковье, он уже состоявшийся мужчина (уже ближе к полтиннику) и испугать его каким либо подарком — сложно

А вот самодельным изделием, да ещё с календарём-напоминалкой порадовать можно было

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

Это казалось прикольным

Ведь всё что ты покупаешь — «не знает» что у тебя сегодня знаменательная дата — а эти часы в этом плане становятся «как родные!»

Короче проект понравился!

Вот только с программированием…

Казалось-бы чего проще — возьми карандаш и рисуй — будь художником!

Но, художником нужно просто быть

Так и с программированием — если не твоё…

Это пугало

Но, глаза боятся, а руки делают

А для начала нужно было хотя-бы собрать железо, прошить стоковой прошивкой от АВТОРА и посмотреть как оно будет

И вариантов было несколько, благо время позволяло — занялся этим вопросом сильно загодя

Вот кстати:

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

Все платы, кроме верхней, — работали — отладочные варианты для проверки

Как я делал часы

Итак, с рисованием плат у меня полегче чем с рисованием карандашом

Конечно, для настоящего «рисования» плат — необходимы знания (я это понимаю)

Но для моего бытового уровня то что у меня получается — мне хватает

Если понимать принцип работы и не совершать совсем грубых ошибок при проектировании плат — как правило — прокатывает

По этому будем считать — что «умею»

Получилась вот такая платка:

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

Т.к. детали почти все сосредоточены на слое Ф1 (когда припаяются матрицы — добраться на противоположный слой будет проблематично, по этому всё на этом слое), по этому слой Ф2, можно отключить, чтоб не мозолил глаза

Я понимаю влияние ёмкостно/индукционных наводок от множества параллельно друг другу идущих дорожек

Но с этим типом матриц лучше наверно не получится

По этому — прошу не пинать…

Рядом с АТмегой располагается шестипиновый разъём, это разъём для программатора
Подключение датчика температуры DS18B20 к микроконтроллеру
Ну, так получилось, что раньше я имел дела с АТмегами (8,16,168,32) и для прошивки был собран простейший программатор «пять проводков» с резисторами
И как тогда прицепил к нему разъём «в рядок», то так он у меня до се и остался — переводить его на стандартный разъём — нет нужды, да и платы ловчее рисовать с таким.
Прошиваю я PonyProg. — делаю это настолько редко, что мне этой программы достаточно
LPT порт у меня есть, на компьютере старая любимая XP
А как это сделать выше озвученной программой вот тут, человек, который меня втянул во всё это безобразие, — сделал понятную инструкцию
Там-же есть ссылка где взять эту программу и как её настроить.

Так вот на том разъёме, что на плате контакты сверху в низ по рисунку будут:
1 питание 5v,
2 — масса (минус),
3 — RESET,
4 — SCK,
5 — MISO,
6 — MOSI — что очевидно по маркировке АТмеги
Для запитования АТМЕГИ можно использовать разъём miniUSB с противоположной стороны платы, соединение 2 пина разъёма GND (массы) с программатором — обязательно.

ВАЖНО!
Два вот этих выделенных резистора на плате, что есть по схеме R3, R5 должны быть установлены, если не установлен BMP180 и необходимо убрать, если в часах установлен BMP180
Подключение датчика температуры DS18B20 к микроконтроллеру
Т.е. запустить часы без BMP180 можно, но нужно поставить резисторы подтяжки напряжения в линию I2C

Допустим, плата вытравлена. Переходы — запаяны, прозвонены (проверены). Детали смонтированы, проверены (перепроверены). Плата отмыта. Матрицы впаяны… И что дальше?

Для запуска часов потребуются: АТМЕГА, сдвиговые регистры, транзисторы, резисторы, часы реального времени с батарейкой и сетевым питанием — LM1117, кнопки управления, конденсаторы (для фильтрации питания), не забыть до впаивания матриц — припаять бузер (пищалку) — иначе потом не добраться (кстати пищалка должна пищать при подачи на неё питания), ну, и хотя-бы проводки — для подачи питания.
Блютуз модуль, датчик влажности, даже датчик давления — всё это — можно не ставить.
А так всего выше озвученного достаточно для пуска и проверки — остальное можно допаять после пуска
Часы должны пойти. Бегущая строка, при старте, должна «бежать». Кнопки должны реагировать. Засветов быть не должно.

Где брать прошивку
Прошивку брать тут
Если мне память не изменяет, до версии 2.10 — автор делил прошивки на «с BMP180» (с датчиком давления) и «без BMP180»
По этому в посте два архива m32_2.08.rar — без датчика и m32_2.08 .rar — с датчиком
Начиная с версии 2.10 — прошивки включают в состав входящих в конфигурацию часов модулей — датчик давления
О чём речь?
О том, что залив прошивку 2.08 в конфигурацию без датчика давления — мега будет не находить датчика и ругаться на это светя ошибку.
Прошивку нужно лить согласно подключённых частей устройства

НО!
Скачав архив, вы получите весь исходник ФАЙЛЫ ПРОШИВКИ В АРХИВЕ НЕОБХОДИМО ИСКАТЬ ПО АДРЕСУ: m32_2.08.rarm32_2.08DebugExe
Т.е. скомпилированные файлы прошивки всегда лежат в папке Exe, которая в свою очередь лежит в папке Debug, которая лежит в папке проекта m32_2.08

В указанной папке лежат три файла:
Super_Clock.eep
Super_Clock.hex
Super_Clock.rom
Я в МЕГУ заливаю Super_Clock.hex, устанавливаю фьюзы, а потом поверх лью Super_Clock.eep
Super_Clock.eep — порой бывает нужно перезалить, т.к. без этого файла часы отказываются работать.

После внесения изменений и правок, и компиляции — свежескомпилированная прошивка всегда будет находится в проекте по адресу DebugExe
В архиве АВТОРА всегда есть скомпилированные файлы прошивки — адрес где их искать я указал

Как настроить ПОНИПРОГ я давал выше ссылку на инструкцию моего друга
А дальше так: в ДЕВАЙС ФЭМЕЛИ указываем AVR micro, в СЕЛЕКТ ДЕВАЙС ТАЙП выставляем ATmega 32
Приколу ради пробуем считать мегу — процесс должен пройти — что покажет что компьютер видит мегу
Можно её стереть кнопочкой с ластиком (хуже не будет)
Потом: FileOpen Device File — выбираем адрес m32_2.08DebugExe — из выпадающего списка выбираем тип файла hex — выделяем файл Super Clock — кнопка Открыть — кнопка Write device — соглашаемся на всплывающее предупреждение — ждём когда закончится процесс
Подключение датчика температуры DS18B20 к микроконтроллеру

Далее я выставляю фьюзы
Для этого проекта фьюзы: High — D1; Low – 24.
Заходим в Калькулятор фьюзов AVR
Вводим значения High — D1; Low – 24.
Получаем куда нужно поставить галочки:
Подключение датчика температуры DS18B20 к микроконтроллеру
В ПОНИПРОГ давим Cmmand, в выпадающем окне выбираем Security and Configuration Bits…
Выставляем галочки как указано в калькуляторе, проверяем (семь раз, когда отрежем — будет поздно)
Подключение датчика температуры DS18B20 к микроконтроллеру
Проверив, давим кнопку Write

Поверх этого всего зальём настройки
FileOpen Data (EEPROM) File… — выбираем адрес m32_2.08DebugExe — из выпадающего списка выбираем тип файла eep — выделяем файл Super Clock — кнопка Открыть — кнопка Write Data Memory (EEPROM)
Ждём когда закончится процесс
Подключение датчика температуры DS18B20 к микроконтроллеру

Эту операцию — периодически приходится повторять, без неё бывают артефакты на экране или например у меня не запускался БЛЮТУЗ — перезалил настройки спасло
В этом проекте как правило: что-то не пошло — перезалей настройки
После этой операции — часы, при подаче питания, должны заработать
Если нет модуля блютуз — часы будут при передёргивании питания ТРИ РАЗА ругаться на его отсуствие
Через три раза передёргивания питания — им надоедает это делать, они перестают сообщать про БЛЮТУЗ ЭРРОР
Всё выше описанное помогает проверить основную конфигурацию часов.
Ну, например, если есть всё, кроме модуля Bluetooth, датчика температуры и влажности DHT22/AM2302, датчика давления BMP180, датчика температур DS18B20
Если есть всё, то залейте m32_3.3.7z

Как я переделывал прошивку под себя

Сделать «свою» прошивку можно при помощи программы

CodeVisionAVR 3.12

Взять её можно например

тут

Устанавливаем

CodeVisionAVR 3.12

Далее, распаковываем архив с прошивкой, заходим в папку и находим файл

Super_Clock.prj

, открываем его

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

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

Попробуем что либо изменить «под себя»

В крайнем левом разделе мы видим файлы проекта

Посмотрим что у нас например в файле

DS1307.h
Подключение датчика температуры DS18B20 к микроконтроллеру

Опа! Выясняется, что скорее всего на прошивке, залитой из проекта АВТОРА — часы «тикать» не станут…

Необходимо 9 строку файла привести к виду:

#define DS3231

Как написано выше «раскомментировать» (убрать два слэша перед этой строкой)

Только в этом случае часики начнут работать

Так, что там у нас ещё…

Зайдём в файл

interface.h
Подключение датчика температуры DS18B20 к микроконтроллеру

Что тут…

Ага, если в часах имеется

BMP180

(датчик давления) — оставляем как есть

Если нет — нужно «закомментировать»

Дальше — есть два варианта отображения обработки данных давления

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

И в виде самого прогноза в четырёх градациях:

ясно

,

облачно

,

осадки

,

ураган

с установкой пороговых значений от нормы

Практика показала, что тот прогноз в виду того что не отслеживает динамики изменений давления — очень часто врёт — график намного информативнее и не делает прогноза (не констатирует текущее состояние) и потому не ошибается

По этому эти настройки у себя я оставляю без изменений

Строка:

нормальное давление для текущего расположения часов

позволяет ввести корецию относительно нормального давления, в зависимости от высоты.

С изменением высоты — меняется значение «нормального давления» — для графика — это не важно

Что там у нас ещё?

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

Строки 47 и 48 — время перехода на «ночной режим» и выход из него

Указываешь время перехода в часах

Этими-же установками определяется время срабатывания «кукушки» — почасового сигнала, в период «ночного режима» — «кукушка» молчит

У меня время перехода выставлено 22 — 7

Строки 50 и 52, позволяют выставить яркость

Я себе яркость выставлял через программу связи с компьютером через блютуз, есть какие-то ограничения минимальных значений по яркости — читал в форуме сейчас уже не помню

То-ли 60, то-ли 30

Можно определить «методом тыка»

Максималка 254

Ещё, интересная закладочка Symbols.h
Подключение датчика температуры DS18B20 к микроконтроллеру
Тут вот в чём прикол
Мне лично «перечёркнутые» нули — не нравятся
Я не программист, и в своей обычной жизни, я сталкиваюсь или с цифрами, или с буквами
И ноли и буквы О в моей жизни — выглядят одинаково
А что это цифра или буква я понимаю интуитивно и из контекста
А когда постоянно вылазят непривычные символы — это раздражает!
По этому для себя я все символы, ноли и буквы «О» привожу к виду:
0x3E, 0x41, 0x41, 0x41, 0x3E,
Да простят меня все те, кто против такого святотатства…
И главное не забываем это сделать и в 106 строке — то-же

Как сделать часы индивидуальными

Так как научить часы своим знаменательным датам и событиям

Делается это в файле

holiday.c

( праздники-с 🙂 )

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

Заходим в файл

Здесь все даты расписаны таким образом

Дата — 4 цифры (первые две дата, две вторые месяц)

Событие — надпись в кавычках

25 января (2501) — Татьянин день

Сегодня 22 ноября

Этой даты в файле нет

Давайте её создадим

Чтоб было проще — скопируем «Татьянин день», и вставим его в список, а потом отредактируем дату, поставив

2210

, а потом в кавычках вместо «Татьяниного дня» напишем какую ни будь хрень…

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

Реальную хрень!

Теперь, например, 2 февраля у моей супруги день рождения
Эта дата занята
Подключение датчика температуры DS18B20 к микроконтроллеру
Причём для кого как, а вот победа в Сталинградской битве для меня СОБЫТИЕ и его естественно я хочу оставить в СВОИХ часах
Но и день рождение жены — это ПРАЗДНИК
Как их совместить в часах?
Редактируем надпись в кавычках, подставляя там, где нужно, чтоб были цифры годовщины сочетание %u
Так как события два, каждому событию по своей %u в нужном месте
А чтоб программа высчитала правильно годы обоих событий — ей нужно указать два года от которых вести исчисление
Подключение датчика температуры DS18B20 к микроконтроллеру
У нас в этом событии указан одни год 1943
А нам нужно, согласно последовательности указанных событий, указать два года
Выделяем ,calc_anniversary(1943) ( с запятой впереди)
Дублируем выражение перед выделенным и изменяем год на год отсчёта первого события
Подключение датчика температуры DS18B20 к микроконтроллеру
Попробуем создать не просто событие, а событие с указанием годовщины
26 марта у малых днюха
Этой даты нет в списке
Подключение датчика температуры DS18B20 к микроконтроллеру
Естественно её нужно делать с привязкой к году
Копируем какую либо дату с указанием года
Вставляем её меж других дат (меж 25 и 27 марта), не нарушая хронологии, не забывая про строчку интервала меж ними
Подключение датчика температуры DS18B20 к микроконтроллеру
И редактируем саму дату, потом текст, потом год отсчёта
Подключение датчика температуры DS18B20 к микроконтроллеру
Вот таким образом «обучаем» часы вашим датам и событиям

ВАЖНО!, если внимательно посмотреть файл Symbols.h, то можно увидеть, что в русском алфавите нет буквы Ё ни заглавной, ни строчной
Й — есть обе, а Ё нет — это нужно учитывать создавая свои сообщения
В изменениях от 02,02 — мной была сознательно внесена ё, а не е в слове ещё
А как это отобразят часы — посмотрите ниже в видео проверки

Ну что, проверим что получилось?
Давим на клавиатуре Shift F9
Программа компилирует прошивку с заданными нами изменениями в папку проекта по адресу m32_3.3DebugExe и по результату выдаёт сообщение
Подключение датчика температуры DS18B20 к микроконтроллеру
В нём можно увидеть сколько свободной памяти останется в МЕГЕ, после внесения нами наших изменений

Процесс прошивки заснял на видео:

Проверяем всё-ли получилось ли у нас правильно

Как обещал, фото вскрытых часов после года стояния на кухне в открытом типе корпуса
Подключение датчика температуры DS18B20 к микроконтроллеру
Подключение датчика температуры DS18B20 к микроконтроллеру
Пыль есть, но не сказал-бы, что катастрофически много

Файл в Sprint-Layout.6, кому интересно, можно скачать тут

ПРОДОЛЖЕНИЕ СЛЕДУЕТ…

Обзор цифровой датчик температуры ds18b20

DS18B20 – это полноценный цифровой термометр, способный измерять температуру в диапазоне от -55оС до 125оС с программируемой точностью 9-12 бит. При изготовлении на производстве, каждому датчику присваивается свой уникальной 64-битный адрес, а обмен информацией с ведущим устройством (микроконтроллером или платой Arduino) осуществляется по шине 1-wire. Такой подход позволяет подключать к одной линии целую группу датчиков, вплоть до 264.

Технически, датчики DS18B20 выпускаются в 3-х корпусах: ТО-92, SO, uSOP. Внешний вид и распиновка корпусов показаны на рисунке №1.

Рисунок №1 – виды корпусов и распиновка DS18B20

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

Рисунок №2 – структурная схема DS18B20

Первое на что хотелось бы обратить внимание – это способ питания микросхемы. Их всего два: режим прямого питания (напряжение подаётся на выводы Vdd и GND) и режим паразитного питания (датчик запитывается от линии данных). Более подробно эти режимы будут рассмотрены ниже в статье.

Из структурной схемы видно, что за прямое питание отвечает блок (POWER SUPPLY SENSE), а режим паразитного питания обеспечивает блок (PARASIT POWER CIRCUIT) в составе которого основную роль играет конденсатор Срр, как питающий буфер.

Далее следует модуль “64-BIT ROM AND 1-WIRE PORT”. В нём содержится информация об уникальном адресе каждого устройства. Как было сказано выше данный код записывается заводом-изготовителем во внутреннюю энергонезависимую память датчика (EEPROM) и никогда не повторяется. Здесь же размещена и подсистема взаимодействия с 1-Wire интерфейсом.

Блок “MEMORY CONTROL LOGIC” осуществляет взаимосвязь между командами интерфейса 1-Wire и внутренней памятью датчика SCRATCHPAD. Данная память, в свою очередь, взаимодействует с несколькими специализированными регистрами DS18B20, а именно:

Подключение к плате arduino

Как упоминалось выше, температурный датчик DS18B20 может быть подключен к плате Arduino двумя способами (прямым и с паразитным питанием). Кроме того, на один вход Arduino можно повесить как один, так и целую группу датчиков. Для начала рассмотрим самый простой вариант. На рисунке ниже показана схема прямого подключения одиночного датчика к Arduino Nano.

Рисунок №3 – схема прямого подключения одиночного датчика

Здесь всё довольно просто. Запитываем DS18B20 от самой платы Arduino, подавая 5V на вывод Vdd датчика. Аналогичным образом соединяем между собой выводы GND. Средний вывод термодатчика подключим, например, к выводу D2 нашей Arduino Nano. Подключать вывод данных (DQ) можно практически на любой вход Arduino, предварительно прописав его номер в скетче.

Единственный и самый важный момент, на который следует обратить внимание – это наличие резистора номиналом 4,7k между плюсом питания и линией данных термодатчика. Этот резистор служит для подтяжки линии данных к логической единице и его отсутствие вызовет сбой в работе алгоритма обмена информацией. Значение 4,7k не сильно критично и в некоторых пределах его можно изменять, главное не увлекаться.

С прямым подключением одного датчика всё понятно, теперь рассмотрим прямое подключение группы датчиков к одному выводу Arduino. На рисунке №4 показан пример подключения 5-ти датчиков DS18B20. Это количество может быть любым и ограничивается только рамками временем на опрос каждого из них (750мС).

Рисунок №4 – подключение группы датчиков DS18B20

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

Режим паразитного питания отличается от прямого тем, что датчики получают энергию непосредственно с линии данных, без использования прямых 5V. При этом выводы Vdd и GNG каждого термодатчика соединяются между собой. Более наглядно этот процесс отражён на рисунке №5.

Рисунок №5 – подключение одиночного датчика и группы датчиков в режиме паразитного питания от линии данных. 

Как и в предыдущих схемах, здесь присутствует резистор 4,7k, который в данном случае играет двойную роль, а именно: подтяжка линии данных к логической «1» и питание самого датчика. Возможность такого включения обеспечивает встроенная в DS18B20 специальная схема и буферный конденсатор Срр (рисунок №2).


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

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

В нашем магазине вы можете купить модули Arduino, а так же различные датчики

Работа с готовыми библиотеками

Итак, для работы с датчиками температуры DS18B20 в сети можно найти огромное множество библиотек, но как правило, применяют две самые популярные. Это библиотека
OneWire.h и библиотека
DallasTemperature.h. Причём вторая библиотека является более удобной надстройкой над первой и без неё использоваться не может.

Технические характеристики ds18b20


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

Оцените статью
Про пайку
Добавить комментарий