a片在线观看免费看视频_欧美婬片在线a_同性男男无遮挡无码视频_久久99狠狠色精品一区_《性妲己》电影在线观看_久久久99婷婷久久久久久_亚洲精品久久久久58_激情在线成人福利小电影_色婷婷久久综合五月激情网

0 賣盤信息
BOM詢價
您現在的位置: 首頁 > 技術方案 >消費電子 > 基于Arduino和DS18B20溫度傳感器自制模擬溫度計解決方案

基于Arduino和DS18B20溫度傳感器自制模擬溫度計解決方案

來源: elecfans
2021-11-17
類別:消費電子
eye 87
文章創建人 拍明

原標題:基于Arduino和DS18B20溫度傳感器自制模擬溫度計解決方案

基于Arduino和DS18B20溫度傳感器自制模擬溫度計解決方案


自制模擬溫度計不僅是一個富有教育意義的項目,也是一個能夠將理論知識轉化為實際應用的絕佳機會。本文將詳細探討如何利用流行的開源硬件平臺Arduino和高精度數字溫度傳感器DS18B20來構建一個可靠且易于使用的模擬溫度計。我們將深入剖析所需元器件的選擇、功能、以及為何選擇它們,并提供實現細節,確保您能成功完成這個項目。

image.png

項目概述與目標


我們的目標是設計并實現一個能夠實時測量環境溫度,并將溫度值以模擬方式(例如,通過模擬電壓輸出、LED燈條或小型模擬儀表)顯示出來的溫度計。選擇Arduino作為核心控制器是因為其易用性、豐富的庫支持和強大的社區。DS18B20傳感器因其單總線接口、高精度和寬測量范圍而成為理想的溫度測量元件。


核心元器件選擇與詳細解析



1. 微控制器:Arduino Uno R3


  • 元器件型號: Arduino Uno R3

  • 器件作用: 作為整個溫度計系統的“大腦”,負責讀取DS18B20傳感器的數據,處理這些數據,并根據處理結果控制模擬顯示輸出。它提供編程環境,使得我們可以上傳控制代碼。

  • 為何選擇:

    • 易用性與社區支持: Arduino Uno是Arduino系列中最受歡迎的板卡之一,擁有龐大的用戶群和豐富的在線資源(教程、論壇、庫文件),對于初學者而言非常友好。

    • 性價比高: 相較于其他微控制器平臺,Arduino Uno價格適中,且功能強大,足以滿足本項目需求。

    • 開發環境友好: Arduino IDE(集成開發環境)簡潔直觀,支持C++語言,使得編程變得簡單。

    • I/O接口豐富: Arduino Uno提供了數字輸入/輸出引腳(Digital I/O Pins)、模擬輸入引腳(Analog Input Pins)、PWM引腳(Pulse Width Modulation)等,能夠方便地連接各種傳感器和執行器。例如,DS18B20需要連接到一個數字引腳,而模擬顯示部分可能需要用到模擬輸出或PWM引腳。

    • USB供電與通信: 可以通過USB線纜直接連接電腦進行供電和程序上傳,同時也能通過串口進行數據通信,便于調試。

  • 功能:

    • 數據采集: 通過數字引腳與DS18B20通信,讀取溫度數據。

    • 數據處理: 將DS18B20讀取到的原始數字溫度值轉換為可讀的攝氏度或華氏度。

    • 邏輯控制: 根據溫度值控制模擬顯示設備的輸出,例如調整LED亮度、驅動模擬電壓表指針等。

    • 通信能力: 可以通過串口將溫度數據發送到電腦進行監控(可選)。


2. 溫度傳感器:DS18B20 數字溫度傳感器


  • 元器件型號: DS18B20(TO-92封裝或防水探頭版本)

  • 器件作用: 負責精確測量環境溫度,并將模擬溫度值轉換為數字信號輸出。

  • 為何選擇:

    • 單總線接口(One-Wire Interface): 這是DS18B20最大的優勢之一。它只需要一根數據線(加上電源和地線)就能與微控制器通信,極大地簡化了接線。這對于簡化電路設計和節省Arduino的I/O引腳非常重要。

    • 高精度: DS18B20提供高達9到12位的可配置分辨率,在$-10^circ C到+85^circ C范圍內,精度可達pm 0.5^circ C$,足以滿足大多數日常溫度測量需求。對于更高精度,可以配置為12位分辨率。

    • 寬測量范圍: 測量范圍寬廣,從$-55^circ C到+125^circ C$。這使得它適用于多種應用場景,無論是室內、室外還是工業環境。

    • 寄生電源模式: DS18B20支持寄生電源模式,即只需數據線和地線即可工作,從數據線竊取電源。這在某些布線受限或希望減少線纜數量的場景下非常有用,盡管在本項目中我們通常會選擇外部供電以確保穩定性。

    • 唯一64位序列碼: 每個DS18B20傳感器都擁有一個唯一的64位序列號,這使得在同一條單總線上連接多個DS18B20傳感器成為可能,并能通過序列號區分和讀取每個傳感器的數據。

    • 成熟的庫支持: Arduino平臺有非常成熟的DS18B20庫(例如OneWire庫和DallasTemperature庫),極大地簡化了編程。

  • 功能:

    • 溫度測量: 內置高精度熱敏電阻和模數轉換器(ADC),能夠將溫度變化轉換為數字信號。

    • 數字輸出: 通過單總線協議以數字形式輸出溫度數據。

    • 報警功能: 可編程的溫度高低報警功能(本例中可能不直接使用,但在其他高級應用中很有用)。

    • 非易失性存儲器(EEPROM): 用于存儲用戶定義的溫度上下限等配置信息。


3. 上拉電阻:4.7kΩ 電阻


  • 元器件型號: 4.7kΩ 金屬膜電阻

  • 器件作用: 用于DS18B20數據線(DQ)的上拉。

  • 為何選擇: 單總線協議要求數據線在空閑時處于高電平狀態。DS18B20內部是開漏(Open-Drain)輸出,這意味著它只能將數據線拉低到地,而不能主動將其拉高。因此,需要一個外部上拉電阻將數據線拉高到VCC(通常是5V),當DS18B20發送數據時,它會周期性地將數據線拉低。

  • 功能: 確保單總線在不傳輸數據時保持高電平,保證通信的正常進行。4.7kΩ是Dallas Semiconductor(現在是Maxim Integrated)推薦的典型值,適用于DS18B20的通信。


4. 模擬顯示元件(多種選擇,根據需求選擇其一或組合):


以下是一些可行的模擬顯示方案,您可以根據項目的復雜度和預算選擇最適合的一種或幾種。


方案A:LED 燈條/LED 陣列(模擬燈光漸變)


  • 元器件型號: WS2812B 可尋址RGB LED 燈條(或普通LED陣列配限流電阻)

  • 器件作用: 通過不同數量或不同亮度的LED點亮,直觀地顯示溫度變化。WS2812B燈條可以實現顏色和亮度漸變,提供更豐富的視覺效果。

  • 為何選擇:

    • WS2812B燈條: 僅需一個數據引腳即可控制多個LED,簡化接線。可以實現從冷色到暖色的漸變,或者根據溫度值改變LED點亮數量,非常直觀。

    • 普通LED陣列: 成本低廉,易于理解和實現。每個LED需要一個數字引腳控制(或通過移位寄存器/LED驅動芯片),適合顯示離散的溫度區間。

  • 功能:

    • WS2812B燈條: 接收Arduino發送的數字信號,控制每個LED的顏色和亮度,實現溫度值的可視化漸變顯示。

    • 普通LED陣列: Arduino根據溫度值選擇性點亮不同數量的LED,例如,每增加$5^circ C$就點亮一個LED。


方案B:指針式模擬電壓表/電流表


  • 元器件型號: 小尺寸直流電壓表(例如0-5V量程)或電流表(例如0-100mA量程),搭配驅動電路。

  • 器件作用: 將溫度值轉換為模擬電壓或電流信號,驅動指針偏轉,實現傳統模擬儀表的顯示效果。

  • 為何選擇: 具有復古和直觀的視覺效果,能夠清晰地顯示溫度變化的趨勢。

  • 功能:

    • Arduino的PWM輸出: Arduino的數字引腳可以通過PWM(脈沖寬度調制)產生模擬電壓信號。

    • RC濾波器: 將PWM信號通過RC(電阻-電容)低通濾波器平滑成相對穩定的直流電壓。

    • 驅動: 將平滑后的電壓(或通過限流電阻轉換為電流)輸入到模擬電壓表或電流表,驅動指針偏轉。例如,可以將$0^circ C$映射到0V,$100^circ C$映射到5V。


