有時(shí),我們需要在項(xiàng)目中添加一個(gè)溫度指示器。因此,在本篇文章中,您將學(xué)習(xí)如何使用Arduino和DS18B20溫度傳感器制作一款模擬溫度計(jì)。
DS18B20模塊
首先,Maxim DS18B20數(shù)字溫度計(jì)提供9位至12位攝氏溫度測(cè)量,并具有報(bào)警功能以及非易失性用戶可編程的上下觸發(fā)點(diǎn)。同樣,DS18B20通過(guò)1-Wire總線進(jìn)行通信,根據(jù)定義,該總線僅需要一條數(shù)據(jù)線(和地線)即可與中央微處理器進(jìn)行通信。此外,DS18B20可以直接從數(shù)據(jù)線獲取電源(“寄生電源”),而無(wú)需外部電源。
實(shí)際上,每個(gè)DS18B20都有一個(gè)唯一的64位串行代碼,它允許多個(gè)DS18B20在同一1-Wire總線上工作。因此,使用一個(gè)微處理器控制分布在大面積上的許多DS18B20很簡(jiǎn)單。
所需的零件
● Arduino Uno開發(fā)板
● DS18B20傳感器
● 模擬電壓表
電路
幸運(yùn)的是,電路是如此簡(jiǎn)單。首先,將帶有(-)符號(hào)的DS18b20引腳連接到Arduino GND,將帶有(+)符號(hào)的引腳連接到5V,將信號(hào)引腳連接到數(shù)字引腳2,以開始感測(cè)溫度。我們將電壓表的正極連接到數(shù)字引腳9(PWM引腳之一),將負(fù)極連接到GND。然后,要將電壓表的標(biāo)簽更改為攝氏溫度計(jì),只需下載附件中的照片并打印出來(lái)即可!
脈沖寬度調(diào)制
簡(jiǎn)而言之,脈寬調(diào)制或PWM是一種通過(guò)數(shù)字方式獲得模擬結(jié)果的技術(shù)。因此,我們可以發(fā)送一個(gè)脈沖,而不是向PWM中的數(shù)字引腳寫入高電平。因此,Arduino UNO的一些數(shù)字引腳支持PWM,您可以通過(guò)旁邊打印的信號(hào)(?)識(shí)別它們。
代碼
首先,您需要在Arduino IDE中添加“DallasTemperature”庫(kù),因?yàn)樵搸?kù)支持Maxim溫度IC,包括我們的DS18B20。該代碼包含三個(gè)主要方面:從傳感器讀取溫度、將溫度轉(zhuǎn)換為一個(gè)PWM值以及在溫度計(jì)上顯示該值
首先,在setup函數(shù)中,我們將從傳感器讀取溫度。然后,將其傳遞給PWM函數(shù),以將獲取的值轉(zhuǎn)換為0到255范圍內(nèi)的PWM值。這可以在函數(shù)內(nèi)部借助“map”函數(shù)來(lái)完成。接下來(lái),我們將其寫入引腳9,以顯示在電壓表上。
不過(guò),您可以指定自己喜歡的最低和最高溫度度,但您應(yīng)該注意:這兩個(gè)值之間的差距越小,溫度計(jì)的分辨率就越高。讓我們看一下代碼:
//Written by Nick Koumaris
//info@educ8s.tv
//educ8s.tv
#include
#include
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int MIN_TEMP = 16;
int MAX_TEMP = 28;
void setup() {
pinMode(9,OUTPUT);
Serial.begin(9600);
sensors.begin();
}
void loop() {
float temperature = getTemperature();
int voltage = temperatureToPWM(temperature);
analogWrite(9,voltage);
delay(500);
}
float getTemperature()
{
float temperature =0;
sensors.requestTemperatures(); // Send the command to get temperatures
temperature = sensors.getTempCByIndex(0);
Serial.println(temperature);
return temperature;
}
int temperatureToPWM(float temperature)
{
float temp=0;
float voltage = 0;
temp = temperature*10;
voltage = map(temp,MIN_TEMP*10,MAX_TEMP*10,0,250);
return voltage;
}
編輯:hfy
-
溫度傳感器
+關(guān)注
關(guān)注
48文章
2949瀏覽量
156165 -
DS18B20
+關(guān)注
關(guān)注
10文章
779瀏覽量
80937 -
溫度計(jì)
+關(guān)注
關(guān)注
6文章
405瀏覽量
78491 -
Arduino
+關(guān)注
關(guān)注
188文章
6471瀏覽量
187288 -
溫度指示器
+關(guān)注
關(guān)注
0文章
5瀏覽量
1618
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論