极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 26959|回复: 9

arduino+DS18B20制作感温杯为何温度是逐渐上升?

[复制链接]
发表于 2013-10-29 22:15:47 | 显示全部楼层 |阅读模式
根据坛子里各位大牛的方法,学着用arduino+DS18B20制作感温杯,但当把感温传感器DS18B20放入水杯时,温度不是一下达到水温,而是逐渐升上去的,这是为什么?这样感觉要过一段时间才能真正测出水杯里水的实际温度,如何能直接显示出实际温度?
我把我的具体做法列出来,请各位指导一下:

1、设计思路

      由于没有多种颜色的LED灯进行实验,因此本实验使用三个LED灯,用亮灯的个数来表示水温。当水温高于41度时,三个灯同时亮起,表示温度过高;当水温界于31度与40度之间,两个灯亮起,表示水温刚好;当水温低于31底时,一个灯亮起,表示水温过低。

2、硬件连接图



3、代码
  1. #include <LiquidCrystal.h>
  2. #include <DallasTemperature.h>
  3. #include <OneWire.h>
  4. #define ONE_WIRE_BUS 8
  5. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//设置接口
  6. OneWire oneWire(ONE_WIRE_BUS);
  7. DallasTemperature sensors(&oneWire);
  8.    
  9. void setup(void)
  10.   {
  11.     pinMode(6,OUTPUT);
  12.     pinMode(7,OUTPUT);
  13.     pinMode(9,OUTPUT);
  14.     lcd.begin(16, 2);  //初始化LCD
  15.     delay(1000); //延时1000ms
  16.     sensors.begin();
  17.   }
  18.    
  19.   void loop(void)
  20.   {
  21.     sensors.requestTemperatures();
  22.     if (sensors.getTempCByIndex(0)<=31.00)
  23.     {
  24.      digitalWrite(6,HIGH);
  25.      digitalWrite(7,LOW);
  26.      digitalWrite(9,LOW);
  27.     }
  28.     else if (sensors.getTempCByIndex(0)>31.00 && sensors.getTempCByIndex(0)<=41.00)
  29.     {
  30.      digitalWrite(6,HIGH);
  31.      digitalWrite(7,HIGH);
  32.      digitalWrite(9,LOW);
  33.     }
  34.     else
  35.     {
  36.      digitalWrite(6,HIGH);
  37.      digitalWrite(7,HIGH);
  38.      digitalWrite(9,HIGH);        
  39.     }
  40.    
  41.     lcd.clear(); //清屏
  42.     lcd.setCursor(0,0);
  43.     lcd.print("Local Temperature");
  44.     lcd.setCursor(0, 1) ; //设置光标位置为第二行第一个位置
  45.     lcd.print(" is ");
  46.     lcd.setCursor(5, 1) ;
  47.     lcd.print( sensors.getTempCByIndex(0)); //显示温度小数点后一位
  48.   //  delay(1000);
  49.     lcd.print((char)223); //显示o符号
  50.     lcd.print("C"); //显示字母C
  51.     delay(2000);
  52.    
  53.   }
复制代码


4、视频效果


由于本人视频录制水平有限,所以在录制过程中效果体现的不是很明显。主要问题就是温度上升和下降的速度比较慢,如何能上其瞬间测量出实际温度,请各位给指导一下。谢谢

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2013-10-29 22:58:13 | 显示全部楼层
个人理解,温度测试都是如此吧?除非红外测温等方式,都需要个周期吧?
回复 支持 反对

使用道具 举报

发表于 2013-10-30 08:37:36 | 显示全部楼层
热量传导的过程
回复 支持 反对

使用道具 举报

发表于 2013-10-30 11:36:35 | 显示全部楼层
本帖最后由 pww999 于 2013-10-30 11:47 编辑

delay(200); //延时200ms

这样行吗?   至于温度变化速度楼上的说了
回复 支持 反对

使用道具 举报

发表于 2013-10-30 13:02:18 | 显示全部楼层
瞬间检测是不可能的,除非和上面的朋友说的用红外线检测,电子体温计测体温一般都要1分钟左右
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-30 14:50:23 | 显示全部楼层
哦,明白了
回复 支持 反对

使用道具 举报

发表于 2013-10-30 17:29:49 | 显示全部楼层
DS78B20有好几种分辨率,在12位条件下,转换时间大约要750MS
回复 支持 反对

使用道具 举报

发表于 2013-10-30 21:43:26 | 显示全部楼层
pww999 发表于 2013-10-30 11:36
delay(200); //延时200ms

这样行吗?   至于温度变化速度楼上的说了

延时200ms只是显示延时呀,不是检测延时
回复 支持 反对

使用道具 举报

发表于 2014-5-8 15:56:11 | 显示全部楼层
不好意思請問一下前輩!

我假如要用2顆DS18B20顯示兩個溫度! 接兩個接口可行嗎!不想集成一線!!有辦法嗎!

謝謝~~~!
回复 支持 反对

使用道具 举报

发表于 2014-5-11 20:10:01 | 显示全部楼层
x852770 发表于 2014-5-8 15:56
不好意思請問一下前輩!

我假如要用2顆DS18B20顯示兩個溫度! 接兩個接口可行嗎!不想集成一線!!有辦法嗎!
...

S大~可否在請教一下
#include <LiquidCrystal_I2C.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <Wire.h>
int potPin = 0;
LiquidCrystal_I2C lcd(0x27,16,2);
#define ONE_WIRE_BUS 8<<<<<只這邊在定義一次嗎??還是有些不懂耶!不好意思><
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup(void)
  {
     
   Serial.begin(115200);
   Serial.println("Temperature Sensor");
  
    pinMode(6,OUTPUT);
    pinMode(7,OUTPUT);
    pinMode(9,OUTPUT);
    sensors.begin();
   lcd.init();
  }

  void loop(void)
  {
    sensors.requestTemperatures();
   
   if (sensors.getTempCByIndex(0)>=1.00)
   {
lcd.backlight();
lcd.setCursor(0, 0);
  lcd.print(sensors.getTempCByIndex(0)); //显示温度小数点后一位
  //  delay(1000);
  lcd.print((char)223); //显示o符号
  lcd.print("C"); //显示字母C
  delay(500);//延时0.5 秒
   }
    if (sensors.getTempCByIndex(0)<=31.00)
    {
     digitalWrite(6,HIGH);
     digitalWrite(7,HIGH);
     digitalWrite(9,HIGH);
    }
    else if (sensors.getTempCByIndex(0)>31.00 && sensors.getTempCByIndex(0)<=41.00)
    {
     digitalWrite(6,LOW);
     digitalWrite(7,LOW);
     digitalWrite(9,LOW);
    }
   
delay(500);//延时0.5 秒
  }
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 03:23 , Processed in 0.046123 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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