方案C:數字電位器(與模擬電壓表結合)


  • 元器件型號: MCP4131或AD5241等數字電位器

  • 器件作用: Arduino通過SPI或I2C接口控制數字電位器的阻值,進而調節輸出電壓,驅動模擬儀表。

  • 為何選擇: 相較于PWM+RC濾波器,數字電位器可以提供更精確和穩定的模擬電壓輸出,避免PWM帶來的紋波。

  • 功能: Arduino發送指令給數字電位器,調節其分壓比,從而產生與溫度值成比例的模擬電壓,驅動模擬電壓表。


方案D:DAC(數模轉換器)芯片(與模擬電壓表結合)


  • 元器件型號: MCP4725(I2C接口)或其他型號的DAC芯片

  • 器件作用: 將Arduino輸出的數字溫度值直接轉換為高精度的模擬電壓信號,用于驅動模擬電壓表。

  • 為何選擇: DAC芯片是專門用于將數字信號轉換為模擬信號的器件,其輸出精度和穩定性遠高于PWM+RC濾波器或數字電位器方案,尤其適用于需要高精度模擬輸出的場景。

  • 功能: Arduino通過I2C接口向MCP4725發送12位數字溫度值,MCP4725將其轉換為0-5V范圍內的模擬電壓,直接連接到模擬電壓表。


5. 面包板與跳線(杜邦線)


  • 元器件型號: 標準面包板(例如400孔或830孔)和各種長度的公對公、公對母、母對母跳線。

  • 器件作用: 面包板用于臨時搭建電路,無需焊接,方便測試和修改。跳線用于連接Arduino、傳感器和顯示元件。

  • 為何選擇:

    • 易于原型開發: 面包板使得電子元件的連接變得快速簡便,非常適合項目初期的測試和調試。

    • 可重復利用: 元件可以輕松插入和拔出,方便重復使用。

    • 安全性: 在焊接之前進行測試,可以有效避免短路或其他接線錯誤。

  • 功能: 提供一個無焊接的物理平臺,用于組裝電路并確保所有元件之間的電氣連接正確。


6. USB 數據線


  • 元器件型號: USB A到B型數據線(用于Arduino Uno)

  • 器件作用: 連接Arduino Uno到電腦,用于供電、上傳程序和串口通信。

  • 為何選擇: 這是Arduino Uno的標準連接方式,提供穩定可靠的電源和數據傳輸。

  • 功能: 為Arduino板提供電源,并將編譯好的代碼上傳到Arduino的微控制器中,同時允許Arduino通過串口向電腦發送調試信息。


7. 供電方式(可選,根據項目場景選擇)


  • 元器件型號: 9V電池(帶電池扣)或5V直流電源適配器

  • 器件作用: 當項目需要脫離電腦獨立運行時,提供穩定的電源。

  • 為何選擇: USB供電雖然方便,但如果項目需要長時間獨立運行或放置在特定位置,外部電源是必需的。

  • 功能: 為Arduino板及其連接的外設提供持續的電能。


電路連接圖(概念性描述,實際操作請參考具體引腳)


  1. DS18B20連接:

    • VCC(或紅色線) 連接到Arduino的 5V 引腳。

    • GND(或黑色線) 連接到Arduino的 GND 引腳。

    • DQ(數據線,或黃色線) 連接到Arduino的任意數字引腳,例如 D2

    • DQ 引腳和 5V 引腳之間連接一個 4.7kΩ上拉電阻

  2. 模擬顯示元件連接(以PWM+RC濾波器驅動模擬電壓表為例):

    • Arduino的一個 PWM引腳(例如 D9D10)連接到一個 1kΩ電阻

    • 電阻的另一端連接到 10uF電解電容 的正極。

    • 電解電容的負極連接到Arduino的 GND

    • 電解電容正極與電阻之間的節點連接到模擬電壓表的 正極

    • 模擬電壓表的 負極 連接到Arduino的 GND

  3. 電源連接:

    • 使用USB數據線連接Arduino到電腦進行開發和測試。

    • 獨立運行時,將9V電池連接到Arduino的DC插孔,或將5V適配器連接到DC插孔。


軟件編程(Arduino IDE)



1. 準備工作:安裝Arduino IDE和必要的庫


  • 下載并安裝Arduino IDE: 從Arduino官網下載最新版本的IDE。

  • 安裝OneWire庫和DallasTemperature庫:

    • 打開Arduino IDE。

    • 點擊“工具” -> “管理庫...”。

    • 在搜索框中輸入“OneWire”,找到并安裝OneWire庫。

    • 在搜索框中輸入“DallasTemperature”,找到并安裝DallasTemperature庫。


