Arduino DS18B20温度传感器

一、介绍

DS18B20温度传感器是一种数字温度传感器,控制协议简单,数据稳定可靠,而且价格低廉,非常适合用于单片机控制系统中。

DS18B20采用单总线结构,只需要三根引脚即可完成通讯。它可以工作在-55℃至125℃的温度范围内,并提供了9至12位分辨率。此外, DS18B20还可以通过使用外部供电提高精度。

二、DS18B20的接线

DS18B20只需要三根线(DQ, GND, VCC)即可完成与单片机的连接。

DQ – 连接到单片机的任意IO口,用于数据的传输

GND – 连接到单片机的 GND

VCC – 连接到单片机的 VCC

              +---------+ 
              |         |
              |        VCC --------------- 3.3V - 5V
              |         |
              |        GND --------------- GND
              |         |
              |         |
DQ ------------+         +--------------- 

三、使用DS18B20进行温度测量

DS18B20通过一次性写入指令来启动温度测量,并通过读取传感器的数据进行温度的计算。以下是使用DS18B20进行温度测量的基本步骤:

1、复位信号线:

void reset() {
  digitalWrite(DQ, LOW);
  delayMicroseconds(480);
  pinMode(DQ, INPUT);
  delayMicroseconds(60);
  
  int presence = digitalRead(DQ);
  delayMicroseconds(420);
}

2、向DS18B20发送写入指令以启动温度测量:

void writeBit(uint8_t bit) {
  pinMode(DQ, OUTPUT);
  digitalWrite(DQ, LOW);
  delayMicroseconds(5);
  digitalWrite(DQ, bit);
  delayMicroseconds(60);
  pinMode(DQ, INPUT);
}

void writeByte(uint8_t byte) {
  for (uint8_t i=0; i>= 1;
  }
}

void startConversion() {
  reset();
  writeByte(0xCC);  // Skip ROM command 
  writeByte(0x44);  // Start Conversion
}

3、读取DS18B20返回的数据:

void readBit(uint8_t& bit) {
  pinMode(DQ, OUTPUT);
  digitalWrite(DQ, LOW);
  delayMicroseconds(1);
  pinMode(DQ, INPUT);
  delayMicroseconds(14);
  bit = digitalRead(DQ);
  delayMicroseconds(45);
}

uint8_t readByte() {
  uint8_t byte = 0;
  for (uint8_t i=0; i<8; i++) {
    uint8_t bit;
    readBit(bit);
    byte |= (bit << i);
  }
  return byte;
}

void readScratchpad(uint8_t* scratchpad) {
  reset();
  writeByte(0xCC);  // Skip ROM command 
  writeByte(0xBE);  // Read Scratchpad 

  for (uint8_t i=0; i<9; i++) {
    scratchpad[i] = readByte();
  }
}

4、将DS18B20返回的数据进行温度计算:

float readTemperature() {
  startConversion();
  delay(750);

  uint8_t scratchpad[9];
  readScratchpad(scratchpad);

  int16_t raw = scratchpad[0] | (scratchpad[1] << 8);
  float temp = (float)raw / 16.0;
  return temp;
}

四、示例代码

下面是一个简单的示例程序,用于读取DS18B20的温度值并将其打印到串口:

#include <OneWire.h>

OneWire ds(DQ);

void setup() {
  Serial.begin(9600);
}

void loop() {
  float temp = readTemperature();
  Serial.print("Temperature: ");
  Serial.print(temp, 1);
  Serial.println("C");
  
  delay(1000);
}

void reset() {
  //...
}

void writeBit(uint8_t bit) {
  //...
}

void writeByte(uint8_t byte) {
  //...
}

void startConversion() {
  //...
}

void readBit(uint8_t& bit) {
  //...
}

uint8_t readByte() {
  //...
}

void readScratchpad(uint8_t* scratchpad) {
  //...
}

float readTemperature() {
  //...
}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/193761.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-02 09:40
下一篇 2024-12-02 09:40

相关推荐

  • 详解STM32 DS18B20温度传感器

    一、DS18B20简介 DS18B20是一款数字温度传感器,能够直接将温度信息转换成数字信号,并通过单总线接口传输。DS18B20的优点在于最大传输距离可达100米,唯一需要外接的…

    编程 2025-04-23
  • 详解Arduino WS2812

    一、WS2812简介 WS2812是一种数字RGB LED灯珠,它是一颗RGB三色LED和驱动芯片集成在一个封装中。WS2812的工作电压是5V,每个LED的电流为20mA,每一个…

    编程 2025-02-17
  • 从多个方面详细阐述Arduino 中断

    一、中断的基础知识 1. 中断定义:中断是一种计算机系统通信方式,允许计算机处理多个任务并响应外部事件(如硬件终端、软件信号和外部设备的请求等)。 2. 中断的分类: 体外中断和软…

    编程 2025-01-20
  • 用java控制arduino(用JAVA控制监控探头)

    本文目录一览: 1、如何用 JavaScript 控制 Arduino 2、如何用arduino控制步进电机反向转动 3、用java编一个手机程序,通过蓝牙向arduino发出字符…

    编程 2025-01-07
  • 深入理解Arduino中的millis()函数

    一、millis()函数的原理 在使用Arduino进行开发时,我们经常会使用到millis()函数。这个函数的作用是返回程序运行时间(以毫秒为单位)。这个函数的实现原理是基于计算…

    编程 2024-12-15
  • Arduino开发环境详解

    一、Arduino开发环境搭建 在使用Arduino之前,需要安装Arduino开发环境。Arduino官网提供了开发环境的下载链接,用户可以根据所使用的操作系统下载相应的版本。 …

    编程 2024-12-12
  • Arduino下载安装教程

    一、Arduino编程软件下载 在进行Arduino编程之前,需要先下载Arduino编程软件。以下是下载Arduino编程软件的步骤: 1. 进入Arduino官网下载页面,选择…

    编程 2024-12-11
  • Arduino和树莓派——完美配合的微型计算机

    一、Arduino和树莓派Pico 1、Arduino是一款开源的微型控制板,它使用了Atmel AVR微控制器,可以编程控制交互式物品。Arduino也包括了Arduino ID…

    编程 2024-11-19
  • DHT11温度传感器的应用与介绍

    一、DHT11温度传感器原理图 /* * DHT11温度传感器原理图 * * * 1 – Vcc * | 2 – Data * | 3 – NC * * 4 – GND * */ …

    编程 2024-11-13
  • 使用Arduino MPU6050打造平衡车

    一、Arduino MPU6050舵机 Arduino是一款基于开放式硬件和软件的物联网开发平台,拥有强大的社区支持,可以在系统上运行无数种不同的模块和传感器。 其中,MPU605…

    编程 2024-11-04

发表回复

登录后才能评论