
上一篇已經教大家溫度感測器LM35的使用方式,這次的專案會教大家如何加上伺服馬達,製作成可愛的箭頭式溫度計。
材料清單
接線圖

首先我們需要學習如何將溫度轉換成角度,我假設溫度感測範圍是0~40度,而伺服馬達旋轉範圍是0~180度,我們希望當溫度是0度時,伺服馬達旋轉至0度。當溫度是40度時,伺服馬達旋轉至180度。以此類推當溫度20度時,伺服馬達旋轉至90度。
那該怎麼辦到呢?Arduino有一個好用的數學函式:map(),只要三個步驟即可無痛轉換,第一步~輸入數值來源,第二步~設定來源數值的範圍(最大值與最小值),第三步~輸入希望轉換後的數值範圍(最大值與最小值),map() 就會幫您轉換成對應的數值囉。
map(輸入數值來源,來源最小值,來源最大值,轉換後的最小值,轉換後的最大值)
將剛剛的描述實際套用就會是:
map( 量測溫度 , 0 , 40 , 0 , 180 )
參考程式
//=================================================
#include <Servo.h> //新增伺服馬達函式庫
Servo myservo; //設定伺服馬達名稱為myservo
float Temp; //新增一個格式為浮點數的變數 Temp
float NewTemp = 0; //新增一個格式為浮點數的變數 NewTemp
//並設定 NewTemp初始值為0
int Angle; //新增一個格式為整數的變數Angle
//Angle變數用來代表轉換後的角度
void setup() {
Serial.begin(9600); //設定序列埠監控視窗的鮑率為 9600
pinMode(A0,INPUT); //設定 A0為輸入
myservo.attach(9); //myservo伺服馬達接在第9號腳位
}
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); //將溫度顯示在序列埠監控視窗
Angle = map(NewTemp,0,40,0,180); //將溫度轉換成角度
myservo.write(Angle); //讓伺服馬達輸出轉換的角度
delay(1000); //延遲 1秒
NewTemp = 0; //將NewTemp清為0
}
//=================================================
程式完成後接下來就是製作可愛的溫度計啦,您可以用紙(最好硬一點)、厚紙板、木板…等,與剪刀或美工刀製作。若是使用畫紙,還可以塗上自己喜歡的顏色喔,像小編就很偷懶啦!直接雷切機大切一波,下圖就是小編的偷懶成品。

實際裝上去測試後發現,小編的指針旋轉方向,似乎與溫度相反。當溫度越高時好像越轉左邊,溫度越低反而越轉右邊,這樣跟小編鯊魚嘴裡的刻度根本相反呀!!!
如果您也跟小編一樣的話,沒關係!還記得map() 的用法嗎?只要將轉換的最大值與最小值交換即可:
map( 量測溫度 , 0 , 40 , 180 , 0 )
如此一來當溫度為0度時,馬達轉向180,反之當溫度為40度時,馬達轉向0。修改程式後重新上傳~終於完成囉!