2. 編程思路


  1. 初始化: 包含必要的庫文件,定義DS18B20的數據引腳,初始化OneWire和DallasTemperature對象。

  2. 讀取溫度:loop()函數中,定時向DS18B20發送請求,讀取溫度數據。

  3. 數據處理: 將讀取到的原始溫度數據轉換為攝氏度或華氏度。

  4. 模擬顯示: 根據溫度值,通過Arduino的PWM功能或DAC芯片輸出相應的模擬信號,驅動模擬顯示設備。

    • PWM實現模擬電壓: 將溫度值映射到0-255的PWM占空比,然后輸出到PWM引腳。例如,$0^circ C$對應0, $100^circ C$對應255。

    • LED燈條: 根據溫度值計算需要點亮的LED數量或LED顏色。

  5. 串口輸出(可選): 將溫度值通過串口打印到電腦,便于調試和監控。


3. 示例代碼框架(以PWM驅動模擬電壓表為例)

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

// 定義DS18B20連接的Arduino數字引腳
#define ONE_WIRE_BUS 2

// 定義連接模擬電壓表的PWM引腳
#define ANALOG_OUTPUT_PIN 9 // 確保選擇一個PWM引腳 (例如 3, 5, 6, 9, 10, 11)

// 設置OneWire總線
OneWire oneWire(ONE_WIRE_BUS);

// 將DallasTemperature庫與OneWire總線關聯起來
DallasTemperature sensors(&oneWire);

void setup() {
 // 初始化串口通信,用于調試輸出
 Serial.begin(9600);
 Serial.println("DS18B20 溫度計啟動!");

 // 啟動DS18B20傳感器
 sensors.begin();

 // 配置模擬輸出引腳為輸出模式 (對于PWM,通常不需要顯式設置pinMode,但習慣上可以)
 pinMode(ANALOG_OUTPUT_PIN, OUTPUT);
}

void loop() {
 // 向DS18B20請求溫度轉換
 Serial.print("請求溫度...");
 sensors.requestTemperatures(); // 這會將溫度數據讀取到傳感器的內部存儲器

 // 從DS18B20獲取溫度值 (第一個傳感器)
 float temperatureC = sensors.getTempCByIndex(0);

 // 檢查溫度讀取是否成功
 if (temperatureC == DEVICE_DISCONNECTED_C) {
   Serial.println("錯誤: 無法讀取溫度數據!");
   delay(2000); // 稍作延遲再次嘗試
   return;
 }

 // 打印溫度到串口
 Serial.print("溫度: ");
 Serial.print(temperatureC);
 Serial.println(" °C");

 // 將溫度值映射到PWM輸出范圍 (0-255)
 // 假設我們希望將0°C映射到PWM的0,將100°C映射到PWM的255。
 // 您可以根據實際的溫度測量范圍和模擬儀表的量程進行調整。
 int pwmValue = map(temperatureC, 0, 100, 0, 255);

 // 限制pwmValue在有效范圍內 (0-255)
 pwmValue = constrain(pwmValue, 0, 255);

 // 將PWM值輸出到指定的PWM引腳
 analogWrite(ANALOG_OUTPUT_PIN, pwmValue);

 // 每2秒讀取一次溫度
 delay(2000);
}

代碼解釋:

  • #include <OneWire.h>#include <DallasTemperature.h>:引入必要的庫,用于與DS18B20通信。

  • #define ONE_WIRE_BUS 2:定義DS18B20數據線連接到Arduino的數字引腳2。您可以根據實際連接修改。

  • #define ANALOG_OUTPUT_PIN 9:定義用于模擬輸出的PWM引腳。請務必選擇Arduino Uno上具有PWM功能的引腳(通常是3, 5, 6, 9, 10, 11,帶波浪線~的)。

  • OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);:創建OneWire和DallasTemperature對象,用于傳感器通信。

  • sensors.begin();:在setup()函數中初始化傳感器。

  • sensors.requestTemperatures();:在loop()函數中請求傳感器進行溫度轉換。這是一個非阻塞函數,傳感器會開始測量,但不會立即返回結果。

  • sensors.getTempCByIndex(0);:獲取第一個(或唯一一個)DS18B20傳感器的攝氏度溫度值。如果連接了多個DS18B20,可以使用getDeviceAddress()getTempCByAddress()來指定讀取哪個傳感器。

  • map(temperatureC, 0, 100, 0, 255);:這是一個非常重要的函數,它將一個范圍內的值(這里是溫度,從0到100攝氏度)線性地映射到另一個范圍(這里是PWM值,從0到255)。您可以根據您的實際溫度范圍和模擬儀表的量程來調整map函數的參數。

  • constrain(pwmValue, 0, 255);:確保pwmValue始終在0到255之間,防止出現超出范圍的值導致異常。

  • analogWrite(ANALOG_OUTPUT_PIN, pwmValue);:將計算出的PWM值輸出到指定的引腳。Arduino會根據這個值生成一個相應占空比的方波,通過RC濾波器后即可得到一個模擬電壓。


