专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

使用DS18B20温度传感器采集温度

作者:未知   来源:会员上传   点击数:  更新时间:2014年05月20日   【字体:

  Rainbow开发包中已经封装了DTH11温湿度传感器,按照我的想法,同类型的传感器有了一种就可以了,本不想做DS18B20的封装,但是前两天有个朋友让我给他做个项目,需要测液体的温度,用DHT11个头太大,主要用于测室温,而DS18B20有用于测量液体温度的封装,非常方便使用。迫于无奈,今天就花了半天时间做了个小小的封装,在Rainbow开发板上通过了测试。

 
    使用DS18B20非常简单,和DHT11差不多,按照下列步骤:
    1、定义DS18B20对象,设定DS18B20的DQ数据线所使用的GPIO,如:DS18B20 ds(PC1);
    2、调用read()方法进行温度采集,如果返回DS18B20::OK,表示采集成功,其它值表示失败
    3、采集成功之后就可以使用对象的getCelsius()和getFahrenheit()分别获取到摄氏温度和华氏温度
 
    我这次试验选用了PC3与DS18B20的DQ管脚相连,这个管脚是用于DHT11数据采集,带有一个4.7K上拉电阻,电路原理图和实际接线图如下:
 
    在软件包的“Projects\DS18B20”文件夹包含了本文的完整工程,可以直接编译、烧写和调试。来看看main.cpp的代码:
#include "WProgram.h"
#include "DS18B20.h"
 
//接到DHT11_DATA_PIN,通过4.7K电阻上拉
DS18B20 ds(DHT11_DATA_PIN);
 
void setup()
{
  //启用默认串口,波特率9600
  Serial.start();
}
 
void loop()
{
  //数据采集成功
  if(ds.read() == DS18B20::OK)
  {
    Serial.print("Celsius:");
    Serial.println(ds.getCelsius());
    Serial.print("Fahrenheit:");
    Serial.println(ds.getFahrenheit());
    delay(5000);
  }
}
 
int main(void)
{
  //初始化开发板
  boardInit();
  setup();
 
  while(1) loop();
}
 
    程序非常简单,就不再啰嗦,将USART3和USB-TTL模块连接,在串口调试工具中可以看到运行效果:
关闭窗口