МОНИТОРИНГ ТЕМПЕРАТУРЫ В ПОМЕЩЕНИИ ПРИ ПОМОЩИ ARDUINO
Перевод статьи: http://blog.rot13.org/2013/08/monitoring-room-temperature-using-arduino.html Лицензия: CC BY-SA 2.5
В течение последних нескольких месяцев, я играл с Arduino и собирал модули для моего первого реального проекта. На прошлой неделе мы купили кондиционер Mitsubishi с супер-инвертором, но я не был полностью доволен тем, как он управляется, так что я потратил несколько своих обеденных перерывов, чтобы понять, как меняется температура в моей комнате в зависимости от его настройки. Чтобы сделать это, я сделал простой монитор температуры, используя Arduino Nano, два температурных датчика и экран от Nokia 5110. Этот пост – попытка задокументировать мой результат.
Монитор температуры на основе Arduino
ПРОШИВАНИЕ ЗАГРУЗЧИКА ARDUINO NANO
Когда я начал покупать требуемые детали, меня задушила жаба и я взял дешевую Arduino Nano без загрузчика (прим. редактора: у нас в магазине Вы можете приобрести платы Arduino Nano R3 совместимые, дешёвые и с загрузчиком и без проблем с FTDI). Так что первым шагом, я прошел ускоренный курс по ISP программированию. Как вы можете видеть на картинке, моя плата не имеет припаянного ISP разъёма (хотя она пришла с ним), что могло бы объяснить, почему она не была заранее прошита. К счастью, у меня есть Bus Pirate v3b из Sand Box Electronics (важный инструмент для любой работы с микроконтроллерами), который также может работать в качестве ISP программатора для Arduino. С первой попытки, я прошил неправильный загрузчик (придерживал ISP разъём своим пальцем, поскольку он не был припаян и использовались шины Bus Pirate), но я скоро узнал, что программное обеспечение Arduino имеет полезный файл boards.txt, в котором вы можете найти правильный загрузчик, используя что-то вроде:
dpavlin@blue:~$ grep nano328 /usr/share/arduino/hardware/arduino/boards.txt | grep bootloader.file nano328.bootloader.file=ATmegaBOOT_168_atmega328.hex |
Так я узнал, что китайские клоны Arduino дают вам возможность узнать что-то новое. Я мог бы использовать другую Arduino для этой цели, но в то время у меня не было её под рукой. Урок усвоен, всегда покупать два экземпляра каждого компонента в надежде, что один из них будет работать.
ТРЕБУЕМЫЕ МОДУЛИ
Иметь одну лишь плату Arduino не очень полезно, так что я решил посетить онлайн магазины и собрать различные детали, необходимые для этого проекта:
- Беспаячная макетная плата
- Перемычки для макетной платы
- Набор проводов для макетной платы
- DHT11 датчик влажности/температуры
- DS18B20 однопроводный цифровой термометр с программируемым разрешением
- LCD экран от Nokia 5110 1.6" совместимый с Arduino
Вам может быть интересно, почему у меня два набора перемычек. Как вы можете видеть на картинке, я использую их обе, так как это намного проще и аккуратнее в плане распределения тока и земли по макетной плате.У меня были провода разных размеров. Они хорошо держатся в макетной плате, так что через них удобно подключать то, что в макетную плату не втыкается. Для соединений на самой макетной плате я использовать металлические перемычки в пластиковом кожухе. У меня также есть два датчика температуры. Я начал с DHT11 (установлен на маленькой макетной платке с бесполезным красным светодиодом мощности - я бы не рекомендовал это для следующего проекта), который красив и обеспечивает считывание температуры и влажности, но я не получил какие-либо знаков после запятой с этого выхода. Он оставляет чтение температуры на дисплее. Что я вспомнил, у меня есть пара DS18B20 в ящике, так что я добавил резистор 4.7K и подключил его. На этом моменте вещи становятся гораздо интереснее – он гораздо более точен, чем DHT11, поэтому я решил использовать его значение, чтобы прорисовывать график (и отображать правильную температуру с двумя знаками после запятой). Я также заметил, что показания температуры отличаются на 1 градус или около того между датчиками.
И НЕМНОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Одна из главных причин, по которой я в восторге от Arduino – это его поддержка программного обеспечения. Хотя это позор, что нет центрального хранилища программных библиотек (нет, вики-страницы на сайте Arduino не в счёт), это действительно приятно, что вы можете найти библиотеки для всего, что вам, возможно, потребуется. Это добавляет еще одну проблему: как отслеживать все эти библиотеки и ваш проект?
Я решил использовать Git и отслеживать все, что в моем каталоге ~ / Arduino. Изначально я надеялся, что каждая библиотека будет иметь восходящий репозиторий, так что я мог бы использовать модули Git, чтобы отслеживать их, но некоторые из них не отслеживались, так что я просто добавил их в репозиторий. Это работает очень хорошо (если я не забываю сохранить эскиз, прежде чем пытаться сделать коммит). Я начал с примера библиотеки DHT11, и продолжал добавлять другие части кода к ней. Затем я добавил библиотеку Arduino для интегральной схемы Температуры Далласа, которая в свою очередь использует OneWire для поддержки DS18B20, потому что на самом деле он не может нормально общаться по протоколу I2C.При работе с ним (и передачей температуры обратно через последовательный порт) казалось, что внутренний дисплей в порядке. Так что я взял дисплей от Nokia 5110, который был под рукой (я действительно его предпочитаю другим решениям – он дешевый и может отображать графическую информацию) и взял драйвер Adafruit для PC8544, который, в свою очередь необходим для графического ядра библиотеки Adafruit GFX Может показаться, что у меня там полный беспорядок, но этого достаточно для нормальной работы. Единственное, о чём я должен был заботиться, чтобы имя каталога в ~/Arduino/libraries было таким же, как и само имя библиотеки, которое не совпадает с именем восходящего репозитория. Ну что ж...
Было решено сделать небольшой циклический буфер для чтения DS18B20 и рисования прокрутки графика в RRD стиле. Как и в прошлом шаге, я также добавил подсветку под управлением PWM, которая действует следующим образом:
- ничего не показывает, если значение не изменится,
- становится наполовину серым если текущая температура ниже, чем в предыдущий момент
- светится на полной яркости, если она выше (внимание, внимание: процесс плавления :- )
Если взглянуть на исходник скетча монитора температуры DHT11 DS18B20 в целом он занимает 5k. Добавим в среднем за последние три показания яркость для фоновой подсветки, уменьшим последовательный вывод в формат, который лучше использовать для реальных RRD графиков, ведь до сих пор это был лишь полезный и веселый проект. Теперь становится понятно, как работает обычный кондиционер воздуха :-)
В заключение, я использовал Fritzing чтобы захватить схематический вывод этого проекта, поэтому я не записывал отображения контактов где-либо. Это несколько нестабильно, особенно если вы пытаетесь внести свои правки (я заменил красный LCD на доске тем, которая у меня был), но в целом это отличный способ для создания структурированной информации о Вашей точке зрения на вид макета. Возможность копировать / вставлять элементы из других рисунков (DHT11 в данном случае) спасла меня от определения другого нестандартного элемента.
По какой-то причине, я не получаю правильную схему для DS18B20. Я мог что-то неправильно определить для него или я просто пока не знаю, как правильно использовать Fritzing.