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