Автоматическое измерение температуры с голосовыми оповещениями
Компоненты и материалы
| Arduino UNO | ×1 |
| Модуль SD-карты | ×1 |
| SD-карта 8 ГБ | ×1 |
| Усилитель PAM8403 и динамик | ×1 |
| Ультразвуковой датчик HC-SR04 | ×1 |
| OLED-дисплей 128×64 | ×1 |
| Провода для макетной платы | ×1 |
| ИК-термометр GY-906 (MLX90614) | ×1 |
Компоненты можно приобрести на utsource.net. Обратите внимание: из-за высокого спроса датчик GY-906 иногда бывает в дефиците.
О проекте
В последние времена весь мир борется с вирусом COVID-19. Первичным скринингом потенциально заражённых людей является измерение температуры тела. Этот проект реализует автоматическое бесконтактное измерение температуры с голосовым информированием результата.
Шаг 1: Список деталей
Полный список компонентов с ссылками на покупку приведён выше.
Шаг 2: Схема подключения

Устройство измеряет температуру ИК-термометром GY-906, выводит результат на OLED-дисплей 128×64 и озвучивает его через динамик. Аудиофайлы хранятся на SD-карте, усилитель PAM8403 обеспечивает достаточную громкость.
Алгоритм работы:
- Пользователь машет рукой у ультразвукового датчика (расстояние ~10 см).
- Система приветствует голосом: «Добро пожаловать в систему измерения температуры, поднесите руку или лоб к датчику на расстояние около 2 см».
- Измеряется температура.
- Результат озвучивается и отображается на дисплее. Например: «Ваша температура 36,5 °C. Температура в норме, берегите здоровье!».
Шаг 3: Корпус и монтаж
Корпус выполнен из МДФ толщиной 3 мм, вырезанного на лазерном станке. Файлы для резки доступны по ссылке (Google Drive). Если станка нет, можно использовать картон. После резки детали склеиваются, затем устанавливаются компоненты и производится проводка по схеме.





Шаг 4: Программный код и загрузка

Код выполняет:
- Обнаружение человека ультразвуковым датчиком.
- Воспроизведение приветствия и инструкции.
- Измерение температуры, озвучивание результата и комментария.
Скачать код: https://bit.ly/2Za1mjZ
Аудиофайлы (8 бит, моно, 11025 Гц): https://bit.ly/3aZpGWJ
Запись голоса производилась через онлайн-конвертер audio.online-convert.com.
Шаг 5: Тестовый запуск


