Tag Archives: PROGRAM - Page 2

1万円で放射線量を計測して自動でTwitterに投稿する装置を作ろう!

一昔前はこういう装置を作成するのに結構な費用が必要となっておりましたが最近は非常に低価格かつ簡単に実現することができます。そして計測結果は高い精度を期待できます。
今回は難しいハンダ付けやプログラミングをほとんど行わなくても作成できる事を目標とします。

利用するパーツ

Linux組み込みボード Raspberry Pi 3,500円
組み込み用線量計 ポケットガイガー Type 5 6,450円
ジャンパーワイヤー ジャンパーワイヤ オス⇔メス(10本セット) 400円
ジャンパーワイヤー ジャンパーワイヤ オス⇔オス(70本セット) 400円
ブレッドボード ブレッドボード EIC-801 250円
プルアップ抵抗 【CF1/4-22kΩJ】1/4Wカーボン抵抗 22kΩ 赤赤橙金(100本入) 283円
ピンソケット ピンヘッダ(オスL型) 1×40 (40P) 50円
SDカード ADATA ASDH4GCL4-R SDHCカード Class4 4GB 452円
合計 11,785円

※ 状況によっては価格は変動します。
※ 上記の他に、Windows OSをインストールしたパソコン、モニタ、HDMIケーブル、キーボード、マウス、ネット環境、MicroUSBケーブル、半田ゴテ、ハンダ線、こて台、Twitterアカウントが必要となります。

Twitterのディベロッパー登録

こちらのサイトを元にアプリケーションの登録を済ませておいてください。
下記の内容が必要となります。メモしておいてください。
CONSUMER_KEY,CONSUMER_SECRET,ACCESS_TOKEN,ACCESS_TOKEN_SECRET
bot開発物語 その2―アプリケーション登録―
※ 必ずAPI側でRead and Writeの権限を与えておいてください。

Raspberry PiへのOSインストール

以前の記事を参考にしてください。
Raspberry PiでRaspbianを日本語環境で動かそう!

ピンヘッダのハンダ付け

ピンヘッダの列から5本分を折り取りポケットガイガー Type5に差し込んでハンダ付けします。
IMG_1589[1]

Raspberry Piとポケットガイガー Type5の接続

ブレッドボードとジャンパーワイヤーを使用しRaspberry Piとポケットガイガー Type5の接続を行います。

ワイヤーの色とピンの対応表

ジャンパーワイヤー ポケガ RasPi
赤色 VCC 3v3
黒色 GND GND
青色 SIG GPIO 17
黄色 NS GPIO 27

ポケットガイガー Type5とプルアップ用抵抗をブレッドボードに設置しジャンパーワイヤー(オス⇔オス)で接続します。

IMG_1620[1]

IMG_1621[1]

IMG_1622[1]

ブレッドボードとRaspberry Piをジャンパーワイヤー(オス⇔メス)で接続すます。

IMG_1623[1]

IMG_1625[1]

※ 私のRaspberry PiはP5の位置にピンヘッダがハンダ付けされておりますが気にする必要はありません。

Raspberry Piのピン配置はこのようになっております。
Raspberry_Pi_GPIO

全体的に見るとこういう感じになります。
IMG_1627[1]

Raspberry Piへのプログラムインストール

起動とログイン

Raspberry Piとポケットガイガー Type5を接続した状態でRaspberry Piを起動します。
ログイン後コンソールに下記のコマンドを入力してデスクトップを起動してください。
$ sudo startx
※ こうすることにより管理者権限でGUIな操作を行うことができるようになります。
※ Linux初心者向けにGUIで解説しますがコンソールのみで操作できる方はX Windowを起動する必要ありません。

ターミナルの起動

左下メニュー”アクセサリ”→”LXTerminal”を起動してください。
snapshot1

起動に成功すると真っ黒な画面が出てきます。
snapshot2

真っ黒な画面の中に必要なコマンドを入力していきます。
snapshot3

gitコマンドのインストール

“LXTerminal”内に下記のコマンドを1行ずつ実行してください。
※ #以降の文字列を入力してください。
※ 依存パッケージのインストールを求められる事があります。その場合は”Enter”を押してください。
※ 場合によっては非常に時間が掛かる事があります。気長にお待ちください。
# apt-get update
# apt-get upgrade
# apt-get install git

