Arduino使用DS18b20温度传感器

这个指南将会告诉你arduino使用DS18b20温度传感器的方方面面,跟随我的脚步,开启旅行吧。

如果你想建立一个数据记录器监控某个房间的温度,这是一个非常有趣的项目。这个教程会给你提供实现想法的灵感。

你可以使用类似于压电蜂鸣器的东西来提醒你,比如说,如果温度下降到一定范围之外,你可以使用压电蜂鸣器来提醒你。

在整个教程中,我将向你展示如何正确连接DS18B20和Arduino。我还将添加一些LED来演示电路和代码功能。

设备清单

在本教程中,我将使用一些LED来表示温度传感器的当前温度。如果你只是想用软件,那么你就不需要添加这些。

必备设备

  • Arduino Uno
  • DS18B20温度传感器
  • 4.7K欧母电阻
  • 面包板
  • 面包板线

可选设备

  • 100欧母电阻x3
  • 红色LED
  • 绿色LED
  • 黄色LED

ARduino和DS18B20电路接线

Arduino DS18B20传感器的电路相当简单,如果你不想要LED,就把这部分电路省去。

我将在下面快速描述一下温度传感器,但其余的设备都很简单,不需要解释。

DS18B20是一个数字温度传感器,能够读取0.05°C以内的温度。

DS18B20还具有单线支持,这意味着它能够与其他同样支持单线的设备共享一条线。

在本教程中,我使用的是防水版的DS18B20,所以它只是看起来像一根长长的粗线,有3根线从1端伸出来。如果你拿到的器件没有任何多余的东西,它只是看起来像一个普通的晶体管。

现在我们一起把电路连接起来

  1. 首先,将Arduino的3v3引脚连接到面包板正极轨道上,再将地线引脚连接到面包板上的地线。
  2. 把DS19B20插到面包板上。
  3. 在传感器的正极引线(红线)和输出引线(白线)之间放置一个4.7k电阻。
  4. 接下来,将一根线从正极引线(红线)接到3V3正极导轨上。
  5. 将一根线从输出引线放回Arduino的5号针脚。将一根导线从地线(黑线)放到地线上。
  6. 现在,接下来的几个步骤是可有可无,只有在你想要LED的情况下才需要。
  7. 在面包板的另一侧放一根从地轨到地轨的导线。
  8. 将3个LED灯放在面包板上。(红色、黄色和绿色)。
  9. 在每个LED上连接一个100欧姆的电阻,并将其接到地线上。
  10. 现在有一根线从以下Arduino的引脚来:引脚2到绿色LED,引脚3到黄色LED,最后红色到引脚4。

电路都设置好了,是时候进入代码了。如果您在电路中遇到任何问题,请参考下面的图。

arduino-ds18b20-circuit-diagram

安装1-wire支持

现在默认情况下,Arduino并不支持1-wire,所以我们需要下载并安装相应的库。如果你想了解更多关于什么是1-wire的信息,那么一定要去看看Arduino的官方网站。

现在,这是一个相当直接的过程,我现在就带大家了解一下。

  1. 首先,下载最新的1-wire库
  2. 下载好后在sketch中打开
  3. 在这里进入sketch,include library,然后add .zip library。
  4. 应该写着 “Library added to libraries”这样的内容。检查”include library”菜单。
  5. 现在回到上面的sketch,include library,然后在contributed libraries,你会发现onewire,点击它。
  6. 这个过程将在你的文件顶部添加一个#include,并在下次上传时添加到你的Arduino中。
sketch-include-library

安装Dallas温度传感器库

为了让事情更简单,我建议安装一个库来处理来自传感器的数据。这个库会比你自己编写数据处理代码要简单很多。

如果你喜欢使用Dallas温度传感器库,那么只需进行以下操作即可。

  1. 首先,下载Dallas温度传感器库
  2. 现在,一旦下载完毕,进入sketch程序,重复我们之前的步骤。
  3. 进入sketch,include library,然后add .zip library。
  4. 现在应该写着 “Library added to libraries”这样的内容。检查”include library”菜单。
  5. 现在回到上面的sketch,include library,然后在contributed libraries,你会发现DallasTemperature,点击它。
  6. 这将自动在脚本的顶部添加一个#include。当你上传时,这个库将与你的Arduino同步。

我们继续编写剩下的代码,既要从传感器上获得温度,又要打开正确的LED。

Arduino DS18B20代码

首先,我们需要包含OneWire和dallasTemperature头文件,这样我们就可以在代码中使用这些文件。如果你按照上面的步骤来做,这些应该已经有了。

