# 利用Arduino測得的數值做即時圖表輸出 雄女資研24th跨組合作成果展 機器人組:張語軒、盧巧安 程式組:籃卉蓁 >[TOC] ## 一、專案內容簡述: ### 專案架構 ![](https://i.imgur.com/NuilQIa.png) ### 硬體: #### 1.Arduino UNO R3: ![](https://i.imgur.com/f8IxUye.png) >Arduino是一款便捷靈活、方便上手的開源電子原型平台。包含硬體(各種型號的Arduino板)和軟體(Arduino IDE)。 Arduino詳細介紹請參照機器人組上課講義pdf檔:https://is.gd/iGtAEB #### 2.DHT-11 溫濕度感測模組: ![](https://i.imgur.com/YPFNPmv.png) >1、濕度測量範圍:20---90%RH 2、濕度測量精度:±5%RH 3、溫度測量範圍:0---50℃ 4、溫度測量精度:±2℃ p.s.「相對溼度」(RH)是絕對溼度與最高溼度之間的比,它的值顯示水蒸 氣的飽和度有多高。 相對溼度為100%的空氣是飽和的空氣。 相對溼度是 50%的空氣含有達到同溫度的空氣的飽和點的一半的水蒸氣。 相對溼度超過 100%的空氣中的水蒸氣一般會凝結出來。 #### 3.其它: >USB傳輸線 麵包板 杜邦線 ### 軟體: #### 1.Arduino IDE; Arduino IDE為開源軟體,使用java撰寫,為arduino官方版的開發軟體,程式語法以C語言為主。 #### 2.Tera Term ; Tera Term 是一款好用的開放源碼 (Open Source) 終端機連線工具。 本專案將arduino 輸出的資料存成純文本文件,以便用gnuplot 輸出圖表。 #### 3.gnuplot; 可以匯入各種文字座標檔,也可以匯出圖檔,是一套跨平臺的數學繪圖自由軟體,可以繪製數學函數圖形,也可以從純文字檔讀入大量數據 (例如座標資料), 繪製統計圖表等等。它與其他軟體保持良好的溝通;可以產生 png, svg, ps, hpgl, ... 等等開放的圖形檔案格式的輸出, 供文書處理/簡報/試算表/... 等等軟體匯入。 ## 二、專案實作 ### 硬體安裝 - 腳位連接 |DHT-11| Data | GND| 5V | |--| -- | -------- | -------- | |**Arduino**|**8** | **GND** | **5V** | ### 此專案中gnuplot的使用 - gnuplot 安裝&基礎教學:http://faculty.pccu.edu.tw/~cichou/gnuplot/001.htm - gnuplot 實例解說:https://hackmd.io/s/Skwp-alOg --- #### 1.起手式: 安裝好gnuplot後,打開它就就會看到以下頁面 ![](https://i.imgur.com/MXdFDZi.png) gnuplot原本設定的字體有點小,所以我們按滑鼠右鍵,選擇 Choose Font 按下去 ![](https://i.imgur.com/mDfHfiV.png) 然後會出現以下頁面 ![](https://i.imgur.com/M8PLSWU.png) 大小我們改成18,再按確定 畫面變得比較舒適了~ ![](https://i.imgur.com/q5vE8rI.png) #### 2.指令教學: > gnuplot> 它是gnuplot的輸入提示符,每當換行就會立即輸入上一行指令 總之,一行一行把你的指令在這裡打下去就對了XD 以下是範例: ![](https://i.imgur.com/f6SSTlh.png) 我們一行一行來看 **第一行** >set title "Humidity & Temperature chart" 設定圖形的標題為 Humidity & Temperature chart **第二行** >set xlabel "time(s)" 設定x軸的名稱為 time(s) **第三行** >set ylabel "%,oC,oF" 設定y軸的名稱為 %,oC,oF **第四行** >set xtics 0,5,80 > 設定x軸以5為間隔 顯示刻度0~80 第一個數字是起始點,第二個是間隔長度,第三個則是終點 **第五行** >set ytics 20,5,90 > 設定y軸以5為間隔 顯示刻度20~90 第一個數字是起始點,第二個是間隔長度,第三個則是終點 **第六行** 最重要的指令 >plot "test.txt" using 1:2 with linepoints linewidth 3 linecolor 3 pointtype 7 pointsize 3,\\ >"test.txt" u 1:3 w lp lw 3 lc 4 pt 3 ps 3,\\ >"test.txt" u 1:4 w lp lw 3 lc 2 pt 5 ps 3 title "oF" > 這三行都是使用test.txt這個檔案裡的資料來繪製圖形,所以要寫在一起,我們使用"\\"來排版 首先,plot "test.txt" 表示使用test.txt這個檔案裡的資料來繪製圖形 而test.txt如下 ![](https://i.imgur.com/TJ7Qw7g.png) using 1:2 表示使用資料的第一排和第二排數據 with linepoints linewidth 3 linecolor 3 pointtype 7 pointsize 3 以線條和點顯示圖形 線粗:3號 顏色:3號 點的圖示:7號 點的大小:3號 接下來兩行是相似的設定,只是使用簡寫,相信不難猜XD 而它還可以再簡寫,因為後兩行是使用相同的檔案,所以"test.txt" 可以簡寫成" " 最後一行的最後面,title "oF" 是設定這個線條的名稱為oF(顯示在圖表右上角) 接下來看出現的圖表: ![](https://i.imgur.com/TV9MIQJ.png) 我們發現X軸的數字擠在一起了 按control+滑鼠滾輪 來放大看看 ![](https://i.imgur.com/2K2YCoY.png) ![](https://i.imgur.com/z9HQZdO.png) ![](https://i.imgur.com/sX0kIw9.png) 恩~圖形繪製成功! #### 3.常用指令: 基礎必備: - plot "檔案名稱":使用檔案裡的資料繪製圖形 - plot sin(x):繪製這個函式sin(x)的圖形 - set title "GGG": 設定圖形標題為 GGG - set xlabel "XXX", a,b: 設定 X 軸的名稱為 XXX (Y 軸亦同), 從預設向右移動 a,向上移動 b - set xlabel "XX" font "Times-Italic,26": 設定X軸的名稱為 XX,以 Times-Italic 字型大小 26 - set label "XX" textcolor lt 2: 以linetype 2 顯示 XX - set xrange [a:b]: 設定 X 軸範圍從 a 到 b (Y 軸亦可);若是看不到圖形,可用 set autoscale 自動調回 - set xtics a: 設定顯示的 X 軸座標與刻度, 每次增加 a ;在 logscale 時,預設的設定會沒有小刻度 - set xtics a,b: 設定顯示的 X 軸座標與刻度 起始值 a,每次增加 b - set key title "XXX": 設定圖例的名稱 - set key Q,W Left reverse: 將圖例與曲線標題倒過來放在圖上座標 (Q,W) 處 - reset: 重新設定 - set term png enhanced font 'Verdana,10': 設定圖片類型`` - set output 'runtime.png': 存檔名稱 其他參考: - set logscale {x,y}: 設定 X 或 Y 軸或是兩者為 logscale - set format y "10^{%L}":Y 軸的值以 10 的 L 次方顯示 - set format x "%a.bf": X 軸的值以總長 a 位數,小數點以下 b 位顯示 - set format x "%a.be": 以科學記號顯示 - set format x "": 不顯示X軸的座標值 - set key spacing D: 設定圖例間的寬度增加 D 倍 - set label "SSS" at Q,W: 設定 SSS 這三個字出現在座標(Q,W)處 - set grid: 在各主要刻度畫出格子 #### 4.備註 Tera Term 連接終端機有兩種模式,分別是常見的TCP/IP和Serial port,這裡使用的是Serial port gnuplot 線條設定參考: ![](https://i.imgur.com/PFWfdlp.png) ### 三、參考資料 1.如何把 Arduino 丟出來的資料儲存成檔案?: http://coopermaa2nd.blogspot.com/2012/01/arduino.html 2.gnuplot 語法解說和示範: https://hackmd.io/s/Skwp-alOg 3.利用Arduino+gnuplot作數據即時繪圖: http://a-chien.blogspot.com/2016/07/arduinognuplot.html 4.Arduino DHT11 教學: http://a091234765.pixnet.net/blog/post/400005313-%5B%E7%AD%86%E8%A8%98%5Darduino%E5%AF%A6%E9%A9%97%E5%8D%81%E4%B8%80%3Adht11%E6%95%B8%E5%AD%97%E6%BA%AB%E6%BF%95%E5%BA%A6%E5%82%B3%E6%84%9F%E5%99%A8 5.gnuplot簡易安裝說明: http://faculty.pccu.edu.tw/~cichou/gnuplot/001.htm 6.一個筆記部落格 Gnuplot 入門教學: https://randle.wordpress.com/2007/06/12/gnuplot-induction/#c2 7.gnuplot 中文手冊 http://lab.semi.ac.cn/sitefiles/services/cms/utils.aspx?type=Download&publishmentSystemID=142&channelID=148&contentID=4747 8.Arduino IDE 安裝 & 使用:http://www.waveshare.net/study/article-4-1.html 9.https://a091234765.pixnet.net/blog/post/400005313-%5B%E7%AD%86%E8%A8%98%5Darduino%E5%AF%A6%E9%A9%97%E5%8D%81%E4%B8%80%3Adht11%E6%95%B8%E5%AD%97%E6%BA%AB%E6%BF%95%E5%BA%A6%E5%82%B3%E6%84%9F%E5%99%A8 10.安裝 & 快速上手:http://coopermaa2nd.blogspot.com/2012/01/tera-term.html?m=1 11.將Arduino傳送的資料存成檔案:http://coopermaa2nd.blogspot.com/2012/01/arduino.html?m=1