根据坛子里各位大牛的方法,学着用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、视频效果
由于本人视频录制水平有限,所以在录制过程中效果体现的不是很明显。主要问题就是温度上升和下降的速度比较慢,如何能上其瞬间测量出实际温度,请各位给指导一下。谢谢 |