Найти в Дзене
Arduino как хобби

ARDUINO как бесконтактный термометр для COVID-19

2020 год уже можно по праву назвать годом борьбы всего мира с пандемией короновируса COVID-19. Один из легковыявляемых симптомов этой болезни – повышенная температура тела. Способов решения этой задачи много: ртутный градусник, цифровые аптечные градусники и т.п. Но вот проблема – они все измеряют температуру контактным способом. Решение – будем делать бесконтактный измеритель температуры. Комплектующие: · ARDUINO NANO не распаянная гребенкой. · Дисплейный модуль LCD Nokia 5110 для Arduino (дисплей 84x48). · Модуль бесконтактного датчика температуры GY-906 MLX90614ESF. · Тактовая кнопка в роли выключателя питания · Корпус от телефона NOKIA 3210 или аналогичный с таким же дисплейным модулем. · Четыре батарейки ААА · Монтажный провод · Резистор 10 кОм – 4 шт. (голубые на схеме) · Резистор 1 кОм – 1 шт. (желтенький на схеме) Для более стабильной работы дисплея пришлось поставить еще модуль стабилизатора на 3.3 V (встроенный стабилизатор в попавшуюся мне ардуинку выдавал заниженное нап

2020 год уже можно по праву назвать годом борьбы всего мира с пандемией короновируса COVID-19.

Один из легковыявляемых симптомов этой болезни – повышенная температура тела.

Способов решения этой задачи много: ртутный градусник, цифровые аптечные градусники и т.п. Но вот проблема – они все измеряют температуру контактным способом. Решение – будем делать бесконтактный измеритель температуры.

Комплектующие:

· ARDUINO NANO не распаянная гребенкой.

· Дисплейный модуль LCD Nokia 5110 для Arduino (дисплей 84x48).

· Модуль бесконтактного датчика температуры GY-906 MLX90614ESF.

· Тактовая кнопка в роли выключателя питания

· Корпус от телефона NOKIA 3210 или аналогичный с таким же дисплейным модулем.

· Четыре батарейки ААА

· Монтажный провод

· Резистор 10 кОм – 4 шт. (голубые на схеме)

· Резистор 1 кОм – 1 шт. (желтенький на схеме)

Для более стабильной работы дисплея пришлось поставить еще модуль стабилизатора на 3.3 V (встроенный стабилизатор в попавшуюся мне ардуинку выдавал заниженное напряжение 2.3 V).

Короткие пояснения по схеме.

Информационные линии модуля дисплея подключены через резисторы т.к. он работает с логическими уровнями 3.3 вольта (вместо резисторов по правильному нужно поставить соответствующие ключи-преобразователи уровней). Соответственно и питание подаем на дисплей 3.3 вольта. Специально не рисовал на схеме модуль стабилизатора на 3.3 вольта – может Вам повезет, и Ваша ардуинка будет выдавать правильные напряжения.

Вывод подсветки дисплейного модуля в модификации красного цвета подключен на землю. Если подсветка не нужна – отключить.

Что касается пир-датчика. Датчик производится в трёх модификациях с разным углом захвата. Представленный в устройстве датчик широкоугольный (самый дешевый в линейке), в связи с этим измеряет на расстоянии до 5 см, что вполне удовлетворяет требованиям бесконтактного измерения. Датчик калибруется на заводе, в настройке не нуждается.

Назначения выводов, что и куда подключено дополнительно продублировано в скетче.

Сам скетч (прилагается в соответствующем виде):

##include <LCD5110_Basic.h>

##include <Wire.h>

##include <Adafruit_MLX90614.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

LCD5110 myGLCD(3, 4, 5, 7 ,6); // Пины дисплея Clk, DIn, DC, RST, CE – не перепутать

// Датчик подключен на пины А4, А5 - SDA, SCL

// Для красной платы дисплея вывод Light подключен к земле

extern uint8_t SmallFont[];

extern uint8_t BigNumbers[];

void setup()

{

myGLCD.InitLCD(63); // В скобках контрастность дисплея – менять нет смысла, уже експерементировал

Serial.begin(9600);

Serial.println("Adafruit MLX90614 test");

mlx.begin();

}

void loop()

{

Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC()); // Темперетура самого датчика

Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");// Температура объекта

Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF());

Serial.print("*F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F");

myGLCD.clrScr();

myGLCD.setFont(BigNumbers);

myGLCD.printNumF (float (mlx.readObjectTempC()), 1, CENTER, 0);// 1 - количество знаков после запятой

myGLCD.setFont(SmallFont);

myGLCD.print("0", 78, 0);

myGLCD.print("Air temp", 0, 32);

myGLCD.printNumF (float (mlx.readAmbientTempC()), 1, 55, 32);

myGLCD.print("VoronStudio", CENTER, 46);

delay(1000);

}

-2