類比溫度感測器 LM35



LM35是一款只需要一個類比接口就可以使用的溫度感測器,但在使用前需要知道它的眉角(台語),首先我們來參考一下它的 Datasheet,從它的 Datasheet可以知道電壓與溫度的關係,當0度C時我們量測到的電壓為 0V,每上升1度C電壓就增加 10mV,知道這個眉角後我們就能透過計算得出我們實際的溫度是幾度。


材料清單:

ARDUINO UNO R3

LM35 類比溫度感測器

3條杜邦線(公/母)


小編使用 UNO來擔任這次教學的主角,接線圖如下:


我們從A0讀取到的值並不是溫度也不是電壓的實際值,需要經過百分比與單位換算才能得到我們想要的溫度值。Arduino UNO的 analog輸入(A0~A5)所能讀到的範圍是 0~1024,而Arduino電壓範圍為 0~5V,所以我們可以透過下面的公式得到轉換後的電壓為幾V:


轉換的電壓 = ( A0的值 / 1024 ) x 5


求得 A0轉換後的電壓值後,透過從 Datasheet知道的~每上升1度C電壓就增加 10mV,我們將轉換後的電壓值再除 10mV就可以得出溫度值了。


溫度 = 轉換的電壓 / 10mV


參考程式:

//=========================================================

float Temp; //新增一個格式為浮點數的變數 Temp

void setup() {

Serial.begin(9600); //設定序列埠監控視窗的鮑率為 9600

pinMode(A0,INPUT); //設定 A0為輸入

}

void loop() {

Temp = analogRead(A0); //將A0讀到的值放入變數 Temp

Temp = (Temp / 1024 * 5) / 0.01; //透過計算轉換成溫度

Serial.println(Temp); //將溫度顯示在序列埠監控視窗

delay(1000); //延遲 1秒

}

//=========================================================


程式打好後就能打開序列埠監控視窗看看數值正不正確。

我們從監控視窗能看到數值與實際溫度差不多,也試著用手壓住感測器看看溫度上升的情形,發現溫度都有正常上升,但整體溫度讀值似乎不太穩定。對此小編相當苦惱,特別請教我們的神隊友大大來幫助我們。

我們需要透過取樣平均化來改進這樣的狀況,讓我們的數值不要這麼漂移。在程式當中會用到 for迴圈來加總10次測量到的溫度值,最後再除10來取得平均溫度。


參考程式:

//=================================================

float Temp; //新增一個格式為浮點數的變數 Temp

float NewTemp = 0; //新增一個格式為浮點數的變數 NewTemp

//並設定 NewTemp初始值為0

void setup() {

Serial.begin(9600); //設定序列埠監控視窗的鮑率為 9600

pinMode(A0,INPUT); //設定 A0為輸入

}

void loop() {

for(char i=0;i<10;i++) { //for 迴圈,迴圈10次

Temp = analogRead(A0); //將A0讀到的值放入變數 Temp

Temp = (Temp / 1024 * 5) / 0.01; //透過計算轉換成溫度

NewTemp = NewTemp + Temp; //將讀取到的值加上NewTemp

//再放入NewTemp

}

NewTemp = NewTemp / 10; //將加了10次的值除10得平均

Serial.println(NewTemp); //將溫度顯示在序列埠監控視窗

delay(1000); //延遲 1秒

NewTemp = 0; //將NewTemp清為0

}

//=================================================


透過平均化後可以看到數值變得比較穩定了。


您是不是成功了呢? 本次的教學就到這邊啦,下次會教大家使用伺服馬達搭配這次學到的LM35來製作一個可愛的溫度計,那就下次再見啦~

創客萊吧MakerLab

高雄市左營區博愛二路202號B1F        

0989-250-580