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

Бесконтактный настенный термометр на Arduino с логгером данных на SD карту

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

Поэтому в данной статье мы рассмотрим создание монтируемого на стену бесконтактного инфракрасного термометра на основе платы Arduino, который будет способен производить измерения температуры без участия человека и вести лог измерений температуры в формате excel на SD карту. Также в данный проект модно добавить модуль считывания RFID меток или считыватель штрихового кода – в этом случае в лог температуры можно будет записывать имя и фамилию (при необходимости и другие данные) лиц, у которых производилось измерение температуры. Также данный проект можно использовать как систему контроля посещаемости, поскольку время входа каждого лица, измерявшего температуру, также записывается.

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

  1. Плата Arduino Nano (купить на AliExpress).
  2. MLX90615 IR Temperature Sensor – бесконтактный инфракрасный датчик температуры MLX90615 (купить на AliExpress). К сожалению, на момент публикации данной статьи удалось найти на Aliexpress данный датчик только вместе с платой (это дороже), возможно, вам удастся найти его в продаже в виде отдельного датчика (это будет дешевле).
  3. TCRT5000 IR Sensor – инфракрасный датчик TCRT5000 (купить на AliExpress — можно покупать и без платы, но без платы они на алиэкспрессе продаются только россыпью).
  4. Модуль часов реального времени (RTC module) DS3231 (купить на AliExpress).
  5. ЖК дисплей 16х2 (купить на AliExpress).
  6. Модуль для чтения SD карт (купить на AliExpress).
  7. Зуммер (Buzzer) (купить на AliExpress).
  8. Светодиод красного цвета (купить на AliExpress).
  9. Светодиод зеленого цвета (купить на AliExpress).
  10. Перфорированная плата.
  11. Резисторы 1 кОм, 4,7 кОм, 10 кОм (купить на AliExpress).
  12. Потенциометр 10 кОм (купить на AliExpress).
  13. Разъем постоянного тока (DC Barrel Jack).
  14. Адаптер питания постоянного тока 12V 1A.
  15. Крепления для светодиодов (LED Mount brackets).
  16. Металлический корпус и болты.

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

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

MLX90615 Non-Contact IR Temperature Sensor (бесконтактный инфракрасный датчик температуры): наиболее важный компонент нашей схемы. Ранее мы его использовали в проекте умного бесконтактного термометра на основе Arduino и смартфона. Принцип работы датчика основан на том, что все нагретые объекты (в том числе и тело человека) испускают инфракрасные лучи, интенсивность которых пропорциональна температуре объекта. MLX90615 является цифровым инфракрасным датчиком температуры, поэтому у него есть собственная внутренняя схема, которая измеряет интенсивность инфракрасных лучей от объекта и преобразует ее в значение температуры. Датчик подключается по интерфейсу I2C, его внешний вид и распиновка показаны на следующем рисунке.

TCRT5000 IR proximity Sensor (инфракрасный датчик отражения): этот датчик в нашем проекте термометра будет использоваться для определения того, поместил ли человек свою руку напротив датчика. Ранее мы его уже использовали в уже упоминавшемся проекте бесконтактного термометра на основе Arduino и смартфона. Здесь мы также будем решать с помощью него проблему засветки солнечным светом инфракрасного датчика температуры и самого датчика TCRT5000.

Для устранения ложных срабатываний датчика вследствие его засветки Солнцем мы подключили его приемный светодиод (IR receiver LED) к аналоговому контакту платы Arduino, а его передающий светодиод — к цифровому контакту платы Arduino. С помощью этого способа мы сможем измерять сигнал, принимаемый его инфракрасным светодиодом, как во время работы его передающего светодиода, так и когда передающий светодиод датчика не работает. Вычисляя разницу между этими значениями мы можем определить текущий уровень “светового” шума и, таким образом, предотвратить ложные срабатывания датчика.

DS3231 RTC module (модуль часов реального времени): будет использоваться в нашем проекте для определения даты и времени текущего измерения температуры. Модуль DS3231 имеет в своем составе собственную батарею, поэтому он может хранить данные даты и времени даже в то время, когда основное питание схемы отключено. Но прежде чем начать использовать его, в нем необходимо установить правильное время когда вы включите его в первый раз. Модуль DS3231 использует обмен данными через свои контакты интерфейса I2C, поэтому в нашей схеме он подключен к аналогичным контактам датчика MLX90615. Но оба эти устройства будут иметь разные адреса I2C, поэтому нам не стоит беспокоиться о том, не будут ли они мешать друг другу.

Модуль чтения SD карт: используется для чтения SD карт с помощью платы Arduino. На SD карту в нашем проекте записываются в текстовый файл значения температуры, измеренные термометром, и время произведения этих измерений. Этот модуль работает по интерфейсу SPI, поэтому мы подключили его к контактам данного интерфейса в плате Arduino.

ЖК дисплей 16×2: на его экране будут отображаться измеренные значения температуры и времени. Это обычно алфавитно-цифровой ЖК дисплей, который мы уже использовали во множестве проектов на нашем сайте.

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

