Hardware components | ||||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
嗨 大家好 我來自台灣 我是一名高中生
因為最近COVID-19疫情的關係, 外面的額溫槍不是缺貨就是很昂貴
所以打算自己買材料自己做一個額溫槍, 雖然精準度沒有到非常準
不過可以做個參考的依據, 外型是自己設計的 雖然外表大了一點 不過還是很實用呢!我是使用mlx906跟HC-SRO4作為這次側量的感測器
我使用超音波感測器是用來做距離監測給予溫度補償的, 補償的數值是我測出來的, 你們也可以試著改改看 覺得很準的話 在分享給大家唷!
這個額溫槍內建兩種模式 1.Room MODE(房間模式) 👉可以測量室內溫度或物體溫度 2.Body MODE(額溫模式) 👉可以測量額溫
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_MLX90614.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
const byte trigPinA=12;//
const byte echoPinA=13;
int Average=10;//
int cm6=5.5;//
int cm5=5.2;//
int cm4=4.8;//
int cm3=4.4;//
int cm2=4.5;//
int buzzer=4;//
void setup()
{
lcd.begin(16,2);
pinMode(2,INPUT_PULLUP);//Button1
pinMode(3,INPUT_PULLUP);//Button2
pinMode(buzzer,OUTPUT);//
pinMode(trigPinA, OUTPUT);
Serial.begin(9600);
Serial.println("MLX90615 infra-red temperature sensor test");
mlx.begin();
}
void loop()
{
unsigned long A=pingA()/58;
int Button1=digitalRead(2);//Button1
int Button2=digitalRead(3);//Button2
if(Button1==LOW)//[Room]
{
Serial.println("Room MODE");
lcd.setCursor(2,1);
lcd.print("[ROOM__MODE]");
if(Button2==LOW)
{
lcd.setCursor(2,1);
lcd.print("[ROOM__MODE]");
tone(buzzer,1000);
delay(100);
noTone(buzzer);
delay(50);
float Temp = 0;
for(int i=0; i<Average; i++)
{
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp=");
Temp += mlx.readObjectTempC();
lcd.println(mlx.readObjectTempC(),1);
lcd.setCursor(11,0);
lcd.print((char) 0xDF);
lcd.print("C");
Serial.print("Temp: ");
Serial.print(mlx.readObjectTempC(),1);
Serial.println("C");
Serial.println();
delay(100);
}
Temp = Temp/Average;
for(int i=0;i<3;i++)
{
tone(buzzer,1000);
delay(100);
noTone(buzzer);
delay(50);
}
noTone(buzzer);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp=");
lcd.println(Temp,1);
lcd.setCursor(11,0);
lcd.print((char) 0xDF);
lcd.print("C");
}
if(Button2==HIGH)
{
}
}
if(Button1==HIGH) //[Body]
{
Serial.println("Body MODE");
lcd.setCursor(2,1);
lcd.print("[Body__MODE]");
Serial.print("HC-SR04=");
Serial.print(A);
Serial.print("cm");
delay(100);
if(Button2==LOW)
{
lcd.setCursor(2,1);
lcd.print("[Body__MODE]");
tone(buzzer,1000);
delay(100);
noTone(buzzer);
delay(50);
if(A>=7)
{
lcd.clear();
lcd.setCursor(7,0);
lcd.print("OL");
}
if(A==6)
{
float Temp = 0;
for(int i=0; i<Average; i++)
{
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp=");
Temp += mlx.readObjectTempC();
lcd.println(mlx.readObjectTempC(),1);
lcd.setCursor(11,0);
lcd.print((char) 0xDF);
lcd.print("C");
Serial.print("Temp: ");
Serial.print(mlx.readObjectTempC(),1);
Serial.println("C");
Serial.println();
delay(100);
}
Temp = Temp/Average;
for(int i=0;i<3;i++)
{
tone(buzzer,1000);
delay(100);
noTone(buzzer);
delay(50);
}
noTone(buzzer);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp=");
lcd.println(Temp+cm6,1);
lcd.setCursor(11,0);
lcd.print((char) 0xDF);
lcd.print("C");
}
if(A==5)
{
float Temp = 0;
for(int i=0; i<Average; i++)
{
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp=");
Temp += mlx.readObjectTempC();
lcd.println(mlx.readObjectTempC(),1);
lcd.setCursor(11,0);
lcd.print((char) 0xDF);
lcd.print("C");
Serial.print("Temp: ");
Serial.print(mlx.readObjectTempC(),1);
Serial.println("C");
Serial.println();
delay(100);
}
Temp = Temp/Average;
for(int i=0;i<3;i++)
{
tone(buzzer,1000);
delay(100);
noTone(buzzer);
delay(50);
}
noTone(buzzer);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp=");
lcd.println(Temp+cm5,1);
lcd.setCursor(11,0);
lcd.print((char) 0xDF);
lcd.print("C");
}
if(A==4)
{
float Temp = 0;
for(int i=0; i<Average; i++)
{
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp=");
Temp += mlx.readObjectTempC();
lcd.println(mlx.readObjectTempC(),1);
lcd.setCursor(11,0);
lcd.print((char) 0xDF);
lcd.print("C");
Serial.print("Temp: ");
Serial.print(mlx.readObjectTempC(),1);
Serial.println("C");
Serial.println();
delay(100);
}
Temp = Temp/Average;
for(int i=0;i<3;i++)
{
tone(buzzer,1000);
delay(100);
noTone(buzzer);
delay(50);
}
noTone(buzzer);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp=");
lcd.println(Temp+cm4,1);
lcd.setCursor(11,0);
lcd.print((char) 0xDF);
lcd.print("C");
}
if(A==3)
{
float Temp = 0;
for(int i=0; i<Average; i++)
{
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp=");
Temp += mlx.readObjectTempC();
lcd.println(mlx.readObjectTempC(),1);
lcd.setCursor(11,0);
lcd.print((char) 0xDF);
lcd.print("C");
Serial.print("Temp: ");
Serial.print(mlx.readObjectTempC(),1);
Serial.println("C");
Serial.println();
delay(100);
}
Temp = Temp/Average;
for(int i=0;i<3;i++)
{
tone(buzzer,1000);
delay(100);
noTone(buzzer);
delay(50);
}
noTone(buzzer);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp=");
lcd.println(Temp+cm3,1);
lcd.setCursor(11,0);
lcd.print((char) 0xDF);
lcd.print("C");
}
if(A==2)
{
float Temp = 0;
for(int i=0; i<Average; i++)
{
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp=");
Temp += mlx.readObjectTempC();
lcd.println(mlx.readObjectTempC(),1);
lcd.setCursor(11,0);
lcd.print((char) 0xDF);
lcd.print("C");
Serial.print("Temp: ");
Serial.print(mlx.readObjectTempC(),1);
Serial.println("C");
Serial.println();
delay(100);
}
Temp = Temp/Average;
for(int i=0;i<3;i++)
{
tone(buzzer,1000);
delay(100);
noTone(buzzer);
delay(50);
}
noTone(buzzer);
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Temp=");
lcd.println(Temp+cm2,1);
lcd.setCursor(11,0);
lcd.print((char) 0xDF);
lcd.print("C");
}
}
}
}
unsigned long pingA()
{
digitalWrite(trigPinA, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinA, LOW);
return pulseIn(echoPinA, HIGH);
}
Comments