arduino+DS18B20制作感温杯为何温度是逐渐上升?
根据坛子里各位大牛的方法,学着用arduino+DS18B20制作感温杯,但当把感温传感器DS18B20放入水杯时,温度不是一下达到水温,而是逐渐升上去的,这是为什么?这样感觉要过一段时间才能真正测出水杯里水的实际温度,如何能直接显示出实际温度?我把我的具体做法列出来,请各位指导一下:
1、设计思路
由于没有多种颜色的LED灯进行实验,因此本实验使用三个LED灯,用亮灯的个数来表示水温。当水温高于41度时,三个灯同时亮起,表示温度过高;当水温界于31度与40度之间,两个灯亮起,表示水温刚好;当水温低于31底时,一个灯亮起,表示水温过低。
2、硬件连接图
3、代码
#include <LiquidCrystal.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#define ONE_WIRE_BUS 8
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//设置接口
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup(void)
{
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(9,OUTPUT);
lcd.begin(16, 2);//初始化LCD
delay(1000); //延时1000ms
sensors.begin();
}
void loop(void)
{
sensors.requestTemperatures();
if (sensors.getTempCByIndex(0)<=31.00)
{
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(9,LOW);
}
else if (sensors.getTempCByIndex(0)>31.00 && sensors.getTempCByIndex(0)<=41.00)
{
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(9,LOW);
}
else
{
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(9,HIGH);
}
lcd.clear(); //清屏
lcd.setCursor(0,0);
lcd.print("Local Temperature");
lcd.setCursor(0, 1) ; //设置光标位置为第二行第一个位置
lcd.print(" is ");
lcd.setCursor(5, 1) ;
lcd.print( sensors.getTempCByIndex(0)); //显示温度小数点后一位
//delay(1000);
lcd.print((char)223); //显示o符号
lcd.print("C"); //显示字母C
delay(2000);
}
4、视频效果
http://player.youku.com/player.php/sid/XNjI3OTM2MDY0/v.swf
由于本人视频录制水平有限,所以在录制过程中效果体现的不是很明显。主要问题就是温度上升和下降的速度比较慢,如何能上其瞬间测量出实际温度,请各位给指导一下。谢谢 个人理解,温度测试都是如此吧?除非红外测温等方式,都需要个周期吧? :lol热量传导的过程 本帖最后由 pww999 于 2013-10-30 11:47 编辑
delay(200); //延时200ms
这样行吗? 至于温度变化速度楼上的说了 瞬间检测是不可能的,除非和上面的朋友说的用红外线检测,电子体温计测体温一般都要1分钟左右 :)哦,明白了 DS78B20有好几种分辨率,在12位条件下,转换时间大约要750MS pww999 发表于 2013-10-30 11:36 static/image/common/back.gif
delay(200); //延时200ms
这样行吗? 至于温度变化速度楼上的说了
延时200ms只是显示延时呀,不是检测延时 不好意思請問一下前輩!
我假如要用2顆DS18B20顯示兩個溫度! 接兩個接口可行嗎!不想集成一線!!有辦法嗎!
謝謝~~~!
x852770 发表于 2014-5-8 15:56 static/image/common/back.gif
不好意思請問一下前輩!
我假如要用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 秒
}
页:
[1]