wiringPiライブラリのインストール

“LXTerminal”内に下記のコマンドを1行ずつ実行してください。
# git clone git://git.drogon.net/wiringPi
# cd wiringPi
# git pull origin
# ./build
# cd ../

Rasdiationのインストール

“LXTerminal”内に下記のコマンドを1行ずつ実行してください。
# git clone git://github.com/orsp/Pocket_Rasdiation_Counter.git
# cd Pocket_Rasdiation_Counter
# make
# make install
# cd ../

Rasdiationの動作テスト

“LXTerminal”内に下記のコマンドを実行してください。
# rasdiation -s 17 -n 27 -b -m

下記の様にCPMやuSv/hの値がカウントされた状態で表示されていれば接続とインストールに成功しています。
snapshot4

Raspberry Pi起動時に連動したRasdiationの自動実行の設定

タスクバー左側アイコンより”ファイルマネージャ”を起動します。
snapshot5

ディレクトリパスに”/etc”と指定しその中の”inittab”をダブルクリックします。
snapshot6

ファイルの最後に下記の行を追記し上書き保存します。
alog:2000:respawn:/usr/local/bin/rasdiation -s 17 -n 27 -o /var/lib/rasdiation/rasdiation.fifo
snapshot7

python-tweepyライブラリのインストール

“LXTerminal”を起動してください。
“LXTerminal”内に下記のコマンドを実行してください。
※ 依存パッケージのインストールを求められる事があります。その場合は”Enter”を押してください。
# apt-get install python-tweepy
# easy_install tweepy
※ apt-getのpython-tweepyは古いようなのでこちらから新しいバージョンのpython-tweepyをインストールします。

Twitter自動投稿スクリプトの設置

“LXTerminal”内に下記のコマンドを1行ずつ実行してください。
# mkdir -p /GEIGERCOUNTER/Twitter
# cp Pocket_Rasdiation_Counter/example/twitter_post.py /GEIGERCOUNTER/Twitter/
# chmod 755 /GEIGERCOUNTER/Twitter/twitter_post.py

Twitter自動投稿スクリプトの設定

タスクバー左側アイコンより”ファイルマネージャ”を起動します。
ディレクトリパスに”/GEIGERCOUNTER/Twitter”と指定します。
“twitter_post.py”をダブルクリックで開きます。
snapshot13

“Twitterのディベロッパー登録”で得たパラメータを記述し上書き保存します。
snapshot14

Twitter自動投稿スクリプトの動作テスト

“LXTerminal”を起動してください。
“LXTerminal”内に下記のコマンドを実行してください。
# python /GEIGERCOUNTER/Twitter/twitter_post.py

設定したTwitterアカウントで下記のような内容がツイートされている事を確認してください。
※ 実際の投稿内容の日付や数値は変化します。
2013年03月24日(日) 11時35分 現在の放射線量は CPM:2.964 uSv/h:0.05589(誤差 0.00833) でした。

Twitter自動投稿スクリプトの定期実行の設定

タスクバー左側アイコンより”ファイルマネージャ”を起動します。
ディレクトリパスに”/etc/cron.d”と指定します。
snapshot8

中に空ファイル”twitter_post”を新規作成します。
snapshot9

作成した”twitter_post”をダブルクリックします。
snapshot10

下記の行を記述し上書き保存します。
※ この設定は30分毎に”twitter_post.py”を実行するという意味です。必要に応じて変更してください。
*/30 * * * * root python /GEIGERCOUNTER/Twitter/twitter_post.py
snapshot15

最終動作確認

正常に30分毎に投稿されるかを確認できましたら放射線量自動投稿機の完成です。
正しく設定されていればRaspberry Piを再起動しても自動で放射線量を計測し投稿いたします。

今回、ブレッドボードを使用しましたがユニバーサル基板を使い回路を作成しても良いかもしれません。
必要があればPythonのスクリプトを改造し自分の好みの投稿内容にするのも楽しいでしょうね。

Raspberry PiでC言語を使い2つのスレッドを200ミリ秒と2秒ごとに処理させる

Arduinoだとタイマー割り込みを使って処理したいところですが残念ながら私の調べた限りRaspberry Piでは無さそうなのでC言語とスレッドを利用し近い処理をさせることにしました。

$ vi thread_test.c

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

void *thread_function1( void *ptr );
void *thread_function2( void *ptr );

int main(void){
     pthread_t thread1, thread2;
     useconds_t tick1 = 200000;
     useconds_t tick2 = 2000000;

     pthread_create( &thread1, NULL, thread_function1, (void *) &tick1);
     pthread_create( &thread2, NULL, thread_function2, (void *) &tick2);

     pthread_join( thread1, NULL);
     pthread_join( thread2, NULL);

     return 0;
}

void *thread_function1(void *ptr){
    useconds_t tick = *( int * )ptr;

    while(1){
        printf("function1\n");
        usleep(tick);
    }
}

void *thread_function2(void *ptr){
    useconds_t tick = *( int * )ptr;

    while(1){
        printf("function2\n");
        usleep(tick);
    }
}

コンパイルします
$ gcc thread_test.c -pthread

実行
$ ./a.out

しかし、これでは共有資源を利用したプログラムを書いた場合取り合いになり下手をするとデータが失われたりする場合があるため排他制御するようにします。

$ vi thread_test.c

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

void *thread_function1( void *ptr );
void *thread_function2( void *ptr );

pthread_mutex_t mutex;
pthread_cond_t cond;
int count = 0;

useconds_t tick1 = 200000;
useconds_t tick2 = 2000000;

int main(void){
     pthread_t thread1, thread2;

     pthread_mutex_init(&mutex, NULL);

     pthread_create( &thread1, NULL, thread_function1, (void *) &tick1);
     pthread_create( &thread2, NULL, thread_function2, (void *) &tick2);

     pthread_join( thread1, NULL);
     pthread_join( thread2, NULL);

     pthread_mutex_destroy(&mutex);

     return 0;
}

void *thread_function1(void *ptr){
    useconds_t tick = *( int * )ptr;

    while(1){
        pthread_mutex_lock(&mutex);

        printf("function1 %d\n",count++);
        pthread_mutex_unlock(&mutex);
        usleep(tick);
    }
}

void *thread_function2(void *ptr){
    useconds_t tick = *( int * )ptr;

    while(1){
        pthread_mutex_lock(&mutex);

        printf("function2 %d\n",count++);
        pthread_mutex_unlock(&mutex);
        usleep(tick);
    }
}

コンパイルします
$ gcc thread_test.c -pthread

実行
$ ./a.out
function2 0
function1 1
function1 2
function1 3
function1 4
function1 5
function1 6
function1 7
function1 8
function1 9
function1 10
function2 11
function1 12
function1 13
function1 14
function1 15
function1 16
function1 17
function1 18

ぴくぴくダウンローダ for Java(仮) Ver 5.10

修正された項目

・ユーザIDを元に巡回すると作品名+作者名で保存できないというバグを訂正しました

Windows7 での実行の様子
WS000000

MacOSX での実行の様子
スクリーンショット 2013-01-14 16.31.21

Linux での実行の様子
Screenshot-ぴくぴくダウンローダ for Java (仮)

コマンドモードでの実行の様子

ダウンロード

こちらのダウンロードページよりダウンロードをお願い致します。

質問・問い合わせについて

質問・問い合わせは下のコメント欄にお願いいたします。また、質問を行う前に下記を確認してください。手順に沿わない場合は返答できない場合がございます。

正常に動かない等の問題があり質問・問い合わせを行う場合、実行場所(一軒家や集合住宅や学校などこれらの場所ではネットワークの環境が異なるため)、OS、Javaのバージョン、収集対象(実行時に指定したパラメータ)、停止した場所のコンソールの内容をお書きください。書いて頂けない場合こちらで検証することができないので返答することができません。

追加して欲しい機能がある場合、特にPixivの機能に依存するものなどは実際のページまでのURLなど詳しい情報をお書きください。それらの情報を元に今後のアップデートで実装可能か検討させて頂きます。

ぴくぴくダウンローダ for Java(仮) Ver 5.00

修正された項目

・Pixivの仕様変更により作品のダウンロードに失敗するようになったので対応しました。
・ラジオボタンの挙動にバグがあったので修正しました。
・プログレスバーの存在理由がほとんど無いため廃止しました。

