Цифровой термометр на Arduino и датчике температуры LM35


Термометры – это полезные устройства, которые используются человечеством уже долгое время. В этой статье мы спроектируем цифровой термометр на базе платы Arduino Uno и датчика температуры LM35, который будет измерять температуру окружающей среды в режиме реального времени и выводить ее значение на жидкокристаллический (ЖК) дисплей 16x2.

Цифровой термометр на Arduino и датчике температуры LM35: внешний вид

Данное устройство условно можно разделить на три модуля: первый измеряет температуру используя температурный датчик LM35, второй конвертирует измеренное значение температуры в привычную нам шкалу Цельсия (выполняется с помощью Arduino), а третий отображает это значение температуры на ЖК дисплее. Условно весь этот процесс можно представить в виде следующей диаграммы:

Диаграмма работы устройства

Все процессы на этой диаграмме проходят под контролем Arduino. Датчик температуры LM35 используется для измерения окружающей температуры и обеспечивает при изменении температуры на 1 градус изменение напряжения на 10 мВ на своем выходном контакте. Этот факт можно достаточно просто проверить с помощью вольтметра, подсоединив Vcc к pin 1, землю (Ground) к pin 3 и выходное напряжение к контакту pin 2 датчика LM35. К примеру, если напряжение на выходе датчика LM35 равно 250 мВ, то это означает, что температура окружающей среды примерно равна 25 градусам Цельсия.

Arduino считывает выходное напряжение датчика температуры со своего аналогового контакта A0 и выполняет вычисления, направленные на конвертацию этого аналогового значения напряжения в цифровое значение температуры. После проведения вычислений Arduino передает полученное значение температуры на ЖК дисплей 16x2.

Необходимые компоненты

Arduino

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

Внешний вид платы Arduino Uno

Датчик температуры LM35

LM35 (купить на AliExpress) представляет собой датчик температуры с 3 контактами, который обеспечивает изменение напряжения на своем выходе на 10 мВ при изменении температуры на 1 градус Цельсия. Верхний предел измерения температуры у него составляет около 150 градусов Цельсия. На 1-й контакт датчика подается питающее напряжение, 2-й контакт – выход датчика, а на 3-й подается земля.

Номер контакта Функция Обозначение
1 Питающее напряжение; 5V (+35V to -2V) Vcc
2 Выходное напряжение (+6V to -1V) Output
3 Земля (0V) Ground

Внешний вид датчика температуры LM35 и обозначение его контактов

ЖК дисплей

ЖК дисплеи 16x2 (купить на AliExpress) широко используются в различных проектах поскольку они дешевы, легко доступны, относительно небольшие по размеру и просты в подключении. ЖК дисплей 16x2 имеет 2 строки и 16 столбцов, что означает что он состоит из 16 блоков по 5x8 точек в каждом. Он имеет 16 контактов, из которых 8 контактов для передачи данных (D0-D7) и 3 контакта для управления, которые обозначаются как RS, RW and EN. Остальные контакты используются для подачи питания, контроля яркости и подсветки.

Внешний вид ЖК дисплея 16x2

Питание

Плата Arduino уже имеет встроенный модуль подачи питания, поэтому здесь нам необходимо только подсоединить адаптер на 9 или 12 вольт к плате, или можно запитать ее от USB-порта компьютера или ноутбука.

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема цифрового термометра на Arduino и датчике температуры LM35На представленной схеме ЖК дисплей 16x2 напрямую подсоединен к плате Arduino в 4-битном режиме. Контакты ЖК дисплея с обозначениями RS, EN, D4, D5, D6, D7 подсоединены к цифровым контактам Arduino 7, 6, 5, 4, 3, 2. Датчик температуры LM35 подсоединен к аналоговому контакту A0 платы Arduino.

Исходный код программы

Чтобы написать код программы для нашего цифрового термометра, мы должны написать код для Arduino, датчика температуры LM35 и ЖК дисплея 16x2. Сначала подключим библиотеку для ЖК дисплея, а затем определим контакты данных и управления для подключения ЖК дисплея и датчика температуры.

Код для инициализации ЖК дисплея

После получения аналогового значения напряжения на аналоговом входе A0 мы считываем это значение и сохраняем его в переменной с помощью команды float analog_value=analogRead(analog_pin). После этого мы преобразуем его в цифровое значение температуры по следующей формуле:

