산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

음성 알림 기능이 있는 자동 체온 측정기

부품 및 소모품

음성 알림 기능이 있는 자동 체온 측정기 Arduino UNO × 1
음성 알림 기능이 있는 자동 체온 측정기 UTSOURCE 전자 부품 × 1

프로젝트 소개

최근 전 세계가 코로나19 바이러스와 싸우고 있습니다. 감염 의심자를 선별하는 첫 단계가 체온 측정입니다. 이 프로젝트는 체온을 자동으로 측정하고 음성으로 결과를 알려주는 장치를 만드는 것입니다.

1단계: 부품 목록

프로젝트에 필요한 구성품:

전자 부품은 utsource.net에서 구매할 수 있습니다. 참고: 수요가 많아 GY-906 센서를 구하기 어려울 수 있습니다.

2단계: 회로 설계

음성 알림 기능이 있는 자동 체온 측정기

기본 동작: 적외선 온도계(GY-906)로 체온을 측정하고, 결과를 OLED 128x64에 표시합니다. 동시에 SD 카드에서 오디오 파일을 읽어 스피커로 음성 안내를 합니다. 스피커 소리를 키우기 위해 PAM8403 앰프를 사용합니다.

주요 사용 시나리오:

  1. 사용자가 초음파 센서 앞에서 손을 흔듭니다(약 10cm 거리).
  2. 시스템이 음성으로 "체온 측정 시스템에 오신 것을 환영합니다. 손이나 이마를 센서 앞 2cm 정도에 대주세요"라고 안내합니다.
  3. 사용자가 손이나 이마를 센서 가까이 가져가면 체온을 측정합니다.
  4. 결과를 음성과 LCD로 알려줍니다. 예: 체온이 36.5℃라면 "당신의 체온은 36.5도입니다. 정상 체온이니 건강을 유지하세요"라고 음성 출력합니다.

3단계: 프레임 제작 및 배선

프레임은 3mm 두께 MDF 목재를 레이저 커팅으로 제작했습니다. CNC 레이저 장비가 없다면 골판지로 대체 가능합니다. 설계 파일은 구글 드라이브에서 다운로드할 수 있습니다.

음성 알림 기능이 있는 자동 체온 측정기
음성 알림 기능이 있는 자동 체온 측정기
음성 알림 기능이 있는 자동 체온 측정기
음성 알림 기능이 있는 자동 체온 측정기
음성 알림 기능이 있는 자동 체온 측정기

자른 부품을 접착제로 조립한 후, 모든 부품을 프레임에 장착하고 회로도대로 배선합니다.

4단계: 코드 작성 및 다운로드

아두이노 코드는 다음 기능을 수행합니다:

  1. 초음파 센서로 사람(장애물) 감지
  2. 스피커로 환영 인사 및 측정 안내 음성 출력
  3. 측정된 체온을 음성으로 알려주고 상태 코멘트 추가
음성 알림 기능이 있는 자동 체온 측정기

코드 다운로드: https://bit.ly/2Za1mjZ

오디오 파일 다운로드 (SD 카드에 저장): https://bit.ly/3aZpGWJ

오디오 파일 사양: 8비트, 모노, 11025Hz. 컴퓨터나 휴대폰으로 녹음 후 온라인 변환 도구로 WAV 변환.

5단계: 테스트 실행

전원을 연결하고 테스트해 보세요. 체온을 측정하고 음성으로 알려주는 시스템이 재미있게 작동합니다.

음성 알림 기능이 있는 자동 체온 측정기
음성 알림 기능이 있는 자동 체온 측정기

유용하게 사용하시길 바랍니다! 읽어주셔서 감사합니다.

코드

// 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

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 초기화
  #if RST_PIN >= 0
  oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);
  #else
  oled.begin(&Adafruit128x64, I2C_ADDRESS);
  #endif
  oled.setFont(Adafruit5x7);

  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) {
  switch (number) {
    case 1: tmrpcm.play("m_one.wav"); delay(453); break;
    case 2: tmrpcm.play("m_two.wav"); delay(499); break;
    case 3: tmrpcm.play("m_three.wav"); delay(406); break;
    case 4: tmrpcm.play("m_four.wav"); delay(401); break;
    case 5: tmrpcm.play("m_five.wav"); delay(354); break;
    case 6: tmrpcm.play("m_six.wav"); delay(401); break;
    case 7: tmrpcm.play("m_seven.wav"); delay(633); break;
    case 8: tmrpcm.play("m_eight.wav"); delay(360); break;
    case 9: tmrpcm.play("m_nine.wav"); delay(580); break;
    case 0: tmrpcm.play("m_zero.wav"); delay(610); break;
  }
}

회로도

음성 알림 기능이 있는 자동 체온 측정기

제조공정

  1. 통합 QR, RFID, 온도 검증 출입 통제 시스템
  2. 라즈베리 파이에서 Maxim 1-Wire 센서와 DS2482 I2C 브리지로 온도 측정하기
  3. 라즈베리 파이와 파이썬으로 원격 온도 센서 만들기 – 단계별 가이드
  4. 라즈베리 파이에서 EzTemp로 매끄러운 온도 및 습도 모니터링
  5. DIY 홈브루 온도 제어: 아두이노로 모니터링 및 조절하기
  6. 실험실 및 과학 실험을 위한 정밀 열전대 측정 및 로깅
  7. 라즈베리 파이 & DS18B20으로 다중 센서 온도 & 조도 모니터링 시스템 구축
  8. 복합재 구조물 및 접착 본드라인 내부 정밀 온도 모니터링
  9. 측정 공구 16종 완벽 가이드: 종류, 용도, 선택 요령
  10. 수동 및 자동 변속기 동력 전달 원리: 알기 쉬운 개요