- Назначение, характеристики и разновидности,
- Подключение к Ардуино,
- Пример использования,
- Вывод,
- FAQ.
Назначение, характеристики и разновидности
Предназначение модуля раскрывается из его названия - измерять температуру на расстоянии. Особую актуальность задача приобрела полтора-два года назад, с момента коварного нападения на нас COVID-19, и, к сожалению, датчик до сих пор востребован на переднем крае этой войны. Разумеется, выявлять лица с повышенной температурой - не единственная задача, решаемая данным прибором. Сенсор может применяться в сотне различных проектов, где требуется точный и оперативный контроль температуры, от медицинского до промышленного и сельскохозяйственного назначения.Сенсор состоит из двух датчиков. Один из них, вспомогательный, контролирует температуру окружающей среды (воздуха), что можно использовать в качестве опорных данных. Диапазон измерения от -40, до +125 градусов цельсия, что покрывает почти все возможные задачи. Второй датчик (основной) наблюдает за температурой конкретного физического тела, размещенного прямо перед объективом, регистрируя интенсивность его инфракрасного излучения. Диапазон измерений основного датчика намного шире, от -70 до +380 градусов Цельсия, во что 99,9% задач DIY-мастеров укладываются уже с большим запасом.
Где приобрести?
Датчики для Arduino можно купить в нашем магазине
Подключение к Ардуино
Плата сенсора подключается к Ардуино по шине SPI (Serial Peripheral Interface). Более подробно о протоколе можно почитать в нашей специальной статье. У Ардуино UNO и ей подобных, на базе контроллеров Atmega328 и Atmega168, имеются пины A4 (SDA) и A5 (SCL) с аппаратной поддержкой SPI. Просто соединяем их с одноименными пинами на плате, подаем питание от 3,3 В до 5 В и готово!С программной точки зрения, быстрее и проще всего воспользоваться готовой библиотекой от Adafruit, для работы которой может понадобиться надстройка в виде интерфейсной библиотеки того же производителя. Скачав и установив то и другое, можно уже начинать работу с GY-906, например, запустив скетчи с примерами. Разумеется, никто не запрещает создать собственный способ обмена данными с сенсором, возможно код получится даже более компактным и изящным. Довольно подробное описание протокола имеется в даташите.
Как видите, сенсор предельно прост в подключении и эксплуатации.
Пример использования
Как было замечено в начале статьи, сенсор получил особую популярность в качестве бесконтактного медицинского измерителя температуры тела для выявления больных и заразных с безопасного расстояния. Благодаря высокой точности и скорости работы, GY-906 отлично справляется с этой ролью. Давайте попробуем сделать простой, но вполне рабочий прототип такого дистанционного “градусника”.Сперва немного теории. Измерять температуру принято на открытых, максимально теплых, участках тела, каковыми является, как ни странно, лоб и большая часть лица. Для наглядности, нам любезно предоставили фото с тепловизора лица полярника, погулявшего немного на свежем воздухе при бодрящих -50 градусах. Как видно, практически вся не покрытая шерстью поверхность лица, кроме щёк, вполне достойна измерения адекватной температуры тела даже после таких экстремальных условий охлаждения.
Что нам потребуется ещё, кроме датчика? Как минимум, индикатор, чтобы видеть измеренное значение. Предлагаю четырехразрядный семисегментный индикатор на базе TM1637, он прост, надежен, красив и не грузит контроллер, формируя символы самостоятельно. Подробное описание индикатора есть на нашем сайте.
На этом комплекте можно и остановиться, но мы сделаем результаты немного выразительнее. Например, если температура укладывается в норму, подтверждаем этот факт зеленым светодиодом, который интуитивно ассоциируется с чем-то хорошим. А если ничего хорошего в результатах измерений нет, то есть когда температура тела превышает 37 градусов, включим красный светодиод и усугубим его опасный цвет тревожным миганием и звуковым сигналом. Стало быть, нам потребуется еще два светодиода и бузер-пищалка.
Из зала подсказывают, что неплохо бы оснастить датчик соосной подсветкой, чтобы знать куда он смотрит. Добавим и белый светодиод на всякий случай, хоть в его необходимости имеются смутные сомнения.
Собираем схему.
Важное примечание: код учебный, для сокращения его размеров и упрощения понимания, были использованы конструкции с паузами delay(), которых следует категорически избегать в реальной прошивке. Однако, эту возможность мы оставим на доработку и улучшение.
#include <TM1637Display.h> // библиотека индикатора #define CLK A0 // пины индикатора #define DIO A1 TM1637Display display(CLK, DIO); // подключаем индикатор byte data[4]; // данные для разрядов индикатора #include <Adafruit_MLX90614.h> // библиотека датчика температуры Adafruit_MLX90614 mlx = Adafruit_MLX90614(); // инициализация дачика #define WHITE 3 // светодиод белый #define RED 5 // светодиод красный #define GREEN 4 // светодиод зеленый #define BUZ 2 // пищалка void setup() { Serial.begin(9600); Serial.println("start"); pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(WHITE, OUTPUT); pinMode(BUZ, OUTPUT); display.setBrightness(4); // яркость индикатора 0-7 blank(); // прочерки на индикаторе if (!mlx.begin()) { // ищем датчик, если его нет, выдаем ощибку и зависаем Serial.println("Error MLX sensor"); digitalWrite(RED, HIGH); while (1); }; digitalWrite(RED, HIGH); // проверка светодиодов и пищалки при включении digitalWrite(GREEN, HIGH); digitalWrite(WHITE, HIGH); delay(500); digitalWrite(RED, LOW); digitalWrite(GREEN, LOW); digitalWrite(WHITE, LOW); digitalWrite(BUZ, HIGH); delay(10); digitalWrite(BUZ, LOW); } void loop() { static float t[3] = {25, 25, 25}; // кольцевой буфер измеряемых температур t[0] = t[1]; t[1] = t[2]; t[2] = mlx.readObjectTempC(); // замер температуры if (t[0] > 30.0 && t[1] > 30.0 && t[2] > 30.0) { // есть теплый объект, берем последнее измерение из трех, оно самое точное disp(t[2]); if (t[2] > 37) { for (byte i = 0; i < 10; i++) { // температура выше 37, пищим и мигаем digitalWrite(RED, LOW); digitalWrite(BUZ, HIGH); delay(50); digitalWrite(RED, HIGH); digitalWrite(BUZ, LOW); delay(100); } } else { // температура ниже 37, все хорошо digitalWrite(GREEN, HIGH); digitalWrite(BUZ, HIGH); delay(100); digitalWrite(BUZ, LOW); } while (mlx.readObjectTempC() > 30.0); // ждем пока уберут текущий объект измерений delay(2000); digitalWrite(RED, LOW); digitalWrite(GREEN, LOW); blank(); } delay(500); } void blank() { // очистка индикатора (прочерки) data[0] = 0b01000000; data[1] = 0b01000000; data[2] = 0b01000000; data[3] = 0b01000000; display.setSegments(data); } void disp(float a) { // вывод на экран температуры byte b = a; int c = a * 10; data[0] = display.encodeDigit(b / 10); data[1] = display.encodeDigit(b % 10) | 0b10000000; data[2] = display.encodeDigit(c % 10); data[3] = 0b00111001; display.setSegments(data); }
Логика работы следующая. Устройство ждет, пока в зону его наблюдения попадет объект теплее 30 градусов, после чего немного выждав, пропуская переходный период, выдает результат на индикатор, сопровождая это либо зеленой, либо красной подсветкой. Далее “градусник” ждет, пока пациент покинет зону наблюдения и с нетерпением ожидает следующего.Проверяем, работает.
Необходимы комплектующие для Arduino?
Купить ардуино можно в нашем магазине 3DIY
Вывод
Бесконтактный температурный сенсор GY-906 на базе MLX90614 представляет собой компактное, надежное, недорогое и достаточно точное устройство с максимально простым интерфейсом и подключением. Огромный диапазон измеряемых температур, ряд отличающихся разновидностей и настройки под конкретные задачи дают возможность применять датчик в большом количестве разноплановых проектов, в которых требуется контроль температуры. Знать и уметь им пользоваться должен каждый уважающий себя DIY-мастер.FAQ
Можно ли доверять показаниям датчика с точки зрения медицины?Датчик, используемый в нашем проекте имеет точность в пределах 0,5 градуса Цельсия и не обладает медицинской сертификацией, а потому не может быть однозначно рекомендован для использования в медицинских учреждениях. В продаже существуют существуют специализированные модели с более высокой точностью расчета температуры (до 0,02 градусов), однако их цена в несколько раз выше стандартных. В маркировке таких изделий первой гордо стоит буква D. Для бытового применения вполне достаточно того, что использован в данном проекте, найти человека с повышенной температурой он способен довольно уверенно.
5-10 см достаточно небольшое расстояние, можно ли его увеличить?
Да, существуют длиннофокусные датчики с углом обзора 10 градусов, которые уверенно снимают показания с площади лба на расстоянии 30-40 см. Однако, кроме того, что они заметно дороже и габаритнее, следует дополнительно озадачиться точным наведением на цель. Если в объектив попадет лишь часть лба (или запястья), показания будут занижены.
Для чего в сенсоре датчик температуры воздуха?
Его можно применять как отдельно, так и совместно с основным. Например, для расчета порога срабатывания. В нашем проекте, с той программой что есть, при температуре окружающей среды выше 30 градусов, устройство будет работать некорректно. В идеале надо учитывать все обстоятельства.
Сколько сенсоров можно использовать одновременно?
Производитель обещает, что к одному SPI-порту можно подключать одновременно до 127 сенсоров GY-906.