Подключение датчика температуры ds18b20 к attiny2313 и вывод температуры на lcd

Точный термометр

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

Основой конструкции является микросхема ICL707 и светящийся индикатор. Питание можно подавать от любого источника с выходной амплитудой 12 В. На DA3 собран нормирующий преобразователь, изменяющий своё выходное напряжение в зависимости от сигнала, поступаемого с датчика.

Настройка заключается в выставлении на 36 ноге микросхемы напряжения, равного одному вольту. Делается это с помощью резисторов R3 и R4. Вместо датчика подключают резистор на 100 Ом. Изменением сопротивления R14 устанавливают нули на цифровом индикаторе. После чего устройство готово к измерениям.

Источник

Использование микроконтроллера

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

В схеме используется небольшое число радиодеталей. Она несложная и не нуждается после сборки в какой-либо наладке. Напряжение питания микроконтроллера составляет пять вольт. Для его стабилизации используется микросхема L7805. Транзисторы можно использовать любые с NPN структурой. В качестве индикатора подойдёт трёхразрядный сегментный дисплей с общим катодом.

Температура устройством может изменяться в интервале от -55 ° до 125º С с шагом в 0,1º С. Погрешность измерения не превышает 0,5º С. Обмен данными между датчиком и микроконтроллером происходит по шине 1-Wire. При большом расстоянии выноса измерительной микросхемы DS18B20 от ATmega8 необходимо подобрать подтягивающее сопротивление. Распаять его лучше непосредственно на вывод датчика.

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

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

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

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

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

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

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

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

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

Порядок управления электронным термостатом

Как уже было сказано выше, кнопка SA4
предназначена для выбора типа режима управления исполнительным
устройством (режим нагрева или охлаждения) Для того чтобы узнать
текущую поддерживаемую температуру, необходимо нажать кнопку
SA3. Кнопки SA1 и SA2 предназначены для изменения температуры и ее
записи в память микроконтроллера Attiny2313.

Для изменения значения порога термостата
нужно нажать и удерживать кнопку SA3 и одновременно при помощи кнопок
SA1 и SA2 увеличивать или уменьшать значение температуры. Теперь чтобы
микроконтроллер записал в память данное значение нужно отпустить кнопку
SA3, а затем одновременно нажать на SA1 и SA2.

Блок коммутации нагрузкой собран на
оптопаре VD1 и симисторе VS1. Питание схемы осуществляется от
маломощного трансформатора (ток вторичной обмотки около 0,15А),
напряжение, с вторичной обмотки которого выпрямляется диодами VD1 и VD2 и
стабилизируется микросхемы 78L05.

При программировании микроконтроллера Attiny2313 программатором необходимо выставить фьюзы следующим образом:

  • CKSEL0=0
  • CKSEL2=0
  • CKSEL3=0
  • SUT0=0
  • SUT1=0

Термометр дом—улица на ATtiny2313A

Рейтинг:   / 5

Подробности
Категория: схемы на ATtiny
Опубликовано: 30.01.2019 13:13
Просмотров: 3348

Н. Салимов, г. Ревда Свердловской обл. Предлагаемый термометр способен работать с двумя датчиками температуры и может измерять её в двух местах (например, в жилом помещении и на улице) с дискретностью 0,1 °С в пределах от -55 °С до +99,9 °С. На страницах журнала за последние годы были опубликованы описания нескольких подобных устройств. В частности, статья Е. Лукьяненко и др. «Термометр повышенной точности с датчиком DS18S20» («Радио», 2014, № 5, с. 48, 49). Но описанный в ней прибор, на мой взгляд, имеет существенные недостатки. В частности, применённый микроконтроллер ATmega8515-16PU избыточен для столь простого устройства, а трёх разрядов индикатора недостаточно для полноценного отображения информации. Эти недостатки устранены в термометре, схема которого изображена на рис. 1.

