Рубрики
Схемы на Arduino

Комнатный термометр на Arduino Nano

В данной статье мы рассмотрим создание на основы платы Arduino Nano и датчика температуры DS18B20 термометра с красивым внешним видом для измерения температуры в комнате. Измеренная температура будет отображаться с помощью адресной светодиодной ленты.

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

  1. Плата Arduino Nano (купить на AliExpress).
  2. Digilent WS2812 Addressable LED Strip (адресная светодиодная лента) (купить на AliExpress).
  3. Датчик температуры DS18B20 (купить на AliExpress).
  4. Кнопочный переключатель.

Общие принципы работы проекта

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

Измерять температуру мы будем с помощью датчика DS18B20, обладающего точностью измерения температуры в 0,5 градуса. Более подробно о его характеристиках и способу подключения к плате Arduino вы можете прочитать в данной статье. Измеренная температура будет отображать на адресном светодиодном индикаторе (LED bar) WS2812, который содержит 50 светодиодов. С помощью данного индикатора значение температуры будет отображаться весьма наглядно, используя для этого цвет светодиодов.

При изменении температуры цвет свечения светодиодов будет постепенно изменяться от темно-синего (для низких температур), далее к светло-синему, затем к зеленому (область комфортных температур) и далее до красного (высокие температуры). То есть одного беглого взгляда на термометр будет достаточно чтобы определить находится ли температура в «комфортной зоне» или нет.

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

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

Схема проекта

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

Исходный код программы (скетча)

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

16 ответов к “Комнатный термометр на Arduino Nano”

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

Ну тогда вам нужен как минимум другой датчик температуры. Согласно даташиту DS18B20 имеет диапазон измерения температуры от -55°C до +125°C. А если другой датчик температуры, то и код программы тоже поменяется

А разве мой запрос не входит в диапазон DS18B20 до +125°C можно и до 100°C Ч то то получилось заменой этой строки в программе int t = map(Celcius, 50, 100, 0, NUM_PIXEL);

Тогда я перепутал, почему то я подумал что вам нужно измерение температуры до 150 градусов. Вам тогда для преобразования температуры необходимо записать int t = map(Celcius, 50, 120, 0, NUM_PIXEL); Тогда ваши градусы от 50 до 120 конвертируются в диапазон от 0 до NUM_PIXEL

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

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

Из вашей же ветке изделий собрал в протеусе Часы бесконечности работают отлично -как часы

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

Собрал сей градусник на ардуино нано 168 серии При первом включении показал температуру одним СД .При нагреве датчика СД точка пошла в верх ,при охлаждении вниз При нажатии кнопки выбора режимов ,переключилось на столбик ,при нагреве датчика столбик полез в красный диапазон ,при охлаждении ничего не происходит ???? .При повторном нажатии кнопки выбора режимов СД точка бегает в верх вниз .при следующим нажатии ничего не происходит ??? Кнопку выбора режимов приходится нажимать по несколько раз ???? Такое происходит пока не нажмешь кнопку сброса на плате ардуино ,потом все повторяется Разъясните где что искать ?

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

Если бы я был такой же умный в программировании как вы ,то я так бы и поступил ,а так я товарищь дерево и пока мне не обьяснишь что к чему для меня это тёмный лес .

Посмотрите для примера эту статью — подключение датчика температуры и влажности DHT22 к Arduino. В ней есть пример вывода отладочной информации в окно монитора последовательной связи. Там в функции void setup() нужно инициализировать сначала последовательный порт командой Serial.begin(115200), а потом в функции void loop() просто выводить нужную информацию с помощью функции Serial.print.

Попытка запустить изделие в Proteus 8 Professional результатов не принес по сравнению с другими изделиями при вставке скетча в протеус .Ваш не работает ни при каких попытках запустить .

К сожалению скетч большой, могла закрасться опечатка, или что-нибудь в библиотеках изменилось с момента написания этой статьи. Тут так однозначно я уже не могу сказать в чем может быть ошибка. Здесь надо разбивать скетч на маленькие части и тестировать их работу по частям — так проще всего будет найти ошибку. Сможете разбить скетч на маленькие части? Я так мог бы попытаться помочь вам найти ошибку. У вас, скорее всего ошибка с логикой работы режимов. Сможете закомментировать код всех режимов, а оставить только работу в одном режиме?

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

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