Также в схеме проекта используются несколько резисторов, которые служат для ограничения тока через светодиоды и зуммер. Также в схеме использованы резисторы сопротивлением 4,7 кОм, которые служат в качестве подтягивающих резисторов для контактов интерфейса I2C. Потенциометр в схеме используется для регулировки уровня контрастности ЖК дисплея.

Сборка конструкции проекта

Как вы можете видеть из первой картинки в этой статье, мы решили упаковать наш бесконтактный термометр внутрь металлического корпуса, поэтому мы использовали для сборки конструкции проекта перфорированные платы: на одной из них мы разместили плату Arduino Nano, модуль DS3231 и все пассивные компоненты схемы, а на другой – датчики MLX90615 и TCRT500.

При сборке проекта убедитесь в том, что у вас хватит места внутри корпуса для установки ЖК дисплея, светодиодов, датчиков и зуммера. Внешний вид получившейся у нас конструкции проекта показан на следующем рисунке (кроме платы с датчиками).

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом нам необходимо скачать и установить нужные нам библиотеки. Скачать их можно по следующим ссылкам:

Затем в программе нам необходимо подключить необходимые заголовочные файлы и определить (дать названия) используемые контакты.

Мы в программе будем использовать две глобальные переменные. Первой из них будет “error_correction”, в которой будет храниться корректировочное значение, которое будет добавляться к значению температуры, считанному с датчика MLX90615. Хотя датчик MLX90615 продается уже откалиброванным с завода, мы заметили, что его показания будут более точными если к ним добавлять это корректировочное значение. Мы использовали ручной измеритель (проверенный) чтобы получить это калибровочное значение. Следующей глобальной переменной является Range_sensitivity которая определяет как близко посетитель должен поднести свою руку к датчику температуры чтобы он сработал. Мы использовали значение этой переменной, равное 200, но вы можете уменьшить это значение чтобы увеличить диапазон срабатывания датчика.

Далее в программе мы инициализируем SD карту, устанавливаем связь с ней по протоколу SPI и создаем на ней файл под названием “Temp_Log.text”. Затем мы открываем этот файл и записываем в него заголовок нашего лога. Мы будем записывать в файл дату, время и температуру, поэтому и заголовок лога у нас выглядит соответствующим образом. Данная функция инициализации SD карты будет исполняться у нас в программе один раз, в функции setup.

Далее мы запрограммируем функцию записи данных на SD карту, в файл, который мы создали в функции Initialize_SDcard(). Эта функция будет вызываться каждый раз когда будет производиться измерение температуры. Формат файла будет в виде данных, разделенных запятыми — “Date,Time,Temperature”, например, “19.08.2020,10:45:17,35.6”. Этот формат файла легко открывается с помощью программы Excel, в которой можно будет эти файлы просмотреть в удобной форме и выполнить с ними определенные действия (сортировка, нахождение максимума и т.д.), которые доступны в Excel. Ранее подобный подход мы уже использовали в проектах декодера инфракрасных сигналов и логгера данных температуры и влажности на Arduino.

Также в функции void setup() мы должны инициализировать и другие устройства, которые используются в нашем проекте. Также в этой функции мы покажем приветственное сообщение на экране ЖК дисплея.

Далее в функции void loop мы будем считывать значения даты и времени с модуля реального времени и обновлять их значения на экране ЖК дисплея. После этого мы будем включать инфракрасный передающий светодиод, подключенный к контакту 2 платы Arduino, и считывать в это время значение с аналогового контакта A7 платы Arduino, к которому подключен приемный светодиод инфракрасного датчика. Затем мы будем повторять эту операцию при выключенном инфракрасном передающем светодиоде. Эти операции позволяют нам измерить значения шума (Noise) и сигнала + шума (Noise+Signal) с выхода инфракрасного датчика. Затем мы вычитаем из значения сигнал + шум значение шума и получаем значение сигнала.

Значение сигнала сообщит нам как близко находится посетитель к инфракрасному датчику TCRT5000 без учета влияния солнечного света. Затем, сравнивая это значение сигнала и значение шума, мы будем давать команду на считывание температуры и сохранение ее значения на SD карту. Если температура в норме, то мы будем зажигать зеленый светодиод, а если температура повышенная – то мы будем зажигать красный светодиод.

Сборка термометра в корпусе

После тестирования и отладки «железа» и кода программы мы начали сборку нашего проекта в закрытом корпусе. Для этих целей мы спроектировали и изготовили металлический корпус для нашего настенного термометра. При проектировании размеров корпусов учитывались размеры ЖК дисплея, светодиодов и других компонентов проекта. После изготовления корпуса на специальном станке мы нанесли на него порошковое покрытие чтобы улучшить его эстетический вид.

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

Тестирование работы термометра

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

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

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

Как вы можете видеть, этот файл неудобно просматривать в обычном текстовом редакторе, таком как notepad. Поэтому гораздо лучше его открыть в программе Microsoft Excel. Откройте его в Excel как CSV файл с разделителями в виде запятой. В этом случае открытый файл будет выглядеть следующим образом:

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

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

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

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

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