Его основные элементы — двадцативыводной микроконтроллер ATtiny2313A-PU (DD1), четырёхразрядный светодиодный индикатор СС56-12GWA (HG1) с общими катодами элементов каждого разряда и соединёнными для динамической индикации анодами одноимённых элементов всех разрядов и два цифровых датчика температуры DS18B20 (ВК1 и ВК2). Выводы анодов индикатора подключены к восьмиразрядному порту В микроконтроллера через ограничивающие ток резисторы R9—R16. Общие катоды разрядов индикатора, амплитуда импульсов тока которых может достигать 120 мА, коммутируют транзисторы VT1—VT4. Сигналы управления поступают на их базы с четырёх линий порта D микроконтроллера через резистивные делители напряжения. Датчики температуры подключены к двум раздельным линиям порта А, сконфигурированным в программе как обычные линии дискретного ввода-вывода. Светодиод HL1 показывает, какой из двух опрашиваемых поочерёдно датчиков активен в данный момент. Он включён при работе датчика ВК2 и выключен при работе с ВК1. Но если установить перемычку S1, программа станет работать только с датчиком ВК1. Интервал обновления информации о температуре — 6 с. Если измеренная температура ниже нуля, в крайний левый разряд индикатора выводится знак минус. При температуре выше нуля этот разряд погашен. Для питания термометра нужен источник стабилизированного постоянного напряжения 5 В, способный отдавать ток не менее 100 мА. Чертёж печатной платы термометра показан на рис. 2. Она изготовлена из фольгированного с двух сторон стеклотекстолита. В переходные отверстия, показанные на рис. 2 залитыми, необходимо вставить и пропаять с двух сторон отрезки лужёного провода. Если изготовление платы с двухсторонней печатью покажется слишком сложным, можно сделать её односторонней, оставив печатные проводники только на стороне, противоположной той, где будут установлены детали. Печатные проводники на стороне деталей в этом случае нужно заменить перемычками из тонкого изолированного монтажного провода, установить которые можно и на стороне печатного монтажа. Все резисторы в термометре — С1 -4, конденсатор С2 — оксидный, остальные конденсаторы — керамические К10-7 или плёночные К73-17. Микроконтроллер ATtiny2313A-PU можно заменить на ATtiny2313V-10 или ATtiny2313-20 с последними индексами PL) или PI. К статье приложены два варианта программы микроконтроллера: Тermometr2 и Termometr2M которые можно скачать в ZIP архиве. Они различаются лишь тем, что во втором варианте не предусмотрено управление светодиодом HL1. Конфигурация микроконтроллера должна быть запрограммирована согласно таблице. Перед выводом показаний каждого датчика на индикаторе появляется сообщение, состоящее из номера датчика (цифры 1 или 2), пробела и знака градуса Цельсия (°С). Если установкой перемычки S1 датчик ВК2 заблокировать, это сообщение выводиться не будет

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

Это позволяет использовать датчики температуры DS18B20, не зная их индивидуальных идентификационных кодов. Но считанные из датчиков результаты их работы далее обрабатываются и выводятся на индикатор одними и теми же подпрограммами. Термометр проверен в действии с одним и двумя датчиками температуры, в том числе при соединении их с платой жгутами свитых изолированных многожильных проводов длиной до 4,5 м. Собранная плата термометра показана на рис. 3 в режиме работы с одним датчиком. Радио №4 2018Четырёхканальный термометр на ARDUINO UNOПростой цифровой термометр на PIC16F628A и датчике DS18B20Двойной термометр на ARDUINO UNO

Оставлять комментарии могут только зарегистрированные пользователи

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

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

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

Где купить датчик

Влагозащищенный датчик температуры DS18B20 с длиной провода 1 м от надежного магазина Комплект из 10 микросхем DS18B20 TO92 Модуль DS18B20 для удобного подключения к Ардуино от Keyestudio
Беспроводной модуль DS18B20 на ESP8266 ESP-01 ESP-01S для проектов умного дома Шилд датчика DS18B20 для платы D1 MINI – беспроводная передача данных Датчик DS18B20 с модулем для подключения к Ардуино

Особенности цифрового датчика DS18B20

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

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

Память датчика состоит из двух видов: оперативной и энергонезависимой – SRAM и EEPROM. В последнюю записываются регистры конфигурации и регистры TH, TL, которые могут использоваться как регистры общего назначения, если не используются для указания диапазона допустимых значений температуры.

Основной задачей DS18B20 является определение температуры и преобразование полученного результата в цифровой вид. Мы можем самостоятельно задать необходимое разрешение, установив количество бит точности – 9, 10, 11 и 12. В этих случаях разрешающие способности будут соответственно равны 0,5С, 0,25С, 0,125С и 0,0625С.

Во время включения питания датчик находится в состоянии покоя. Для начала измерения контроллер Ардуино выполняет команду «преобразование температуры». Полученный результат сохранится в 2 байтах регистра температуры, после чего датчик вернется в первоначальное состояние покоя. Если схема подключена в режиме внешнего питания, микроконтроллер регулирует состояние конвертации. Во время выполнения команды линия находится в низком состоянии, после окончания программы линия переходит в высокое состояние. Такой метод не допустим при питании от паразитной емкости, так как на шине постоянно должен сохраняться высокий уровень сигнала.

Полученные температурные измерения сохраняются в SRAM датчика. 1 и 2 байты сохраняют полученное значение температуры, 3 и 4 сохраняют пределы измерения, 5 и 6 зарезервированы, 7 и 8 используются для высокоточного определения температуры, последний 9 байт хранит устойчивый к помехам CRC код.

Описание работы схемы термометра

Самодельный электронный термометр с выносным датчиком построен на всем известном микроконтроллере Attiny2313. В роли температурного датчика выступает микросхема DS18B20 фирмы Dallas. В схеме термометра можно применить до 8 цифровых датчиков. Микроконтроллер взаимодействует с DS18B20 по протоколу 1Wire.

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

Для прошивки микроконтроллера Attiny2313 необходимо выставить фьюзы следующим образом (для программы CodeVision AVR):

Скачать файлы прошивки и печатной платы

Источник

Простой термометр

Конструкция простого термометра состоит всего из трёх деталей и тестера. В качестве датчика температуры в схеме используется LM35. Это интегральный прибор с калиброванным выходом по напряжению. Амплитуда на выходе датчика пропорциональна температуре. Точность измерений составляет 0,75° C. Запитывать интегральную микросхему можно как от однополярного источника, так и двухполярного. Предел измерений от -55 ° до 150° C.

В качестве мультиметра можно использовать стрелочный или цифровой прибор. К датчику согласно схеме подключают источник питания. Например, КРОНу или три соединённых последовательно пальчиковых батарейки. Измеритель же подключают к клеммам V и COM и переводят в режим измерения температуры. Потребление датчика при работе не превышает 10 мкА.

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

Схема термометра на ATmega8 и датчике температуры DS18B20

Давайте посмотрим на схему термометра:

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

Напряжение питания конструкции

— 5 вольт. Если вы примените микроконтроллер с низковольтным питанием , то можно и понизить питающее напряжение конструкции, но в этом случае, возможно придется уменьшить номинал гасящих сопротивлений в сегментах индикатора. Приблизительно номиналы сопротивлений можно брать:
— при питании 5 вольт — 200-300 Ом
— при питании 2,7 — 3 вольта — 100-150 ОмТранзисторы

— любые, маломощные, структуры NPN.Датчик температуры

— DS18B20 Семисегментный индикатор

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

Особенности и полезные функции уличных оконных термометров

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

Особенности и преимущества электронных уличных термометров

Благодаря достижениям современных технологий цифровые термометры способны работать при разных условиях и максимально удобны в быту:

  • бытовые электронные термометры функционируют при широком диапазоне температур. Для внутреннего основного блока рабочий диапазон составляет от -10 до +50°C, наружный датчик сохраняет свои эксплуатационные характеристики при температурном режиме от -50 до +70°C. Это позволяет использовать термометры во всех климатических зонах России;
  • вы можете не переживать за сохранность и точность показаний устройства при любых погодных условиях: благодаря герметичному корпусу, датчику не страшны снег, ветер, дождь и палящее солнце;

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

Дополнительные функции электронных цифровых термометров с выносным датчиком

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

Функция Описание функции
Определение вероятности гололеда При температурном режиме в пределах от -1 до -3°C устройство предупреждает вас о повышенной вероятности гололеда на улице.
Анализ данных Термометр фиксирует максимальную и минимальную температуру и записывает эти данные в память.
Подключение в USB Через USB порт вы можете подключить интерфейс к своему компьютеру, скопировать, проанализировать и обработать полученные данные и составить отчеты на основе информации в памяти устройства.
Дополнительные индикаторы Термометр может оснащаться часами, встроенным будильником и календарем, сочетая в одном устройстве все полезные показатели, необходимые нам ежедневно. Среди лучших многофункциональных моделей – оконные термометры rst, оснащенные часами и умным будильником.
Определение уровня влажности Показатель влажности позволяет предугадать вероятность осадков на улице.

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

