【CAVEDU講堂】防疫小尖兵,用Arduino來做溫度計吧!

作者/圖片來源:CAVEDU 教育團隊

我們使用MLX90615紅外線非接觸溫度計感測器連接Arduino與OLED,就能夠即時看到偵測到的溫度呢,當身體接近感測器時就能夠明顯看出溫度的變化喔!

今天就來完整教學如何製作吧!

材料表

關於MLX90615紅外線非接觸溫度計感測器(以下簡稱MLX90615)如何連接Arduino與OLED我們今天就來分享如何自己製作呢!

首先先來看看我們執行的成果影片:

https://www.facebook.com/CAVEEducation/videos/2824450780981764/?v=2824450780981764

硬體接線

首先要先查看我們的硬體的腳位是什麼?如何接線到Arduino呢?

我們先來查看MLX90615的Datasheet(相關檔案連結),根據MLX90615的Datasheet的圖表(如下圖)查看我們需要在SDA跟SCL腳位放一個300K的提升電阻,VSS接地,VDD接電源這個提升電阻是由於這個電路是使用開極集設計的,是為了提供導通電流,確保高低電位的電壓準位而使用的。

而在大部份的 Arduino板子上,SDA接在analog pin 4,而SCL接在 analog pin 5。OLED的部分我們採用I2C的介面,一樣接在A4跟A5。

MLX90615腳位圖表(Source)

MLX90615跟Arduino接腳對應表

  • MLX90615—Arduino
  • VCC—3.3V
  • SDA—A4
  • SCL—A5
  • GND—GND

OLED跟Arduino接腳對應表

  • OLED—Arduino
  • VCC—5V
  • SDA—A4
  • SCL—A5
  • GND—GND

根據腳位圖表所提供的資訊我們的電路圖設計如下:

MLX90615、OLED、Arduino整體電路接線圖

程式設計

首先我們要匯入相關的程式庫,第一個是MLX90615的程式庫,根據下列網址把函式庫下載完解壓縮後,到自己使用的Arduino所在的libraries資料夾(如下圖),或是使用ZIP檔匯入程式庫。

https://github.com/skiselev/MLX90615

MLX90615解壓縮至函式庫資料夾

接著還要下載OLED顯示功能的程式庫U8g2,可以在管理程式庫裡搜尋U8g2 by oliver的程式庫(如下圖)。

點選工具、管理程式庫裡進入搜尋介面

搜尋U8g2並下載最新版本

下載完成開始設計我們的程式。

//首先定義會使用到的程式庫
#include
#include
#include

//這裡是定義MLX90615所得到的值跟U8G2使用什麼型號尺寸的OLED
MLX90615 mlx = MLX90615();
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

//這裡開始定義OLED上要即時顯示的畫面有什麼
void draw(void) {
u8g2.setFont(u8g2_font_helvB24_tf );//定義要顯示什麼字型
u8g2.drawStr(10,30,"TEMP:"); //設定在10行30列的位置顯示TEMP:
u8g2.setCursor(10, 60); //設定在10行60列的位置
u8g2.print(mlx.get_object_temp(),1); //顯示得到的目標溫度數值到小數點一位
u8g2.drawStr(80,60,"\260C"); //設定在80行60列的位置顯示℃
}

//這裡定義u8g2開始設定序列埠鮑率跟偵測MLX90615有無正常讀取顯示它的ID
void setup() {
u8g2.begin();
Serial.begin(9600);
Serial.println("Melexis MLX90615 infra-red temperature sensor test");
mlx.begin();
Serial.print("Sensor ID number = ");
Serial.println(mlx.get_id(), HEX);
}

//重覆執行的部分設定在序列埠上顯示MLX90615內部環境溫度跟測量目標溫度,還有設定一直更新OLED的顯示畫面
void loop() {
Serial.print("Ambient = ");
Serial.print(mlx.get_ambient_temp()); //ambient temperature
Serial.print(" *C\tObject = ");
Serial.print(mlx.get_object_temp()); //object temperature
Serial.println(" *C");
delay(500);

u8g2.firstPage();
do {
draw();
} while( u8g2.nextPage() );
delay(100);

}

以上我們的程式碼解說到這裡。

執行成果

我們使用KEYES Arduino UNO R3來當我們的Arduino開發板,它有另外把I2C腳位拉出來方便我們接線。

實際測量的畫面如下:

沒有手指接近時的溫度

手指接近時的溫度

以上就是我們使用MLX90615、OLED、Arduino實作溫度計的教學,喜歡DIY的朋友們也可以嘗試看看自己焊在麵包板上讓它移動更方便更容易測量其他地方的溫度歐。

*注意此專題為Maker專題分享,非醫療用途。

參考資源:

(本文經CAVEDU同意轉載,原文連結;責任編輯:王姵文)

CAVEDU 教育團隊

Author: CAVEDU 教育團隊

CAVEDU 教育團隊是由一群對教育充滿熱情的大孩子所組成的機器人科學教育團隊。致力推動國內機器人教育。

Share This Post On
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x