このブログへの投稿/アップロードについて(コメントは誰でも、投稿は受講者+スタッフのみ)
コメント/投稿/ラベルについて(基本事項)投稿時間の設定(下書き/予定など)プログラム(ソースコード)を投稿する際の注意点Processingのプログラム(Applet)を表示する方法
ArduinoやProcessingについては「建築発明工作ゼミ2008」の方にまとめてあります。
秋葉原の電子工作マップ、Arduino販売店についてはこちら。 :

2009年8月16日日曜日

pachube:世界中のデータをリアルタイムに共有する

 初台のICCでOPEN SPECE 2009 に行って来たのですが、展示の中で面白そうなサイトが紹介されていました。

pachube.com
pachube.jp(日本語)

 世界に存在するモノやデバイス、センサーなどで読みとったデータをリアルタイムにタグ付け、データのブログアップ、共有を行えるらしいです。これを使えば、例えば、地球の裏側でpachubeに参加しているどこかの研究所や観測所、誰かがセンシングした気象データなど(その他、センシングできるものならなんでも?)の物理データを利用できるようです。また逆に、このゼミでセンシングした植物観測データをpachubeにアップすれば、自分のデータを世界中の人々と共有できることになります。

 英語版にしか詳しい利用方法が書いてないのでつまずきながら情報を集めていますが、このサイトはまだβ版であるらしく、サインアップするには招待コードを取得しなければならないようです。

 なにかわかったら引き続き追記してみたいと思います。


植物・農業・エレクトロニクス・音楽...。実験とプロジェクトのblog。
projects : Biotope

2009年8月12日水曜日


実家で僕の作品?となる接木をおこなってきました
ブログ、サボっててすいません




接木用植物



                花期


ブルーデイジー         5月  ~  9月

ユリオプスデイジー      11月  ~  5月

ガザニア             5月  ~  9月

マーガレット            3月  ~  6月



この四種類の植物をそれぞれ台木にして4種類3パターンのやり方で接木をおこないました
この四種類はキク科、多年草植物の中でも宿根草植物ではないので
常に葉がある状態で毎年花をつけ今回の目的”一年中花が咲く植物”の達成にはもってこいかと思い選びました
なかなかない、冬に花を咲かせる植物、ユリオプスデイジーが東京の市場ではまだ出てなかったので(大体秋から出回ります)
実家にある去年の残り物を使わせてもらいました、残りのガザニア、マーガレット残り物です
ブルーデイジーに関しては挿し木にして増やしているもの使わせてもらいました
キク科植物に限定したのは同種の植物のほうが接ぎやすいのではないかと思ったからです、今後色々考えてみる予定です



接木のやり方



以前シャープペンシルのようなモノを真ん中に刺して接木するやり方を少し説明した記憶がありますが、最近はチューブ状のモノを接木の接合部に合うようにうまくはめて接木をやるやり方が主流のようです
ホームセンターなどで売っている植物の野菜などの根元辺りにゴムのような素材で出来たチューブ状のモノが残っていたら接木植物です
今回はそのチューブでの接木とあわせて、本来、木の接木時によく使われるセルパラテープも同時に使ってみます
これは3倍ほど伸び縮みがきき自由に形に合わせて張り付くので接木面を覆うにはもってこいな素材ではないかと思いました
反面通気性が良く中に湿気を保ちにくいので接木直後の植物にはダメージになってしまう事も考えられます
あと植物の葉はどのくらい接ぐ事に影響を与えるかという事も考えて葉を半分にしたものも接木に入れました



画像上

接木用セラミックピン


画像下

接ぎ木用チューブ


画像右

接木用テープ、チューブ使用




葉アリ チューブ、テープ


①~④









葉アリ テープ




⑤~⑧







葉半分 テープ



⑨~⑫







接木後



アリストテレスの時代から接木をおこなっていたという情報もあるので日常的な環境下でも条件が整えば植物の接木は可能だと思うのですが
基本的には木などの植物以外は接木したまま外においておくと接ぐ確立が大きく下がってしまいます
なので今回は実家にある湿度100%で温度を一定に保ち人工照明で光合成をさせる発芽室に入れておきます
ナスであれば5日ほどで接合部がつながり外に出せる状態になります
今回は様々な植物を同時に何箇所も接いでるので2~3週間、発芽室に入れておいてみます




画像上 発芽室




いまのところの反省点


セルパラテープ使用について

結合部を締め付けて接着面が安定すればしっかり接ぎやすくなるかなと考えたのですが通気性が良く、あまり内部に湿気を保ちにくい素材のようなので、切断面から水気が逃げて植物が枯れる可能性があるかもしれません


接ぐ植物の関係性

接ぎやすい植物としては茎が柔らかい植物同士が接合し易いと聞いたのですが、植物を限定してしまったのでユリオプスデイジー、マーガレットと茎の硬い植物を接ぐことになってしまいました、ブルーデイジーも大分硬かったです




今後



多年草植物の中でも常に葉っぱがある植物と宿根草の植物を接いだらどうなるか試してみてみます
少し調べていたら今の学説では接木が植物の遺伝配列に影響をあたえる接木雑種?という説と根から与えられる栄養素によって上の植物自体にも影響を与える栄養雑種という二つの説があるそうです
接木雑種説は多くの学者によって否定されてきたのですが、もしかしたら接木が植物に大きな影響を与えることもあるかもしれません

そこらへんももう少し調べてみます

関係ないけど地元の空です、雲の物質間がすごい

2009年8月2日日曜日

千石電商(秋葉原):Arduino販売開始

 秋葉原の千石電商でも
・Arduino Duemilanove 328/3200円
・Arduino MEGA(ATmega1280搭載)/7350円
・Arduinoイーサネットシールド/4200円
・Xbeeシールド(XBee無線モジュール別売り)/2200円
・XBeeモジュールチップアンテナ型(日本国内使用可能)/2730円
を販売開始したようです。

その他Arduino販売店リスト:
Amazon(Arduino Duemilanove 328)
スイッチサイエンス(Arduinoほか)
ストロベリーリナックス(Arduino、Sparkfun代理店)
メカロボショップ(Arduino、ロボットパーツ)
アールティ(Arduino、ロボットパーツ)
共立エレショップ(Arduino、電子パーツ)
チップワンストップ(Arduino、電子パーツ)
マルツパーツ館(Arduino、秋葉原PM8:00まで営業)
galileo7(Arduino、シールドなど)
マイクロファン(Reduino、AVRなど)
若松通商(Arduino各種、秋葉原本社ビル5F/PM8:30まで営業)
テックハンド(Arduinoほか)

秋葉原電子工作マップ:
緑マーク:Arduino販売店。
青マーク:電子部品など。
黄マーク:Wifi/FONスポット。
赤マーク:飲食など。

より大きな地図で 秋葉原工作マップ を表示

Arduino Uno
Arduino Uno
posted with amazlet at 11.09.26
スイッチサイエンス
売り上げランキング: 5116



Arduinoをはじめよう
Arduinoをはじめよう
posted with amazlet at 10.02.15
Massimo Banzi
オライリージャパン
売り上げランキング: 3323

2009年7月22日水曜日

光センサ フォトICダイオード S9648-100

フォトICダイオードとArduinoで、照度を計測します。


 センサはS9648-100を使用します。
 照度といっても、日常生活の中では全くの暗闇から最も照度の高い日中の太陽光まで0ルクス〜約32000ルクスの幅があります。これは、Arduino のアナログ検出幅1024段階をゆうに超えているので、屋内での照度0ルクス〜1000ルクスの範囲内での計測を前提とします。














材料
フォトICダイオード S9648-100
炭素皮膜抵抗 330Ω 1個
炭素皮膜抵抗 1KΩ 1個

参考
センサ活用の素1
電子回路の基礎


回路図

 フォトICダイオードは、カソードをプラスに、アノードをマイナスに接続します。
 S9648-100に流せる最大電流が5mAであり、この時に5Vにするために1KΩの抵抗を取り付けます。

オームの法則
E(電圧 : V) = I(電流 : A)× R(抵抗 : Ω)

5V = 0.005A × 1000Ω

 これにより、S9648-100には5Vの電圧で5mAの電流が流れこみます。S9648-100を真昼の日光にあてて最低抵抗をテスタで計測してみるとおよそ330Ωでした。つまり、S9648-100が計測できる最も明るい照度の時に最も高い電流を流せる(S9648-100が最も低い抵抗値を示す)ということです。
 Arduinoのアナログ0ピンに計測電圧を送るために、アノードとGND間に330Ωの抵抗を取り付けて分圧します。S9648-100が330Ωの抵抗値の時、分圧の法則により、アナログ0ピンには約1/5の電圧(1V)が流れます。

アナログ0ピン入力電圧 = 5V ×(330Ω / (1000Ω + S9648-100の抵抗値 + 330Ω))

 これにより、アナログ0ピンには0V〜1V(読み取り値は0〜204)が流れることになり、1mVが1ルクスに相当するようになります。

 ルクス = Analog IN Pin入力値 × 5000 ÷1024






















Arduino スケッチ

float val=0;//入力値の変数を用意し、0に設定
void setup(){
// シリアル通信速度
Serial.begin(9600);
}
void loop(){
//ANALOG INの0番ピンを読み取りvalに代入
val=analogRead(0);
val = (val*5000)/1024;
Serial.println(val,DEC);
//1秒ループにするdelay(1000);
val = 0;
}

 スケッチを実行し、Arduino のシリアルモニタで値をチェックします。ルクス換算された値が表示されます。
 センサを手で覆うと10以下まで下降し、LEDペンライトをあてると1000近くまで上昇します。















8/1 追記
上記の回路では、Arduino のアナログ読み取り値は0〜204(0〜1000ルクス)であるため、アナログインピンの解像度は1/5になっています。解像度を上げるために、オペアンプを使って
アナログ読み取り値を0〜1023にしてみます。

参考
Flashで、温度センサーを使う


回路図

 オペアンプLMC6032と非反転増幅回路を使用しました。
 1kΩと4kΩ1Vの抵抗により、LMC6032に流れ込む最大1Vの電圧は最大5Vまで増幅されます。つまり、計測ルクス0〜1000が0V〜5Vになります。

5V = 1V × (1 + (4kΩ / 1kΩ))














Arduino スケッチ

float val=0; //入力値の変数を用意し、0に設定
void setup(){
// シリアル通信速度
Serial.begin(9600);
}
void loop(){
//ANALOG INの0番ピンを読み取りvalに代入
val=analogRead(0);
val = map(val, 0, 1023, 0, 1000);
Serial.println(val,DEC);
//1秒ループにする
delay(1000);val = 0;
}

植物・農業・エレクトロニクス・音楽...。実験とプロジェクトのblog。
projects : Biotope

2009年7月21日火曜日

温・湿度センサ SHT-71

 SHTシリーズのセンサをArduinoに接続し、温度と湿度を両方計測してみます。


 センサはSHT-71を使いました。SHTシリーズではSHT-11が有名なのですが、小型の基盤にセットしなければ使いづらそうなので、ちょっと値段は高くなりますが4本のピンが並んでいるこちらを使う事にします。センサとしての性能は全く同じですが、SHT-11とはピンの配置が異なるので注意が必要です。
 このセンサの利点はまずその小ささです。センサ部分が4mm×5mmしかありません。あと、Arduinoへの入力はデジタルインピンを使うので貴重なアナログインピンを節約できます。この小ささで正確な温度と湿度が計測できます。


















材料
温湿度センサ SHT-71 データシート
10kΩの炭素皮膜抵抗 2個

参考
Arduino と Ruby で温湿ネットロガー
SHT1X Humidity & Temperature Sensor Code
2線式 温・湿度センサSHT11 アーカイブ
プルアップ、プルダウン



 参考リンク先にも詳しく記述してありますが、このSHTシリーズの温湿度センサを簡単に扱えるようにArduino用のライブラリがあります。ダウンロードしてきたsht11ライブラリを解凍し、フォルダごと
arduino-0016/hardware/libraries/
以下に設置します。



回路図

 まだあまり理解していませんが、VDDからプルアップ抵抗をSCKとDATAに挟まないと正しく計測できません。SHT-11センサは、参考リンク先のエレキジャックさんがとても詳しく書かれているので、大変参考になります。


























 SHT-71センサを電線にハンダ付けし、防水用にエキポシ樹脂で固めます。

















 参考リンク先からコピーしたArduinoのスケッチです。湿度と温度をSerial.print()する時に、センサの値を湿度と温度に変換しています。

#include "sht1x.h"
void setup(){
int timeout = 0;
Serial.begin(19200);
delay(11);
sht1x_init();
if (sht1x_read_humidity() < 0) {
Serial.println("soft reset");
sht1x_reset();
}
}
void loop(){
unsigned int h = sht1x_read_humidity();
unsigned int t = sht1x_read_temp();
while (millis() % 1000);
Serial.print(millis(), DEC);
Serial.print(",");
Serial.print(-4.0 + 0.0405 * h - 2.8e-6 * h * h, DEC);
Serial.print(",");
Serial.println(-40.0 + 0.01 * t, DEC);
}

 スケッチを実行し、Arduino IDE のシリアルモニタで表示させます。左の値が湿度、右が温度になっています。

















植物・農業・エレクトロニクス・音楽...。実験とプロジェクトのblog。
projects : Biotope

2009年6月28日日曜日

Arduinoで計測した値を指定のwebサーバに送信、保存する

上に乗っかっているのがEthernet Shield、下にあるのがArduino。



















参考
「Arduino Ethernet Shield」--イーサネットシールドを使って、ArduinoをWebサーバとして機能させる
「Processing HTTPサーバ/Webページ表示」--Networkライブラリを使ってWebサーバとして機能させる
Arduino と Ruby で温湿ネットロガー
Hobby Robotics » Arduino, Xport, PHP and the Internet
Making Things Talk -Arduinoで作る「会話」するモノたち
PHP マニュアル

材料
Arduino Duemilanove
Arduino Ethernet Shield
温度センサ LM35DZ



ゼミで行う植物データの計測とデータの記録方法はそれこそ手書きでメモを取ったり、写真や映像に記録したりといろいろな方法があるのだと思います。
今回は、温度計測の値を指定のレンタルサーバに送信し、サーバのテキストファイルに記録保存してみます。
まず、この記録方法のメリットとデメリットを考えてみました。

メリット
・Arduinoを使用して計測記録するのが前提である場合、記録データは指定したweb上のサーバに保存するので、Arduinoと自宅のPC( もしくはMac )を常時接続しなくてもよい。
・記録したデータはwebにあるので、ネットに接続できる環境にいるならばいつでも記録データを閲覧できる。

デメリット
・ちょっとだけ設定が難しい(目的はあくまでも植物の観察なのですが、そこに行くまでが面倒です)。
・自宅webサーバを組める技術がない場合、レンタルサーバを借りなければならない(今回は、月500円のYahoo giocities を使っています)。
・サーバサイドスクリプトを書かなければいけない(今回は、PHP使います)。
・ネットワークの知識がちょっとだけ必要。


回路図

回路図は以前アップした「温度センサ」の時と変わりません。Ethernet Shieldは、Arduinoをネットに接続してデータの送受信を行えるようにするシールドで、上の写真のようにArduinoに装着します。
ピンはArduinoとほぼ同じように使えます。

全体的な流れですが、

・まず、以前アップした温度計測の時と同じようにArduinoでデータを取得する(今回は最大温度と最小温度の計測は省きます)。
・ルータに接続したEthernet Shield から、ArduinoのEthernetライブラリを使って指定のサーバにデータをアップ。
・受け取ったデータを、下記のPHPスクリプトで指定のディレクトリにテキストデータとして保存する。

となります。















Arduinoのスケッチ

