Zabor-33.ru

Строительный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

Электроника

учебно-справочное пособие

  • Главная
  • Теория
  • Практика
  • Справочники
  • Схемы
  • Arduino

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

Термистор – это резистор, сопротивление которого меняется от температуры. Термисторы бывают двух типов: с положительным и отрицательным температурным коэффициентом. У терморезистора с положительным коэффициентом при повышении температуры сопротивление возрастает, а с отрицательным коэффициентом — уменьшается.

И называют их по разному: термистор, терморезистор и термосопротивление. но это одно и тоже, и внешний вид у них бывает всевозможный, в зависимости от характера их применения.

Будем использовать простейший NTC термистор c номинальным сопротивлением 10 кОм. Обозначение его может быть 103 или TTC 103. Обозначение 103 говорит о том данный термистор имеет сопротивление 10 000 Ом = 10 кОм:

  • первые две цифры — это ’10’.
  • последняя цифра ‘3’ — это 3 нуля.

Таким образом получается 10 000 Ом или же 10 кОм).

Схема подключения представляет собой простейший резистивный делитель на двух резисторах одинакового номинала. R1 — это NTC термистор номиналом 10 кОм подключенный к +5V, R2 — обычный резистор с номиналом 10 кОм подключенный к минусу питания. Со средней точки включения R1 и R2 снимаются показания на аналоговый вход A0 Arduino.

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

Скетч

Используется библиотеку math.h которая уже есть в поставляемом софте от Arduino, а так же небольшие вычисления для получения нужных значений.

Загружаем в Arduino скетч, открываем монитор порта (Ctrl+Shift+M в программе Arduino) и видим температуру. Если прижать пальцем термистор, то температура начнет изменяться.

Таким образом можно подключить несколько «датчиков» термисторов и контролировать сразу несколько температур.

Был проделан эксперимент, термистор был подпаян на 11 метровый гибкий медный кусок кабеля 2х0,75 и сам термистор вынесен на улицу для контроля уличной температуры. Термистор был укутан в несколько слоев термоусадочных трубок для стабилизации изменения температуры, т.к. показания сильно прыгали когда наш датчик обдувался ветром. Да и влага не будет проникать и портить его.

Схему можно доработать: добавить два электролитических конденсатора для стабилизации показаний с резистивного делителя.

Доработанная схема подключения термистора к Arduino

Электронный термометр на 2 термисторах
слева — показание это улица, справа — в комнате.

Термистор и Arduino

Термистор (терморезистор) — это резистор, который меняет свое сопротивление с изменением температуры. Технически все резисторы являются термисторами, так как их сопротивление меняется в зависимости от температуры. Но эти изменения очень незначительны и измерить их очень сложно. Термисторы изготавливаются таким образом, чтобы сопротивление изменялось на значительную величину в зависимости от температуры. Около 100 Ом и даже больше при изменении температуры на 1 градус по Цельсию!

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

Если сравнивать термисторы с аналоговыми датчиками температуры типа LM35, TMP36, цифровыми вроде DS18B20, или термопарами, основными преимуществами термисторов можно назвать:

  • Во первых, они гораздо дешевле чем все перечисленные выше датчики температуры!
  • Их гораздо проще использовать в условиях повышенной влажности, так как это просто резистор.
  • Термисторы работают с любым напряжением (цифровые датчики требуют 3 или 5 В питания логики).
  • Если сравнить термистор и термопару, то первым не нужен усилитель сигнала, чтобы считывать данные. Соответственно, вы можете использовать практически любой микроконтроллер.
  • Соотношение точность показаний/цена — потрясающие. Например, термистор 10 КОм 1% может производить измерения температуры с точностью ±0.25°C! (При условии, что у вас подходящий аналогово-цифровой преобразователь на микроконтроллере).
  • Их практически невозможно поломать или повредить.

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

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

Читайте так же:
Ширина откоса у пластикового окна

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

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

  • Сопротивление при 25 °C: 10K ±1%.
  • B25/50: 3950 ±1%.
  • Диапазон измеряемых температур от -55°C до 125°C.
  • Диаметр: 3,5 мм / 0,13 дюйма.
  • Длина: 18 дюймов / 45 см.
  • Зависимость сопротивления от температуры.

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

Тестирование термистора

