鯊魚溫度計(LM35+伺服馬達)

Updated: Jan 8, 2019



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


材料清單:

ARDUINO UNO R3


ARDUINO UNO R3

LM35 類比溫度感測器

3條杜邦線(公/母)

5條杜邦線(公/公)

SG90 9G伺服器

迷你麵包板

鯊魚溫度計套件包


接線圖如下:


首先我們需要學習如何將溫度轉換成角度,我假設溫度感測範圍是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。修改程式後重新上傳~終於完成囉!



創客萊吧MakerLab

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

0989-250-580