調試與優化


  • 串口監視器: 在Arduino IDE中打開串口監視器,可以實時查看DS18B20讀取到的溫度值,這對于調試非常重要。

  • 電源穩定性: 確保為DS18B20和Arduino提供穩定的5V電源。如果使用電池供電,當電池電量不足時,可能會導致傳感器讀取不穩定。

  • 上拉電阻: 確保4.7kΩ的上拉電阻正確連接在DQ線和VCC之間,這是DS18B20單總線通信的關鍵。

  • 模擬顯示校準:

    • PWM+RC濾波器: 調整RC濾波器的參數(電阻和電容的值)可以影響輸出電壓的平滑程度和響應速度。較大的電容會使輸出更平滑但響應更慢。

    • 模擬電壓表: 如果您使用的是指針式電壓表,可能需要進行物理校準或在代碼中進行微調,以確保其指示與實際溫度匹配。可以通過測量在已知溫度下(例如冰水混合物$0^circ C$和沸水$100^circ C$)的電壓輸出,然后調整map函數的參數進行校準。

    • LED燈條: 調整map函數或LED控制邏輯,確保LED點亮數量或顏色變化符合預期,并且與溫度變化呈線性或非線性(根據您的設計)關系。

  • DS18B20的封裝選擇: 如果是用于測量液體或戶外溫度,推薦使用防水探頭版本的DS18B20,它通常帶有密封的不銹鋼外殼。


項目擴展與進階


完成基本的模擬溫度計后,您可以嘗試以下擴展功能:

  • 溫度閾值報警: 添加蜂鳴器或LED指示燈,當溫度超出預設范圍時發出警報。

  • LCD/OLED顯示屏: 除了模擬顯示外,增加一個LCD1602或OLED顯示屏,同時顯示精確的數字溫度值,方便用戶查看。

  • 數據記錄: 將溫度數據記錄到SD卡模塊中,方便長期監控溫度變化。

  • 網絡功能: 使用ESP8266或ESP32模塊,將溫度數據上傳到云平臺(如ThingSpeak),實現遠程監控。

  • 多個DS18B20傳感器: 利用DS18B20的單總線特性,連接多個傳感器,測量不同位置的溫度。

  • 溫度單位切換: 添加一個按鈕,允許用戶在攝氏度($^circ C$)和華氏度($^circ F$)之間切換顯示單位。


總結


通過Arduino和DS18B20溫度傳感器,我們不僅能夠構建一個功能完善的模擬溫度計,還能深入理解微控制器、傳感器通信和模擬信號處理的基本原理。從元器件的選擇到電路的搭建,再到軟件的編程,每一步都蘊含著豐富的電子工程知識。這個項目既是學習的起點,也是創新的平臺,希望本文能為您自制高精度模擬溫度計提供全面的指導和幫助。在實踐中,您將遇到各種挑戰,但解決這些挑戰的過程本身就是最大的收獲。

責任編輯:David

【免責聲明】

1、本文內容、數據、圖表等來源于網絡引用或其他公開資料,版權歸屬原作者、原發表出處。若版權所有方對本文的引用持有異議,請聯系拍明芯城(marketing@iczoom.com),本方將及時處理。

2、本文的引用僅供讀者交流學習使用,不涉及商業目的。

3、本文內容僅代表作者觀點,拍明芯城不對內容的準確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨立判斷做出的,請讀者明確相關結果。

4、如需轉載本方擁有版權的文章,請聯系拍明芯城(marketing@iczoom.com)注明“轉載原因”。未經允許私自轉載拍明芯城將保留追究其法律責任的權利。

拍明芯城擁有對此聲明的最終解釋權。

上一篇: 已是第一篇

相關資訊

拍明芯城微信圖標

各大手機應用商城搜索“拍明芯城”

下載客戶端,隨時隨地買賣元器件!

拍明芯城公眾號
拍明芯城抖音
拍明芯城b站
拍明芯城頭條
拍明芯城微博
拍明芯城視頻號
拍明
廣告
恒捷廣告
廣告
深亞廣告
廣告
原廠直供
廣告