ArduinoUNO实战-第十四章-LM35温度传感器和DS18B20温度传感器

这篇具有很好参考价值的文章主要介绍了ArduinoUNO实战-第十四章-LM35温度传感器和DS18B20温度传感器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、参考

在Arduino中使用DS18B20温度传感器(基于OneWire和DallasTemperature库)

二、目标

通过LM35测量温度值,通过串口发送给电脑

三、理论学习

1、LM35

LM35使用非常普遍,他使用内部补偿机制,输出可以从0°C开始。封装在T0992,工作电压4-30V。而且在上述电压范围内,芯片的工作电流不超过60ua。根据产品使用手册,得知LM35传感器的输出电压与设置温度呈线性关系,0°C时输出为0V,每升高1°C,输出电压增加10mV。

计算过程:
1.假设AD读取出来的值为val,那么该AD值对应的电压为:val5/10231000 = 4.8876val,单位mV
2.对应的温度为4.8876
val/10 = 0.48876*val,单位是°C。

2、DS18B20

DS18B20是很常用且易用的温度传感器元件,在元器件的应用上也只需要一个DS18B20元件,只利用一个接口就可以,难点在于算法上的将读取的模拟值转换为实际的温度。

四、实物图

ArduinoUNO实战-第十四章-LM35温度传感器和DS18B20温度传感器
引脚说明
ArduinoUNO实战-第十四章-LM35温度传感器和DS18B20温度传感器

五、接线图

ArduinoUNO实战-第十四章-LM35温度传感器和DS18B20温度传感器

ArduinoUNO实战-第十四章-LM35温度传感器和DS18B20温度传感器

六、Mind+

ArduinoUNO实战-第十四章-LM35温度传感器和DS18B20温度传感器
读取温度之后通过串口发送,并且1s中发送一次。

七、LM35代码

/*
  温度传感器LM35
*/

#include<Arduino.h>

// 定义引脚命名
#define LM35 A0

int val = 0;
// 定义温度初始值
float temp = 0;

// the setup function runs once when you press reset or power the board
void setup() {
  // 打开串口
  Serial.begin(9600);
  
}

// the loop function runs over and over again forever
void loop() 
{
  val = analogRead(LM35);
  temp = 0.48876 * val;
  Serial.print(val);
  Serial.print("= LM35 = ");
  Serial.println(temp);
  delay(1000);
}

八、DS18B20

1、相关库引入

两个库均在GitHub上,可以在release标签页中下载最新项目文件。

OneWire库

项目地址:https://github.com/PaulStoffregen/OneWire
使用时需要包含OneWire.h 文件、OneWire.cpp 文件、util 文件夹;
所有版本库文件地址:https://github.com/PaulStoffregen/OneWire/releases
库文件下载:OneWire-2.3.7.zip

DallasTemperature库

项目地址:https://github.com/milesburton/Arduino-Temperature-Control-Library
使用时需要包含DallasTemperature.h 文件、DallasTemperature.cpp 文件;
所有版本库文件地址:https://github.com/milesburton/Arduino-Temperature-Control-Library/releases
库文件下载:Arduino-Temperature-Control-Library-3.9.1.zip

下载两个库的zip包后在Arduino IDE中选择:项目 > 加载库 > 添加一个 .ZIP库 ,两个库添加完成后就可以使用了。
中文版是在Arduino IDE中选择:Sketch > Include library > Add .ZIP library两个库添加完成后就可以使用了。

2、使用步骤

  • 引入相关库;
  • 声明OneWire和DallasTemperature对象;
  • 使用DallasTemperature的begin方法初始化总线;
  • 发送温度转换请求;
  • 读取温度值;

3、代码

方法一 阻塞

/*
  温度传感器LM35
*/

#include<Arduino.h>

// DS18B20温度传感器模块需要引入的
#include <DallasTemperature.h>
#include <OneWire.h>

DeviceAddress insideThermometer;
OneWire oneWire_A0(A0);//设置端口为A0
DallasTemperature sensors_A0(&oneWire_A0);

float ds18b20_A0_getTemp(int w) {
  sensors_A0.requestTemperatures();
  if(w==0) {
    return sensors_A0.getTempC(insideThermometer);
  }
  else {
    return sensors_A0.getTempF(insideThermometer);
  }
}


// the setup function runs once when you press reset or power the board
void setup() {
  // 打开串口
  Serial.begin(9600);
  sensors_A0.getAddress(insideThermometer, 0);
  sensors_A0.setResolution(insideThermometer, 9);

}

// the loop function runs over and over again forever
void loop() 
{
  float temp = ds18b20_A0_getTemp(0);
  Serial.println(String(temp) + String("C"));//串口打印18B20的温度带上单位C
  delay(1000);
}

ArduinoUNO实战-第十四章-LM35温度传感器和DS18B20温度传感器

方法二 非阻塞

以下演示是一种非阻塞获取温度的方式,性能上消耗较少:文章来源地址https://www.toymoban.com/news/detail-436751.html

// #include <OneWire.h> //可以不引入,因为DallasTemperature.h中已经引入了OneWire.h
#include <DallasTemperature.h>

#define ONE_WIRE_BUS A0               //1-wire数据总线连接在IO4
OneWire oneWire(ONE_WIRE_BUS);       //声明
DallasTemperature sensors(&oneWire); //声明

void setup(void)
{
  Serial.begin(115200);
  Serial.println("");

  sensors.begin(); //初始化总线
  sensors.setWaitForConversion(false); //设置为非阻塞模式
}

