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/zh-hant/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

發表回復

登錄後才能評論