#include <Ethernet.h>
int    A_inPin    = 0;     // アナログ入力ピン番号
int    A_val;              // アナログ入力値(0?1023)
int    outputTerm = 10;    // 計測結果出力ターム(10秒ごとに平均摂氏値を出力する)
float  v          = 5;     // 基準電圧値( V )
int    tempC      = 0;     // 摂氏値( ℃ )
float  tempCPlus  = 0;     // 10秒ごとの合計摂氏値( ℃ )
float  maxTempC   = 0;     // 10秒ごとの最大摂氏( ℃ )
float  minTempC   = 0;     // 10秒ごとの最小摂氏( ℃ )
/* サーバのポート番号を定義 */
#define PORT 80
// Ethernet Shild MACアドレス
byte mac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
// Ethernet Shild IPアドレス
byte ip[] = { 10 , 0 , 1 , 100 };
// 接続先のIPアドレス
byte server[] = { 123, 456, 789, 012 };
// 指定したIPアドレスとポートに接続するクライアントを生成
Client client = Client(server, PORT);

void setup(){
Serial.begin(9600);
// Ethernetライブラリとネットワーク設定を初期化
Ethernet.begin(mac, ip);
delay(1000);
Serial.println("connecting...");
}

void loop(){
// 1秒に一回、10秒間分温度計測
for (int i = 0; i < outputTerm; i++ ) {
// アナログピンから計測値を取得(0~1023)
A_val =  analogRead( A_inPin );
// 摂氏に換算
tempC = ((v * A_val) / 1024) * 10000;
// 現for文ループ内で使わなくなった変数は解放
A_val = 0;
// 平均値を取得するために1秒ごとの値を10秒分合計しておく
tempCPlus += tempC;
// 現for文ループ内で使わなくなった変数は解放  
tempC = 0;
// 1秒間ストップ
delay(1000);
}
// 10秒間の平均摂氏値
tempC = tempCPlus / outputTerm;
// 現loop()ループ内で使わなくなった変数は解放
tempCPlus = 0;
// 指定したwebサーバへの接続開始
// 成功
if (client.connect()) {
Serial.println("connected");
// 指定のwebサーバのPHPスクリプトにGET送信
// 'temp'という名前で計測した温度値を送信
client.write("GET /temp_write.php?temp=");
client.print(tempC, DEC);
client.write(" HTTP/1.1\n");
client.write("HOST: www.○○○.net\n\n");
// 接続を終了
client.stop();
// 失敗
} else {
Serial.println("connection failed");
client.stop();
}
// 現loop()ループ内で使わなくなった変数は解放
tempC = 0;
delay(20000);
}


IPアドレスは参考リンクを参照しました。接続先(webサーバ)のIPアドレスは、下記のPHPスクリプトを使いました。

<?php
$ipAddress = gethostbyname($_SERVER['SERVER_NAME']);
print $ipAddress;
?>
テキストエディタなどでこのPHPスクリプトを作成し、 'print_ip.php' と命名して下記のディレクトリ構成図のtemp_write.phpと同列に設置し、webブラウザのURLに

http://www.○○○.net/print_ip.php

と打ち込めば、このスクリプトが実行されたサーバのIPアドレスがわかります。

上記スケッチの

client.write("GET /temp_write.php?temp=");
client.print(tempC, DEC);
client.write(" HTTP/1.1\n");
client.write("HOST: www.○○○.net\n\n");

の部分が、PHPスクリプトに値を送信している箇所です。「temp」という名前の「tempC」の値を送信しています。
注意しなければならないのは、write()メソッドは byte型か char型のデータしか正しく送信しないので、int型の変数値を送信するときは print()メソッドを使うことです。
もし、複数の値を送信したければ、

client.write("GET /temp_write.php?temp=");
client.print(tempC, DEC);
client.write("&water_temp=");
client.print(water_temp, DEC);
...

などと「&」でつなげてゆきます。そうすると、リクエスト文字列は

GET /temp_write.php?temp=○○○&water_temp=○○○

となります。

データをアップするwebサーバのディレクトリ構成は右のようになります。

Document Root
+ / data
|   + data.txt
+ / temp_write.php


Document Rootとはこの場合、http://www.○○○.net/ となります(○○○の部分は設定した私のドメイン)。webブラウザのURL入力部分に

http://www.○○○.net/temp_write.php

と打ち込めば、temp_write.php の処理が実行されます。

http://www.○○○.net/data/data.txt

と打ち込めば、このデータファイルが画面に表示されます。
(セキュリティをまったく考慮していないということです。)









PHPスクリプト(temp_write.php)

<?php
// 'temp' という名前で Arduino からGET送信された温度の値を受け取る
$strTempVal = $_GET['temp'];
// 値をフォーマット(小数点以下の数値を1桁まで切り詰める)+ 改行コード
$strTempVal = number_format(($strTempVal / 100), 1) . "\n";
// データを保存するテキストファイルの相対パス
$strDataFilePath = 'data/data.txt';
// データを保存するテキストファイルを追記モードでオープン
$fp = fopen($strDataFilePath, "a");
// 送信された値をテキストファイルに書き込み
fwrite($fp, $strTempVal);
// ファイルポインタをクローズ
fclose($fp);
?>


これで、

/data/data.txt

に、値が下のように記録されていきます。

23.4
23.6
22.7
23.1



あとは、processing applet test(2) でやったように、processing などでデータを好きに加工表示できます。
注意しなければならないのは、processing などで加工表示するためにデータを読みに行く時、PHPスクリプトの書き込みとバッティングするとデータが壊れる可能性があるので、Arduino の DateTime ライブラリなどではなく、NTP ライブラリなどでネットから時刻を取得し、書き込みと読み込みの時刻を完全にずらせるように調整する必要があります。



植物・農業・エレクトロニクス・音楽...。実験とプロジェクトのblog。 ▶ projects : Biotope

2009年6月23日火曜日

FIO(Funnel I/O)をArduino+Xbeeとして使ってみる

FIOはLilyPad Arduino v1.6から派生してデザインされたArduino互換機です。リチウムポリマー電池に接続でき、USBから給電する充電回路も内蔵しています。また、ボードの下面にXBee用のソケットがあります。(funnelサイトから引用)

通常FIOは、無線が搭載されたGainerのような使い方をします。また、funnelサーバを介しての操作になります。

でも、私は、
①折角Arduinoの機能を持っているのでそれを活かしたい
②Xbeeシールド+Arduino+Xbeeよりもコストが安い(だいたいXbeeシールド分安い)
③Arduino DuemilanoveとXbeeシールド+Xbeeよりもコンパクト
④funnelサーバを介さず、操作したい(サーバ用に新たに記入ルールを覚えるのが億劫)
⑤スタンドアローンで成立させたい

こんな思いから、FIOを通常のArduinoで使えないか試してみました。

ただし、基本的な仕様はLilyPadベースということなので、3.3V電源、8MHzの動作、ATmega168などのスペックでは、不十分、不便という方は、普通にXbeeシールドで構築した方がいいかもしれません。

FIOのセッティングは、Funnel.ccサイト(http://funnel.cc/Hardware/FIO?userlang=ja)を参考にしてください。やや情報不足気味なので、こちらも参考にしてみてください。私は、最初どうやってFIOにプログラムをUPLOADすればよいか分からず、苦労しました。まずは、通常の使い方を試してからの方がスムーズかもしれません。
http://www.hara3.net/blog/2009/02/funnel-set-up.html

前置きがながくなりましたが、やり方はとても、簡単でXbeeの設定変更だけですぐにできました。なお、Xbee+FIOを2つにしても問題なく動作しました。(いろいろ試行錯誤してやっとできました・・・)

ちなみにwindowsの場合は、X-CTUというツールを使うと、Xbeeの設定がやりやすくなります。ターミナルでコマンド打つよりは、楽なインターフェースです。状態も分かりますしね。ダウンロードはこちら。無料です。
http://www.digi.com/support/productdetl.jsp?pid=3352&osvid=57&tp=4&s=316

その中で、今回設定したのは、

親Xbee(Xbee Explorer USB側)
ID:1234
CH:C
MY:1111
DH:0
DL:FFFF
BD:4(19200bps)

子Xbee(FIO側)
ID:1234
CH:C
MY:2222
DH:0
DL:1111
BD:4(19200bps)

設定の参考にさせてもらったサイトです。

建築発明工作ゼミ2008
http://kousaku-kousaku.blogspot.com/2008/10/arduinoxbee-shieldprocessingxbee.html

*