Так как термисторы — по своей сути — резисторы , проверить их не составит труда. Достаточно измерить сопротивление с помощью мультиметра:

При комнатной температуре показания должны составить около 10 кОм. Например, показания при 30°C — 86°F, составляют около 8 кОм.

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

Термисторы подключаются к Arduino очень просто. Достаточно использовать монтажную плату, как это показано на рисунке ниже. Так как сопротивление термистора достаточно высокое (около 10 кОм), сопротивление проводников практически не повлияет на результаты измерений.

Методика считывания аналогового напряжения

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

Скажем, мы используем резистор с постоянным номиналом 10K и переменный резистор, который называется R. При этом напряжение на выходе (V), которое мы будем передавать Arduino, будет равно:

где Vcc — это напряжение источника питания (3,3 В или 5 В)

Теперь мы хотим подключить все это к Arduino. Не забывайте, что когда вы измеряете напряжение (Vi) с использованием АЦП на Arduino, вы получите числовое значение.

Теперь мы совмещаем два напряжения (V = Vi) и получаем:

ADC value = R / (R + 10 4 ) · Vcc · 1023 / Vcc

Что самое прекрасное, Vcc сокращается!

ADC value = R / (R + 10 4 ) · 1023

То есть вам неважно, какое напряжение питания вы используете!

В конце мы все же хотим получить R (сопротивление). Для этого надо использовать еще одно преобразование, в котором R переносятся в одну сторону:

R = 10 4 / (1023/ADC — 1)

Подключите термистор к Arduino как это показано на рисунке ниже:

Подключите один контакт резистора на 10 rОм к контакту 5 В, второй контакт резистора 10 КОм 1% — к одному контакту термистора. Второй контакт термистора подключается к земле. ‘Центр’ двух резисторов подключите к контакту Analog 0 на Arduino.

Скетч:

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

Более точные измерения

При проведении измерений аналоговых значений, особенно с ‘шумными’ платами вроде Arduino, можно использовать два метода для улучшения качества показаний. Первый — использовать пин 3.3 В для аналогового сигнала и второй — собрать небольшой массив экспериментальных значений и усреднить их.

  1. Питание 5 В от Arduino подается напрямую от USB вашего персонального компьютера. В результате сигнал гораздо более зашумленный, чем питание от контакта 3,3 В (этот контакт предусматривает предварительную обработку через интегрированный в плату регулятор). То есть просто подключите 3,3 к контакту AREF и используйте его в качестве источника напряжения VCC.
  2. Снять несколько показаний для того, чтобы получить усредненное значение также значительно улучшит показания, так как будут учтены внешние шумы. Для усреднения рекомендуется брать не меньше 5 значений.

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

Скетч:

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

Преобразовываем показания с термистора в температуру

Естественно, от сопротивления на термисторе нам не холодно не жарко. Нам надо узнать именно температуру! Если вам достаточно на скорую руку оценить температуру (например, если температура ниже какого-то значения X, выполняем определенную задачу, если же выше какого-то Y, выполняем другую задачу), вы можете просто использовать таблицу зависимости температуры от сопротивления.

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

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

Для этой зависимости нам надо знать исключительно To (этот параметр для комнатной температуры (25 °C) = 298.15 K), B (в данном конкретном случае равен 3950 — коэффициент, который зависит от используемого термистора), и Ro (сопротивление при комнатной температуре. В данном случае он равен 10 кОм). Подставляем R (измеренное сопротивление) и получаем значение T (температура по Кельвину), которую преобразовываем в °C.

Читайте так же:
Удаление плесени с откосов окон

В программе для Arduino, которая приведена ниже, рассчитывается температура в °C.

Для того, чтобы получить еще более точные измерения, рекомендуется учесть точный номинал резистора. В данном случае он, например, не будет равен ровно 10 КОм, а будет принимать значение близкое к 10 КОм.

Насколько точно можно определить температуру с помощью термистора и Arduino?

Вероятно, вы заметили выше, что значение температуры равно 28.16°C. Значит ли это, что точность показаний составляет 0.01°C? К сожалению, нет. У нас есть погрешность самого термистора и погрешность аналоговой электрической цепи.

Можно аппроксимировать ожидаемую погрешность, если учесть ошибку сопротивления самого термистора. Например, на термисторе указано 1%. Это значит, что при 25 °C он может выдать показания в диапазоне от 10,100 до 9900 Ом. При 25°C разница в показаниях в 450 Ом соответствует 1°C, так что погрешность 1% составляет около +-0.25 °C (можно провести калибровку термистора при 0 °C и исключить отклонения). Также можно использовать термистор с погрешностью 0.1%. Это поможет уменьшить ошибку в показаниях до +-0.03°C

Есть вторая погрешность, которая возникает при аналогово-цифровом преобразовании. Каждый некорректно прочитанный бит может давать отклонения около 50 Ом. В принципе эта погрешность меньше, чем ошибка самого термистора +-(0.1°C), но, используя Arduino Uno или Arduino Pro Mini, уменьшить эту погрешность невозможно. Если вас такая точность не устраивает, необходимо использовать более «продвинутые» можели Arduino (которые обеспечат 12-16 бит вместо 10 при аналогово-цифровом преобразовании).

В общем, термисторы обеспечивают большую точность при измерении температуры по сравнению с термопарами и большинством недорогих цифровых датчиков температуры, но, используя Arduino и термистор, вы не получите измерения с точностью более чем +-0.1°C. Используя 1% термистор, показания не будут точнее +-0.5 °C.

Источники

Электроника © ЦДЮТТ • Марсель Арасланов • 2019

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

Руководитель: Шабронов Андрей Анатольевич тс. 913-905-8839 shabronov @ ngs . ru

ИЗУЧАЕМ DS1820/DS18B20

Датчики температуры с однопроводным интерфейсом 1-WIRE были разработаны фирмой DALLAS SEMICONDUKTOR для использования совместно с микроконтроллерами. Впоследствие эти датчики стали выпускаться фирмой MAXIM . Каждый датчик температуры имеет 56-разрядный индивидуальный идентификационный код, поэтому по одному проводу может быть опрошено практически неограниченное число датчиков. Перед установкой таких датчиков в одну линию необходимо считать 64 разрядный код ROM (в него входит 56-битный номер датчика и 8 бит регистра контроля четности) для каждого датчика и учитывать его при программировании микроконтроллера. Передача 64 разрядов занимает много времени, поэтому в устройствах, использующих небольшое число датчиков, можно обойтись выделением отдельного выхода микроконтроллера для каждого датчика.

Термодатчики DS1820 (DS18S20, DS1821, DS18B20)имеют следующие технические характеристики:
— индивидуальный 64-битный идентификационный номер;
— напряжение питания от +3 до +5,5 В ;
— измеряемая температура от -55 до + 125°С;
— погрешность измерения температуры в диапазоне -10. +85°С не более 0,5°С;
— в остальном диапазоне температур погрешность измерения не превышает 2°С;
— информация о температуре выдается 9-битным кодом;
— установка пороговых значений температуры по максимуму и минимуму,
— максимальное время преобразования температуры в код 750 мс;
— возможность питания от высокого уровня шины данных;
— термодатчики не требуют индивидуальной настройки при замене.

Принцип измерения температуры основан на сравнении частоты двух генераторов. Частота одного генератора не зависит от температуры, а частота второго изменяется с изменением температуры. Разность частот двух генераторов определяет значение температуры. Восьмиразрядный код температуры побитно, начиная с младшего бита, выводится в линию связи. Девятый бит определяет знак измеренной температуры. Если девятый бит единичный, то температура имеет знак минус, и наоборот. Передача каждого бита данных длится 60 мкс. Если длительность низкого уровня в линии от 1 до 15 мкс, то импульс идентифицируется как лог. 1. Лог. 0 идентифицируется при длительности низкого уровня в линии от 15 до 60 мкс.

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

Поиск ROM ( Search ROM) [0xF0]

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

Чтение ROM ( Read ROM) [0x33]

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

Читайте так же:
Заделка швов оконных откосов

Идентификация ROM ( Match ROM) [0x55]

Команда выдается перед 64-битным идентификационным номером и подтверждает обращение именно к этому термодатчику . Все последующие команды будут восприниматься только одним датчиком до команды обнуления линии.

Пропуск ROM ( Skip ROM) [0xCC]

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

Поиск аварии ( Alarm Search ) [0xEC]

Действие команды аналогично команде «Поиск ROM», но отвечает на нее термодатчик , если измеренная температура выходит за пределы предварительных установок по максимуму и минимуму.

