找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13170|回复: 12
打印 上一主题 下一主题
收起左侧

NTC热敏电阻测温的Proteus仿真与Arduino源码

  [复制链接]
跳转到指定楼层
楼主
ID:149389 发表于 2018-5-25 20:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)




arduino源码:
  1. /*********************************************************
  2. *         Rt= 10K                RES=4700
  3. *   GND----/\/\/\/\----/\/\/\/\----VCC=5V
  4. * Rt = R *EXP(B*(1/T1-1/T2))
  5. * 对上面的公式解释如下:
  6. *
  7. * 1.Rt 是热敏电阻在T1温度下的阻值;
  8. * 2.R是热敏电阻在T2常温下的标称阻值;
  9. * 3.B值是热敏电阻的重要参数;
  10. * 4.EXP是e的n次方;
  11. * 5.这里T1和T2指的是K度即开尔文温度,K度=273.15(绝对温度)+摄氏度;
  12. *********************************************************/

  13. #include <math.h>
  14. #define RES 4700
  15. #include <Wire.h>
  16. #include <LiquidCrystal_I2C.h>
  17. LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

  18. double Water_temp;
  19. void setup(){
  20.   Serial.begin(9600);
  21.   lcd.init();                      // initialize the lcd
  22.   // Print a message to the LCD.
  23.   lcd.backlight();

  24.   lcd.clear();
  25.   lcd.setCursor(0, 0);
  26.   lcd.print("Temperature ");
  27. }



  28. void loop(){
  29.   double AD_val=analogRead(0);        //0-1023的范围

  30.   double GetVoltage=(AD_val/1023)*5.0;        //采样电压值

  31.   // 欧姆定律 Rt/RES=GetVoltage/(5.0-GetVoltage),电流一致

  32.   double Rt=GetVoltage*RES/(5.0-GetVoltage);
  33.   //热力学绝对温度
  34.   //T1=1/(ln(Rt/R) /B + 1/T2   )
  35.   // Serial.println( 1/(  log(Rt/RES) /3000 + 1/(25+273.15)   ));
  36.   Water_temp=1/(log(Rt/10000) /3950 + 1/(25+273.15))-273.15;
  37.   if(Water_temp>-100.0)
  38.   {

  39.     Serial.print("RES= ");
  40.     Serial.print(RES);
  41.     Serial.print(" RT=  :");
  42.     Serial.println(Rt);
  43.     Serial.print("The temperature is :");  
  44.     Serial.print(Water_temp);
  45.     Serial.println(" ~C");

  46.     lcd.setCursor(0, 1);
  47.     lcd.print("T1=");
  48.     lcd.print(Water_temp);
  49.     lcd.print("  ");
  50.   }
  51.   else
  52.   {
  53.     Serial.println("Error! check sensor!");
  54.   }
  55.   delay(1000);
  56. }

复制代码
全部资料51hei下载地址:
NTC测温实验.rar (37.16 KB, 下载次数: 176)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:361231 发表于 2019-5-18 01:09 | 只看该作者
楼主方便把.hex文件摘出来么
回复

使用道具 举报

板凳
ID:149389 发表于 2019-5-18 14:15 | 只看该作者
doudoudou123 发表于 2019-5-18 01:09
楼主方便把.hex文件摘出来么

你要的HEX文件, NTC.rar (8.13 KB, 下载次数: 32)
回复

使用道具 举报

地板
ID:361231 发表于 2019-5-19 18:02 | 只看该作者
weidoit 发表于 2019-5-18 14:15
你要的HEX文件,

谢谢啦,不过我昨天安装了Aduino,自己摘出来了
回复

使用道具 举报

5#
ID:619565 发表于 2019-10-5 20:44 | 只看该作者
arduino uno可以用吗?刚学这个
回复

使用道具 举报

6#
ID:640409 发表于 2019-11-12 14:32 | 只看该作者
NTC 10K   arduino +1602显示模块,可以正常显示工作
回复

使用道具 举报

7#
ID:566448 发表于 2020-3-3 20:32 | 只看该作者
楼主你的proteus工程打不开啊 我用的pro8
回复

使用道具 举报

8#
ID:566448 发表于 2020-3-3 21:14 | 只看该作者
楼主,求proteus的keil源工程文件,tks
回复

使用道具 举报

9#
ID:725882 发表于 2020-4-9 22:30 | 只看该作者
请问我下载了以后 打不开仿真怎么办
回复

使用道具 举报

10#
ID:725882 发表于 2020-4-9 22:34 | 只看该作者
怎么打开仿真啊
回复

使用道具 举报

11#
ID:725882 发表于 2020-4-10 08:17 | 只看该作者
楼主 怎么打开仿真啊 我下载了压缩包 打不开里面的仿真
回复

使用道具 举报

12#
ID:508488 发表于 2025-5-19 11:56 | 只看该作者
可以同时输出的代码,用跑马灯代替输出
回复

使用道具 举报

13#
ID:508488 发表于 2025-5-19 11:57 | 只看该作者
可以输出的代码,跑马灯代表输出
#include <math.h>         //包含数学库
//熔丝位配置如下:
//外置晶体 16MH 主频 低位 9F 高位 C9
//外置晶体 12MH 主频 低位 9F 高位 C9
//内置RC  8MH  主频 低位 D4   高位 C9


// 定义跑马灯编号:

int LED0=6;//定义数字接口8为跑马灯电源
int LED1=5;// 定义数字接口为1号跑马灯
int LED2=10;// 定义数字接口为2号跑马灯
int LED3=11;// 定义数字接口为3号跑马灯
int LED4=12;// 定义数字接口为4号跑马灯
int LED5=13;// 定义数字接口为5号跑马灯
int LED6=14;// 定义数字接口为6号跑马灯
int LED7=15;// 定义数字接口为7号跑马灯
int LED8=0;// 定义数字接口为8号跑马灯
int LED9=1;// 定义数字接口为9号跑马灯
int LED10=16;// 定义数字接口2为10号跑马灯
int LED11=3;// 定义数字接口3为11号跑马灯
int LED12=4;// 定义数字接口4为12号跑马灯

unsigned long time; //定义变量 time 类型

void setup()
{

int i; //定义变量
for(i=0;i<=21;i++)
pinMode(i,OUTPUT);  //设置0~21 引脚为输出模式

int j;
for(j=0;j<=21;j++){  //全灭
digitalWrite(j,1);   
  }

digitalWrite(LED0,LOW); //开启电源

}


// 使用循环函数重复运行
void loop() {
Serial.begin(115200); // 打开串口,设置速率为115200 bps 注:开启串口,会使 0 和 1 号逻辑端口失效(7、8号跑马灯不亮),原因不名!
/*
Serial.print("程序已运行");
time = millis();  // 赋值运行时间给变量time
Serial.print(time/1000); // 输出程序运行时间
Serial.println("秒");
Serial.end(); // 关闭串口

delay(10000); // 等待10秒

digitalWrite(LED1,LOW); // 第一个跑马灯亮
digitalWrite(LED2,0); //第二个跑马灯亮
digitalWrite(LED3,0); //第三个跑马灯亮
digitalWrite(LED4,0); //第四个跑马灯亮
digitalWrite(LED5,0); //第五个跑马灯亮
digitalWrite(LED6,0); //第六个跑马灯亮
digitalWrite(LED7,0); //第七个跑马灯亮
digitalWrite(LED8,0); //第八个跑马灯亮
digitalWrite(LED9,0); //第九个跑马灯亮
digitalWrite(LED10,0); //第十个跑马灯亮
digitalWrite(LED11,0); //第十一个跑马灯亮
digitalWrite(LED12,0); //第十二个跑马灯亮

delay(5000); // 等待5秒

digitalWrite(LED1,HIGH); //第一个跑马灯灭
digitalWrite(LED2,1); //第二个跑马灯灭
digitalWrite(LED3,1); //第三个跑马灯灭
digitalWrite(LED4,1); //第四个跑马灯灭
digitalWrite(LED5,1); //第五个跑马灯灭
digitalWrite(LED6,1); //第六个跑马灯灭
digitalWrite(LED7,1); //第七个跑马灯灭
digitalWrite(LED8,1); //第八个跑马灯灭
digitalWrite(LED9,1); //第九个跑马灯灭
digitalWrite(LED10,1); //第十个跑马灯灭
digitalWrite(LED11,1); //第十一个跑马灯灭
digitalWrite(LED12,1); //第十二个跑马灯灭
*/
// if (Serial.available() > 0)  { // 只在收到数据时发送数据
   
double Digital_Value=analogRead(0);   //读取串联电阻上的电压值(数字量)
double Voltage_Value=(Digital_Value/1023)*5.00;//换算成模拟量的电压值
double Rt_Value=(3.3-Voltage_Value)/Voltage_Value*100;  //计算出热敏电阻的阻值
Serial.println(1/(log(Rt_Value/10)/3000 + 1/( 25 + 273.15)) - 273.15,2); //计算所感知的温度并发送到串口
Serial.print("\t\r\n"); //\t是制表,\r\n 回车换行
Serial.println("ok");
Serial.print("\t\r\n"); //\t是制表,\r\n 回车换行
delay(10000);   //十秒刷新一次
//  }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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