Термометр на Arduino и датчике температуры человеческого тела MAX30205

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

Внешний вид термометра на Arduino и датчике температуры MAX30205

В этом проекте мы рассмотрим подключение датчика температуры человеческого тела MAX30205 к плате Arduino и спроектируем на основе этого термометр, который можно будет использовать в медицинских целях. Датчик MAX30205 можно легко закрепить на руке человека с помощью браслета. Измеренное значение температуры мы будем отображать на семисегментных индикаторах в Фаренгейтах. При желании вы можете достаточно просто переделать этот проект чтобы он отображал температуру в градусах Цельсия (для этого в программе необходимо просто изменить одну константу) и сделать отображение температуры на обычном ЖК дисплее. Также проект данного термометра можно объединить с проектом умных часов на основе Arduino – в этом случае температуру своего тела можно будет непосредственно выводить на экран OLED дисплея.

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

  1. Плата Arduino Nano (купить на AliExpress).
  2. Семисегментный дисплей с общим катодом – 3 шт. (купить на AliExpress).
  3. Регистр сдвига 74HC595 – 3 шт. (купить на AliExpress).
  4. Резистор 680 Ом – 24 шт.(купить на AliExpress).
  5. Модуль датчика температуры MAX30205 (купить на AliExpress).
  6. Источник питания с напряжением 5 В.
  7. Макетная плата.
  8. Соединительные провода (достаточно много).
  9. Кабель micro-USB.

Внешний вид платы Arduino Nano и датчика температуры MAX30205

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

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

Схема термометра на Arduino и датчике температуры MAX30205Схема сравнительно простая, однако из-за наличия семисегментных дисплеев она выглядит достаточно громоздкой. Семисегментный дисплей (индикатор) является отличным способом отображения информации поскольку он весьма дешев и достаточно ярко светит, однако при желании вы можете заменить его в данном проекте на обычный ЖК или OLED дисплей.

Ранее на нашем сайте мы уже рассматривали применение семисегментного дисплея совместно с платой Arduino в следующих проектах:

В схеме нашего проекта мы к плате Arduino Nano подключили три регистра сдвига 74HC595 – они используются для экономии контактов платы Arduino Nano при подключении семисегментных дисплеев. Ранее на нашем сайте мы уже неоднократно использовали регистр сдвига 74HC595, посмотреть полный список проектов с его использованием можно по следующей ссылке.

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

Подключение к плате Arduino датчика температуры человеческого тела MAX30205

Используемый в нашем проекте датчик температуры MAX30205 имеет точность измерений 0.1°C в диапазоне от 37°C до 39°C. Он работает по протоколу I2C.

Датчик может работать с напряжением 5 или 3.3V. Тем не менее, его плата сконфигурирована для работы с напряжением 5V, но в своем составе датчик имеет схему понижения уровня до 3.3V поскольку часть его узлов работает с таким уровнем напряжения.

Внешний вид подключения датчика температуры MAX30205 к плате Arduino Nano

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

Внешний вид регистра сдвига 74HC595 и обозначение его контактов

Назначение контактов (распиновка) регистра сдвига 74HC595 показаны в следующей таблице.

Назначение контактов (распиновка) регистра сдвига 74HC595

Контакты с QA до QH являются выходными контактами регистра сдвига, которые подключаются к семисегментным дисплеям. Поскольку в нашей схеме три регистра сдвига 74HC595 подключены каскадом, входной контакт (PIN14) первого регистра сдвига подключен к плате Arduino Nano, а выходной контакт последовательной передачи данных (Serial data output pin) будет обеспечивать передачу данных к следующему регистру сдвига.

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

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

Также в программе нужна будет библиотека для работы с датчиком MAX30205. Ее необходимо скачать по следующей ссылке:

https://github.com/protocentral/ProtoCentral_MAX30205

Далее в программе мы подключаем заголовочный файл этой библиотеки и объявляем объект для работы с датчиком MAX30205.

В следующей строке мы присваиваем константе fahrenheittemp значение true чтобы отображать температуру в фаренгейтах. Если вы хотите отображать температуру в градусах Цельсия, то вам необходимо этой константе присвоить значение false.

Следующие строчки кода используются для конфигурирования семисегментного дисплея – они для дисплея с общим катодом. Если вы хотите использовать семисегментный дисплей с общим анодом, то константе commonCathode вам необходимо присвоить значение false.

Описанный в этих строках массив хранит шаблоны отображения нужной нам информации на ЖК дисплее.

Далее, в функции void setup(), после установки режимов работы контактов для взаимодействия с регистром сдвига 74HC595 мы производим инициализацию протокола I2C и датчика температуры MAX30205.

Далее в функции void loop () мы будем считывать значения температуры с помощью функции tempSensor.getTemperature() и сохранять ее в переменной вещественного типа с названием temp. Далее значение температуры конвертируется из градусов Цельсия в фаренгейты. Затем из этого значения температуры выделяются три цифры для последующего отображения на семисегментных дисплеях – для этого используются следующие строчки кода:

Далее эти три отдельные цифры передаются для отображения на семисегментных дисплеях с использованием регистров сдвига 74HC595. Поскольку самые младшие двоичные разряды (LSB) первыми показываются на третьем семисегментном дисплее через третий регистр сдвига 74HC595, то первой передается третья цифра. Чтобы сделать это на latched pin (тактовый вход регистра хранения, "защелка") подается напряжение низкого уровня (low) и данные передаются регистру с помощью функции shiftOut().

Аналогичным образом, оставшиеся вторая и третья цифры также передаются соответствующим регистрам 74HC595 и через них семисегментным дисплеям. После передачи всех данных latch pin освобождается и на него подается напряжение высокого уровня (high) чтобы подтвердить окончание передачи данных.

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

Как показано на рисунке ниже, для сборки конструкции проекта мы использовали две макетные платы. Когда мы будем прикладывать палец к датчику, значение температуры нашего пальца считывается, преобразуется в фаренгейты и отображается на семисегментных дисплеях. В нашем случае получилось значение температуры 98.5*F.

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

Более подробно работу нашего термометра вы можете посмотреть на видео, приведенном в конце статьи.

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

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

(Проголосуй первым!)
Загрузка...
38 просмотров

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

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