аналоговый термостат на температурном датчике LM35
Термостат на температурном датчике LM35
За основу схему взял здесь
Это простая, но точная схема термостата, которая может быть применена там, где необходим автоматический контроль температуры. Схема термостата управляет микросхемой КР1182ПМ1 в соответствии с температурой измеренной температурным датчиком LM35. Когда датчик LM35 фиксирует температуру выше, чем заданный уровень (уровень устанавливается резистором R3), тринистор ( ВТА16-600) включается, а когда температура падает ниже заданной температуры, выключается. Основой схемы является температурный датчик LM35, который имеет заводскую калибровку в градусах Цельсия. У датчика линейная шкала зависимости Градус/Вольт. Выходное напряжение (контакт 2) изменяется с температурой от 0мВ (0°С) до 1500мВ (+150°C). Это упрощает схему термостата, поскольку мы только должны создать точное опорное напряжение (TL431) и точный блок сравнения (LM358).
Переменный резистор R3 и резистор R6 формируют делитель напряжения, который устанавливает опорное напряжение от 0В до 1,62В. Нам достаточно от 0в до 1,05в (подобрать R5)
Операционный усилитель (DA1.1) является буфером опорного напряжения, чтобы избежать влияния делителя. Компаратор (DA1.2) сравнивает опорное напряжение, установленное переменным резистором R3, с выходным напряжением температурного датчика LM35 и решает, включить или выключить схему управления.( О включении сигнализирует светодиод VD3.
shema_na_lm35_.1.jpg аналоговый термостат на температурном датчике LM35. Приборы и электр(он)ика.
Калибровка достаточно проста, нам понадобится всего лишь вольтметр. Подключите вольтметр к указанным на схеме точкам «А» и «В» и переменным резистором R3 установите необходимое опорное напряжение. Не забудьте что 10мВ равен одному градусу Цельсия.
Я приобрел готовый цифровой вольтметр и встроил его в схему.
Можно нагрев перевести из автоматического в ручной режим.
При небольшом снижении температуры нагрев происходит мягко.
Готовая конструкция в корпусе от блока питания компьютера.
ТРИГРАФИКА.JPG аналоговый термостат на температурном датчике LM35. Приборы и электр(он)ика.
Как подключить датчик LM35 к Ардуино
Датчик температуры lm35 может использоваться во многих простых проектах, например, метеостанция на Ардуино. Рассмотрим на данном занятии простой аналоговый термодатчик LM35: как работает радиоэлемент, схема его подключения к Arduino UNO. Рассмотрим простой скетч для датчика температуры, который будет выдавать показания температуры на монитор компьютера или LCD дисплей.
Характеристики датчика lm35, описание
— питание: 2,7-5,5 Вольт;
— потребляемый ток: 50 mkА;
— диапазон температур: 10°C — 125°C
— погрешность: 2 градуса.
Вместо lm35 можно использовать любой другой датчик температуры, например, TMP35, LM35, TMP37, LM335. Выглядит датчик как транзистор и поэтому его легко спутать, поэтому всегда внимательно читайте маркировку на радиоэлементах. Часто на основе данного датчика производители делают модули температуры для Ардуино (смотри фото выше). Если у вас только сам датчик lm35, то он имеет три вывода.
LM35 схема включения, как работает (datasheet)
Если посмотреть на температурный сенсор lm35 со стороны контактов и срезом вверх (как на рисунке), то слева будет положительный контакт для питания 2,7-5,5 Вольт, контакт по центру — это выход, а справа — отрицательный контакт питания (GND).
Как подключить датчик lm35 к Ардуино
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- Макетная плата;
- температурный датчик LM35;
- светодиод и резистор на 220 Ом;
- провода «папа-папа».
Схема подключения LM35 к Arduino UNO
Данный датчик аналоговый, поэтому на выходе мы имеем значения не 0 или 1, а непрерывное изменение напряжения в диапазоне от 0 до 5 вольт. Следовательно, мы должны подключить датчик lm35 к Arduino к аналоговым портам A0-A5 по схеме, изображенной далее. После сборки схемы загрузите скетч для снятия значений с аналоговых датчиков и вывода данных в аппаратный последовательный порт.
Скетч для термодатчика lm35 Ардуино
Пояснения к коду:
- в первой строчке мы зарезервировали память для переменой temp ;
- оператор int указывает, что значения temp могут принимать только целое число.
Калибровка температурного датчика lm35
Калибровка аналогового датчика нужна, для того чтобы получать показания с lm35 температурного датчика в градусах Цельсия, как это сделано на цифровом датчике температуры и влажности DHT11. Для этого в скетч следует добавить еще одну переменную и вставить формулу, которая преобразует аналоговый сигнал с датчика в градусы Цельсия. Для калибровки lm35 следует изменить формулу в программе.
Ардуино: датчик температуры LM35
Еще один полезный прибор, который часто используется в современных устройствах — это датчик температуры. Даже в вашем компьютере есть сразу несколько датчиков температуры, с помощью которых система следит за перегревом ключевых компонентов — процессора, видеокарты, блока питания, и прочих узлов. Самый же популярный пример использования датчика температуры дома — термостат. Это устройство, которое постоянно следит за температурой воздуха, и регулирует подачу энергии в систему отопления. Смежный пример — котел для нагрева воды.
В нашем уроке мы используем датчик TMP35. Вместо него можно использовать любой другой похожий датчик: TMP35, TMP37, LM35, LM335 и подобные. Выглядит датчик как обычный транзистор:
Можно легко спутать, так что рекомендую всегда внимательно читать маркировку на таких устройствах (да и вообще сначала всегда читайте, потом подключайте :). Конкретно этот датчик имеет следующие характеристики:
- напряжение питания: от 2,7 до 5,5 В;
- погрешность: 2 градуса;
- измеряемая температура: от 10°C до 125°C
- потребляемый ток: 50 мкА.
Подключение
Датчик TMP35 имеет три вывода (три ноги). Если посмотреть на датчик со стороны этих выводов и срезом вверх, как показано на рисунке,
то слева будет — положительный контакт питания (+2.7 — 5.5В),
по центру — выход на контроллер,
и справа — отрицательный контакт питания (земля).
Датчик аналоговый, а значит на его выходе мы имеем не 0 или 1, а напряжение в диапазоне от 0 до 5 вольт. Следовательно, мы должны вспомнить раздел про аналого-цифровое преобразование (АЦП) сигналов в Arduino. Держа в уме, что у Ардуино Уно есть шесть аналоговых входов (A0-A5), подключаем наш датчик по следующей схеме:
Внешний вид макета
Принципиальная схема
Вот так должна выглядеть собранная схема.
Программа
Подключив датчик температуры к Ардуино, начинаем писать программу. Первое что мы сделаем, это выведем необработанный сигнал с аналогового входа в последовательный порт, для того чтобы просто понять, как меняется значение на входе A0. Нам понадобится простая программа:
Внимание, математика! В программе можно заметить выражение:
Оно необходимо для того, чтобы преобразовать аналоговый сигнал датчика в градусы Цельсия. Дело тут вот в чем. Все аналоговые датчики имеют важную характеристику — отношение количества вольт к единице измеряемой величины. Например, в спецификации к нашему датчику tmp35 написано, что каждый градус измеряемой температуры, соответствует 10 милливольтам напряжения на выходе. Исходя из этих рассуждений, прочитанное с помощью analogRead значение мы сначала преобразуем к количеству Вольт:
Такая процедура называется нормировкой. Здесь 1023 — максимальное значение, которое может вернуть нам 10-битный АЦП, встроенный в Ардуино Уно.
5 — рабочее напряжение АЦП.
Затем преобразуем эти вольты в градусы Цельсия:
Превращаем вольты в милливольты (*1000), и делим на 10 ( то самое число из спецификации! ).
В общем, даже если ничего не понятно, загружаем программу на Ардуино и наблюдаем за температурой окружающего воздуха. Например, у нас в лаборатории датчик оценил температуру следующим образом:
Вполне себе правдивое значение. А теперь поднесем прибор к открытому окну (на улице зима -10°C):
Работает! Датчик незамедлительно регистрирует снижение температуры.
Делаем термостат
Теперь добавим в программу некое действие, которое будет совершаться если температура упадет ниже заданного нами порога. Пусть этот порог будет равен 15°C. Самое простое, что мы можем сделать — это зажигать на Ардуино штатный светодиод #13. Получается такая вот программа:
Кто-то забыл закрыть окно — температура резко опустилась ниже 15 — светодиод зажигается. Закрываем окно, активно дышим — светодиод гаснет. А теперь представьте, что вы зажигаете не светодиод, а подаете сигнал на реле, которое включает обогреватель в комнате. Получается готовый термостат!
Немного изменив программу можно отслеживать не понижение, а превышение заданного уровня. Например, удобно будет следить за температурой внутри, скажем, серверной, и при увеличении температуры до 40 градусов, включать вытяжку!
К размышлению
В современных устройствах всё чаще применяют цифровые датчики температуры, например, известный в среде DIY датчик DS18B20. Он легко подключается к Ардуино с помощью только одного сигнального провода — one wire. Модуль с таким датчиком есть и у RobotClass:
О том как его подключать и использовать в своих проектах узнаем на уроке про DS18B20.
Термометр с помощью 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 В легко обработать, довольно точно, данные.
Ниже на картинке показано, какая нога датчика 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, как оказалось, нет, но есть псевдомногопоточность, добиться ее можно используя не хитрую конструкцию с таймером, который отмеряет время в миллисекундах от старта работы микроконтроллера. Пример такого кода я приведу ниже:
Что использовалось в проекте:
- Arduino (я использовал arduino nano, но можно любую другую). Покупал тут: arduino nano
- Температурный датчик LM35. Покупал тут: Температурный датчик LM35 5 шт
- Температурный датчик DS18B20. Покупал тут: Температурный датчик DS18B20
- Дисплей hs420561k-32. Покупал тут: аналог дисплея hs420561k-32
- 1 резистор сопротивлением 4.7 кОм. Покупал тут:набор резисторов 700 шт. От 10 Ом до 1 МОм
- 8 резисторов сопротивлением 300 Ом. Покупал тут:набор резисторов 700 шт. От 10 Ом до 1 МОм
- 1 Сдвиговый регистр 74HC595. Покупал тут: сдвиговые регистры 10 штук
- Макетная плата. Я использовал с 830 отверстиями. Покупал тут: макетная плата
- Несколько соединительных проводов. Покупал тут: соединительные провода
Скетч уличного и комнатного термометра на arduino
Все сложные моменты, с которыми возникали сложности, в процессе создания термометра я описал, теперь остается только написать скетч, его код приведен ниже, а также доступен для скачивания тут: скачать.
Послесловие
Термометр работает, показывает температуры дома и на улице, только вся конструкция собрана на макетной плате, и использовать прибор в таком виде довольно неудобно. Поэтому в планах на будущее будет разработка удобного в эксплуатации устройства – напечатаю на 3D принтере корпус, а все провода нужно будет перенести на печатную плату, так же хочется убрать arduino и использовать atmega8. Это что касается планов на будущее, а пока в завершение статьи приложу видео работы термометра: