|
本帖最后由 sinbadcool 于 2014-2-26 11:18 编辑
2014年2月10日
小伢的第409天
过完春节从武汉回到北京的第3天
第一次发烧了
拿水银温度计给小伢凉体温
怎么都不愿意
喝了退烧药
折腾了好几次
才量出了体温
还好温度已经降下来了
想到原来有个朋友的小伢发烧
妈妈用电子体温计一下就测出了体温
于是上淘宝一搜
果真好多
但价格都要2、300元
但既然是红外线的温度计
就一定有传感器
还是淘宝
果然
找到了这个台湾燃太的TN901红外测温模块
150元。
OK
那就DIY一个红外体温计吧!
焊上引线
拿泡棉把PCB包住
防止裸露的元件短路
用两个零件给夹着
固定住
红外测温模块的安装就差不多了
准备好必要的arduino UNO、扩展板和oled
还有金属零件
一顿锁螺丝
一顿拆啊装装啊拆
(都是探索者的东西,暂时不一一打广告啦)
大功告成!
来个三视图:正面
背面。性感的绕线。
OLED显示屏。现在显示的是室温。
红外温度探头和距离传感器
暴露了凌乱的走线
最关键的程序在这里
arduino万岁
极大的参考了这些资料,表示致敬:
TN901的库:[深入浅出Energia开发第二讲]如何自己编写Arduino支持的C++类库
OLED的库:MultiLCD,https://github.com/stanleyhuangyc/MultiLCD - #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);
- }
复制代码
好了
谁发个烧
让我来测一测吧
36.02度
冻着了吧
摄影师亚伦老坦克:来,作者亮个像。http://weibo.com/aaronstory
作者Sinbadz.Mao:亮个毛啊。http://weibo.com/sinbadcool
希所有的小朋友都健康快乐的成长
少发烧
少打针
少吃药哦^_^d |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|