- Необходимые компоненты
- MAX30205 с Arduino - Принципиальная схема
- Взаимодействие Arduino с датчиком температуры тела MAX30205
- Программирование MAX30205 с помощью Arduino
- Измеритель температуры тела Arduino - Тестирование
Для медицинских или клинических применений измерение температуры человеческого тела является важным параметром для определения состояния здоровья любого человека. Однако существует множество способов измерения температуры, но не все имеет точность, соответствующую требованиям клинической термометрии. Датчик температуры MAX30205 специально разработан для этого применения. Обратите внимание, что этот датчик не является бесконтактным датчиком температуры. Если вы ищете бесконтактное ИК-измерение температуры, обратите внимание на термометр MLX90614, который мы разработали ранее.
В этом проекте мы подключим датчик температуры человеческого тела MAX30205, который можно легко подключить к фитнес-браслету или использовать в медицинских целях. Мы будем использовать Arduino Nano в качестве основного микроконтроллера, а также будем использовать 7-сегментные дисплеи для отображения измеренной температуры в градусах Фаренгейта. Как только вы узнаете, как использовать датчик, вы можете использовать его в любом из предпочтительных приложений, вы также можете проверить этот проект Arduino Smartwatch, который в сочетании с MAX30205 может использоваться для мониторинга температуры людей.
Необходимые компоненты
- Ардуино НАНО
- 7-сегментные дисплеи с общим катодом - 3шт.
- 74HC595 - 3 шт.
- Резистор 680R - 24шт
- Плата модуля MAX30205
- Источник питания 5В
- Макетная плата
- Много соединительных проводов
- IDE Arduino
- Кабель micro-USB
MAX30205 с Arduino - Принципиальная схема
Полная принципиальная схема для подключения Arduino к датчику температуры тела MAX30205 показана ниже. Схема очень проста, но, поскольку мы использовали 7-сегментные дисплеи, она выглядит немного сложной. 7-сегментные дисплеи с Arduino - отличный способ показать ваши ценности большими и яркими по очень низкой цене. Но вы также можете отображать эти значения на OLED или ЖК-дисплее, если хотите.
Arduino Nano соединен с тремя 74HC595. Три 74HC595 соединены каскадом, чтобы сэкономить дополнительные выходные контакты Arduino Nano для подключения трех 7-сегментных дисплеев. Ранее мы использовали 74HC595 с Arduino во многих других проектах, таких как часы Arduino, светодиодный дисплей, игра «Змейка» для Arduino и т. Д. И т.д.
Плата модуля MAX30205 требует дополнительных подтягивающих резисторов, поскольку она взаимодействует с протоколом I2C. Однако некоторые платы модулей не требуют дополнительной подтяжки, поскольку подтягивающие резисторы уже установлены внутри модуля. Следовательно, необходимо проверить, есть ли на плате модуля внутренние подтягивающие резисторы или для этого дополнительно требуется внешний подтягивающий резистор. Плата, которая используется в этом проекте, уже имеет встроенные подтягивающие резисторы внутри платы модуля.
Взаимодействие Arduino с датчиком температуры тела MAX30205
Здесь используется датчик MAX30205 от компании maxim Integrated. Датчик температуры MAX30205 точно измеряет температуру с точностью до 0,1 ° C (от 37 ° C до 39 ° C). Датчик работает по протоколу I2C.
Плата модуля может работать от 5 или 3,3 В. Однако плата сконфигурирована для использования с рабочим напряжением 5 В. Он также включает в себя переключатель логического уровня, поскольку сам датчик поддерживает максимум 3,3 В для питания или передачи данных.
На выходе три 8-битных регистра сдвига 74HC595 используются для взаимодействия трех 7-сегментных дисплеев с Arduino NANO. Схема контактов может быть показана на изображении ниже -
Описание контактов 74HC595 можно увидеть в таблице ниже.
От QA до QH - выводы вывода данных, которые подключены к 7-сегментным дисплеям. Поскольку три 74HC595 соединены каскадом, контакт ввода данных (PIN14) первого регистра сдвига будет подключен к Arduino NANO, а вывод последовательного вывода данных будет передавать данные в следующий регистр сдвига. Это последовательное соединение для передачи данных будет продолжено до третьего 74HC595.
Программирование MAX30205 с помощью Arduino
Полную программу для этого руководства можно найти внизу этой страницы. Объяснение этого кода следующее. Сначала мы включаем заголовочный файл стандартной библиотеки Arduino I2C.
#включают
Вышеупомянутая строка будет включать библиотеку, предоставленную Arduino от protocentral. Эта библиотека имеет важные функции для связи с датчиком MAX30205. Библиотека взята из приведенной ниже ссылки GitHub -
https://github.com/protocentral/ProtoCentral_MAX30205
После импорта библиотеки мы определяем данные объекта MAX30205, как показано ниже:
#include "Protocentral_MAX30205.h" MAX30205 tempSensor;
Следующие две строки важны для установки параметров. В строке ниже отображается температура в градусах Фаренгейта, если установлено значение true. Для отображения результата в градусах Цельсия необходимо установить в строке false.
const bool fahrenheittemp = true; // Я показываю температуру в градусах Фаренгейта. Если вы хотите показывать температуру в градусах Цельсия, сделайте эту переменную ложной.
Строку ниже необходимо настроить, если в оборудовании используются обычные 7-сегментные дисплеи катодного типа. Сделайте ложным, если используется общий анод.
const bool commonCathode = true; // Я использую 7-сегментный общий катод, если вы используете общий анод, тогда измените значение на false. const byte digit_pattern = {// 74HC595 Outpin Connection с 7-сегментным дисплеем. // Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 // abcdefg DP 0b11111100, // 0 0b01100000, // 1 0b11011010, // 2 0b11110010, // 3 0b01100110, // 4 0b10110110, // 5 0b10111110, // 6 0b11100000, // 7 0b11111110, // 8 0b11110110, // 9 0b11101110, // A 0b00111110, // b 0b00011010, // C 0b01111010, // d 0b10011110, // E 0b10001110, // F 0b00000001 //. };
Вышеупомянутый массив используется для хранения шаблона цифр для 7-сегментных дисплеев.
В функции настройки после установки режимов вывода 74HC595 выводов протокол I2C и показания датчика температуры инициализируются.
void setup () {// поместите сюда ваш установочный код, чтобы запустить его один раз: // установите последовательный порт на 9600 Serial.begin (9600); задержка (1000); // устанавливаем контрольный вывод 74HC595 как выходной pinMode (latchPin, OUTPUT); // ST_CP для 74HC595 pinMode (clkPin, OUTPUT); // SH_CP для 74HC595 pinMode (dtPin, OUTPUT); // DS 74HC595 // инициализировать библиотеки I2C Wire.begin (); // запускаем считывание температуры MAX30205 в непрерывном режиме, активный режим tempSensor.begin (); }
В цикле температура считывается функцией tempSensor.getTemperature () и сохраняется в переменной типа float с именем temp . После этого, если выбран температурный режим по Фаренгейту, данные конвертируются из Цельсия в Фаренгейт. Затем три цифры преобразованных измеренных данных температуры дополнительно разделяются на три отдельные цифры. Для этого используются следующие строки кодов:
// сохранить 3 цифры от текущей температуры (например, если temp = 31.23c,) int dispDigit1 = (int) temp / 10; // цифра1 3 int dispDigit2 = (int) temp% 10; // цифра2 1 int dispDigit3 = (temp * 10) - ((int) temp * 10); // цифра 3 2
Теперь разделенные три цифры отправляются на 7-сегментные дисплеи с использованием регистров сдвига 74HC595. Поскольку LSB сначала отображается на третьем 7-сегментном дисплее через третий 74HC595, сначала передается 3-я цифра. Для этого фиксируемый штифт опускается в низкий уровень, и данные передаются в 74HC595 функцией shiftOut ();
Таким же образом оставшиеся вторая и первая цифры также отправляются на соответствующий 74HC595, таким образом остаются два 7-сегментных дисплея. После отправки всех данных штифт защелки освобождается и поднимается вверх, чтобы подтвердить окончание передачи данных. Соответствующие коды можно увидеть ниже -
// отображаем цифры в 3-, 7-сегментный дисплей. digitalWrite (latchPin, LOW); если (commonCathode == true) {shiftOut (dtPin, clkPin, LSBFIRST, digit_pattern); shiftOut (dtPin, clkPin, LSBFIRST, digit_pattern-digit_pattern); // 1. (Цифра + DP) shiftOut (dtPin, clkPin, LSBFIRST, digit_pattern); } еще {shiftOut (dtPin, clkPin, LSBFIRST, ~ (digit_pattern)); shiftOut (dtPin, clkPin, LSBFIRST, ~ (digit_pattern-digit_pattern)); // 1. (Цифра + DP) shiftOut (dtPin, clkPin, LSBFIRST, ~ (digit_pattern)); } digitalWrite (latchPin, HIGH);
Измеритель температуры тела Arduino - Тестирование
Схема состоит из двух наборов макетов, как вы можете видеть ниже. Когда мы прикладываем палец к датчику, измеряется температура, и выходной сигнал отображается на 7-сегментном дисплее, здесь значение составляет 92,1 * F.
Полную работу проекта можно посмотреть в видео по ссылке ниже. Надеюсь, вам понравилось строить проект и вы узнали что-то полезное. Если у вас есть какие-либо вопросы, оставьте их в разделе комментариев ниже или воспользуйтесь нашим форумом.