Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Автоматическое измерение температуры с голосовыми оповещениями

Компоненты и материалы

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

Алгоритм работы:

  1. Пользователь машет рукой у ультразвукового датчика (расстояние ~10 см).
  2. Система приветствует голосом: «Добро пожаловать в систему измерения температуры, поднесите руку или лоб к датчику на расстояние около 2 см».
  3. Измеряется температура.
  4. Результат озвучивается и отображается на дисплее. Например: «Ваша температура 36,5 °C. Температура в норме, берегите здоровье!».

Шаг 3: Корпус и монтаж

Корпус выполнен из МДФ толщиной 3 мм, вырезанного на лазерном станке. Файлы для резки доступны по ссылке (Google Drive). Если станка нет, можно использовать картон. После резки детали склеиваются, затем устанавливаются компоненты и производится проводка по схеме.

Автоматическое измерение температуры с голосовыми оповещениями
Автоматическое измерение температуры с голосовыми оповещениями
Автоматическое измерение температуры с голосовыми оповещениями
Автоматическое измерение температуры с голосовыми оповещениями
Автоматическое измерение температуры с голосовыми оповещениями

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

Автоматическое измерение температуры с голосовыми оповещениями

Код выполняет:

  1. Обнаружение человека ультразвуковым датчиком.
  2. Воспроизведение приветствия и инструкции.
  3. Измерение температуры, озвучивание результата и комментария.

Скачать код: 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); }
}

Схема

Автоматическое измерение температуры с голосовыми оповещениями

Производственный процесс

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