Начало преобразования температуры ( Convert Т) [0x44]

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

Чтение блокнота ( Read Scratchpad ) [0xBE]

В блокноте содержится 8 байт информации (рис. 1). Если нужна информация только о температуре, то считывается 9 бит. Термодатчик будет выдавать информацию до тех пор, пока управляющий микроконтроллер не выдаст в линию нулевой импульс.

Рисунок 1. Карта памяти датчика DS1820

Запись в блокнот ( Write Scratchpad ) [0x4E]

После этой команды управляющий микроконтроллер должен послать два байта для записи в блокнот максимальной ТН и минимальной TL температуры ограничения по максимуму и минимуму. Все 16 бит необходимо передавать непрерывно без обнуления линии.

Копирование блокнота ( Copy Scratchpad ) [0x48]

После этой команды минимальная (TL) и максимальная (ТН) установленные значения температур переписываются в энергонезависимую память (EEPROM). После отключения напряжения питания записанные значения сохранятся в памяти.

Восстановление ( Recall Е 2 ) [0xB8]

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

Питание от линии ( Read Power Supply ) [0xB4]

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

Передача данных по однопроводной шине выполняется импульсами нулевого уровня, но различной длительности лог. 0 и лог. 1. Импульс воспринимается как лог. 1, если его длительность не превышает 15 мкс (рис. 2). Если длительность импульса больше 15 мкс, то он воспринимается как лог. 0. Длительность одного бита информации принята равной 60 мкс. Отсюда и разброс возможных длительностей импульсов: лог. 0 — 1. 15 мкс, лог. 1 — 15. 60 мкс.

Рисунок 2. Временные диаграммы импульсов однопроводной шины

Для того чтобы термодатчик подготовить к приему информации, управляющий микроконтроллер должен послать в линию импульс обнуления ( Reset ) (рис. 54). Импульс обнуления должен иметь длительность 480. 960 мкс. В ответ на обнуление линии термодатчик посылает импульс присутствия ( Presence ). Если в устройстве не предусмотрено отключение датчика, то импульс присутствия для упрощения программы можно не проверять, а заполнить это время (около 100 мкс) паузой. Длительность импульса Presence может быть в пределах 60. 240 мкс.

Если к одной линии подключено несколько термодатчиков , то проверка импульса присутствия обязательна. Перед приемом каждого бита информации с датчика микроконтроллер управления должен послать короткий импульс готовности (запроса) длительностью 1. 3 мкс.

Обмен данными и командами начинается с младшего бита. Формат регистров термодатчика показан на рис. 3. Младший регистр температуры (LS) несет информацию о температуре. В нулевой бит записана информация о десятых долях температуры. Если нулевой бит единичный, то десятые доли равны 0,5°С. Старший регистр температуры (MS) содержит информацию о знаке температуры. Если значения регистра нулевые, то знак температуры положительный, и наоборот. Поскольку все биты регистра MS одинаковы, то достаточно считать только младший бит.

Рисунок 3. Форматы регистров термодатчика DS1820

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

В табл. 1 приведен пример принимаемых кодов при различных температурах. Для того чтобы получить значение температуры при минусовых температурах, необходимо принятую информацию перевести в дополнительный код. Для перевода в дополнительный код необходимо принятый код инвертировать и прибавить единицу. Например, для значения 1111 1111 получим 0000 0001, т.е. 0,5 °С , но со знаком минус.

Читайте так же:
Отделка откосов окон со стороны лоджии

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

Рисунок 4. Схема подключения термодатчика к микроконтроллеру AVR

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

Если необходима повышенная точность измерения температуры, а быстродействие системы не имеет значения, то ее можно рассчитать по формуле:

Т = Т u — 0,25 + (CUNT_PER — COUNT_REMAIN)/COUNT_PER,

где Тu — измеренная температура в °С ; COUNT REMAIN, COUNT_PER — 6 и 7 байты блокнота (рис. 53). В документации на термодатчик не указана точность значений вычисленных температур, поэтому радиолюбителям советую провести экспериментальную проверку.

Вообще, если необходима точность измерения температуры 0,5 °С за пределами диапазона -10. +85°С, то необходимо делать поправку на точность измерения температуры для каждого датчика. Для этого экспериментально сравнивают показания температуры вашей системы с показаниями образцового термометра. Полученную относительную погрешность программно прибавляют со своим знаком к измеренному значению.

Микроконтроллерные термодатчики DS18B20, как упоминалось выше, отличаются повышенной точностью измерения температуры. Формат регистров термодатчика показан на рис. 5. Младший полубайт регистра LS предназначен для передачи данных температуры с максимальной точностью, т. е. 0,0625°С. Если точность измерения температуры будет в два раза меньше, то все данные сдвинутся на разряд вправо, а в нулевом бите будет информация 2(в минус третей степени). Если будет установлена точность измерения температуры, равная 0,5 °С , то формат регистров температуры ничем не будет отличаться от формата регистров термодатчика DS1820.

В табл. 2 показан пример данных при различных температурах, измеренных с максимальной точностью измерения.

Точность измерения температуры термодатчиком DS18B20 задается при его инициализации установкой пятого и шестого бита регистра конфигурации (рис. 5). В табл. 3 показаны устанавливаемые значения битов регистра конфигурации при различной точности измерения и максимальном времени преобразования температуры. Реально это время может быть значительно меньшим.

Рисунок 5. Формат регистров термодатчика DS18B20

При подаче управляющим микроконтроллером команды 0x4E (запись в блокнот) подряд передаются 3 байта. Первым передается байт установки ограничения температуры по максимуму ( Т h ), вторым — по минимуму ( Tl ), а третьим — байт конфигурации. Назначение других команд ничем не отличается от назначения команд термодатчика DS1820.

Последовательность действий управляющего микроконтроллера при считывании температуры с одного термодатчика DS1820:
1) послать сигнал обнуления линии (480. 960 мк c );
2) принять импульс присутствия или заполнить время паузой (60. 240 мкc );
3) послать команду пропуска идентификации 0xCC;
4) послать команду начала преобразования 0x44;
5) пауза не менее 500 мкc для завершения процесса преобразования;
6) обнулить линию;
7) послать команду пропуска идентификации 0xCC;
8) послать команду считывания блокнота 0xBE;
9) принять 9 байт;
10) выделить и проанализировать бит десятых долей градуса;
11) проанализировать бит знака;
12) если знак отрицательный, то перевести значение температуры в дополнительный код.

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

Теоретический материал был взят из книги Н. И. Заеца «Радиолюбительские конструкции на PIC микроконтроллерах»

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

Д ля и змерения температуры в бытовых целях хорошо подходят цифровые датчики DS18B20. Эти датчики способны измерять температуру в пределах от -55 до 125 °C, с заявленной точностью от производителя в 0,5 °C. Для большинства гражданских нужд такой диапазон и такая точность измерения вполне приемлема (какую-нибудь систему термоконтроля собрать или еще чего). Поэтому решил попрактиковаться с этим датчиком, обязательно пригодится.

У себя для освоения работы с датчиком использовал микроконтроллер Atmega32 и выводил показания на двухстрочный алфавитно-цифровой ЖКИ.

Что касается программной части, в Bascom-AVR имеется библиотека работы с протоколом 1-Wire. Ее и задействуем. В программе полученные результаты с датчика немного корректируются, иначе при отрицательных температурах результат будет ложным на 1 градус, и нулевая температура выводится без знака.

$regfile = «m32def.dat»
$crystal = 1000000 ‘ 1 MHz

‘*** Конфигурируем ЖКИ
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3

‘ ***Конфигурируем однопроводную шину

Config 1wire = Portb.7

Читайте так же:
Оконные перемычки под кирпич

Dim Byte0 As Byte
Dim Byte1 As Byte
Dim Sign As String * 1
Dim T As Byte
Dim T1 As Byte
Dim T2 As Byte

Do ‘ начало цикла

If Err = 1 Then ‘если при опросе небыло ответа ставим флаг ошибки

Rem датчик
Rem не подключен
Lcd » гaїАёє » ‘ выводим надпись об отсутствии датчика
Locate 2 , 1
Lcd » Ѕe ѕoгє»ЖАeЅ»

Else ‘ иначе, если ошибки не было, продолжаем опрос датчика

1wwrite &H CC ‘ Выдаем команду чтения ПЗУ
1wwrite &H 44 ‘ Запуск измерения

Waitms 750 ‘ Ждем окончания преобразования