unsigned long previousMillis = 0; //毫秒时间记录
const long interval = 1000;       //时间间隔
void loop(void)
{
  //以下段落相当于每秒读取前次温度,并发起新一次温度转换
  unsigned long currentMillis = millis();         //读取当前时间
  if (currentMillis - previousMillis >= interval) //如果和前次时间大于等于时间间隔
  {
    previousMillis = currentMillis; //更新时间记录

    float tempC = sensors.getTempCByIndex(0); //获取索引号0的传感器摄氏温度数据
    if (tempC != DEVICE_DISCONNECTED_C)       //如果获取到的温度正常
    {
      Serial.print("\n当前温度是: ");
      Serial.print(tempC);
      Serial.println(" ℃");
      Serial.println(" ");
    }
    sensors.requestTemperatures(); //发起新的温度转换
  }

  delay(20);
  Serial.print(".");
}

到了这里,关于ArduinoUNO实战-第十四章-LM35温度传感器和DS18B20温度传感器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第十四章JSON

    JSON的定义 JSON的类型是一个Object类型 JSON的访问 我们要得到其中的一个值,对其进行遍历即可 这个可以得到JSON对象 要在Java中操作JSON,要先导入JSON的jar包 测试要先导入下面两个jar包 当我们有这个JSON字符串的时候,我们是可以将其转换成它对应的JavaBean的 但此时若想要取出

    2024年01月23日
    浏览(42)
  • 第十四章 MyBatis

    不需要的删除 Springboot自带配置文件 这里的mapper包就相当于三层架构里面的Dao这个包 下面我们测试一下 现在这里我的SQL语句写错了也不会报错 如果没有提示表名或者表爆红了,我们需要进行配置 Hikari是springboot自带的连接池 如果在springboot项目中,我想使用druid连接池 第一步

    2024年01月20日
    浏览(39)
  • 第十四章 json模块

    Python 中的json 模块提供了对JSON 的支持,用于将JSON 格式字符串转换为Python 对象。首先需要了解一下什么是JSON。 什么是JSON JSON 是基于JavaScript 语言的轻量级的数据交换格式,是JavaScript 对象的表示法(JavaScriptObject Notation),它是用来存储和交换文本信息的。信息表示格式为:

    2024年02月09日
    浏览(37)
  • [C国演义] 第十四章

    力扣链接 常见的子数组问题 ⇒ 要使用动态规划的解法 那么要确定dp数组的含义 ⇒ do[i] — — 以 s[i] 结尾的子数组可不可以用 wordDict中的字符串来表示 那么问题来了, 如何判断字符串[j, i] 在没在wordDict中呢? 我们可以用一个 哈希表 . 将wordDict导入一个哈希表中, count 判读一个

    2024年02月08日
    浏览(40)
  • Android 第十四章 FragmentContainerView

    FragmentContainerView extends FrameLayout FragmentContainerView是专门为Fragments设计的自定义布局。它扩展了FrameLayout,因此它可以可靠地处理Fragment 事务,并且它还具有与Fragment 行为协调的附加特性 FragmentContainerView应用作Fragments的容器,通常设置在活动的xml布局 FragmentContainerView将只允许

    2024年02月11日
    浏览(41)
  • 第十四章 ObjectScript - 系统函数

    本节重点介绍 ObjectScript 中一些最常用的系统函数。 这些函数的名称不区分大小写。 类库还提供了大量实用方法,可以像使用函数一样使用它们。 在给定一些输入的情况下,可以使用以下函数来选择一个值: $CASE 将给定的测试表达式与一组比较值进行比较,然后返回与匹配

    2024年02月10日
    浏览(38)
  • Nodejs 第十四章(process)

    process 是Nodejs操作当前进程和控制当前进程的API,并且是挂载到globalThis下面的全局API API 介绍 1. process.arch 返回操作系统 CPU 架构 跟我们之前讲的os.arch 一样 \\\'arm\\\' 、 \\\'arm64\\\' 、 \\\'ia32\\\' 、 \\\'mips\\\' 、 \\\'mipsel\\\' 、 \\\'ppc\\\' 、 \\\'ppc64\\\' 、 \\\'s390\\\' 、 \\\'s390x\\\' 、以及  \\\'x64\\\' 2. process.cwd() 返回当前的工作目

    2024年02月10日
    浏览(32)
  • 《微服务实战》 第十四章 RabbitMQ应用

    第十六章 Spring cloud stream应用 第十五章 RabbitMQ 延迟队列 第十四章 RabbitMQ应用 一般MQ用于系统解耦、削峰使用,常见于微服务、业务活动等场景。 RabbitMQ整体上是一个生产者与消费者模型,主要负责接收、存储和转发消息。 Producer:生产者,就是投递消息的一方。消息一般可

    2024年02月06日
    浏览(46)
  • 第十四章 TIM基本定时器

    目录 13.1 定时器的分类 13.2 TIM基本定时器简介 13.2.1 定时器的概念和作用 13.2.2 TIM基本定时器的工作原理和使用场景 13.3 TIM基本定时器功能框图 13.3.1 时钟源 13.3.2 控制器 13.3.3 时基(定时器的心脏) 13.3.4 影子寄存器 13.4 TIM基本定时器的初始化和配置方法 13.4.1 定时时间的计算

    2024年02月05日
    浏览(35)
  • 第十四章 使用Vercel部署在线文档

    文档网站需要发布到互联网上才能让更多的人知道。传统的发布方法需要做以下准备。 Linux服务器; 网页服务软件 Nginx; 购买域名 + 实名认证; HTTPS 证书; Sftp 上传工具; Github Action CI 自动发布最新文档。 这里面租用服务器和域名需要一笔花费。安装 Linux、Nginx,配置域名

    2024年02月07日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包