Система успешно измеряет температуру и информирует голосом. Надеюсь, проект понравится!
Исходный код (Arduino)
// www.youtube.com/c/engineer2you
#include <SD.h>
#define SD_ChipSelectPin 10
#include <TMRpcm.h>
#include <Adafruit_MLX90614.h>
//-------------------------------------- OLED
#include "SSD1306Ascii.h"
#include "SSD1306AsciiAvrI2c.h"
#define I2C_ADDRESS 0x3C
#define RST_PIN -1
//--------------------------------------- OLED
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
SSD1306AsciiAvrI2c oled;
TMRpcm tmrpcm;
double temp;
const int trigPin = 17;
const int echoPin = 16;
long duration;
int distance;
int step1_judge = 0;
void setup(){
// OLED init
#if RST_PIN >= 0
oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);
#else
oled.begin(&Adafruit128x64, I2C_ADDRESS);
#endif
oled.setFont(Adafruit5x7);
// Audio
tmrpcm.speakerPin = 9;
Serial.begin(9600);
if (!SD.begin(SD_ChipSelectPin)) {
Serial.println("SD fail");
oled.clear(); oled.set1X(); oled.println("SD card fail");
return;
} else {
Serial.println("SD ok");
oled.clear(); oled.println("SD card ok");
}
delay(1000);
tmrpcm.play("m_wel.wav");
tmrpcm.volume(1);
oled.clear(); oled.set2X(); oled.println(""); oled.println(" Welcome");
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
mlx.begin();
delay(10000);
}
void loop(){
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH, 23529);
distance = duration * 0.034 / 2;
Serial.print("distance is "); Serial.println(distance);
if ((distance < 10) && (distance > 0)) step1_judge++; else step1_judge = 0;
if (step1_judge > 2){
step1_judge = 0;
tmrpcm.play("m_wel.wav");
delay(10000);
temp = mlx.readObjectTempC() + 1.2;
oled.clear(); oled.set2X(); oled.println(""); oled.print(" "); oled.print(temp,1); oled.println("dgC");
tmrpcm.play("m_now.wav"); delay(1380);
if (temp < 20){
tmrpcm.play("m_b20.wav"); delay(1700);
tmrpcm.play("m_nman.wav"); delay(2270);
} else {
if (temp > 50){
tmrpcm.play("m_over50.wav"); delay(1740);
tmrpcm.play("m_nman.wav"); delay(2270);
} else {
speak_out(temp); delay(1500);
if((temp > 36) && (temp < 37)){
tmrpcm.play("m_normal.wav"); delay(3268);
}
if(temp > 37){
tmrpcm.play("m_fever.wav"); delay(2728);
}
}
}
}
delay(300);
}
void speak_out(double temperature_result){
temperature_result = temperature_result * 10;
temperature_result = round(temperature_result);
int temp0 = temperature_result;
int temp1 = temp0 / 10;
int temp2 = temp1 % 10;
int temp3 = temp0 % 10;
if(temp1 < 20){ tmrpcm.play("m_below20.wav"); delay(1631); }
if(temp1 > 50){ tmrpcm.play("m_over50.wav"); delay(1747); }
if((temp1 >= 20) && (temp1 <= 29)){ tmrpcm.play("m_twenty.wav"); delay(600); }
if((temp1 >= 30) && (temp1 <= 39)){ tmrpcm.play("m_thirty.wav"); delay(500); }
if((temp1 >= 40) && (temp1 <= 49)){ tmrpcm.play("m_fourty.wav"); delay(691); }
if (temp2 != 0) speak_num(temp2);
if((temp1 >= 20) && (temp1 <= 50)){
tmrpcm.play("m_point.wav"); delay(319);
speak_num(temp3);
}
tmrpcm.play("m_dgc.wav"); delay(853);
}
void speak_num(int number){
if(number == 1){ tmrpcm.play("m_one.wav"); delay(453); }
if(number == 2){ tmrpcm.play("m_two.wav"); delay(499); }
if(number == 3){ tmrpcm.play("m_three.wav"); delay(406); }
if(number == 4){ tmrpcm.play("m_four.wav"); delay(401); }
if(number == 5){ tmrpcm.play("m_five.wav"); delay(354); }
if(number == 6){ tmrpcm.play("m_six.wav"); delay(401); }
if(number == 7){ tmrpcm.play("m_seven.wav"); delay(633); }
if(number == 8){ tmrpcm.play("m_eight.wav"); delay(360); }
if(number == 9){ tmrpcm.play("m_nine.wav"); delay(580); }
if(number == 0){ tmrpcm.play("m_zero.wav"); delay(610); }
}
Схема

Производственный процесс
- Интегрированная система контроля доступа с QR, RFID и верификацией температуры
- Измерение температуры на Raspberry Pi с датчиками Maxim 1-Wire и мостом DS2482 I2C
- Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
- Бесшовный мониторинг температуры и влажности на Raspberry Pi с EzTemp
- Самодельная система термостатирования для домашнего пивоварения: мониторинг и регулирование на Arduino
- Точное измерение и логирование термопар для лабораторных и научных экспериментов
- Создание многодатчиковой системы мониторинга температуры и света с Raspberry Pi и DS18B20
- Точный мониторинг температуры внутри композитных структур и клейвых швов
- Измерительные инструменты: 16 основных типов, назначение и лучшие практики
- Принцип работы механической и автоматической коробки передач