1wreset
1wwrite &H CC
1wwrite &H BE ‘ Команда чтения ОЗУ датчика

Byte0 = 1wread ( ) ‘ Читаем нулевой байт

Byte1 = 1wread ( ) ‘ Читаем первый байт

If Byte1 > 248 Then ‘ Проверка на отрицательность температуры
Byte0 = &H FF — Byte0
Byte1 = &H FF — Byte1
Sign = «-«

Else
Sign = «+»
End If

T1 = Byte0 / 16 ‘ Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16)
T2 = Byte1 * 16 ‘ Сдвигаем первый байт влево на 4 бита (2*2*2*2=16)

T1 = T1 + T2 ‘ Формируем результат для вывода на дисплей

‘ *** Коррекция полученных значений

If Sign = «-» Then ‘ для корректного вывода отрицательных температур
T1 = T1 + 1
End If

If Sign = «+» And T1 = 0 Then ‘ убираем знак «+» с нулевой температуры
Sign = » »
End If

‘ *** Выводим результат на дисплей

Rem Температура
Lcd » Teјѕepaїypa» ‘ тут пишем что измеряем

Locate 2 , 6
Lcd Sign ; T1 ; ‘ выводим знак и температуру на дисплей
Locate 2 , 9

Lcd Chr ( 223 ) ; «C» ‘ Сhr(223) — символ «градус»

Wait 1 ‘ ждем 1 секундy

Loop ‘ повторяем цикл

Датчик не подключен, выводится соответствующее сообщение:

А это с подключенным датчиком, при комнатной температуре:

Ниже можете скачать исходник, файл в протеусе и откомпилированный файл:

Урок 10 — Датчик температуры DS18B20, подключаем к Arduino.

В предыдущем уроке мы рассмотрели подключения датчика температуры и влажности DHT11 к Arduino. И выяснили что данный датчик не очень точный. Чем же его можно заменить? Одним из распространенных датчиков для измерения температуры являться DS18B20. Рассмотрим в данном уроке варианты подключения датчика, пару примеров программного решения.

Характеристики датчика DS18B20:

  • Погрешность измерения не больше 0,5 С (для температур от -10С до +85С). Не требуется дополнительная калибровка.
  • Диапазон измерений от -55 С до +125 С.
  • Напряжение питания от 3,3В до 5В.
  • Датчик обладает своим уникальным серийным кодом.
  • Не требуются дополнительные внешние элементы.
  • Можно подключить сразу до 127 датчиков к одной линии связи.
  • Информация передается по протоколу Wire.
  • Существует так называемый режим паразитного питания – в нем происходит питание напрямую от линии связи. Для подключения в этом случае нужны только 2 провода. Важно, что в этом режиме не гарантируется корректная работа при температурах выше 100С. Режим паразитного питания удобно обычно применяется для приложений с удаленным температурным датчиком.

Датчик выпускается в открытом корпусе в виде транзистора для измерения температуры воздуха.

Можно купить датчик в виде модуля DS18B20. Распаренный на плате.

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

Для урока нам понадобиться:

  • Arduino NANO или Arduino UNO
  • Макетная плата.
  • Датчик температуры DS18B20
  • Соединительные провода
  • Резистор на 4,7 Ком

Подключаем датчик DS18B20 к Arduino NANO вот по такой схеме.

Подключение датчика DS18B20 к Arduino UNO будет вот таким.

Для написания программы нам понадобиться библиотека OneWire.

Данную библиотеку можно установить из менеджера библиотек или скачать отсюда.

Код ниже будет выводить показание температуры в монитор порта каждую секунду.

Но данный пример достаточно сложный для понимания. Для упрощения работы с датчиком лучше использовать библиотеку DallasTemperature. Данная библиотека ставиться поверх OneWire. Т.е. для ее роботы должна быть установлена библиотека OneWire.

С библиотекой DallasTemperature устанавливаются примеры. Вы можете воспользоваться любым из них.

Мы рассмотрим более простотой пример.

В данном примере температура выводиться 1 раз в секунду. И при этом выводится температура в Цельсиях и фарингитах.

Как видите данный пример намного меньше и более понятен для новичка.


На одну шину можно подключить до 127 датчиков вот по такой схеме.

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

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

Понравилась статья? Поделитесь ею с друзьями:

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector