# 利用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