Характеристики модуля KY-001.

Модуль датчика температуры KY-001 состоит из цифрового датчика температуры DS18B20, светодиода и резистора. Модуль совместим с популярными электронными платформами, такими как Arduino, Raspberry Pi и Esp8266.

  • Собран на цифровом сенсоре DS18B20, напряжение питания от 3.0 V до 5.5 V.
  • Измеряемая температура -55 ° C до +125 ° C, по Фаренгейту — 67 ° F до 257 ° F.
  • В диапазоне от -10 °C до +85 ° C точность измерения ± 0.5 ° C.
  • Время измерения не более 750 миллисекунд.

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

Схема подключения модуля KY-001 (DS18B20) к Arduino.

Схема подключения модуля KY-001 (DS18B20) к Arduino NANO.

Схема подключения модуля KY-001 (DS18B20) к Arduino.

Подключите линию питания (посередине) c к +5 Arduino, землю (-) и GND соответственно. Подключите сигнал (S) к контакту 2 на Arduino.

Подключение (слева направо)

  • GND
  • +5V
  • S — Signal, в примере подключаем ко 2 выводу arduino

Скетч вывода температуры с модуля KY-001 (DS18B20) в монитор порта.

Код ниже будет выводить показания температуры с модуля KY-001 (DS18B20) в монитор последовательного порта каждую секунду.

#include <OneWire.h>
OneWire ds(2);
void setup() {
    Serial.begin(9600);
}
void loop() {
    byte i;
    byte data;
    byte addr;
    float celsius;
    // поиск датчика
    if ( !ds.search(addr)) {
        ds.reset_search();
        delay(250);
        return;
    }
    ds.reset();
    ds.select(addr);
    ds.write(0x44, 1); // измерение температуры
    delay(1000);
    ds.reset();
    ds.select(addr); 
    ds.write(0xBE); // начало чтения измеренной температуры
    //показания температуры из внутренней памяти датчика
    for ( i = 0; i < 9; i++) {
        data = ds.read();
    }
    int16_t raw = (data << 8) | data;
    // датчик может быть настроен на разную точность, выясняем её 
    byte cfg = (data & 0x60);
    if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс
    else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс
    else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс
    // преобразование показаний в градусы Цельсия 
    celsius = (float)raw / 16.0;
    Serial.print("t=");
    Serial.println(celsius);
}

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

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

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

Мы рассмотрим более простотой пример, который я взял из библиотеки, и немного его упростил.

#include <OneWire.h>
#include <DallasTemperature.h>
// контакт 2 на Arduino:
#define ONE_WIRE_BUS 2
// создаем экземпляр класса OneWire, чтобы с его помощью
// общаться с однопроводным устройством
OneWire oneWire(ONE_WIRE_BUS);
// передаем объект oneWire объекту sensors:
DallasTemperature sensors(&oneWire);
void setup(void)
{
  Serial.begin(9600);
  // запускаем библиотеку:
  sensors.begin();
}
void loop(void){
  // вызываем функцию sensors.requestTemperatures(),
  // которая приказывает всем устройствам, подключенным к шине
  sensors.requestTemperatures();
  Serial.print("Celsius temperature: ");
  //  в Цельсиях:
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print(" - Fahrenheit temperature: ");
  //  в Фаренгейтах:
  Serial.println(sensors.getTempFByIndex(0));
  delay(1000);
}

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

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

KY-001датчик температуры DS18B20 к ArduinoKY-001

Купить модуль KY-001 можно тут:

Описание всех датчиков из набора «37 in 1 Sensors Kit for Arduino» вы можете посмотреть на странице описания данного набора модулей для Arduino.

Понравился Урок KY-001 модуль температуры на базе DS18B20. Подключение Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу , в группу на .

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

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скачивая материал, я соглашаюсь с
Правилами скачивания и использования материалов.

Модуль KY-001 датчика температуры DS18B20.pdf 82 Kb 234 Скачать
Скетч вывода температуры с модуля KY-001 .ino 1 Kb 230 Скачать
Код с использованием бмблиотеки DallasTemperature.h.ino 1 Kb 231 Скачать
Библиотека DallasTemperature .zip 31 Kb 224 Скачать

Примеры работы для Arduino

