搜索
bottom↓
12
返回列表 发新帖
楼主: yuyu87

yuyu87的KL25开源项目进行中....[儿童用红外耳腔温度计]

  [复制链接]

出20入186汤圆

 楼主| 发表于 2015-1-13 17:04:43 | 显示全部楼层
carollim 发表于 2015-1-13 16:37
想弄个温度监控    比如婴儿感冒了在蚊帐顶部装个温度计    每5分钟检测一次    通过2.4G传回电脑上位机 ...

如果远了探测的是那一个范围的温度,而不是额头上的,

出0入0汤圆

发表于 2015-1-15 17:04:29 | 显示全部楼层
楼主可不可分享在PCB上加二维码的方法,我做出都不能识别

出0入0汤圆

发表于 2015-1-15 17:15:18 | 显示全部楼层
liliuqun 发表于 2015-1-15 17:04
楼主可不可分享在PCB上加二维码的方法,我做出都不能识别

可以参考这个帖子http://www.amobbs.com/thread-3222368-1-1.html

出0入0汤圆

发表于 2015-1-15 20:58:50 | 显示全部楼层
这个项目不错 ,有很大的商业价值 !

出0入0汤圆

发表于 2015-1-15 22:20:56 来自手机 | 显示全部楼层
这个很有实用价值,支持

出0入0汤圆

发表于 2015-1-15 22:24:58 | 显示全部楼层
多谢楼主分享,收藏了

出0入0汤圆

发表于 2015-1-15 22:59:05 | 显示全部楼层
yuyu87 发表于 2014-12-31 09:21
我所的这个价格90元还是保守的,淘宝上的当然不能买的,全是假的
RS等一个网站上有卖,120元左右, ...

国内有代理吗,淘宝没看到医用精度的

出0入0汤圆

发表于 2015-1-15 23:01:08 | 显示全部楼层
找到了这家,不知道怎样
http://www.mlx90615.com/contact/

出0入0汤圆

发表于 2015-1-15 23:04:10 | 显示全部楼层
又找到一个,这个应该是官方的
http://china.melexis.com/contact.aspx

出0入0汤圆

发表于 2015-1-16 10:06:03 | 显示全部楼层
MLX90615 如果不用 透镜 距离很近,并且测试距离也会影响温度的,也比较便宜,20多元吧。MLX9064有那种带 透镜 一体的,比较好一些

出0入0汤圆

发表于 2015-1-16 12:34:59 | 显示全部楼层
期待楼主作品,做好后我也做一个

出0入0汤圆

发表于 2015-1-16 13:24:03 | 显示全部楼层
现在很多电子产品,外壳的成本反而更高

出20入186汤圆

 楼主| 发表于 2015-1-23 15:18:14 | 显示全部楼层
最新更新:

板子到手后已有一个月了,之前进行了一些简单的IO测试,还简单,

之后再进行I2C操作,看手册,看了也没有啥问题,可后来测试时一直出不来想要的波形,硬I2C不行就用软I2C,

然后就开始搞MLX90614,结果搞了半个月时间(下班业余时间)也没搞出来,用I2C访问,地址读,写有应答,可就是读取数据时没有读取到想要的数据

一直搞到今天早上,实在没有勇气了,准备放弃啦

后来再看一遍手册,发现手册有关于SCL时钟及SDA时钟,有说关于超时问题,说是多少uS高电平超时,

不就是说I2C时钟频率么,

我发现自己的I2C频率有些慢,于是快一点,弄到80KHZ左右,奇迹出现了,出现想要的波形了

下边上传一些调试的数据图片及视频:

关于软I2C代码,

/*------------------------------------------------
                    启动IIC总线
------------------------------------------------*/

void Start(void)
{
   Sda1;
   Sleep();
   Scl1;
   Sleep();
   Sda0;
   Sleep();
   Scl0;
}
///*------------------------------------------------
//                    停止IIC总线
//------------------------------------------------*/
void Stop(void)
{
   Sda0;
   Sleep();
   Scl1;
   Sleep();
   Sda1;
   Sleep();
   Scl0;
}
///*------------------------------------------------
//                   应答IIC总线
//------------------------------------------------*/
   void Ack(void)
   {
    Sda0;
        Sleep();
        Scl1;
        Sleep();
        Scl0;
        Sleep();
        }
