LM35是一顆溫度感測元件,可以測量攝氏(Celsius)溫度,並將溫度轉換成直流電壓輸出,其主要的特性如下列所示:
1.工作電壓範圍:4~30V(以TI公司為準)
2.工作溫度範圍:-55∘~150∘C
3.輸出信號類型:直流類比電壓
4.溫度與輸出比:10mV/∘C
5.溫度精確度:0.5∘C(在25∘C)
圖六、6-2_1 TI公司LM35外觀接腳與相關特性
(本圖取材自TI公司技術手冊僅此致謝)
由前面的技術資料可知,我們只要測量Vout這隻接腳的輸出電壓,然後再除以10mV,便可以得知LM35周邊的溫度值,也就是說只要把前一個範例的A0類比輸入腳接到LM35的Vout腳,就可以得到一個溫度測量電路,這也就是本範例打算要進行的工作。
◎ 功能與動作說明:
1、以ESP8266建立一無線WiFi AP存取點(即Soft—AP模式),這個AP存取點的SSID名稱為『ESP_softAP01』,而且不使用連線密碼。
2、此AP存取點內建伺服器的IP位址為:[ 192.168.4.1 ]。
3、當有客戶端(Client)裝置以瀏覽器連線上此伺服器時,會將接在類比接腳A0的LM35溫度感測器所量測到的溫度/電壓訊息,經過換算之後,回傳給連線的客戶端(手機、平板或筆電上的瀏覽器)。
4、如果客戶端裝置持續的連線,則系統會以固定的時間(在此為3秒)重新測量A0接腳的輸入電壓值,也就是LM35溫度感測器所量測到的溫度值,並主動傳送給客戶端裝置。
圖六、6-2_1 LM35溫度感測器客戶端瀏覽器連線後畫面
【圖六、6-2_1】是本範例程式在客戶端瀏覽器連線後預期出現的畫面,其中標記1的部分是本實習名稱的提示訊息,而標記2內容的是LM35文度感測器接到A0類比接腳的輸入轉換結果,為了方便使用者閱讀,所以同時以中英文的方式呈現出來。在此還是加上了一個量測次數計數器(Count),好讓使用者可以得知目前已經量測過多少次了。
◎電路圖:
圖六、6-2_2 類比式溫度感測器LM35溫度測量電路
在【圖六、6-2_2】的電路中,由於LM35的工作電壓範圍為4~30V,所以我們把LM35的正電源腳接在模組板的5V電源上(在NodeMCU模組上為Vin腳),而中間的量測電壓輸出腳Vout則接在模組板的A0腳,整個電路可說是非常簡單。
◎ 程式列表與說明:
#include <ESP8266WiFi.h>
#include "index.h"
// change these values to match your network
String softSsid = "ESP_softAP01";
//String softSsid = "ESP"+String(ESP.getChipId());
const char* softPassword = "12345678";
WiFiServer server(80);
String tmpString = "";
unsigned int count = 0;
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println("Serial started at 115200");
Serial.println();
Serial.println("Setting soft-AP Mode... ");
boolean result=WiFi.softAP(softSsid);
if(result==true)
{
Serial.println("soft-AP ready!");
Serial.print("softAP = ");
Serial.println(softSsid);
Serial.print("softIP = ");
Serial.println(WiFi.softAPIP());
server.begin();
}
else
Serial.println("soft-AP failed");
} // setup()結束
void loop()
{
// Check if a client has connected
WiFiClient client = server.available();
if (!client)
return;
count++;
tmpString = MAIN_page; // 取出html網頁回應程式
int AnalogIn=analogRead(A0);
Serial.print("Analog In = "); Serial.println(AnalogIn);
tmpString = MAIN_page;
float Temp=AnalogIn*3.3*100/1024;
Serial.print("Temperature = "); Serial.print(Temp); Serial.println(" 'C");
tmpString.replace("%Temp%", String(Temp) );
tmpString.replace("%count%", String(count) ); // 帶入測量次數
client.flush();
// client.print( header );
client.print( tmpString );
delay(5);
// The client will actually be disconnected when the function returns and 'client' object is destroyed
} // void loop()結束
// 以下部分為「index.h」標籤頁面的內容:
const char MAIN_page[] PROGMEM = R"=====(
HTTP/1.1 200 OK
Content-Type:text/html
Connection: close
<!DOCTYPE html>
<html>
<head>
<meta name='viewport' content='width=device-width, initial-scale=1.0'/>
<meta charset='utf-8'>
<meta http-equiv='refresh' content='3'>
<style>
body {font-size:100%;}
#main {display: table; margin: auto; padding: 0 10px 0 10px; }
</style>
<title>類比式溫度感測器LM35實習</title>
</head>
<body>
<div id='main'>
<h2><center>[Soft AP模式] <br>
類比式溫度感測器LM35實習<br></center><br>
溫度 = %Temp% 'C<br>
Temperature = %Temp% 'C <br>
Count = %count%
</h2>
</div>
</body>
</html>
)=====";
程式名稱:ESP_CH6_6_2_LM35.ino
本範例程式和上一個【ESP_CH6_6_1_VoltageIn.ino】非常類似,上面程式列表的64~93行便是這個伺服器的網頁首頁程式碼,整個html程式的字串變數名稱跟之前一樣命名為「MAIN_page[]」,為了能讓客戶端的瀏覽器能更快的自動定時讀取更新的量測結果,在下面這一行程式中把更新時間加快到3秒鐘:
74. <meta http-equiv='refresh' content='3'>
而【圖六、6-2_1】中標記1本實習名稱的提示訊息的部分,改成下面兩行程式:
84. <h2><center>[Soft AP模式] <br>
85. 類比式溫度感測器LM35實習<br></center><br>
而標記2的部分則修改成下面幾行程式去實現:
86. 溫度 = %Temp% 'C<br>
87. Temperature = %Temp% 'C <br>
88. Count = %count%
由於溫度的測量結果是動態變化的,為了配合這個特性,所以在此使用了兩個字串置換變數「Temp」、「count」,分別代表A0(也就LM35)的轉換結果與網頁刷新的次數。
在主迴圈(loop())程式中一開始便是在等待客戶端連線(40~42行),接著把前網頁首頁程式MAIN_page[]傳送到tmpString這個字串變數中:
45. tmpString = MAIN_page; // 取出html網頁回應程式
接著使用下面這行程式讀取到A0這根類比入腳的轉換值:
47. int AnalogIn=analogRead(A0);
然後再把由A0輸入的量測值轉換成對應的溫度值:
50. float Temp=AnalogIn*3.3*100/1024;
接著的51~53行程式會先把轉換的結果顯示在Arduino IDE的序列監控視窗中,以便我們偵錯之用,同時也把溫度的轉換結果(Temp)與量測次數值(count)分別帶入「tmpString」這個字串變數中的「Temp」、「count」這兩個變數中,最後執行下列程式,便可以把從A0輸入接腳所讀取到的電壓值回應給連線的客戶端瀏覽器。
57. client.println( tmpString );
◎ 執行結果:
圖六、6-2_3 使用LM35溫度感測器客戶端瀏覽器連線後不同溫度量測畫面
【圖六、6-2_3】是客戶端瀏覽器與系統連線後開始量測溫度的畫面,由於自然界中一般溫度改變的速度本來就很慢,所以即使將測量更新的時間縮短到3秒,也不容易看到溫度的快速變化;一般要觀察溫度的改變可以用手指去觸摸LM35的外殼,不過能上升的溫度有限,如果手邊有吹風機或是烙鐵可以靠近試看看,但要注意不要把LM35的塑膠外殼燒焦了!
可以請問為什麼您轉換為攝氏溫度是用*3.3*100/1024嗎?
回覆刪除為什麼是這樣轉換? 感謝