自从疫情爆发以来,额温Q成了稀缺物品,部分企业正在逐渐复工,可谓一Q是难求!各大平台电商也是货源紧缺
但既然是红外线的温度计,就一定有传感器,还是淘宝,果然,找到了这个台湾燃太的TN901红外测温模块150元。OK,那就DIY一个红外体温计吧!
焊上引线
拿泡棉把PCB包住防止外露的元件短路
用两个零件给夹着
固定住
红外测温模块的安装就差不多了
准备好必要的arduino UNO、扩展板和oled
还有金属零件
一顿锁螺丝
一顿拆啊装装啊拆
(都是探索者的东西,就不一一广告啦)
大功告成!
来个三视图:正面
背面
OLED显示屏。现在显示的是室温。
红外温度探头和距离传感器
暴露了凌乱的走线
最关键的程序在这里
#include <TN901.h> //TN901的库
TN901 tn; //创建TN901的对象
#include <Arduino.h>
#include <Wire.h>
#include <MicroLCD.h> //OLED的库
LCD_SSD1306 lcd; /* for SSD1306 OLED module */
static const PROGMEM uint8_t tick[16 * 16 / 8] =
{0x00,0x80,0xC0,0xE0,0xC0,0x80,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0x78,0x30,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x1F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00}; //显示勾
static const PROGMEM uint8_t cross[16 * 16 / 8] =
{0x00,0x0C,0x1C,0x3C,0x78,0xF0,0xE0,0xC0,0xE0,0xF0,0x78,0x3C,0x1C,0x0C,0x00,0x00,0x00,0x30,0x38,0x3C,0x1E,0x0F,0x07,0x03,0x07,0x0F,0x1E,0x3C,0x38,0x30,0x00,0x00}; //显示叉
#include "LedControl.h" //8*8点阵的库
LedControl lc=LedControl(12,11,13,1);
#include <MsTimer2.h> //定时器的库
void setup()
{
pinMode(A0,INPUT); //设置距离传感器的端口
tn.Init(8,2,7); //tn901初始化
lcd.begin(); //oled启动
lcd.setFont(FONT_SIZE_LARGE); //设置字体尺寸
lcd.setCursor(0, 3);
lc.shutdown(0,false); //8*8点阵启动
lc.setIntensity(0,8);
lc.clearDisplay(0);
MsTimer2::set(100, flash); // 500ms period //定时器设置,主要让8*8点阵产生呼吸灯效果
MsTimer2::start();
ShowHeart();//8*8点阵上显示个心形
}
void loop()
{
static int temp;
int t;
boolean mode=false; //true - BODY; false - ROOM
tn.Read(); //读取TN901的温度
mode=!digitalRead(A0); //检测距离传感器是否接近人体
if(mode) //如果接近人体
{
t=tn.OT+180; //tn.OT读取人体温度
if(temp<t)temp=t;
}
else temp=tn.ET-400; //tn.ET,读取环境温度
LCD_Value(temp,mode); //oled上显示人体温度或环境温度
delay(200); //延时,以便TN901刷新
}
void LCD_Value(int temp,boolean mode)
{
lcd.setCursor(30, 3);
lcd.print((float)temp/100);
lcd.print(" C");
if(mode) lcd.draw( tick, 54, 48, 16, 16);
else lcd.draw(cross, 54, 48, 16, 16);
}
void flash()
{
static int i=0;
static boolean d=true;
if(d)i++;
else i--;
if(i==15 || i==0) d=!d;
lc.setIntensity(0,i);
}
void ShowHeart()
{
lc.setRow(0,0,B00110000);
lc.setRow(0,1,B01111000);
lc.setRow(0,2,B01111100);
lc.setRow(0,3,B00111110);
lc.setRow(0,4,B00111110);
lc.setRow(0,5,B01111100);
lc.setRow(0,6,B01111000);
lc.setRow(0,7,B00110000);
}
好了
谁发个烧
让我来测一测吧
【以上DIY为转帖,出自网络,如侵删】
那么处于疫情中的你有什么好的DIY想法吗
|