Один датчик

Рассмотрим простой пример — подключения одного датчика.

Сенсор подключается к управляющей плате через один сигнальный пин.
При подключении к Arduino в компактном формфакторе, например Arduino Micro или Iskra Nano Pro, воспользуйтесь макетной платой и парочкой нажимных клеммников.

Между сигнальным проводом и питанием установите сопротивление 4,7 кОм.

При коммуникации сенсора со стандартными платами Arduino формата Rev3, Arduino Uno или Iskra Neo, используйте Troyka Slot Shield совместно с модулем подтяжки.

Код программы

Выведем температуру сенсора в Serial-порт.

simple.ino
// библиотека для работы с протоколом 1-Wire
#include <OneWire.h>
// библиотека для работы с датчиком DS18B20
#include <DallasTemperature.h>
 
// сигнальный провод датчика
#define ONE_WIRE_BUS 5
 
// создаём объект для работы с библиотекой OneWire
OneWire oneWire(ONE_WIRE_BUS);
 
// создадим объект для работы с библиотекой DallasTemperature
DallasTemperature sensor(&oneWire);
 
void setup(){
  // инициализируем работу Serial-порта
  Serial.begin(9600);
  // начинаем работу с датчиком
  sensor.begin();
  // устанавливаем разрешение датчика от 9 до 12 бит
  sensor.setResolution(12);
}
 
void loop(){
  // переменная для хранения температуры
  float temperature;
  // отправляем запрос на измерение температуры
  sensor.requestTemperatures();
  // считываем данные из регистра датчика
  temperature = sensor.getTempCByIndex();
  // выводим температуру в Serial-порт
  Serial.print("Temp C: ");
  Serial.println(temperature);
  // ждём одну секунду
  delay(1000);
}

Серия датчиков

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

Добавим к предыдущем схемам подключения ещё по паре датчиков в параллель.

Код программы

Просканируем все устройства на шине и выведем температуру каждого сенсора отдельно в Serial-порт.

multipleSensors.ino
// библиотека для работы с протоколом 1-Wire
#include <OneWire.h>
// библиотека для работы с датчиком DS18B20
#include <DallasTemperature.h>
 
// сигнальный провод датчика
#define ONE_WIRE_BUS 5
 
// создаём объект для работы с библиотекой OneWire
OneWire oneWire(ONE_WIRE_BUS);
// создадим объект для работы с библиотекой DallasTemperature
DallasTemperature sensors(&oneWire);
// создаём указатель массив для хранения адресов датчиков
DeviceAddress *sensorsUnique;
// количество датчиков на шине
int countSensors;
 
// функция вывода адреса датчика
void printAddress(DeviceAddress deviceAddress){
  for (uint8_t i = ; i < 8; i++){
    if (deviceAddressi < 16) Serial.print("0");
    Serial.print(deviceAddressi, HEX);
  }
}
 
void setup(){
  // инициализируем работу Serial-порта
  Serial.begin(9600);
  // ожидаем открытия Serial-порта
  while(!Serial);
  // начинаем работу с датчиком
  sensors.begin();
  // выполняем поиск устройств на шине
  countSensors = sensors.getDeviceCount();
  Serial.print("Found sensors: ");
  Serial.println(countSensors);
  // выделяем память в динамическом массиве под количество обнаруженных сенсоров
  sensorsUnique = new DeviceAddresscountSensors;
 
  // определяем в каком режиме питания подключены сенсоры
  if (sensors.isParasitePowerMode()) {
    Serial.println("Mode power is Parasite");
  } else {
    Serial.println("Mode power is Normal");
  }
 
  // делаем запрос на получение адресов датчиков
  for (int i = ; i < countSensors; i++) {
    sensors.getAddress(sensorsUniquei, i);
  }
  // выводим полученные адреса
  for (int i = ; i < countSensors; i++) {
    Serial.print("Device ");
    Serial.print(i);
    Serial.print(" Address: ");
    printAddress(sensorsUniquei);
    Serial.println();
  }
  Serial.println();
  // устанавливаем разрешение всех датчиков в 12 бит
  for (int i = ; i < countSensors; i++) {
    sensors.setResolution(sensorsUniquei, 12);
  }
}
 
void loop(){
  // переменная для хранения температуры
  float temperature10;
  // отправляем запрос на измерение температуры всех сенсоров
  sensors.requestTemperatures();
  // считываем данные из регистра каждого датчика по очереди
  for (int i = ; i < countSensors; i++) {
    temperaturei = sensors.getTempCByIndex(i);
  }
  // выводим температуру в Serial-порт по каждому датчику
  for (int i = ; i < countSensors; i++) {
    Serial.print("Device ");
    Serial.print(i);
    Serial.print(" Temp C: ");
    Serial.print(temperaturei);
    Serial.println();
  }
  Serial.println();
  // ждём одну секунду
  delay(1000);
}

Сборка конструкции температурного датчика

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

Окончательный вариант, собранный на текстолитовой плате, следует рассчитать под размещение внутри интерфейса DB9. Такое размещение обеспечивает компактность конструкции и надежность электроники датчика температуры последовательного порта.

Малочисленность комплектующих деталей электронной схемы позволяет внедрить всё содержимое непосредственно в корпус разъёма DB9. В результате получается удобный интерфейс

Сам датчик DS18S20 припаивается на противоположном конце проводной линии, выведенной от электронной платы. Длина линии должна учитываться в соответствии с ранее отмеченными нюансами. Контакты 1 и 3 датчика соединяются вместе. Для изоляции контакта 2 от других контактов используется короткая изолирующая поливинилхлоридная трубка.

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

Схемы подключения через USB интерфейс

Учитывая отказ производителей новых компьютеров включать в системные материнские платы последовательные порты DB9, актуальной становится необходимость сопряжения температурного датчика DS18S20 с интерфейсом иного типа. Явным претендентом здесь видится порт USB.

Существуют различные по исполнению недорогие адаптеры «USB-to-SERIAL». Однако далеко не все из таких преобразователей успешно сочетаются с новыми версиями операционных систем, включая «Windows 10».

Адаптер «USB-to-SERIAL», на примере широко распространённого исполнения с микросхемой PL2303TA, предоставляет возможность подключения температурного датчика на компьютерах, где отсутствует порт DB9

Рекомендуется использовать «USB-to-SERIAL» адаптеры, построенные на микросхемах PL2303TA или аналогичных. На практике отмечена стабильная работа таких адаптеров с «Windows XP» / «Vista» / 7, 8, 10 / «MacOS X» / «Linux».

Этот тип адаптера эмулирует 1-проводной интерфейс DS9097, который вполне устойчиво работает на взаимодействие с 1-проводными устройствами, идентичными схеме интерфейса последовательного порта.

Распиновка «USB-to-SERIAL» адаптера PL2303TA:

  • красный (+ 5В),
  • белый (RXD),
  • чёрный (земляная шина),
  • зеленый (TXD).

Драйверы адаптера «USB-to-SERIAL»

Под операционную систему «Windows» и «MacOS X» потребуется установить соответствующие «Prolific» драйверы (доступны здесь или использовать этот, если есть проблемы в «Windows 7»).

Между тем относительно недавний дистрибутив «Linux» показывает успешную работу адаптеров без необходимости загрузки драйверов. В частности, тестировался «USB-to-SERIAL» адаптер на PL2303TA, подключаемый к «Ubuntu» версий 12.04 и 14.04.2. Каких-либо драйверов не потребовалось.

Чтобы использовать «USB-to-SERIAL» адаптер на PL2303TA с температурными датчиками, работающими в паразитном режиме, следует подключать один или несколько приборов DS18S20 так:

  • красный (не используется),
  • белый (не используется),
  • черный (подключен на GND и VDD),
  • зеленый (подключен на выход DQ).

Тестирование в паразитном режиме по длине кабеля

На практике тестировался «USB-to-SERIAL» адаптер на PL2303TA с тремя температурными датчиками типа DS18S20. Все три прибора, подключенные параллельно, работающие в паразитном режиме, соединялись с рабочей платой через кабель длиной 300 метров. По результатам эксперимента отмечалась нормальная работа. Все три датчика температуры успешно обнаруживались системой.

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

Эти результаты испытаний заставляют сомневаться в требованиях подключения датчиков температуры DS18S20 в непаразитарном (c внешним питанием) режиме при использовании адаптеров USB на PL2303TA. Как показал тест, микросхема PL2303TA успешно работает в паразитном режиме с более длинными (длиннее 100 метров) соединительными линиями.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Семинар по технике
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: