zoukankan      html  css  js  c++  java
  • Arduino入门笔记(6):温度传感器及感温杯实验

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi

    欢迎加入讨论群 64770604

    一、本次实验所需器材

    1、Arduino板 :https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-15820725129.16.AtgoEm&id=545093340395

    2、1602液晶板:http://www.cnblogs.com/xiaowuyi/p/3390024.html(或者http://wikicode.net/?p=232)已经介绍过。

    3、DS18b20数字温度传感器:多数入门学习时会使用LM35温度传感器(该传感器为模拟信号,需转换),由于本人在最初购买时没有注意,直接买了DS18b20,所以就使用了这个传感器。

    (1)实物及管脚排列图

    B5015868341        0c1be3f6229602b8f2d385da

    面对平面,左边为接地,中间DQ为数字信号输入/输出端,VDD为外接供电电源输入端,电源供电 3.0~5.5V (在寄生电源接线方式时接地)。

    (2)DS18B20的硬件接口非常简单。供电方式为计生电源供电或外部供电。寄生电源供电(连接方法如下图)的原理是在数据线为高电平的时候“窃取”数据线的电源,电荷被存储在寄生供电电容上,用于在数据线为低的时候为设备提供电源。需要注意的是,DS18B20在进行温度转换或者将高速缓存里面的数据复制到EEPROM中时,所需的电流会达到1.5mA,超出了电容所能提供的电流,此时可采用一个MOSFET三极管来供电。

    114819iy6ou6ejcp6c6jie

    当DS18B20采用外部供电时,只需将其数据线,与单片机的一位双向端口相连就可以实现数据的传递。

    注意:当温度高于100℃ 时,不能使用寄生电源,因为此时器件中较大的漏电流会使总线不能可靠检测高低电平,从而导致数据传输误码率的增大。

    更加详细的DS18B20介绍,可查阅技术手册,这里不在详细记录。

    4、LED:3个

    5、电阻:1KΩ(1个) 4.7KΩ(1个)

    6、杜邦线:若干

    7、面包板:一个

    二、温度传感器实验

    1、硬件连接方法

         上节驱动液晶是使用的手工编写代码,这次我们直接使用arduino自带的LiquidCrystal库来进行驱动,此库文件允许arduino控制板控制基于Hitachi HD44780或与之相兼容芯片大部分的液晶,可以工作于4bit或者8bit状态。下图为我们所使用的arduino的LiquidCrystal库文件位置,只有这里显示的库文件,arduino才可以调用。当然也可以自己导入库文件。另外,这里需要使用OneWire库和DallasTemperature库(读取相应地址传感器),这两个库需要下载后,自己导入。

    2

    连接图为:

    18b20

    2、代码

    #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)
      {
        lcd.begin(16, 2);  //初始化LCD
        
        delay(1000); //延时1000ms
        sensors.begin();
      }
       
      void loop(void)
      {
        sensors.requestTemperatures(); // Send the command to get temperatures
        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(1000);
      }

    3、实验效果

    从实验效果来看,温度显示正常。

    三、简单感温杯实验

           感温杯可以直观的知道杯内水温的高低,当水温超过一定温度时,会有相应的灯亮起以提示水温。结合上面的实验,只要在上面的电路中加入几个LED灯用来显示水温即可。

    1、设计思路

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

    2、硬件连接图

    tcup_bb

    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、实验效果

    从实验效果来看,当把传感器放入水杯后,温度上升,从开始亮一个灯,到亮三个灯。当传感器从水杯中取出后,温度开始下降,从亮三个灯到亮一个灯,由于本人视频录制水平有限,所以在录制过程中效果体现的不是很明显。

    从效果看,还存在一个问题,就是温度上升和下降的速度比较慢,如何能上其瞬间测量出实际温度,还没想清楚。

  • 相关阅读:
    ajax 新闻栏目
    ajax 瀑布流实现
    html5 canvas图片渐变
    html5 canvas图片翻转
    html5 canvas图片反色
    ajax 第一个程序
    ajax 新闻栏目
    HDU 1756 Cupid's Arrow( 判断点在多边形的内外 )
    POJ 2356 Find a multiple( 鸽巢定理简单题 )
    HDU 5762 Teacher Bo ( 暴力 )
  • 原文地址:https://www.cnblogs.com/xiaowuyi/p/3395326.html
Copyright © 2011-2022 走看看