Электронный термометр на lm35 и lm3914

Простой цифровой термометр своими руками с датчиком на LM35

Для изготовления этого простого цифрового термометра необходим температурный датчик LM35, цифровой вольтметр (любой недорогой китайский цифровой мультиметр), два маломощных диода, один резистор и несколько батареек (либо элемент типа «Крона»). Из этих компонентов можно быстро собрать простой цифровой многофункциональный термометр с диапазоном температур от -40 до +150 градусов Цельсия. Для измерения только положительных температур диоды и резистор не нужны.

Точность измерения температуры 0,1 градуса Цельсия, т.е. термодатчик для многих применений можно назвать прецизионным.

Для этого универсального цифрового термометра использованы полупроводниковые датчики температуры LM35DZ/NOPB для температуры от 0 до +100°C и LM35CZ/NOPB для температуры от -40 до +110°С в корпусах TO-92.

В datasheets некоторых производителей LM35 указана верхняя измеряемая температура +150 градусов Цельсия.

Термометр для измерения положительных температур

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

Схема подключения LM35 для измерения плюсовой температуры и «распиновка» датчика

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

– цифровой многоканальный термометр и т.д.

Термометр уличный электронный

Схема цифрового термометра для измерения температуры от минус 40 до плюс 110 градусов Цельсия с однополярным источником питания. Диоды маломощные кремниевые – КД509, КД521 и т.д. Диапазон измерения тестера надо устанавливать на 2 вольта (2000 мВ), последняя цифра будет показывать десятые доли градуса, ее следует отделить точкой.

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

Затем припаять к датчику провода, изолировать контакты и вставить датчик в трубку – протолкнуть до упора, чтобы он находился в теплопроводящей пасте. Таким образом получаем щуп-термометр.

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

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

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

Этот прибор показывает уличную температуру, датчик висит за закрытой форточкой. Время на сборку заняло 30-40 минут.

Так выглядит прибор сзади. Собран градусник по схеме с одним источником питания, двумя диодами и резистором. Поскольку отрицательное смещение на диодах составляет порядка 2-х вольт, а минимальное напряжение питания датчика 4 вольта, в качестве БП использованы спаянные последовательно 5 батареек ААА. Датчики припаяны к неэкранированным проводам длиной 2,5 метра.

На этом фото показаны два термометра. Датчик первого размещен в холодильной камере, а второго – в морозильной камере этого же холодильника. Точка на индикаторе мультиметра нарисована черным маркером.

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

На основе этого термодатчика можно сделать простой регулятор температуры, добавив компаратор с регулируемым или фиксированным порогом срабатывания и силовой ключ (оптосимистор, реле …), который будет включать нагреватель. Для построения термостата (инкубатора, например) такая схема не пойдет, LM35 необходимо подключать к устройству с функцией ПИД-регулятора, например, ТРМ210.

  • Напряжение на светодиоде
  • Схема светодиодной лампы на 220в
  • Лампа ЭРА А65 13Вт
  • Как паять светодиодную ленту
  • Светодиодная лента на 220 в
  • Простое зарядное устройство
  • Разрядное устройство для автомобильного аккумулятора
  • Схема драйвера светодиодов на 220
  • Подсветка для кухни из ленты
  • Подсветка рабочей зоны кухни
  • LED лампа Selecta g9 220v 5w
  • Светодиодная лампа ASD LED-A60
  • Общедомовой учет тепла
  • Схема диодной лампы 5 Вт 220в
  • Источник: http://firstelectro.ru/term.html

    Персональный сайт – Цифровой термометр на LM35 (+ 90…-50 C)

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

    Популярность этого датчика объясняется многими причинами. Ниже приведены его основные характеристики:

    • Калибруется непосредственно в градусах Цельсия
    • Линейный коэффициент преобразования +10.0 мВ/ºС
    • Гарантируемая точность 0.5 ºС (при +25 ºС)
    • Заявленный рабочий диапазон от -55 ºС до +150 ºС
    • Подходит для дистанционных измерений
    • Низкая стоимость вследствие подстройки на уровне кристалла
    • Работает от 4 до 30 В
    • Потребляемый ток менее 60 мкА
    • Малый саморазогрев, 0.08 ºС в неподвижном воздухе
    • Типичная нелинейность всего ± ¼ ºС
    • Низкое выходное сопротивление, 0.1 Ома при нагрузке 1 мА.

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

     На нашем сайте тоже есть вариант такого термометра (Простой цифровой термометр), схема которого была первоначально опубликована на сайте http://www.voltsandbytes.com .

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

    1) либо применения специальной схемы с измерением дифференциального сигнала (рис. 2).

     
    Рисунок 1. Схема включения с биполярным питанием.

     
    Рисунок 2. Схема включения с дифференциальным выходом.

    И та и другая схемы, мягко говоря, не совсем удобны для подключения к микроконтроллеру.

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

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

    Предлагаемая мною схема цифрового термометра является логическим развитием Простого Цифрового Термометра (вернее, его версии на ATTiny261). Она использует несколько измененный вариант включения LM35 с дифференциальным выходом. Изменение схемы включения было произведено с целью уйти от применения дифференциального выхода. Схема включения LM35 приведена на рис. 3.

    Рисунок 3. Схема включения LM35

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

    Резистор R1 и транзистор Q1(включенный как диод) образуют схему смещения уровня вывода GND датчика температуры или схему «расщепления» питания.

    При этом потенциал нижнего вывода резистора R2 оказывается отрицательным по отношению к GND LM35 и, датчик может работать как с положительными, так и с отрицательными температурами.

     Измерение выходного сигнала, как уже говорилось выше, осуществляется относительного общего провода питания. При нулевом значении температуры выходное напряжение составляет 0.69В (при использовании транзистора BC857A). Снижение температуры ниже нуля вызывает уменьшение выходного напряжения (10 мВ на 1 ºС). Подъем температуры выше нуля приводит к росту выходного напряжения.

    Схема термометра приведена на рис.4.

    Рисунок 4. Схема цифрового термометра.

    Сигнал с датчика температуры подается непосредственно на вход АЦП микроконтроллера. В качестве источника опорного напряжения микроконтроллера служит внутренний источник с напряжением 2,56 В. Используется 10 бит АЦП.

    Это позволяет получить дискретность измерения температуры 0,25 ºС.

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

    Данная разработка не претендует на полноту и была сделана с целью показать один из вариантов работы с датчиком температуры LM35. Любые изменения, доработки и т.п., а также вопросы (пока только через avrdoc@yandex.ru) приветствуются. 

    Источник: http://avrdoc.narod.ru/index/0-13

    Термометр LM75A – описание

    Гость нашей сегодняшней программы — LM75A. Цифровой термометр с I2C выходом. По характеристикам похож на DS18b20. Стоит раза в два дешевле. Правда, наш градусник бывает только в восьминогих корпусах, а это большое западло.Работа с этим датчиком довольно проста. Если нужно просто получать значения температуры, то достаточно тупо читать из него данные.

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

    Все эксперименты с датчиком я проводил с помощью своего I2C отладчика, поэтому тут нету примеров кода для работы с LM75A.

    Но и без них разобраться не трудно.

    В подключении LM75A есть пара важных моментов, которые очень мотивируют читать даташит перед проектированием устройства. Ибо, если их не учесть — можно поймать на свою голову кучу багов.Первое, на что надо обратить внимание — питание. Градусник начинает страшно глючить, если на линиях питания появляется шум. Лечится конденсатором на 1uF (Примерно. Я поставил 680nF) между питанием lm75A и землей. Ставить его нужно как можно ближе к выводам питания. Линии, задающие адрес устройства (A0, A1, A2), тоже могут доставить неприятности. Здесь подстава заключается в том, что их нельзя оставлять висящими в воздухе (адресные пины у памяти 24Cxx это спокойно переживают — изнутри подтянуты к земле). У LM75A их нужно обязательно подтянуть или к питанию, или к земле. Иначе можно поймать непонятную багу, при которой девайс будет отвечать на адрес через раз, или будет пытаться ответить на адреса других устройств, что приведет к конфликтам. Есть еще один интересный пин — OS. Это выход с открытым стоком (open drain). Он сигнализирует о том, что температура вышла за предел (настраивается программно). Главная проблема с этим выходом в том, что он может пропустить очень маленький ток, до 100uA по даташиту. Это наводит на три грустные мысли:

    1) Им нельзя зажигать светодиоды и управлять другой нагрузкой напрямую.

    2) Подтягивающий резистор должен иметь большое сопротивление. Я поставил 100к, тогда ток получается 50мкА.
    3) С такой слабой подтяжкой можно поймать помехи и ложные срабатывания (например, если выход OS подключен ко входу МК) Если нужно рулить с этого выхода какой-либо нагрузкой (например системой охлаждения), то нужно ставить транзисторный ключ. Причем обычным биполярным транзистором вряд-ли удасться обойтись. Нужна сборка Дарлингтона или полевик (из тех, что управляются логическим уровнем).Общение с датчиком ведется по протоколу i2c. Частота линии SCL тут ограничена 400кГц, но такая скорость вряд-ли понадобится.

    Алгоритм связи примерно тот-же, что и при работе с EEPROM памятью 24Cxx. После адреса устройства мы передаем номер регистра, к которому хотим обратиться. Их всего 4.

    Причем три из них 16и битные, а один — configuration — 8и битный.

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

    Первый — регистр температуры. Два байта, из которых 11 бит содержат температуру, а младшие 5 бит равны 0.

    Чтобы получить значение температуры делаем так:Если старший бит = 0, то (температура положительная) Сдвигаем на 5 разрядов вправо (деление на 32), чтобы избавиться от пустых младших разрядов. Делим на 8. (Т.е. умножаем на LSB = 0.125) Если старший бит = 1, то (температура ниже 0) Находим дополнение до 2 для всего регистра. Сдвигаем на 5 разрядов вправо. Делим на 8. Часто необходимости в высокой точности нету, и достаточно знать температуру с точностью до градуса, отбросив дробную часть. Тогда задача заметно упрощается. Младший байт можно смело выкинуть, и работать только со старшим: Если старший бит = 0, то ничего делать не надо — в регистре уже значение температуры в «нормальном» виде.

    Если старший бит = 1, то ищем дополнение до 2. Делается это командой NEG. И ставим где-нибудь флажок, что температура < 0.

    * Через мой Multiprog можно общаться с LM75A — читать текущую температуру.

    Второй регистр — configuration. То-есть настройка. Он состоит всего из 1 байта.

    Начнем с младшего бита.

    SHUTDOWN отвечает за спящий режим.

    Если он = 0, то устройство находится в активном режиме. При этом оно производит замер температуры каждые 100 мс и складывает результат в регистр Temp. Если SHUTDOWN = 1, то градусик переходит в спящий режим. При этом потребление тока снижается до 100мкА. Линия i2c продолжает работать нормально. Логика, которая управляет выводом OS отключается, и он остается в том состоянии в котором был до перевода в спящий режим. Если у нас к выходу OS подключен вентилятор для охлаждения, и мы перевели градусник в спящий режим, когда вентилятор был включен, то вентилятор так и будет работать, до тех пор, пока термометр не разбудят.

    OS_COMP_INT отвечает за режим работы выхода OS.

    Если он равен 0 (это, кстати режим по-умолчанию), то выход OS ведет себя так:

    Когда температрура поднимается выше значения в регистре Tos — выход OS переходит в активное состояние. Он останется в этом состоянии до тех пор, пока температура не упадет ниже значения в регистре Thyst. Это режим называется OS comparator mode.

    Во втором режиме, OS interrupt mode, (когда OS_COMP_INT = 1) OS ведет себя намного интереснее:

    Когда температура поднимается выше Tos — выход переходит в активное состояние. И остается в нем до тех пор, пока не будет прочитано значение регистра Temp. Никакая другая сила (даже падение температуры ниже Thyst) не заставит его перейти в неактивное состояние.
    А вот когда регистр температуры будет прочитан, OS тут-же переключается в неактивное состояние и находится в нем до тех пор, пока… температура не опустится ниже Thyst. Тогда он опять переходит в активное состояние и висит в нем, пока кто-нибудь не прочитает регистр температуры. Получается, что в этом режиме можно контролировать уход температуры за пределы какого-либо диапазона. Нижней границей будет Thyst, а верхней — Tos. График наглядно показывает два режима работы вывода OS:

    Следующий бит, OS_POL, отвечает за полярность вывода OS и не представляет из себя ничего интересного. Если он = 0, то активный уровень низкий. Если 1, то высокий. По умолчанию = 0. Только надо помнить, что OS это выход с «открытым стоком», а значит, высокий уровень там создается подтягивающим резистором.

    Потом идет пачка из двух бит — OS_F_QUE1:OS_F_QUE0. С их помощью можно настроить, сколько раз датчик будет проверять значение температуры, перед тем, как выдать сигнал тревоги. Например, если они настроены на 4 проверки, то выход OS сработает только в том случае, если 4 раза подряд замер температуры покажет, что она выше порога.

    OS_F_QUE1 OS_F_QUE0 Количество проверок 0 0 1 0 1 2 1 0 4 1 1 6

    Все, configuration кончился. Старшие три бита зарезервированы и = 0. Хотя записывать в них можно, и читать тоже.

    После configuration, под номером 02h, идет регистр гистерезиса Thyst. Он 16и битный, хотя активны всего 9 бит (младшие 7 бит = 0). С их помощью настраивается нижний порог срабатывания сигнала OS. По умолчанию 75 градусов.

    Та-же история со следующим регистром Tos (номер 03h). Задает верхний порог для сигнала OS. По умолчанию = 80 градусов.

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

    Если градусник от DALLAS можно спокойно закинуть куда-угодно (паразитное питани требует всего 2 провода), то LM75A скорее подходит для измерений температуры в тех случаях, когда можно ставить градусник прямо на плату.

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

    PS Похожая статья есть на сайте Medved'a. В ней он, кроме прочего, привел код для работы с датчиком.

    Источник: http://we.easyelectronics.ru/part/termometr-lm75a—opisanie.html

    Термометр на Arduino с температурным датчиком LM35

    Сегодня мы рассмотрим проект на Arduino для студентов-инженеров. В этой статье расскажем вам,  как сделать термометр на Arduino. Преимуществом строительства термометра на Arduino является простота конструкции. Мы уже познакомились с Ардуино и ее особенностями. Программирование Arduino намного проще, чем вы думаете.

    Данный проект — цифровой термометр (цифровой датчик температуры Arduino), построенный на основе прецизионного интегрального датчика  LM35.

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

    В данной схеме задействован датчик температуры LM35 для определения уровня температуры, который может измерять от -55 до 150°С. Измеренная температура отображается на ЖК-дисплее 16х2 с помощью Arduino.

    Необходимые компоненты для проекта «Термометр на Arduino»

    Цифровой термометр на Arduino использует легко доступные компоненты, которые каждый может приобрести в любом магазине электроники.

    • Arduino
    • Датчик температуры LM35
    • ЖК-дисплей 16х2
    • Потенциометр 1кОм

    Работа термометра

    Выходное напряжение датчика LM35 линейно пропорционально температуре (по Цельсию).

    Выход LM35 имеет масштабный коэффициент 10 мВ/°C , что означает, что при каждом повышении температуры на 1°C произойдет соответствующее увеличение выходного напряжения на 10мВ, следовательно мы можем легко прочитать значение измеряемой температуры.

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

    Распиновка датчика температуры LM35

    Arduino имеет 10-битный встроенный АЦП, поэтому он может считывать значение от 0 до 1023 , то есть для нулевого напряжения он считывает 0000, а для VCC (5 В) он считывает 1023.

    Таким образом, мы масштабируем значения 0 — 1023 в новый диапазон 0 — 500, потому что LM35 выдает значения с шагом 10мВ на каждый градус, так что максимально возможный прирост составляет 500 (5В/0,01В).

    Используя это сопоставление, мы можем принимать каждое приращение в значении АЦП как шаг повышения по шкале. Если значение АЦП равно 27, то значение измеряемо температуры составляет 27°C.

    Скетч термометра

    #include long A; int B; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16,2); lcd.print(«THERMO METER»); pinMode(A0,INPUT); } void loop() { A=analogRead(A0); B=map(A,0,1023,0,500); lcd.setCursor(0,0); lcd.print(«TEMPERARTURE: «); lcd.setCursor(0,1); lcd.print(B); lcd.

    print(«‘C «); }

    Теперь перейдем к логике программы. Сначала нам необходимо объявить  переменную long «A», чтобы сохранить значение, считанное с LM35, которое имеет диапазон от 0 до 1023.

    Затем объявляем другую целочисленную переменную «B» для хранения отображаемого (преобразованного) значения.

    Значение температуры считывается из вывода A0 и хранится в переменной «A». Затем переменная «A» преобразуется в диапазон от 0 до 500 и сохраняется в переменной «B». Значение «B» выводиться непосредственно на ЖК-экране 16х2.

    www.circuitsgallery.com

    Источник: http://fornk.ru/3389-termometr-na-arduino-s-temperaturnym-datchikom-lm35/

    Термометр с помощью arduino и датчиков LM35 и DS18B20

    Я писал недавно статью, где подключал к arduino 4-разрядный 7-сегментный индикатор hs420561k-32, тогда упоминал, что хочу сделать градусник с выводом температуры на этот индикатор, только проблема была в отсутствии датчиков.

    И вот наконец-то приехала посылка с недостающими запчастями и можно продолжить проект. Температурных датчиков у меня три штуки – dht11, LM35 и DS18B20.

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

    Температурный датчик LM35. Подключение к arduino

    Первый датчик, который будем использовать – это LM35, использовать его очень просто, тут даже дополнительные библиотеки не требуются, достаточно подключить к нему питание и считать данные на выходе с помощью аналогового пина arduino. LM35 работает с температурами от -55 до 150 градусов Цельсия и если верить даташиту, то погрешность составляет всего плюс-минус 0,25 градуса.

    Хоть датчик и обрабатывает до +150 градусов, но считать ардуиной сможем только до +110, хотя и это более чем достаточно для домашнего градусника. Поскольку этот датчик имеет высокую точность, но находится в корпусе TO92, без какой-либо дополнительной защиты, использовать его будем для измерения температуры в помещении.

    Официальный мануал arduino рекомендует использовать для снятия показаний этого датчика опорное напряжение 1,1 В. Чтобы настроить arduino подобным образом достаточно использовать команду analogReference(INTERNAL) в функции setup. Далее достаточно просто, с нужным интервалом, считывать напряжение с выходной ножки(OUT) датчика.

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

    void setup() { // меняем опорное напряжение на 1.1 В, относительно которого происходят аналоговые измерения analogReference(INTERNAL); } void loop() { reading = analogRead(A0); // LM35 подключен к пину A0 temperature = (1.1 * reading * 100.0) / 1024; // получаем значение в градусах Цельсия }

    Ниже на картинке показано, какая нога датчика LM35 за что отвечает.

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

    Второй датчик, который будет использован – это цифровой DS18B20. Точность в этом случае не на много ниже — плюс-минус 0,5 градуса, а диапазон измерения температуры практически такой же: от -55 до +125 градусов Цельсия.

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

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

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

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

    Проблема вывода температуры на индикаторе hs420561k-32

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

    Я писал в прошлой статье, что для одновременного вывода данных сразу на 4-х разрядах hs420561k-32 необходимо очень быстро по очереди выводить по одному разряду, тогда создается впечатление одновременного вывода четырех цифр, глаз не успевает уловить смену разрядов.

    В связи с таким способом вывода возникла сложность с одновременной работой датчика DS18B20, для его опроса требуется чуть больше секунды времени – в двух участках кода используется delay, который заставляет микроконтроллер ждать, 250 и 1000 миллисекунд.

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

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

    bool flag = false; // флаг unsigned long previousMillis = 0; // время последнего срабатывания const long interval = 1000; // интервал срабатывания кода, задержка. void setup() { // } void loop() { // получаем время в миллисекундах, которое прошло // с момента начала работы МК unsigned long currentMillis = millis(); // проверяем сколько прошло врмени if (currentMillis – previousMillis >= interval) { // если прошло нужное количество миллисекунд, // то записываем в переменную количество прошедшего времени previousMillis = currentMillis; // меняем положение флага, // это может быть вкл и выкл светодиода, например flag = !flag; } }

    Что использовалось в проекте:

    Скетч уличного и комнатного термометра на arduino

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

    #include // библиотека для работы с датчиком DS18B20 OneWire ds(10); // подключаем уличный датчик к 10 пину //Пин подключен к SH_CP входу 74HC595 int clockPin = 6; //Пин подключен к ST_CP входу 74HC595 int latchPin = 7; //Пин подключен к DS входу 74HC595 int dataPin = 8; int tempHomePin = A0; // градусник в помещении // Пины разрядов цифер int pins_numbers[4] = {2, 3, 4, 5}; // Биты для отображения цифер от 0-9, минуса и символ градуса Цельсия byte numbers_array[22] = { B00111111, B00000110, B01011011, B01001111, // 0 1 2 3 B01100110, B01101101, B01111101, B00000111, // 4 5 6 7 B01111111, B01101111, B01000000, B01100011, // 8 9 – о // цифры с точкой внизу (+12 к индексу элемента) B10111111, B10000110, B11011011, B11001111, // 0 1 2 3 B11100110, B11101101, B11111101, B10000111, // 4 5 6 7 B11111111, B11101111 // 8 9 }; int cel_celsius = 0; // переменная для хранения градусов на улице float tempHome = 0; // переменная для хранения градусов в помещении const long tempInterval = 3000; // интервал запроса актуальной температуры unsigned long previousMillis = 0; // время предыдущего запроса unsigned long previousMillis_delay = 0; // хранения последней даты срабатывания, для второй задержки bool startQuery = false; // флаг, для обозначения начала запроса температуры bool firstQuery = true; // флаг первого запуска, при котором получаем температуру без задержек bool showhome = true; // флаг, который указывают какую температуру показывать – комнату или улицу int sec_show = 5000; // интервал смены отображения погоды unsigned long showhomeMillis_delay = 0; // хранения последней переключения градусников // функция для вывода чисел на индикаторе void showNumber(int numNumber, int number){ // зажигаем нужные сегменты digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, numbers_array[number]); digitalWrite(latchPin, HIGH); // включаем нужный разряд(одну из четырех цифр) int num_razryad = pins_numbers[numNumber-1]; for(int i; i= tempInterval) || startQuery || firstQuery) { previousMillis = currentMillis; // читаем данные от датчика на улицы if ( !ds.search(addr)) { ds.reset_search(); //delay(250); return; } // если ни чего не получили или получили не понятные данные if (OneWire::crc8(addr, 7) != addr[7]) { return; } // читаем первый байт и определяем тип датчика switch (addr[0]) { case 0x10: // DS18S20 type_s = 1; break; case 0x28: // DS18B20 type_s = 0; break; case 0x22: // DS1822 type_s = 0; break; default: return; } // делаем запрос на получение данных от датчика ds.reset(); ds.select(addr); ds.write(0x44); // ждем startQuery = true; // delay(1000); if ( currentMillis – previousMillis_delay >= 1000 ) { previousMillis_delay = currentMillis; }else{ return; } startQuery = false; // и получаем ответ present = ds.reset(); ds.select(addr); ds.write(0xBE); // берем только первые 9 байт for ( i = 0; i < 9; i++) { data[i] = ds.read(); } // данные приходят в битах, переводим их в десятичное число int16_t raw = (data[1]

    Источник: https://vk-book.ru/termometr-s-pomoshhyu-arduino-datchikov-lm35-ds18b20/

    Цифровой термометр в машину | Каталог самоделок

    Термометр для машины должен быть легок в изготовлении. У многих сейчас среди инструмента есть мультиметр, остается только приобрести интегральный датчик температуры. Кремниевый термоэлектрический элемент иформирователь сигнала в едином пластмассовом корпусе ТО-92, который внешне не отличишь от транзистора КТ-209.

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

    Есть два типа термоэлектрического датчика, который делает самоделку простой —LM34 и LM35.

    Первый откалиброван в Фаренгейтах, второй в градусах Цельсия, когда они в работе, то выдают 10 мВ на один градус своей шкалы.

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

    Интегральные полупроводниковые датчики могут замерять температуру в диапазонах:

    • от 0 до +100°C — LM35DZ;
    • от -40 до +110°C —LM35CZ;
    • некоторые производители указывают в техническом описании от -40 до +150°C — LM35B.

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

  1. Мультиметр. Цифровой мультиметр наиболее точный и удобный при замерах.
  2. Один интегральный датчик LM34 в Фаренгейтах или LM35 в градусах Цельсия.
  3. Один резистор 180 кОм. Такой элемент с цветовой маркировкой имеет четыре полосы коричневого, серого, желтого, золотистого цветов.
  4. 9-вольтовая батарейка Крона.
  5. СоединительдлябатарейкиКрона.
  6. Три длинных проводка.
  7. Изоляционная лента, а лучше всеготермоусадочная трубка.
  8. Два маломощных диода, КД509, КД512и т.п.

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

Назначение выводов у датчика никак не совпадает с транзисторами в таком же корпусе.

Термометр пробник плюсовой температуры

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

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

Для контроля температуры мультиметр переводится на измерение от 0 до 2000 мВ (0–2 В). Круглый переключатель в положении «2000 m».

Многофункциональный пробник минусовой температуры

Для измерения минусовой температуры от -40 до +150°C надобно купить правильный датчик — LM35CZ, LM35B.

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

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

Стабильный дистанционный термометр

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

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

С длинными проводами можно будет измерять температуру в салоне и за бортом. Полтора метровые провода дадут возможность узнать температуру в автомобильном холодильнике или в подкапотном пространстве.

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

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

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

Черный щуп от мультиметра подсоединяется к общему выводу «земле», красный щуп — к выходу датчика.

Многоканальный прибор

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

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

Миллиамперметр—показывающий прибор

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

Собранный прибор должен быть проверен на точность.

Поверка и калибровка в домашних условиях

Для поверки электрический датчик плотно приматывается изолентой к пробнику ртутного градусника, поверх для термоизоляции наматывается материя в несколько слоев. Для высокой точности лучше использовать лабораторный градусник с ценой деления 0.1 градус, диапазоном измерения от 0 до 50 °C.

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

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

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

Источник: https://volt-index.ru/podelki-dlya-avto/tsifrovoy-termometr-v-mashinu.html

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}