#include <OneWire.h>
#include <DallasTemperature.h>

接下来,我们声明在整个脚本中需要使用的变量。 其中第一个变量代表设备连接的引脚号。

float temperature变量是我们要存储温度值的地方。

LowerLimit 和 upperLimit 变量代表我们的阈值温度。低于下限的温度值都会触发黄色LED灯亮起。高于上限的变量都会触发红色LED灯亮起。介于两者之间的变量都将打开绿色LED灯。

int greenLedPin = 2;
int yellowLedPin = 3;
int redLedPin = 4;

int temp_sensor = 5;

float temperature = 0;
int lowerLimit = 15;
int higherLimit = 35;

接下来,我们使用我们之前定义的引脚(5)创建一个OneWire对象。如果你有大量的OneWire传感器,建议你把这些传感器分成多个引脚。为每个传感器创建一个新的Onewire对象,例如,OneWire oneWirePin2(temp_sensor2)。

现在,我们通过将OneWire引用传入类中来创建达拉斯温度传感器对象。

OneWire oneWirePin(temp_sensor);
DallasTemperature sensors(&oneWirePin);

在我们的设置函数中,激活Arduino串行接口,这样就可以监控代码中的输出。这也是我们需要设置我们的LED全部作为输出的地方。最后,我们调用sensor.begin(),这将设置好我们的传感器,这样就可以开始向它请求数据了。

void setup(void){
  Serial.begin(9600);
  
  //Setup the LEDS to act as outputs
  pinMode(redLedPin,OUTPUT);
  pinMode(greenLedPin,OUTPUT);
  pinMode(yellowLedPin,OUTPUT);
  
  sensors.begin();
}

 

在这段中,我们有几条输出线,让我们知道当它成功地请求了连接到我们的onewire引脚(5)的所有传感器的温度。

接下来我们将sensor.getTempCByIndex(0)中的值存储到温度变量中。如果想得到华氏温度,只需将C改为F,例如sensor.getTempFByIndex(0)。另外,0指的是我们要从哪个传感器获取信息。0=第一个传感器,如果你有第二个传感器,那么就是1。

void loop(){
  Serial.print("Requesting Temperatures from sensors: ");
  sensors.requestTemperatures(); 
  Serial.println("DONE");
  
  temperature = sensors.getTempCByIndex(0);
}

然后我们把所有的LED都调到低电平,这样当我们运行下一段代码时,只有正确的LED仍然亮着。我们还打印了两个语句,第一个是一个简单的字符串,写着温度是,然后是温度本身。我们在下面描述的下一段代码中结束这段文字。

digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
  
Serial.print("Temperature is ");
Serial.print(temperature);

最后一段会将我们的温度值与预定义值进行比较。根据结果,它将打开相关的LED灯。例如,第一个if语句说,如果温度低于或等于LowerLimit值,那么就执行这个操作。

最后,延迟500ms,然后再循环一次。

//Setup the LEDS to act as outputs
if(temperature <= lowerLimit){ 
    Serial.println(", Yellow LED is Activated"); 
    digitalWrite(yellowLedPin, HIGH); } 
else if(temperature > lowerLimit && temperature < higherLimit){ 
    Serial.println(", Green LED is Activated"); 
    digitalWrite(greenLedPin, HIGH);
} 
else if(temperature >= higherLimit){
    Serial.println(", Red LED is Activated");
    digitalWrite(redLedPin, HIGH);
}
delay(500);
}

问题总结

下面我列出一些在操作过程中极有可能会遇到的错误。

  • 如果你发现DS18B20温度传感器返回的结果很奇怪,那可能是它的电压不足,或者你请求数据的速度太快了。为了解决电源问题,我建议减少传感器供电的轨道上的负载。为了减少从传感器请求数据的次数,可以将延迟时间增加到稍高一些。
  • 如果传感器总是返回持续的高温,那么可能是它没有正确连接到面包板上。在重新启动Arduino之前,请确保连接正确。

使用本教程中的默认电路和代码,这些问题应该不会发生,但如果你改变了一些东西,可能会发生。

希望这篇Arduino DS18b20温度传感器教程能帮助你正确设置一切,如果我错过了什么,犯了什么错误,或者你只是想留下一些反馈,请在下面留言。

平均: 0 / 5. votes: 0

到目前为止还没有投票!成为第一位评论此文章。

欢迎转载,请留下出处链接:Labno3 » Arduino使用DS18b20温度传感器

赞 (1)

评论

6+7=