///*------------------------------------------------
//                 非应答IIC总线
//------------------------------------------------*/
//void NoAck(void)
//{
//         Sda1;
//         Sleep();
//         Scl1;
//         Sleep();
//         Scl0;
//         Sleep();
//}
// /*------------------------------------------------
//              发送一个字节
//------------------------------------------------*/
  void I2c_Send(unsigned char Data)//
{
          unsigned char BitCounter=8;
          unsigned char temp;
          do
                    {
                        temp=Data;
                        Scl0;
                        Sleep();
                        if((temp&0x80)==0x80)
                                   Sda1;
                        else
                                   Sda0;
                        Sleep();
                        Scl1;
                        temp=Data<<1;
                        Data=temp;
                        BitCounter--;
                        Sleep();
                        }
          while(BitCounter);
          Scl0;

}
//          /*------------------------------------------------
//               读入一个字节并返回
//------------------------------------------------*/
  unsigned char I2c_Read(void)
{
        unsigned char temp=0;
        unsigned char temp1=0;
        unsigned char BitCounter=8;
       
        Sda1;
        Sleep();
        do
         {
                Sleep();
          Scl0;
                Sleep();
          Scl1;
                Sleep();
          if(GPIOE_PDIR&BIT25)
             temp=temp|0x01;
          else
             temp=temp&0xfe;
       
          if(BitCounter-1)
             {
                  temp1=temp<<1;
                  temp=temp1;
                  }
                  BitCounter--;
                 }
        while(BitCounter);
        Scl0;
        Sleep();
        return(temp);
}
   unsigned char Busy(void)        //读忙标记 是否应答
{
        unsigned char temp;
        Scl0;
        Sleep();
        Sda1;
        Sleep();
        Scl1;
        Sleep();
        temp=GPIOE_PDIR&BIT25;
//        Sleep();
        Scl0;
        if(temp)
                temp=1;
        return temp;
}       




==============================================

读取MLX90614 RAM数据代码  RAM 中06是环境温度数据,07是目标温度数据,如果是双温度的,08是目标温度2

uint16 Read_cc(unsigned char add){        //读取RAM数据
        unsigned char Data1;
        unsigned char Data2;
        unsigned char Data3;
        unsigned char Flg;                //数据低位,高位,校检码,状态码
        Flg=1;
        Start();
        I2c_Send(0xB4);        //B4 7地址+1Wr  广播地址,默认地址0x5A          1011010  + 0
        //B4 地址5A+写0
        if (Busy()==0){        //应答了
                //send_byte(01);
                I2c_Send(add);        //000x xxxx  00000111 07h Tobj1 温度1
                //命令          06读环境温度  07读目标温度   
                //                20 读取EEPROM 最大值   21h 读取最小值        22PWM设定 23传输温度上下限 2E地址
                if (Busy()==0){          //继续读取
                        //send_byte(02);
                        Start();        //重新初始化
                        I2c_Send(0xB5); //B5 地址+读取
                        if (Busy()==0){
                                //send_byte(03);
                                Data1=I2c_Read();        //数据低字节
                                Ack();        /*//读取后应答        */
                                Data2=I2c_Read();        //数据高字节
                                Ack();
                                Data3=I2c_Read();        //PEC CRC8校验码
                                Ack();
                                Stop();
                                Flg=0;        //完毕,成功!
                        }
                }
        }
        if(Flg){           //未应答,复位
                Stop();
        }
        return   (Data2<<8) | Data1 ;
}



===============================
上边代码基本上可以直接读取MLX90614的温度数据了,

KL25的硬I2C实在搞不定了,郁闷啊
以下是代码,有问题

初始化I2C

void InitI2C(void){                //初始化I2C相关功能
        SIM_SCGC5=SIM_SCGC5_PORTE_MASK|SIM_SCGC5_PORTB_MASK;                                //PORTE PORTB
        PORTE_PCR24=(5<<PORT_PCR_MUX_SHIFT)|PORT_PCR_PE_MASK;                        //功能5 I2C_scl         pe24 pe25       
        PORTE_PCR25=(5<<PORT_PCR_MUX_SHIFT)|PORT_PCR_PE_MASK;                        //功能5 I2C_sda 使能上拉

        SIM_SCGC4=SIM_SCGC4_I2C0_MASK;                                //I2C0 ENA
        I2C0_F=0x27;                //24Mhz/(1*480)=50khz
        I2C0_C1=I2C_C1_IICEN_MASK|I2C_C1_IICIE_MASK;                //开启I2C|开启中断

        NVIC_EnableIRQ(I2C0_IRQn);

}

然后I2C中断,搞不定,也不贴了,




下一贴再上传图片及视频

出20入186汤圆

 楼主| 发表于 2015-1-23 15:19:47 | 显示全部楼层
继楼上

上边代码中4个宏的声明


#define Sda1 GPIOE_PDOR|=BIT25
#define Sda0 GPIOE_PDOR&=~BIT25
#define Scl1 GPIOE_PDOR|=BIT24
#define Scl0 GPIOE_PDOR&=~BIT24

出20入186汤圆

 楼主| 发表于 2015-1-23 15:21:09 | 显示全部楼层
续楼上

宏的声明

#define BIT0        1
#define BIT1        (1<<1)
#define BIT2        (1<<2)
#define BIT3        (1<<3)
#define BIT4        (1<<4)
#define BIT5        (1<<5)
#define BIT6        (1<<6)
#define BIT7        (1<<7)
#define BIT8        (1<<8)
#define BIT9        (1<<9)
#define BIT10        (1<<10)
#define BIT11        (1<<11)
#define BIT12        (1<<12)
#define BIT13        (1<<13)
#define BIT14        (1<<14)
#define BIT15        (1<<15)
#define BIT16        (1<<16)
#define BIT17        (1<<17)
#define BIT18        (1<<18)
#define BIT19        (1<<19)
#define BIT20        (1<<20)
#define BIT21        (1<<21)
#define BIT22        (1<<22)
#define BIT23        (1<<23)
#define BIT24        (1<<24)
#define BIT25        (1<<25)
#define BIT26        (1<<26)
#define BIT27        (1<<27)
#define BIT28        (1<<28)
#define BIT29        (1<<29)
#define BIT30        (1<<30)
#define BIT31        (1<<31)

别的文件就不需要引用了,
只需引用
#include "MKL25Z4.h"
#include "core_cm0plus.h"
即可

出20入186汤圆

 楼主| 发表于 2015-1-23 15:23:49 | 显示全部楼层
读取的温度数据需要转换一下,见下边图片及手册说明

温度单位是以0.02为一个单位,转换成摄氏度需要除以50,再减去绝对零度,即273.15后OK
我是得到5个数据后平均一下,
                                        tb[tc]=((dat[1]<<8)|dat[0])/50-273.15;
                        tc++;
                                taa=(ta[0]+ta[1]+ta[2]+ta[3]+ta[4])/5;
                                tobj=(tb[0]+tb[1]+tb[2]+tb[3]+tb[4])/5+tobj_plus;
                        if(tc>4){
                                tc=0;

出20入186汤圆

 楼主| 发表于 2015-1-23 15:32:21 | 显示全部楼层
在MDK环境中得到的数据



MLX90614小板


调试板,用的是SWD小板下载调试




温度转换方法


数据手册上关于波形说明


MDK数据


示波器测试


实测波形


调试小板

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出20入186汤圆

 楼主| 发表于 2015-1-23 15:35:26 | 显示全部楼层

MDK测试环境中
最终得到的温度数据,

图中ta是环境温度,tb是目标温度,dat是I2C读取的原始数据

taa已转换环境温度,tobj是已转换目标温度数据

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出20入186汤圆

 楼主| 发表于 2015-1-23 15:50:52 | 显示全部楼层




MLX90614红外  示波器实测通讯波形+MDK运行环境读取的温度数据


说明:

MLX90614测环境温度很准的,基本不跳,测红外目标温度我是这样试的
额头贴上去,结果温度大幅飙升到70度,不过我继续贴着时温度慢慢降下来,差不多30秒才降到正常体温36度左右
然后一直停留在36.85,基本不跳,挂续贴着额头持续3分钟仍然不跳,拿来马上温度下降

不知道为什么放上去的瞬间温度为什么升那么高,过半分钟后温度才降到正常体温

还有一个视频较大,传不上来,等到上传到youku再发连接,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-1-23 16:02:36 | 显示全部楼层
yuyu87 发表于 2015-1-23 15:50
MLX90614红外  示波器实测通讯波形+MDK运行环境读取的温度数据

项目完成了吧,恭喜楼主!

出0入0汤圆

发表于 2015-1-23 16:05:49 | 显示全部楼层
这个红外眼睛看得见吗?

出0入0汤圆

发表于 2015-1-23 16:10:12 | 显示全部楼层
yondyanyu 发表于 2015-1-23 16:05
这个红外眼睛看得见吗?

红外当然眼睛看不到了,传感器能测到

出20入186汤圆

 楼主| 发表于 2015-1-23 16:15:00 | 显示全部楼层
superrf 发表于 2015-1-23 16:02
项目完成了吧,恭喜楼主!

基本完成,还没上传视频,

离我项目要求其实还差一点点,

本来要求的是LCD显示,

现在只在MDK中显示结果

出0入0汤圆

发表于 2015-1-23 16:20:10 | 显示全部楼层
yuyu87 发表于 2015-1-23 16:15
基本完成,还没上传视频,

离我项目要求其实还差一点点,

建议改成串口输出

出20入186汤圆

 楼主| 发表于 2015-1-23 16:21:22 | 显示全部楼层
视频: KL25开源项目,MLX90614红外测 MDK运行环境的温度数据
http://player.youku.com/player.php/sid/XODc3OTQ5OTUy/v.swf


视频: KL25开源项目,MLX90614红外测 MDK运行环境的温度数据
http://player.youku.com/player.php/sid/XODc3OTQ4NzQ0/v.swf


视频: KL25开源项目,MLX90614红外测温波形图
http://player.youku.com/player.php/sid/XODc3OTQ3NTM2/v.swf

出20入186汤圆

 楼主| 发表于 2015-1-23 16:22:33 | 显示全部楼层
superrf 发表于 2015-1-23 16:20
建议改成串口输出

没有精力了啊,
等过几天了重新买芯片,把主芯片换成MLX90615,再加上LCD,
做成一个真正的成品吧,

出0入0汤圆

发表于 2015-1-23 16:24:32 | 显示全部楼层
yuyu87 发表于 2015-1-23 16:22
没有精力了啊,
等过几天了重新买芯片,把主芯片换成MLX90615,再加上LCD,
做成一个真正的成品吧, ...

这个好,强烈支持

出0入0汤圆

发表于 2015-1-23 21:32:39 | 显示全部楼层
解决温度 飙升问题了吗

出20入186汤圆

 楼主| 发表于 2015-1-24 12:57:06 | 显示全部楼层
Halley 发表于 2015-1-23 21:32
解决温度 飙升问题了吗

没有解决,不过我上次看一个成品的额头体温计好像也这样,放额头5秒钟后才稳定输出温度

出0入0汤圆

发表于 2015-1-24 14:28:59 | 显示全部楼层
yuyu87 发表于 2015-1-24 12:57
没有解决,不过我上次看一个成品的额头体温计好像也这样,放额头5秒钟后才稳定输出温度 ...

                用的博朗,2s内

出0入0汤圆

发表于 2015-1-24 18:04:48 | 显示全部楼层
yuyu87 发表于 2015-1-24 12:57
没有解决,不过我上次看一个成品的额头体温计好像也这样,放额头5秒钟后才稳定输出温度 ...

可以连续测量温度,相对稳定了,蜂鸣器提示一声后显示结果

出0入0汤圆

发表于 2015-1-24 23:39:22 | 显示全部楼层
不错,期待后续的分享。如果需要贴着测30S,还不如考虑用PT1000,小白建议啊

出0入0汤圆

发表于 2015-1-25 09:44:35 来自手机 | 显示全部楼层
yuxiang2 发表于 2015-1-24 23:39
不错,期待后续的分享。如果需要贴着测30S,还不如考虑用PT1000,小白建议啊 ...

pt1000测体温 精度不够吧

出0入0汤圆

发表于 2015-1-25 21:10:29 | 显示全部楼层
传感器的成本太高了,否则就完美了

出0入0汤圆

发表于 2015-1-31 16:25:54 | 显示全部楼层
实用,好东西

出0入0汤圆

发表于 2015-1-31 16:33:14 | 显示全部楼层
看到楼主说完成了,特地过来恭喜楼主学习来了。楼主辛苦了。

出0入0汤圆

发表于 2015-1-31 16:42:34 | 显示全部楼层
楼主传感器买了?帮着买个呗,或提供下地址,多谢

出0入0汤圆

发表于 2015-1-31 23:08:45 | 显示全部楼层
maxiang1985 发表于 2015-1-31 16:42
楼主传感器买了?帮着买个呗,或提供下地址,多谢

同求购买方式,想买到正品

出0入0汤圆

发表于 2015-2-1 11:14:16 | 显示全部楼层
传感器好贵,团购吧

出0入0汤圆

发表于 2015-2-1 14:50:29 | 显示全部楼层
yuxiang2 发表于 2015-1-24 23:39
不错,期待后续的分享。如果需要贴着测30S,还不如考虑用PT1000,小白建议啊 ...

你这个也太打击楼主积极性了

出0入0汤圆

发表于 2015-2-1 14:51:30 | 显示全部楼层
楼主,传感器哪里买的,多少钱,介绍一下吧

出90入4汤圆

发表于 2015-2-1 15:06:37 | 显示全部楼层
LZ :能提供个购买渠道吗?我希望找个精度再高电的

出0入0汤圆

发表于 2015-2-1 23:52:03 来自手机 | 显示全部楼层
快快做出来,也diy一个试试。

出20入186汤圆

 楼主| 发表于 2015-2-2 08:50:50 | 显示全部楼层
ccrt 发表于 2015-2-1 14:51
楼主,传感器哪里买的,多少钱,介绍一下吧

http://www.ickey.cn/searchIndex2.php?keyword=mlx90615

出0入0汤圆

发表于 2015-2-2 09:09:32 | 显示全部楼层
不错 很有创意

出0入0汤圆

发表于 2015-2-2 10:41:26 | 显示全部楼层
莫老大搞个传感器团购吧,100个以上只要50块钱

出0入0汤圆

发表于 2015-2-2 20:37:31 | 显示全部楼层
yuyu87 发表于 2015-2-2 08:50
http://www.ickey.cn/searchIndex2.php?keyword=mlx90615

谢谢啦

出0入0汤圆

发表于 2015-2-2 21:51:43 | 显示全部楼层
这传感器成本不低啊,好贵的温度计

出0入0汤圆

发表于 2015-2-3 00:15:58 | 显示全部楼层
关注,正好家有小朋友

出0入0汤圆

发表于 2015-2-3 08:51:33 | 显示全部楼层
关注,很实用。

出0入0汤圆

发表于 2015-2-3 16:17:05 | 显示全部楼层
数量少的太贵了

出0入0汤圆

发表于 2015-2-3 22:58:11 | 显示全部楼层
这个项目实用啊!

出0入0汤圆

发表于 2015-2-4 13:55:56 | 显示全部楼层
这个我用过,读I2C没什么难度,基本上就是标定比较麻烦,要用医用黑体来校准,

出0入0汤圆

发表于 2015-2-5 19:03:09 | 显示全部楼层
dso_2012 发表于 2015-2-4 13:55
这个我用过,读I2C没什么难度,基本上就是标定比较麻烦,要用医用黑体来校准, ...

标定后会不会有温漂

出0入0汤圆

发表于 2015-2-7 23:08:32 | 显示全部楼层
还有二维码啊,高大上了

出0入0汤圆

发表于 2015-2-8 09:40:03 | 显示全部楼层
jinyi7016 发表于 2015-2-7 23:08
还有二维码啊,高大上了

啥,这是测温度的,不是扫二维码的

出0入0汤圆

发表于 2015-2-8 10:29:14 | 显示全部楼层
holts2 发表于 2015-2-8 09:40
啥,这是测温度的,不是扫二维码的

我是说pcb上的二维码......

出0入0汤圆

发表于 2015-2-8 11:59:16 来自手机 | 显示全部楼层
我想知道校准时,用什么精确到更好一级的温度呢

出0入0汤圆

发表于 2015-2-11 16:55:42 | 显示全部楼层
我家有小孩,买了一个非接触的电子温度计花了170左右

出0入8汤圆

发表于 2015-4-18 11:49:18 | 显示全部楼层
温度计还是很实用的,成本低一点会很受欢迎的,楼主加油啊,等完美了我就买一个哈
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 12:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表