float Temperature=analog_value*factor*100

где factor=5/1023, analog_value – аналоговое значение напряжение с выхода датчика температуры.

То есть получаем код вида:

Код для преобразования значения температуры

Символ градуса формируем используя стандартный метод с помощью следующего кода:

Код для формирования символа градуса

Далее представлен полный исходный код программы нашего цифрового термометра.

Видео, демонстрирующее работу термометра

(1 голосов, оценка: 5,00 из 5)
Загрузка...
10 119 просмотров

Комментарии

Цифровой термометр на Arduino и датчике температуры LM35 — 87 комментариев

  1. Здравствуйте. Мне надо регулировать положение шагового двигателя от температуры. Цель сделать заслонки\жалюзи на приточку. Например при +5 градусов цельсия - заслонки открыты на 10%, при увеличении например до +20 градусов - открыты на 100%
    Помогите объеденить скетч из вашей статьи https://microkontroller.ru/arduino-projects/upravlenie-shagovym-dvigatelem-s-pomoshhyu-arduino-i-potencziometra/ с регулировкой не потенциометром, а датчиком LM35

    • Регулировка нужна не открыто\закрыто, а постепенное открытие от минимума до максимума при увеличении температуры воздуха
      Т.е. при +5 градусах температуры - шаговый двигатель сдивунлся на 10(просто цифра) шагов и по мере увеличения температуры сдвигается дальше, при уменьшении температуры возврат в начальное положение. При средне заданной температуре шаговый двигатель держится на середине и т.д.

      • Добрый вечер. Вам нужно в этом проекте https://microkontroller.ru/arduino-projects/upravlenie-shagovym-dvigatelem-s-pomoshhyu-arduino-i-potencziometra/ заменить потенциометр на датчик LM35? Я правильно понял? Удаленно таким образом достаточно сложно помогать, поэтому можем начать с самого простого алгоритма предполагаемого вами проекта, а если он заработает, то уже доработать его до того, который нужен вам. Подойдет вам такой вариант?

        • Да, на первый вопрос. Необходимо регулировать положение шагового двигателя по температуре с датчика температуры

          • Давайте я напишу вам программу, которая при температуре меньше 20 градусов будет вращать шаговый двигатель на 10 шагов влево, а при температуре больше 20 градусов - на 10 шагов вправо. Опробуем сначала на этом простом примере, а потом будем усложнять алгоритм в соответствии с вашими потребностями. Подойдет?

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

            • Конечно напишу. Но полноценное завершение и запуск будут не сразу после готрвой программы. Надо ещё всё будет сконструировать. Очень жду вариант программы. Заранее спасибо

              От админа: вот, попробуйте 1-й вариант программы https://disk.yandex.ru/d/ESKL21snKzq3-A

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

    if (level<230) level=level+26; //увеличиваем значение MCP41010 на 2 ступени

    судя по комментарию, должна увеличить Level на 2 ступени, но увеличение происходит на 26 ступеней. 2 ступени резистора должны соответствовать 26 ступеням MCP41010, т.е. level должен равняться 2 при изменении MCP41010 на 26 ступеней, что и должно отображаться в мониторе порта, а отображается изменение на 26. Если в этой строке заменить 26 на 2, то это будет неверно. Значение level должно быть максимально 19 и изменение на 1 уровень должно изменять значение MCP41010 на 13, но выводиться как одна ступень. Нужно какое-то дополнительное преобразование 13 в 1 то ли переменной, то ли функцией. В этом проблема для меня.

    https://disk.yandex.ru/i/25NPsG6VfnxxnQ
    Можете ли подключить такой индикатор для показаний температуры и 19 уровней? Если нет, то какой другой?

    • Ну если ссылку на статью дадите где такой индикатор к Ардуино подключают, то могу попробовать сделать это для вас.
      Про преобразование уровней вы меня что то совсем запутали, я даже и не знаю что вам еще предложить. Можно попробовать использовать функцию map, с ее помощью можно, к примеру, преобразовать диапазон 1-19 в диапазон 1-255 и наоборот, но не знаю, поможет вам это или нет. Ну или в сети вы не можете найти информацию по поводу того какая функция преобразования вам нужна?

      • arduino-technology.ru/coding/hardware/7-segment-display/
        portal-pk.ru/news/253-podklyuchenie-segmentnogo-displeya-tm1637-k-arduino.html

        Наверное, нужно всё-таки 1-19 в 1-255, т.к. от температуры меняются уровни - 1 уровень соответствует изменению 13 ступеней MCP41010.
        Если 1-19 в 1-255 или 1-255 в 1-19 с помощью функции map, то будет соблюдаться регулировочное соотношение 13 к 1 или 1 к 13? Если да, то давайте попробуем.

        • Я ваш комментарий последний удалил, а ссылки из него себе сохранил. Вроде пример с arduino-technology.ru достаточно простой. Попробуете сначала его у себя запустить?
          Новая версия программы
          https://disk.yandex.ru/d/c7_V0FRjJPAYmA
          В ней я добавил конвертирование уровней

  3. Делайте так, как считаете нужным. Мои комментарии тоже приходят постепенно, сначала думалось так, а потом по-другому. Это нормальный творческий процесс.

        • Температура больше 27.5, но меньше 30 - ступени не уменьшаются - это потому что уровень и так уже уменьшился до 0. Ведь меньше 0 он быть не может? Я специально поставил условие чтобы так было. Или нужно как то по другому? Просто когда вы задержку увеличите до 3-х минут, возможно такой ситуации уже наблюдаться не будет, не?
          По поводу шага изменения уровней вы меня что то уже совсем запутали. Ну если вам не подходит шаг 26, который сейчас в программе установлен, вы же можете изменить его на любой другой который вам подходит. Я вам могу этот шаг даже отдельной переменной сделать чтобы вам удобнее было его менять и экспериментировать с ним

          • Возможно при 3-х минутной задержке такого и не будет. Кстати, где в скетче эта задержка устанавливается? Можно попробовать охлаждать DS18B20.
            Про шаг изменения уровней. Сделайте конвертацию 13 уровней в 1, чтобы в мониторе порта было не 26, а 2, как на резисторе в котле.

            • Задержка устанавливается в следующей строке
              delay(2000); // задержка
              Это задержка на 2000 мс, то есть на 2 секунды.
              Конвертацию уровней вы можете тоже легко самостоятельно поправить, в программе сейчас для этого всего две строки:
              level=level+26;
              и
              level=level-26;
              Можете сами изменить это значение 26 на то, что вам нужно

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

    Скетч не с Вашего сайта. Как в Вашем скетче с датчиком BMP180 сделать целый поправочный коэффициент при считывание значения температуры с датчика?

    • То есть нужно установить еще предел температуры сверху, при достижении которого котел должен отключаться? Что в этом случае делать с уровнем потенциометра?
      Если вы один раз в программе собираетесь использовать поправочный коэффициент на температуру, то можно это сделать как вы написали - times = bmp.readTemperature()-2;
      Если в нескольких местах, то лучше завести отдельную переменную для хранения значения поправочного коэффициента - просто в этом случае если вы захотите его поменять, то это будет сделать гораздо проще

      • У Вас на сайте есть статья про двухканальный термостат, в котором задается две температуры, нижняя и верхняя. По аналогии с этим задаются пределы, к примеру 26,5 - 27,5 градусов. В этих пределах изменение уровня MCP41010 не происходит, т.е. этим пределам соответствует определенный уровень MCP41010, аналогия с выставленным уровнем резистора (у которого 19 ступеней) вручную в котле. Отличие только в том, что при выходе температуры за пределы, не нужно вручную устанавливать другой уровень резистора, это будет делать автоматически программа через MCP41010, но ступенчато, к примеру, изменением на две ступени резистора, которые соответствуют 26 уровням MCP41010, т.е. программа выдает не 26 уровней регулировки, а два, соответствующих 26 ступеням MCP41010, с периодической проверкой заданных пределов температуры. Если температура меньше заданных пределов, то прибавляются еще две ступени, соответствующие 26 ступеням MCP41010. Если температура по каким-либо причинам будет больше заданных пределов, то по две ступени вниз. При заданной максимальной температуре, к примеру 30 градусов, уровень MCP41010 делается нулевым.

        Как завести отдельную переменную для хранения значения поправочного коэффициента?

        • Завести такую переменную не сложно, например, const int popravka = 2;
          Ту статью про двухканальный термостат не я писал, а предыдущий админ сайта. Давайте я вам в программе тогда сделаю два уровня: 26,5 и 27,5 градусов, и 30 градусов верхний предел. Все эти уровни сделаю отдельными переменными, поэтому вы сами потом сможете их легко менять. Так подойдет?

          • Отдельная переменная для хранения значения поправочного коэффициента нужна для другого скетча с BMP280.

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

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

  5. Знаки больше и меньше не отобразились, поэтому весь абзац с заменой их словами.
    Для начала такой алгоритм: при "первоначальном" включении котла MCP41010 на минимуме и с помощью реле его минимум (50 Ом) шунтируется на 0, задается температура для DS18B20 кнопками () в пределах +25 - 28 градусов (нужен индикатор), например +27 (гистерезис плюс минус 0.5 градуса), далее шунтирующее реле отключается и начинается изменение сопротивления MCP41010 по 2 ступени, которые соответствуют перерассчитанным уровням резистора котла и сравнение с заданной температурой, через 3 минуты к примеру, если меньше +27, то происходит увеличение на две ступени до достижения соответствия заданной температуре. Если больше +27, то происходит уменьшение на две ступени до достижения соответствия заданной температуре вплоть до минимума сопротивления MCP41010 и включения шунтирующего реле для отключения контура отопления.

  6. MCP41010 будет вместо переменного сопротивления в плате управления котла. Поэтому приведен перерасчет уровней. Включение в режиме потенциометра.
    Переменным резистором с 19 уровнями управления устанавливается температурный режим контура отопления, который управляется датчиком от нагрева воды в котле: при достижении определенной температуры на датчике нагрев отключается, при снижении температуры - включается, и так циклически; чем на больший уровень выставлен резистор, тем дольше нагрев. Установка ручная. Также в котле есть возможность подключения внешнего термостата, но он будет производить регулировку в зависимости от установленного уровня переменного резистора, который устанавливается вручную. Поэтому подумалось об автоматике.
    О соответствии уровней MCP41010 определенной температуре сказать не могу.
    Для начала такой алгоритм: при "первоначальном" включении котла MCP41010 на минимуме и с помощью реле его минимум (50 Ом) шунтируется на 0, задается температура для DS18B20 кнопками () в пределах +25 - 28 градусов (нужен индикатор), например +27 (гистерезис плюс минус 0.5 градуса), далее шунтирующее реле отключается и начинается изменение сопротивления MCP41010 по 2 ступени, которые соответствуют перерассчитанным уровням резистора котла и сравнение с заданной температурой через 3 минуты к примеру, если +27, то происходит уменьшение на две ступени до достижения соответствия заданной температуре вплоть до минимума сопротивления MCP41010 и включения шунтирующего реле для отключения контура отопления. Если будет взаимовлияние температуры внешнего датчика DS18B20 и внутреннего датчика котла, то можно попробовать управление через внешний термостат, управление которого осуществляется по двум проводам с помощью реле или оптопары.

    • Давайте я тогда напишу вам программу, в которой заранее установленной температурой будет 27 градусов, если измеренная температура будет меньше 27 градусов, то на 2 ступени будет увеличиваться значение MCP41010, если больше 27 градусов, то на 2 ступени будет уменьшаться значение MCP41010. Это будет делаться с задержкой в 2 секунды. Ступени, насколько я понимаю, здесь это преобразованные 256 уровней в 19 ступеней. Так подойдет вам для теста?

      • Хорошо. Да, ступени - это преобразование 256 уровней в 19 ступеней или 13 к 1.

        • Попробуйте эту программу - https://disk.yandex.ru/d/Y8TpmFMb_l20fQ.
          Для изменения на 2 ступени я просто добавлял или отнимал от уровня потенциометра значение 26. Если вам нужна немного другая логика этого процесса, пишите, внесем изменения. Также с заранее определенными значением температуры и уровня потенциометра можете поэкспериментировать, я там оставил комментарии в программе где их нужно менять

          • Оцените - https://disk.yandex.ru/d/D2KA4OrpA8PhXw
            1 вариант - foto_27 и foto2_27 - температура в скетче 27;
            2 вариант - foto3_30, foto4_30 и foto5_30 - температура в скетче 30;
            3 вариант - foto6_30_0, foto7_30_0, foto8_30_0 и foto_30_0 - температура в скетче 30 и начальный уровень MCP41010 = 0.
            (повышение температуры от пальцев рук)
            В 1-ом варианте между Level = -236 и Level = -262 большой скачок при небольшом увеличении температуры.
            Во 2-ом варианте между Level = 232 и Level = 258 также большой скачок при одинаковой температуре.
            В 3-ем варианте тоже есть подобные скачки.
            Почему выбрано значение 26?

            Вопрос по другой теме. В скетче с датчика BMP280 выводится температура в целых числах без десятых так:
            times = bmp.readTemperature();

            Температура показывает значение больше на 2 градуса. Как правильно ввести поправочный коэффициент? Так: times = bmp.readTemperature()-2;
            или нужно задавать это через переменную. Если через переменную, то как это написать?

            • Ну почему происходят большие скачки напряжения при небольшом изменении уровня потенциометра - этого я, к сожалению, не знаю. Никогда просто с такими потенциометрами не работал. А уровни меняются правильно, по алгоритму как вы написали.
              Значение 26 выбрано потому что вы сами писали что на 1 ступень приходится 13 уровней, то есть 2 ступени эквивалентно 26 уровням. Но это легко поменять если вас эта цифра не устраивает.
              В каком скетче с датчиком BMP280? У меня на сайте есть статья с датчиком BMP180, а вот BMP280 я вот что то не помню

        • Да, все работает как я и планировал. Теперь попробуйте еще раз мне объяснить про преобразование уровней 256 в 19, которое вам нужно. Просто если смотреть ваш предыдущий комментарий про то, как вы планируете с изменением температуры управлять уровнями MCP41010, то мне кажется, что все 256 уровней вы никогда не будете использовать. Может тогда откинуть часть неиспользуемых уровней, тогда и настройка уровней для котла будет точнее

          • Резистор на плате управления в котле 10000 Ом, при делении на 19 уровней дает 526 Ом на уровень. 10000 Ом MCP41010 при делении на 256 уровней дает 39 Ом на уровень. Получается 13 (целых) уровней MCP41010 на 1 уровень резистора в котле, чтобы охватить весь диапазон регулировки. 256/19 ~ 526/39. Так как минимальное сопротивление MCP41010 50 - 100 Ом, то ступеней можно сделать 14 по минимуму, так как следующие 39 Ом будут прибавляться к 50 Ом.

          • Ступеней по минимуму 20, а не 14. Но можно попробовать сделать меньше - 16.

            • Хорошо, немного понял. А как связаны между собой сопротивления MCP41010 и резистора в котле? Они включены последовательно, параллельно или как-нибудь еще. Как влияет изменение сопротивления MCP41010 на функционирование котла?
              И приведите простой пример плз. К примеру, температура равна 20 градусам, какой уровень при этом должен быть у MCP41010 и какая ступень регулирования у котла. Потом температура увеличилась на 1 градус, потом еще на 9 градусов. Как при этом должны измениться уровни MCP41010 и котла?

  7. MCP41010 (сопротивление 10 кОм). Изменение температуры с датчика DS18B20 пропорционально изменяет сопротивление MCP41010. Для регулировки температуры в контуре отопления в газовом котле используется переменный резистор 10 кОм с 19 ступенями регулирования и крайнее левое, которое отключает режим отопления. Параметры MCP41010 по ссылке https://disk.yandex.ru/i/I69cUXqw5IIiNQ. Сделать соответствие 256 ступеней регулирования у MCP41010 19 ступеням регулирования у котла.
    Думаю сначала попробовать по типу термостата: пределы +27 плюс минус 1 градус; если меньше +26, то ступенчатое увеличение с проверкой каждые 3 минуты (ориентировочно); если больше +28, то ступенчатое уменьшение с такой же проверкой. Если +30 в течение 10 минут (ориентировочно), то уменьшение до отключения.
    Возможная проблема с MCP41010. У него минимальное сопротивление может быть от 50 до 100 Ом согласно даташиту, А нужен 0, как у обычного переменного резистора в крайнем левом положении при включении по схеме потенциометра.
    Если у Вас другое видение, то поделитесь.
    Ссылки на статьи:
    rcl-radio.ru/?p=80773
    digitrode.ru/computing-devices/mcu_cpu/722-arduino-i-cifrovoy-potenciometr.html

    • Ну конвертировать 256 ступеней в 19 это несложно - есть функция map для этого. Как сделать минимальное сопротивление 0 у него - я не знаю. Может быть параллельно ему какое-нибудь шунтирующее сопротивление подключить и включать цепь этого сопротивления когда нужно будет сопротивление 0. Давайте сначала попробуем просто его подключить к вашей плате Ардуино. С сайта digitrode.ru или rcl-radio.ru у вас получается представленные примеры программ запустить?

      • Скетч из статьи "Arduino и цифровой потенциометр" с сайта digitrode.ru запускается.

        • Хорошо, пришлите мне тогда работающий скетч для датчика DS18B20 и давайте попробуем сделать что-нибудь простое, объединив скетч для DS18B20 и скетч для электронного потенциометра с сайта digitrode.ru. Напишите, что самое простое мы можем сделать (проверить) в этом плане.
          Кстати, если DS18B20 вам по точности не подойдет, то вот вчера наткнулся на супер точный датчик температуры - learn.adafruit.com/adafruit-mcp9808-precision-i2c-temperature-sensor-guide

          • Скетч для датчика DS18B20 https://disk.yandex.ru/d/Fzb1ex6qrlRCrQ
            Самое простое - конвертировать 256 ступеней в 19 и проверить изменение напряжения на выходе электронного потенциометра в зависимости от изменения температуры на DS18B20.

            • Попробуйте этот скетч - https://disk.yandex.ru/d/0GG3Cos8wlUKug.
              В нем считывается температура с DS18B20, выводится на экран, затем это значение температуры умножается на 3 чтобы получить уровень для электронного потенциометра, затем из этого уровня получается значение напряжения. Пока самое простое преобразование (умножение на 3) чтобы просто проверить совместную работу DS18B20 и MCP41010

    • Просто уберите
      for (int i = 0; i < t.getDeviceCount(); i++){ и закрывающую скобку этого цикла }. А команду Serial.print(t.getTempCByIndex(i)) замените на Serial.print(t.getTempCByIndex(0));

        • Хорошо, дальше что будем делать? С вашим электронным потенциометром разбираться?

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

  8. Можно попробовать с DHT11 через монитор порта для начала, но если погрешность будет большой, то этот вариант не пойдет. Почему не хотите попробовать DS18B20? Этот датчик цифровой и используется во многих схемах электронных термометров и к тому же с длинными соединительными проводами.

    • Можно начать пробовать с DHT11 пока до вас идет другой lm35, там же у нас еще много вопросов, которые нужно решить. Пока будем решать, тогда и lm35 до вас дойдет - его, кстати, из российского интернет-магазина можно заказать, дойдет, я думаю, быстрее, чем с алиэкспресса.
      Просто про подключение DS18B20 к Ардуино я еще нигде не читал, если покажете в интернете толковую статью про это, то могу попробовать.

      • LM35 больше не заказывал. Лучше всего DS18B20.
        rcl-radio.ru/?p=45886
        arduinolab.pw/index.php/2015/12/02/podklyuchaem-neskolko-datchikov-ds18b20-k-arduino/

        • Хорошо, попробую вам помочь с DS18B20. Он у вас уже есть в наличии или вы ждете когда он до вас дойдет?

            • А с сайта rcl-radio.ru/?p=45886 пример с выводом значения температуры в окно монитора последовательного порта у вас работает? Мне он показался несложным

    • Ну попробуйте тогда следующую простую программу - https://disk.yandex.ru/d/p1jzrPSvP6BNiQ.
      Она должна каждую секунду выводить в окно монитора последовательной связи значение температуры с датчика.

      • Температуру показывает, но в общем от 0 до 29 и снова до 0, и так не стабильно. Это так и должно быть?

        • Скорее всего нет, судя по видео к данной статье температуру он должен держать стабильно. Попробуйте поэкспериментировать с задержкой в программе и номером контакта Ардуино, к которому подключен датчик. Также попробуйте сменить датчик если вы заказали его не один. Если не получится, будем думать дальше

          • Пробовал ещё две программы - то же самое. Скорее всего неисправен датчик. Датчик заказывал один.

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

  9. DHT11 - определение температуры 0–50 °С. Использовал такой датчик - погрешность более 2-х градусов при заявленной 2%. Не пойдет.
    Можно попробовать LM35 в помещении, устройство будет по типу термостата, но программа будет на мой взгляд сложнее, так как больше будет условий.
    Также нужно отображение ступеней регулирования на светодиодном индикаторе от 0 до 19.
    По ссылке посмотрите индикаторы, которые у меня есть
    https://disk.yandex.ru/d/7n9J0SywQYsegQ
    На мой взгляд лучше использовать 8-ми разрядный на MAX7219, чтобы сразу отображалась температура и ступень регулирования. Но это на Ваше усмотрение.

    • Может быть вам просто неудачный экземпляр DHT11 попался, ведь заявленная погрешность у него ведь небольшая, по вашим же словам. Посмотрел ваши индикаторы, но пока не могу сказать ничего конкретного - вы из меня какого то монстра электроники делаете, а я таковым не являюсь )) У меня на сегодняшний день достаточно много пробелов в современной электронике. Да, в процессе работы над данным сайтом я их достаточно быстро устраняю, но все равно пробелов осталось немало.
      Мне кажется, вашим индикатором нам стоит заняться в последнюю очередь. Сначала работу датчика температуры вместе с Ардуино нужно проверить, потом добиться правильной регулировки электронного потенциометра в зависимости от температуры. Все эти процессы удобнее отладить, на мой взгляд, с помощью монитора последовательного порта, а уж потом переходить к вашему индикатору

      • Вы понимаете в программировании Arduino, а эти индикаторы соединяются с ним по двум и трем проводам.
        Датчик DHT11 все же не пойдет. LM35 и MCP41010 уже отправлены.
        Возможная проблема с MCP41010. У него минимальное сопротивление может быть от 50 до 100 Ом согласно даташиту, А нужен 0, как у обычного переменного резистора в крайнем левом положении при включении по схеме потенциометра.
        В том, как Вы видите начало работы, я полностью согласен.

  10. Заказал LM35 и MCP41010 (10кОм).
    Пределы соответствия (примерные):
    температура - 40 ... + 17 градусов С - 20 значений сопротивления на выходе электронного потенциометра (количество ступеней регулирования конкретного электронного потенциометра привести к 0 и 19 значениям сопротивления);
    +17 градусов С - максимальное сопротивление электронного потенциометра - отопление отключено;
    - 40 градусов С - минимальное сопротивление электронного потенциометра - отопление максимально.
    Проверка изменения температуры:
    если изменение на 3 градуса (от предыдущего значения), то регулировка на одну ступень;
    время, через которое начинается регулировка при изменении температуры на 3 градуса, 5 секунд.
    Выводы на Ваше усмотрение.

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

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

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

        • Он в спам попал, вызволил его оттуда. Спамеры - ужасное зло современного мира, сколько из-за них нормальных людей страдает. Я бы для спамеров смертную казнь ввел

  11. И желательно бы индикатор 4-х разрядный светодиодный (крайний правый разряд - значок градуса).

    • Вам индикатор нужен семисегментный с 4-мя разрядами или обычный светодиодный. Смотрите, в данной статье ведь описан способ, с помощью которого можно вывести значок градуса на экран обычного ЖК дисплея 16х2. Вам это подойдет или нужно что то другое?

      • Семисегментный с 4-мя разрядами для отображения температуры без запятой, левый крайний разряд для знака минус, правый крайний для знака градус.

          • Индикатор такой подойдет.
            А вот LM35 вряд ли подойдет, т.к. соединительный кабель должен быть не менее 4-5 м, а этот датчик аналоговый, и из-за этого возникают проблемы в виде неустойчивых (скачущих) показаний при длинных соединениях особенно при больших отрицательных температурах в отличие от цифрового DS18B20. Вы знаете об этом?

            • Нет, к сожалению я об этом не знал. Я могу, конечно, попробовать посмотреть информацию о подключении датчика DS18B20 к плате Ардуино на других сайтах, но мне в этом случае посложнее будет вам помочь в программировании. А датчик DHT11 вам может подойти или нет? Чем он хуже DS18B20? Просто с сайта, откуда я большую часть статей перевел, почему то нигде не используется датчик DS18B20, а ребята на том сайте статьи пишут достаточно талантливые, знают толк в электронике

  12. Датчик LM35 никогда не использовал и опыта никакого. Какой электронный потенциометр думаете использовать, чтобы мне заказать вместе с датчиком?

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *