GWのガイガーカウンタ自作チャレンジ(2台目) ネクスト(22)グラフ化ツール
何とも、iPad/iPhone/iPod Touchでは、Javaアプレットが動作しないということなので、グラフを、JPEG画像ファイルへ出力するJavaアプリを作ってみた。これを、定期的に実行して、Webサーバへ置いておけば、iPad/iPhone/iPod Touchでも、グラフとして、自作ガイガーカウンタの計測値が見れる。
このJavaアプリのソースプログラムは、、、、
このJavaアプリのソースプログラムは、、、、import java.awt.*;
import java.util.*;
import java.io.*;
import java.net.*;
import java.applet.Applet;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.geom.*;
import java.io.IOException;
public class test_img
{
public static void main(String args[]){
int sx=2;
int sy=3;
int wx=320;
int wy=240;
int sz_x = 410;
int sz_y = 240;
int oft_y=0;
int oft_x=100;
Date dt = new Date();
Calendar cal = Calendar.getInstance();
int myYear = cal.get(Calendar.YEAR);
int myMon = cal.get(Calendar.MONTH) + 1;
int myDay = cal.get(Calendar.DATE);
String myDate;
BufferedImage myImage = new BufferedImage( sz_x, sz_y,
BufferedImage.TYPE_INT_BGR);
try {
// width=410, height=290
myImage = ImageIO.read(new File("background.jpg")); // バックグランド画像
} catch (Exception e) {
e.printStackTrace();
}
Graphics2D off = myImage.createGraphics();
off.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
myDate = "" + myYear;
if (myMon < 10) {
myDate = myDate + "0" ;
}
myDate = myDate + myMon;
if (myDay < 10) {
myDate = myDate + "0" ;
}
myDate = myDate + myDay + ".";
String url; String host = "example.com"; // 自分のwebサーバのホスト名
int port = 80;
Socket sock;
BufferedReader sockin;
BufferedWriter sockout;
String str;
int x=30,y=30,h=40,n=3;
int i=0;
int j=0;
int px_cur=0, py_cur=0;
int px_prv=0, py_prv=0;
// urlの下記パスは自分のwebサーバのに合わせてね
url = "http://" + host + "/demo/gmdata_" + myDate + "csv";
// System.out.println( url );
try {
wx = sx * 24 * 6;
off.setColor( Color.BLACK );
off.drawLine(0+oft_x,wy-1+oft_y,
wx+oft_x,wy-1+oft_y ); // X
off.drawLine(0+oft_x,wy-10*sy+oft_y,
wx+oft_x, wy-10*sy+oft_y ); // X
for (i=0; i<8; i++ ) {
off.drawLine(0+oft_x,10*i*sy+oft_y,
wx+oft_x,10*i*sy+oft_y); // X
}
off.drawLine(0+oft_x,0+oft_y,
0+oft_x,wy+oft_y); // Y
for (i=12; i<(6*24); i+=12 ) {
off.drawLine(sx*i+oft_x,sy*10+oft_y,
sx*i+oft_x,wy+oft_y); // Y
}
off.drawLine(sx*i+oft_x,0+oft_y,
sx*i+oft_x,wy+oft_y); // Y
off.setColor( Color.BLUE );
off.drawString( "DATE: " + myYear
+ "/" + myMon + "/" + myDay,
7+oft_x, 15+oft_y );
sock = new Socket ( host, port );
sockin = new BufferedReader(
new InputStreamReader(sock.getInputStream()));
sockout = new BufferedWriter(
new OutputStreamWriter(sock.getOutputStream()));
sockout.write("GET " + url +" HTTP/1.1\r\n");
sockout.write("Host: " + host + "\r\n");
sockout.write("Connection: close\r\n");
sockout.write("\r\n");
sockout.flush();
str = sockin.readLine();
System.out.println(str);
str = sockin.readLine();
System.out.println(str);
str = sockin.readLine();
System.out.println(str);
str = sockin.readLine();
System.out.println(str);
str = sockin.readLine();
System.out.println(str);
str = sockin.readLine();
System.out.println(str);
str = sockin.readLine();
System.out.println(str);
str = sockin.readLine();
System.out.println(str);
str = sockin.readLine();
System.out.println(str);
str = sockin.readLine();
System.out.println(str);
str = sockin.readLine();
System.out.println(str);
int py_sum = 0;
off.setPaint( Color.red );
while ((str = sockin.readLine()) != null) {
System.out.println(str);
px_cur = j * 1;
StringTokenizer st = new StringTokenizer(str, ",");
st.nextToken();
st.hasMoreTokens();
py_cur = Integer.valueOf(
st.nextToken().replaceAll(" ", "" ))*sy;
py_sum += py_cur;
off.draw( new Line2D.Double(
px_prv*sx+oft_x, wy-py_prv+oft_y,
px_cur*sx+oft_x, wy-py_cur+oft_y
) );
j++;
px_prv = px_cur;
py_prv = py_cur;
}
sockout.close();
sockin.close();
sock.close();
int cpm_avg = (py_sum*10) / (j * sy);
off.setColor( Color.BLUE );
off.drawString( "J305Beta/Gamma AVG: "
+ cpm_avg + "/10 [CPM]",
7+oft_x, 28+oft_y );
} catch (Exception ex) {
ex.printStackTrace();
}
try {
boolean result
= ImageIO.write( myImage, "jpg",
new File( "gmgraph_" + myDate + "jpg"));
// 何処にグラフ画像を書き出すかの上記パスも、自分のに合わせてね
} catch( Exception e ) {
e.printStackTrace();
}
System.exit(0);
}
}
こんな感じ。これを、計測プログラムの直後に実行するように、タスクスケージュールしてみている。【雑感】
- 取り敢えず、これで、自作ガイガーカウンタ用のソフトウェアの作成は完結。
- 定点観測は、あくまでもその場所の各論であって、一般論への拡張は、粘性流体たる空気の挙動には、多少のリスクがあるん。微妙な線だが、センサーネットの有用性が高くなるん。
- しかし、1人月程かかった感。そのまま、会社の外向け作業人件費で金額に換算すると、私の職位だと、200万円ぐらいはとられるな。うち、私の取り分は、半分よりずっと少ないことは、確かだな。自分の人件費入れたら、完成品を買ったほうが安いのが、残念な時代だな
- これで、次の自作ガイガーカウンタの製作へ、、、そうしないといじくるたんびに、測定が中断で、やくにたあないんね(^_^;)
トラックバック(0)
このブログ記事を参照しているブログ一覧: GWのガイガーカウンタ自作チャレンジ(2台目) ネクスト(22)グラフ化ツール
このブログ記事に対するトラックバックURL: http://the.nerd.jp/blogs/cgi-bin/mt-tb.cgi/4627








