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

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

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

В этом проекте мы рассмотрим подключение датчика температуры человеческого тела 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 и датчике температуры 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 поскольку часть его узлов работает с таким уровнем напряжения.

Также в схеме мы используем три регистра сдвига 74HC595 для подключения трех семисегментных дисплеев к плате Arduino Nano. Внешний вид регистра сдвига 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.

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

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

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

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

Здравствуйте admin-new.
Да нет, не термометры) Привычка брать с запасом, если вдруг сломаю..
Проблема именно в MAX30205.
1. Я пробовал подключить MAX30205 к Arduino Nano без всего остального (без индикаторов) с выводом данных на монитор, загрузил ваш скетч, в мониторе при этом постоянно выводится только одно значение 32.
2. Пробовал использовать разные библиотеки (загрузил в ARDUINO IDE) и скетчи (MAX30205), результат в одном случае:
только показывает «T=256.00C» или
девайс не найден…

Нашел очень похожее на мой случай:
https://forum.arduino.cc/t/max30205-temperature-sensor-and-arduino-yun/470492

Но сам разобраться, не могу. Прошу вас помочь!!

Там написано что эта проблема возникает из-за того, что с модуля MAX30205 считываются только старшие биты. Там советуют либо запитать модуль от 3,3 В, а не от 5 В, либо использовать конвертер уровней на интерфейсных линиях между ним и Ардуино, либо и то, и другое вместе. Это зависит от модификации модуля MAX30205, как оказалось. Вы можете посмотреть даташит именно на ваш модуль MAX30205? Что там написано про напряжение питания и про уровни сигналов на линиях интерфейса I2C?

Добрый вечер. Спасибо за интересный проект! Купил все по указанным ссылкам, но MAX30205 ни как не удается запустить! При запуске скетча, отображается одна и та же цифра температуры. Те показания не меняются.. ни на сотую. Nano и др компонеты исправны! MAX30205 купил аж 4 штукм и не один не работает.. Единственно на ваших фото (в статье) и на Ali фактически разные датчики, но с одной маркировкой.. Прошу вас помочь!!!

Добрый день. Эх, для чего же вы сразу так много датчиков купили таких, термометры дома что ли собираетесь делать? )) Может быть, проблема не в датчике, а при выводе значения температуры на семисегментные индикаторы где-нибудь закралась опечатка в скетче. Попробуйте выводить значение температуры в окно монитора последовательной связи, посмотрите заработает ли проект в этом случае. Умеете это делать?

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

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