計画していた拡張はひと通り済んだのでしばらくは更新は行わないかもしれません。

Windows7 での実行の様子
WS000000

MacOSX での実行の様子
スクリーンショット 2013-01-14 16.31.21

Linux での実行の様子
Screenshot-ぴくぴくダウンローダ for Java (仮)

コマンドモードでの実行の様子

ダウンロード

こちらのダウンロードページよりダウンロードをお願い致します。

質問・問い合わせについて

質問・問い合わせは下のコメント欄にお願いいたします。また、質問を行う前に下記を確認してください。手順に沿わない場合は返答できない場合がございます。

正常に動かない等の問題があり質問・問い合わせを行う場合、実行場所(一軒家や集合住宅や学校などこれらの場所ではネットワークの環境が異なるため)、OS、Javaのバージョン、収集対象(実行時に指定したパラメータ)、停止した場所のコンソールの内容をお書きください。書いて頂けない場合こちらで検証することができないので返答することができません。

追加して欲しい機能がある場合、特にPixivの機能に依存するものなどは実際のページまでのURLなど詳しい情報をお書きください。それらの情報を元に今後のアップデートで実装可能か検討させて頂きます。

Perl Linux CPU使用率 Memory使用率の高いプロセスを探し出す

最近尋常じゃないほどサーバリソースを喰い潰すプロセスがいるようなので調査しようと監視システムを書くことにしました。
一応PerlではProc::ProcessTableと呼ばれるモジュールにてプロセスを監視できるようなのでサクッとCPU使用率の高いプロセスを見つけ出すプログラムを書いてみました。

#!/usr/bin/perl
use warnings;
use strict;
use Proc::ProcessTable;

my $Processtable = new Proc::ProcessTable;

foreach my $item (@{$Processtable->table}){
        my $pctcpu = sprintf("%5.1f", $item->pctcpu);
        my $pctmem = sprintf("%5.1f", $item->pctmem);
        if($pctcpu > 50){
                print $item->pid ." ". getpwuid($item->uid) ." " . $pctcpu . " ". $pctmem ." ". $item->cmndline . "\n";
        }
}

実行するとちゃんとCPU使用率の高いプロセスを特定してくれました。

# perl ProcessKill.pl
3509 root 100.0   0.0 155 perl -e while (1) { $i++ }

参考
Proc::ProcessTable size differences

ぴくぴくダウンローダ for Java(仮) Ver 4.12

修正された項目

イラスト・漫画を作品名+作者名で保存するのに対応しました。(GUIでのみ提供)
ラジオボタンの挙動にバグがあったので修正しました。
上記の拡張によりインターフェースを若干改変しました。

計画していた拡張はひと通り済んだのでしばらくは更新は行わないかもしれません。

Windows 7 での実行の様子

コマンドモードでの実行の様子

ダウンロード

こちらのダウンロードページよりダウンロードをお願い致します。

質問・問い合わせについて

質問・問い合わせは下のコメント欄にお願いいたします。また、質問を行う前に下記を確認してください。手順に沿わない場合は返答できない場合がございます。

正常に動かない等の問題があり質問・問い合わせを行う場合、実行場所(一軒家や集合住宅や学校などこれらの場所ではネットワークの環境が異なるため)、OS、Javaのバージョン、収集対象(実行時に指定したパラメータ)、停止した場所のコンソールの内容をお書きください。書いて頂けない場合こちらで検証することができないので返答することができません。

追加して欲しい機能がある場合、特にPixivの機能に依存するものなどは実際のページまでのURLなど詳しい情報をお書きください。それらの情報を元に今後のアップデートで実装可能か検討させて頂きます。

__追記(2012/10/31)__

Pixivの仕様が変わったようで小説収集機能が動作しないようです。時間を見つけて近日中に対応したいと思います。

ぴくぴくダウンローダ for Java(仮) Ver 4.00

修正された項目

インターフェースを今後拡張しやすいように大幅に改変しました。
コマンドモード限定だった機能の一部をGUIでも利用できるようになりました。
ダウンロード終了時にダイアログが出るようになりました。

推奨環境・動作環境

推奨環境:Core2Duo以降のデュアルコアCPU搭載のパソコン
動作環境:Windows MacOSX Linux でJavaが動作する環境

