防疫小尖兵-用Arduino來做溫度計吧!

之前我們有在FB分享防疫小尖兵-用Arduino來做溫度計吧!

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

 

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

作者/攝影郭俊廷
時間

3HR

難度

 ★★☆☆☆

材料表

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

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

一、硬體接線

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

我們先來查看MLX90615的Datasheet(相關檔案請至下方連結下載)

MLX90615-Datasheet-Melexis.pdf

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

而在大部份的 Arduino板子上,SDA接在analog pin 4,而SCL接在 analog pin 5。

OLED的部分我們採用I2C的介面,一樣接在A4跟A5。

MLX90615腳位圖表(引用自MLX90615-Datasheet-Melexis.pdf)

MLX90615跟Arduino接腳對應表

MLX90615Arduino
VCC3.3V
SDAA4
SCLA5
GNDGND

OLED跟Arduino接腳對應表

OLEDArduino
VCC5V
SDAA4
SCLA5
GNDGND

 

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

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

 

二、程式設計

首先我們要匯入相關的程式庫

第一個是MLX90615的程式庫 根據下列網址把函式庫下載完解壓縮至自己使用的Arduino所在的libraries資料夾(如下圖),或是使用ZIP檔匯入程式庫

https://github.com/skiselev/MLX90615

MLX90615解壓縮至函式庫資料夾

 

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

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

 

搜尋U8g2並下載最新版本

 

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

//首先定義會使用到的程式庫
#include <Wire.h>
#include <mlx90615.h>
#include <U8g2lib.h>

//這裡是定義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專題分享,非醫療用途。

 

參考資源:

U8g2 相關教學:https://www.twblogs.net/a/5d207eeabd9eee1e5c83a6bb

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *