七月中旬參加MAKERPRO的「自造迷你空氣盒子實戰工作坊」之後,我把原先的盒子另外加了藍牙模組,就增加了簡單單向通訊功能。
原始從Serial Print出來的資料長這樣,每10秒會吐出一次這樣的資料。為了讓它的資料可以被手機的bluetooth graphic接收,所以我去把其中PM2.5的資料前面加個E,另外print一條出來
State #0.
loop
State #1.
T = 30.00,H = 54.00
PM1.0=11 ug/m3
PM2.5=14 ug/m3
E14
PM10=21 ug/m3
complete
為了長期紀錄資料,所以我用電腦藍牙與之連接。ubuntu的藍牙連接埠是/dev/rfcomm0
增加時間戳記的指令是ts,ts後面跟著'%Y-%m-%d %H:%M:%S', 是時間戳記的格式,可以自訂。最後再把資料送到logfile這個檔案裡
ts '%Y-%m-%d %H:%M:%S', < /dev/rfcomm0|grep E >>logfile
出來的資料就是長這樣,每筆serial print的資料都會加上電腦的本地時間
2016-07-17 04:39:56, State #0.
2016-07-17 04:39:56, loop
2016-07-17 04:39:56, State #1.
2016-07-17 04:39:56, T = 30.00,H = 54.00
2016-07-17 04:39:56, PM1.0=11 ug/m3
2016-07-17 04:39:56, PM2.5=14 ug/m3
2016-07-17 04:39:56, E14
2016-07-17 04:39:56, PM10=21 ug/m3
2016-07-17 04:39:56, complete
由於只需要PM2.5的資料,所以另外用指令把logfile的資料擷取出單純PM2.5的資料,存在logfile2,以下的資料處理就只針對logfile2去作。
直接使用logfile2來繪圖,可以得到將近一個月的室內PM2.5起伏狀況。
===gnuplot script START====
#!/usr/local/bin/gnuplot -rv
set xdata time
set datafile separator ","
set timefmt "%Y-%m-%d %H:%M:%S"
#set format x "%H:%M:%S"
set format x "%m/%d\n%H:%M"
#set xrange ["2016-07-02 23:00:00":"2016-07-02 24:00:00"]
#set xtics "2016-07-02 20:00:00",600,"2016-07-02 24:00:00"
set yrange [0:100]
#unset mxtics
set xlabel "time"
set ylabel "PM2.5"
set title "PM2.5"
set grid
unset key
plot "logfile3" using 1:2 with lines title "value1" linetype rgb "blue"
pause -1
===gnuplot script END====
我想要再看看另外的圖片,是把這一個月的資料,畫在一天24小時內,看看是否會看得出週期性,一開始用線來畫,一條線就是一天的資料。
後來改用point來畫,看起來比較能看出趨勢。總之室內的PM2.5濃度大多是落在40以下,偶而有衝上100以上的,其實是自己焊接東西造成的。
作法紀錄在底下:
依照日期,切割每天資料到個別的文件中,比方說7月16日的就切到16這個文件裡。接著把每行中的「秒」資料刪除,目的是最後繪圖時,把每一分鐘內的量測資料平均成一個值,不然的話,這一分鐘內上下起伏的資料,會起伏很大。
===bash script START===
#!/bin/bash
for ((i=1;i<=8;i++))
do
cat logfile2|grep "2016-08-0$i" >result/$i
cut -d" " -f 2,3 result/$i|sed 's/:[0-9][0-9],//g'>result/pm$i
#echo -ne "$i\n"
done
for ((i=16;i<=31;i++))
do
cat logfile2|grep "2016-07-$i">result/$i
cut -d" " -f 2,3 result/$i|sed 's/:[0-9][0-9],//g'>result/pm$i
done
===bash script END===
為了要快速製作每一天的資料,所以直接用bash loop產生,執行後,把產生的文字貼到gnuplot的 script
==bash script START==
#!/bin/bash
for ((i=1;i<=31;i++))
do
#echo -ne "$i\n"
echo "\"result/pm$i\" using 1:2 smooth unique with points pointtype 7 ps 0.1 lc rgb \"red\" notitle,\\"
done
==bash script END==
#!/usr/local/bin/gnuplot -rv
set xdata time
#set datafile separator ","
set timefmt "%H:%M"
#set format x "%H:%M:%S"
set format x "%H:%M"
#set xrange ["2016-07-02 23:00:00":"2016-07-02 24:00:00"]
#set xtics "2016-07-02 20:00:00",600,"2016-07-02 24:00:00"
set yrange [0:150]
#unset mxtics
set xlabel "time"
set ylabel "PM2.5"
set title "PM2.5"
set grid
unset key
#set term pngcairo size 800,600
#set output "test.png"
plot \
"result/pm1" using 1:2 smooth unique with points pointtype 7 ps 0.1 lc rgb "red" notitle,\
"result/pm2" using 1:2 smooth unique with points pointtype 7 ps 0.1 lc rgb "red" notitle,\
"result/pm3" using 1:2 smooth unique with points pointtype 7 ps 0.1 lc rgb "red" notitle,\
"result/pm4" using 1:2 smooth unique with points pointtype 7 ps 0.1 lc rgb "red" notitle,\
pause -1
===gnuplot script END=====