Windows 7 での実行の様子

コマンドモードでの実行の様子

ダウンロード

こちらのダウンロードページよりダウンロードをお願い致します。

質問・問い合わせについて

質問・問い合わせは下のコメント欄にお願いいたします。また、質問を行う前に下記を確認してください。手順に沿わない場合は返答できない場合がございます。

正常に動かない等の問題があり質問・問い合わせを行う場合、実行場所(一軒家や集合住宅や学校などこれらの場所ではネットワークの環境が異なるため)、OS、Javaのバージョン、収集対象(実行時に指定したパラメータ)、停止した場所のコンソールの内容をお書きください。書いて頂けない場合こちらで検証することができないので返答することができません。

追加して欲しい機能がある場合、特にPixivの機能に依存するものなどは実際のページまでのURLなど詳しい情報をお書きください。それらの情報を元に今後のアップデートで実装可能か検討させて頂きます。

ぴくぴくダウンローダ for Java (仮) Ver4.00 画面設計公開

結構要望が色々あったので次のバージョンアップ時(Ver 4.00)には今後、機能を追加しやすいようにデザインを一新する予定です。

Windows 7での画面のデザインイメージ(実際の公開時には多少異なる可能性があります)

ぴくぴくダウンローダ for Java(仮) Ver 3.01

時間を見つけながらマイナーアップデートを行いました。

修正された項目
・ショーケースの画像をダウンロードしないようになりました。
・拡張子の後ろにゴミがつかないようになりました。
・設定時に適用を押すと、閉じるを押さずに設定を完了できるようになりました。

動作を確認した項目
・Windows環境ではJava Ver 7でも動作することを確認しました。

推奨環境:Core2Duo以降のデュアルコアCPU搭載のパソコン
動作環境:Windows MacOSX Linux でJavaが動作する環境

Windows 7 での実行の様子

コマンドモードでの実行の様子

Download
こちらのダウンロードページよりダウンロードをお願い致します。

かんたんメール送信(添付ファイル対応) Perl用ライブラリ

―――――――――――――――――――――――――――――――――――――
【ソフト名】かんたんメール送信(添付ファイル対応)
【著作権者】ORBIT
【制作日】2011年09月17日
【種 別】Perlモジュール
【連絡先】https://www.orsx.net/blog/
【配布元】https://www.orsx.net/blog/
【圧縮形式】zip
【動作環境】Sendmailコマンドの使えるUNIX系OS
【開発環境】Perl5.8(標準モジュール Encode MIME::Base64 使用)
―――――――――――――――――――――――――――――――――――――
≪著作権および免責事項≫

 本ソフトはフリーソフトです。自由にご使用ください。なお,著作権は作者
であるORBITが保有しています。

 このソフトウェアを使用したことによって生じたすべての障害・損害・不具
合等に関しては、私と私の関係者および私の所属するいかなる団体・組織とも、
一切の責任を負いません。各自の責任においてご使用ください。

・はじめに
 メール送信を行うとき毎回文字操作を行うのが面倒だったためそれらを全て行う
モジュールを作成しました。
 わずか数行で添付ファイル付きのメールを送信できるため簡単なメールフォーム
の作成等に強力な力を発揮すると思います。

・ファイル構成
readme.txt ← 当ファイル
Sendmail.pm ← 本体

・インストール方法
対象のプロブラムと同じディレクトリにおいてください。

・使い方
Sendmail.pm最下部に簡単な利用法を記載してるのでそちらを御覧ください。

・履歴
2011年09月17日 Ver 1.0.0 公開

簡単な使用例

#!/usr/bin/perl
# 当モジュールを呼び出し
use Sendmail;

# オブジェクトの生成
my $send_obj = Sendmail->new({
        Subject => '件名',                     # 件名
        From    => 'user@mail.goge.net',       # 送信元
        });

# メール送信
$send_obj->sendmail(
                'user@mail.goge.net',          # 送信先
                '添付ファイル無し',            # メッセージ
                );

# メール送信
$send_obj->sendmail(
                'user@mail.goge.net',          # 送信先
                '添付ファイル有り',            # メッセージ
                'file.txt,日本語ファイル.txt'  # 添付ファイル(,で区切ると複数送信可能)
                );

ライセンス形態:GPL
Sendmail