Automatische Temperatuurmeting met Spraakwaarschuwingen
Onderdelen en Benodigdheden
| Arduino UNO | × | 1 |
| UTSOURCE Elektronische Onderdelen | × | 1 |
Over dit Project
De afgelopen tijd worstelt de hele wereld met het coronavirus (COVID-19). De eerste controle op besmette personen (of verdachte gevallen) is het meten van de lichaamstemperatuur. Dit project is ontworpen om die temperatuur automatisch te meten en het resultaat per spraak weer te geven.
Laten we beginnen!
Stap 1: Onderdelenlijst
Benodigde componenten voor dit project:
- Arduino UNO
- SD-kaartmodule
- SD-kaart 8GB
- Versterker PAM8403 en luidspreker
- Ultrasoon sensor HC-SR04
- OLED 128x64 display
- Breadboard kabels
- Infrarood thermometer GY-906 (MLX90614)
Let op: Vanwege de hoge vraag kan de GY-906 sensor soms moeilijk te verkrijgen zijn.
Stap 2: Schakelingontwerp
Bekijk het schakelingsschema. Het systeem meet de temperatuur via de infrarood thermometer GY-906, toont het resultaat op de OLED 128x64 en geeft het resultaat per spraak via de luidspreker. De audiobestanden komen van de SD-kaart en worden versterkt door de PAM8403.
Hoofdproces:
- Gebruiker waait met de hand voor de ultrasoon sensor (afstand ~10 cm)
- Systeem groet per spraak: "Welkom bij het temperatuurmeetsysteem, leg uw hand of voorhoofd voor de sensor op ongeveer 2 cm"
- Gebruiker plaatst hand/voorhoofd voor de sensor
- Systeem spreekt de temperatuur uit en toont deze op het display. Bijvoorbeeld: "Uw temperatuur is 36,5 graden Celsius. Uw temperatuur lijkt normaal, blijf gezond!"
Stap 3: Behuizing Maken en Aansluiten
De behuizing is gemaakt van 3 mm MDF hout, gelasercut. Ontwerpbestanden zijn beschikbaar via de meegeleverde link. Na het snijden monteren we alle onderdelen in de behuizing en maken de bedrading volgens het schema.
Stap 4: Code en Download
De Arduino code voert de volgende taken uit:
- Detecteer aanwezige persoon via ultrasoon sensor
- Speel welkomstbericht af, vraag om hand/voorhoofd voor sensor te plaatsen
- Meet temperatuur, speel resultaat en commentaar af
Code download: https://bit.ly/2Za1mjZ
Audiobestanden (8-bit, mono, 11025 Hz): https://bit.ly/3aZpGWJ
Stap 5: Testen
Sluit de voeding aan en test het systeem. Een boeiend project dat temperatuur meet en per spraak rapporteert!
Code
// www.youtube.com/c/engineer2you
#include <SD.h>
#define SD_ChipSelectPin 10
#include <TMRpcm.h>
#include <Adafruit_MLX90614.h>
// OLED bibliotheken
#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 initialisatie
#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 kaart fail");
return;
} else {
Serial.println("SD ok");
oled.clear();
oled.println("SD kaart ok");
}
delay(1000);
tmrpcm.play("m_wel.wav");
tmrpcm.volume(1);
oled.clear();
oled.set2X();
oled.println("");
oled.println(" Welkom");
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
mlx.begin();
delay(10000);
}
void loop() {
// Afstand meten
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH, 23529);
distance = duration * 0.034 / 2;
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("°C");
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;
}
}
Schema
Schema-afbeelding beschikbaar in de originele projectdocumentatie.
Productieproces
- Geïntegreerde QR, RFID en Temperatuurverificatie Toegangscontrolesysteem
- Temperatuurmeting op Raspberry Pi met Maxim 1-Wire sensoren en DS2482 I2C-brug
- Een externe temperatuursensor bouwen met Raspberry Pi en Python – Stap-voor-stap handleiding
- Naadloze temperatuur- en vochtigheidsbewaking op Raspberry Pi met EzTemp
- DIY thuisbrouw temperatuurcontrole: Monitoren & regelen met Arduino
- Precieze thermocouple-metingen en logging voor lab- en wetenschappelijke experimenten
- Een Multi-sensor Temperatuur- & Lichtmonitoringssysteem Bouwen met Raspberry Pi & DS18B20
- Arduino temperatuur- en vochtigheidslogger met DHT11 en Ethernet Shield
- Meetinstrumenten: typen, toepassingen en best practices
- Hoe Handmatige en Automatische Transmissies Vermogen Overdragen: Een Duidelijk Overzicht
- Nauwkeurige temperatuurbewaking binnen composietstructuren en lijmlaagverbindingen