電子技術(三) 小專題報告 紅外線感溫顯示器 電子技術(三) 小專題報告 紅外線感溫顯示器 組別:第五組 組員:何冠翰 S0253003 王致傑 S0253014 陳俊良 S0253023 黃鈺鈞 S0253041 指導老師: 林得裕 教授
目錄 一、 前言‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧3 二、 功能描述‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧4 三、 方塊圖‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧5 四、 元件介紹‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧6 D6T_44L‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧6 I2C‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ 8 Arduino‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧11 五、 裝置的程式設計‧‧‧‧‧‧‧‧‧‧‧‧16 裝置的程式介紹-JAVA‧‧‧‧‧‧‧16 裝置的程式介紹-C#‧‧‧‧‧‧‧‧‧20 六、 實驗記錄‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧23 七、 成果展示‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧27 八、 參考文獻‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧28
前言 在此次小專題,我們希望實現一個小規模的熱像 儀,其最主要的功能為溫度感測,藉由D6T_44L上的 紅外線接收器接收紅外線後,經由D6T_44L上的晶片 將訊號轉為電壓輸出至Arduino的板子。而我們的目標 要把Arduino傳出的16個溫度數值以4乘4的陣列方式呈 現,並試著設定在各個溫度下16格的顏色會隨著它們 各自溫度數值變化而改變。
功能描述 溫度感測 濾雜訊 將溫度數據類比成顏色繪製 雙平台:C#、JAVA EXCEL輸出(C#) 攝氏與華氏的轉換(JAVA)
方塊圖 D6T_44L I2C Arduino USB Windows C# JAVA
D6T_44L 右圖為本次實驗的儀器 之一(D6T_44L),由一個 Silicon lens 內含Thermop- ile sensor 。 Silicon lens 收集輻射熱 (遠紅外線),將物體投射到 Thermopile sensor上形成一 個電動勢,藉由D6T_44L上的 類比電路轉換成溫度數據再傳 送給I2C。
D6T_44L 右圖為投影示意圖 D6T_44L特性: 工作電壓:4.5~5.5V 工作溫度:0~50ºC 感測溫度:-10~60ºC 可視角度:X=44.2 º Y=45.7 º
I2C 右圖為D6T_44L的轉接頭I2C GND接地 VCC 接5V SDA為Data line(限壓5V) SCL為Clock line(限壓5V) 再依照接4條線至對應的Ardui- no的PIN腳。
I2C *MCU即為Arduino *本次實驗未使用電阻
I2C PTAT(Lo+Hi)為I2C的起始檢查數據,並非測 量到的溫度,故忽略。 P0~P15為溫度數據。 上圖為I2C傳送至Arduino的資料格式,黃色 區域為我們實驗測量出的溫度數據共35bits。 PTAT(Lo+Hi)為I2C的起始檢查數據,並非測 量到的溫度,故忽略。 P0~P15為溫度數據。 PEC為截止數據,讀到此數據就為一完整循環 並終止此次讀取。
ArduIno 右圖為arduino,在 本次實驗中用來接收從 I2C傳來的溫度數據,並 利用程式將16個溫度數 據顯示出來。
ArduIno SCL:A5(第19支腳位,為Clock line) SDA:A4(第18支腳位,為Data line) VCC:A3(第17支腳位,設定為5V) GND:A2(第16支腳位,設定為0V)
ArduIno-Code void loop() { int i; Wire.beginTransmission(D6T_addr); Wire.write(D6T_cmd); Wire.endTransmission(); if (WireExt.beginReception(D6T_addr) >= 0) { i = 0; for (i = 0; i < 35; i++) { rbuf[i] = WireExt.get_byte(); } WireExt.endReception();
ArduIno-Code t_PTAT = (rbuf[0]+(rbuf[1]<<8)); //”<<8”(2^8 = 256) for (i = 0; i < 16; i++) { tdata[i]=(rbuf[(i*2+2)]+(rbuf[(i*2+3)]<<8)); //從[2]ˊ[3] 到[32]ˊ[33] // P[0]P[15] } output_json(); delay(200);
ArduIno-Code void output_json() { for (int i = 0; i < 16; i++) { Serial.print(tdata[i]); //將P[0] 到P[15] 印出來 Serial.print(" "); } Serial.println("");
裝置的程式設計-JAVA JAVA的介面如下圖:
裝置的程式設計-JAVA JAVA的程式介紹: Control SerialTest Colorcode Colorblock
裝置的程式設計-JAVA Control:主程式->控制整個程式的進行。 介面->包含共8個控制選項。 Colorcode:介面最左邊色碼表的子程式。 Colorblock:介面顯示色溫的子程式。 SerialTest:Java跟Arduino的溝通程式。 (參考Arduino官網之範例)
裝置的程式設計-JAVA Control的設計概念: 使用JPanel和Jframe建構出介面環境。 8個控制選項利用boolean置入if去控制做與不做。 呼叫SerialTest將資料傳至Control內的StringT- okenizer將一列資料分割成16個字串數據存至陣 列內。 使用for迴圈將16個溫度數據畫成16個填滿顏色的 正方形。 使用Switch去選擇每個溫度數據的校正公式。 呼叫Colorcode和Colorblock繪製結果。
裝置的程式設計-C# C#的介面如下圖:
裝置的程式設計-C# 使用Serial Port方法從Arduino讀取D6T_44L 感測到的訊號,將16個紅外線強度數據以字串 的形式儲存到暫存器裡面。 將16個強度數據轉換成攝氏溫度與色溫,將兩 者以繪圖形式顯示於介面的Panel上,並且可 用checkboxes選擇顯示的類型(可同時顯示)。 可使用平均值的方式使溫度的誤差值變小,缺 點會使掃描度速度變慢。 使用比較的方式在4x4的溫度區塊中,找出最 高溫與最低溫,並標記坐標,另外新增一個面 積平均溫度以供參考。
裝置的程式設計-C# 在介面上放置4個按鈕與1個Port的選擇表單, 分別為“開始”ˊ“暫停”ˊ“停止”ˊ“儲 存數據”,按下開始鍵時會隱含一個EXCEL文 件並開始將溫度陣列寫入表格中,在按下暫停 鍵時“儲存數據”的Botton將顯示為可使用, 並將EXCEL文件存入“D:/”槽中。 Port的選擇表單可以選擇電腦上以使用中的 COM Ports,預設為Off,如果未選擇會跳出一 個Message Box要求選擇一個COM Port。
實驗記錄 校正: 因D6T_44L計算出的16個數據彼此之間會有誤 差值,我們藉由其他感測溫度之儀器做為基準值, 調整16個數據,盡量將誤差的影響降低,獲得更加 準確的數據。
下圖 左手邊之介面為實驗組 右手邊之儀器為對照組 實驗記錄 下圖 左手邊之介面為實驗組 右手邊之儀器為對照組
實驗記錄 校正實驗數據:
實驗記錄 修正結果之圖形如下:
成果現場展示 JAVA:當場展示 C#:
參考文獻 Arduino和JAVA溝通程式: http://playground.arduino.cc/Interfacing/Java D6T_44L說明書: https://www.components.omron.com/components/web/pdfl ib.nsf/0/305E545BDF3C5FD486257C3C005EF2D0/$file/D6T- 01_ThermalIRSensor-Whitepaper.pdf Arduino Code參考範例: http://mag.switch-science.com/2013/03/27/mems_temp_ sensor/ Java Illuminaed-An active learning approach-4th Edition Author:Anderson Franceschi Visual C# 2013程式設計經典-蔡文龍 著
參考文獻 .NET Framework: https://msdn.microsoft.com/zh-tw/library/ w0x726c2%28v=vs.110%29.aspx C# 輸出 Excel: http://xyz.cinc.biz/2013/10/csharp-create-excel.html