基于单片机红外测温 oled显示 报警系统 人数统计#单片机开发
红外测温报警系统。
大家好,今天给大家介绍一款基于单片机的红外测温控制系统。
·这个是电源开关,按下系统上电,上电之后第一行显示的是年月日,这是时分秒,这是温度,这个是统计的人数,这个是报警阈值,报警阈值按钮可以加减。
·这个是红外探头,可以手放在它,现在温度超过设定阈值的时候,它会蜂鸣器报警。
·这个是一个人通过,它会记录一次,这第二次,这第三次,这可以查看记录值,这是第一次记录的值,这个向下翻,这第二,这第三次,这是后面的记录单,没有了,这个是对记录进行清零。
·这个是单片机的复位键,按住了单片机就复位了。
本设计的主要功能就这些,谢谢大家。
NTC测量温度的两个不同的数值转换程序,你会选择哪一个
采用如下的NTC测温电路进行温度测量。
将电源电压经过固定电阻以及NTC电阻分压送入单片机进行A/D转换之后。
单片机程序从A/D模块读到数值,根据其与真实温度之间的关系,将其转换为真实温度。
NTC测温电路原理图
NTC电阻Rt的阻值与温度的关系为:
NTC的电阻阻值与温度的关系
以12位的A/D为例,转换得到的数值AD与电阻Rt的关系为:
A/D值与电阻的关系
大多数工程师根据这两个公式自然而然推导出了温度与A/D值之间的关系式。
温度求解公式
得到这个公式以后,工程师很高兴,高中所学的数学知识总算是没有还给老师。
高兴之余,就埋头敲了以下的C语言,所幸C语言的math库支持浮点数运算,还能做倒数和对数运算。
#define B 3950.0 //温度系数
#define TN 298.15 //额定温度(绝对温度加常温:273.15+25)
#define RN 10 // 额定阻值(绝对温度时的电阻值10k)
#define BaseVol 3.30 //ADC基准电压
float Get_Tempture(U16 adc)
{
float RV,RT,Tmp;
RV=BaseVol/4096.0*(float)adc;//ADC为10位ADC,求出NTC电压:RV=ADCValu/1024*BaseVoltag
RT=RV*10/(BaseVol-RV);//求出当前温度阻值 (BaseVoltage-RV)/R16=RV/RT;
Tmp=1/(1/TN+(log(RT/RN)/B))-273.15; //RT = RN exp*B(1/T-1/TN)
return Tmp;
}
编译之后,并没有报错,烧写到单片机,温度显示也很正确。
然后,产品就出货了。
到了客户手上,时不时出现了按键响应慢、通信出现误码等问题。
大部分单片机没有硬件浮点运算器,做浮点数运算时会花费大量的时间。
而对数运算也多转换为幂级数展开进行运算,涉及到大量的乘法运算。
即使cortex-M3系列处理器有单指令周期的乘法器,上述运行可以也要几毫秒时间。
对于没有硬件乘法器的单片机,比如PIC16系列的单片机,以及几毛钱一片的OTP的单片机,做上述运算估计得耗费几十秒时间。
大部分程序员编写代码时没有时间片以及分时处理的概念,一个耗时操作闭着眼晴就执行到底。
到最后主程序忙不过来了,就把需要即时处理的代码一股脑放在中断程序里面处理。
最后,整个软件时间性差,时不时会出现丢数据,无响应等情况。
编写软件一定要结合平台考虑时间复杂度和空间复杂度,
必须要根据产品的功能合理安排时间和空间,以便做到最佳性能。
对于A/D值到温度的转换,最快速的方法是通过查表加分段线性插值处理。
我们可以把 0度-100度对应的AD值存到一个100*16bit的const 表。
将得到的A/D数值从这个表中找到对应的区域。
在这个区域进行线性插值,得到相应的数值。代码如下:
#define AD_TEMP_RANGE_NUM 101
#define AD_TEMP_VALUE_MAX 3739
#define AD_TEMP_VALUE_MIN 1241
#define AD_TEMP_TEMP_MAX 1000
#define AD_TEMP_TEMP_MIN 0
///10K B= 3980
const U16 adrange[AD_TEMP_RANGE_NUM] =
{
3740,
3723,
3705,
3687,
3668,
3648,
3628,
3607,
3585,
3563,
3541,
3517,
3493,
3469,
3444,
3418,
3392,
3365,
3338,
3310,
3282,
3253,
3224,
3194,
3164,
3134,
3103,
3072,
3040,
3009,
2976,
2944,
2912,
2879,
2846,
2813,
2780,
2746,
2713,
2680,
2647,
2613,
2580,
2547,
2514,
2481,
2448,
2416,
2384,
2352,
2320,
2288,
2257,
2226,
2195,
2165,
2135,
2106,
2077,
2048,
2020,
1992,
1964,
1937,
1910,
1884,
1858,
1833,
1808,
1784,
1760,
1737,
1714,
1691,
1669,
1647,
1626,
1605,
1585,
1565,
1546,
1527,
1508,
1490,
1472,
1455,
1438,
1422,
1406,
1390,
1374,
1360,
1345,
1331,
1317,
1303,
1290,
1277,
1265,
1252,
1240
};
U16 temp;
advalue = AD_GET_VAL(0);
if(advalue >= AD_TEMP_VALUE_MAX)
{
temp = AD_TEMP_TEMP_MIN;
}
else if(advalue < AD_TEMP_VALUE_MIN)
{
temp = AD_TEMP_TEMP_MAX;
}
else
{
for(j = 0; j< (AD_TEMP_RANGE_NUM - 1); j++)
{
if((advalue[i] < adrange[j])
&& (advalue[i] >= adrange[j + 1]))
{
uchDiff = adrange[j] - adrange[j + 1];
uchData = adrange[j] - advalue[i];
uiData = uchData * 10;
uiData = uiData + (uchDiff >> 1);
uchData = uiData / uchDiff;
uiData = j * 10;
temp= uiData + uchData;
break;
}
}
}
带个转换过程在72MHz的主频时,耗时大概在几个us。
该程序可以进一步优化,改为二分法查找。
相关问答
麻烦诸位大侠!我想知道: 单片机测温 电路?,校车人脸测温机有...[回答]方案:采用热电偶作为感测温度的核心元件,配合桥式电路,运算放大电路和AD转换电路,将温度变化信号送入单片机处理。此方案原理和方案一的原理大同小...
单片机测温 电路?,校车人脸测温机性价比好不好??[回答]四线探头结构见图,就是利用电阻变化来检测温度和水位。51单片机用热敏电阻检测温度,上面电路只是一个比较电路,不同的温度AC点的电压不同,调节R2可...
单片机测温 电路?,校车人脸测温机哪家质量好,都来说说?[回答]那个电子制作很简易,里面没有使用单片机。如果检测温度,给热敏电阻加上一个微弱的恒流源,接入到A/D输入,测出电压,算出阻值然后查表找到温度。单片...
手机红外线能开发出感应体温的功能吗?手机红外线由红外二极管发出只能用于遥控或者数据通讯手机红外功能与红外测温完全是两码事。带红外功能的手机,内置了红外发射二极管,要以发出肉眼看不到的红...
RAM在 单片机 里面的用途?RAM在单片机里的用途,主要是存放临时数据,例如用单片机测温,每秒测1次,显示1分钟的平均值(1分钟更新一次);我们先通过传感器,放大电路,A/D转换,把温度这个...
51 单片机 片外RAM作用?RAM在单片机里的用途,主要是存放临时数据,例如用单片机测温,每秒测1次,显示1分钟的平均值(1分钟更新一次);我们先通过传感器、放大电路、A/D转换,把温度...R...
全国人民体温检测及个人健康能否通过智能手环实现?首先得夸赞一下你这个爱动脑的好习惯,智能手环已经具备检测心率、运动和睡眠的功能,从技术层面讲,在智能手环上再加个体温健康管理功能也不难。但是想把全部健...
马上开工了,用工业 测温 计可以吗?马上要开工了,用工业测温枪测人体体温是不行的,因为工业测温枪测的是物体表面温度,人体测温需要测的是人体温度,并不是体表温度,体表温度受环境影响较大,因...马...
水果蔬菜冷库环境如何实时监控及报警?大多由果农、菜农自建的冷库一般采用悬挂温度计人工观测的方法来监视冷库温度,冷库温度观测很不方便。而由单片机、温度传感器、AD转换器组成温度测量装置,可...
干式变压器智能温控器怎么设置干式变压器智能温控器是我公司专为风冷干式变压器可靠运行而研制生产的新一代多功能智能温度控制器。温度控制器采用单片机技术,利用预埋在变压器绕...