Calendar
SunMonTueWedThuFriSat
 123456
78910111213
14151617181920
21222324252627
28293031   
<< May 2017 >>
Recommend
New Entries
Archives
Categories
Recent comment
Recent trackback
Profile
Links
Sponsored Links
Mobile
qrcode
Admin
無料ブログ作成サービス JUGEM
Seach this site
2009.12.11 Friday
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | - | | - | - | pookmark |
2009.08.29 Saturday
LEDのリモートコントロール
高校を卒業してすぐの頃でしょうか。
まだ携帯電話などがこの世に登場する前で、友人と2人でちょっと面白い実験をしたことがあります。
中の人と友人は、近所にある電波塔がたっている山に上り、友人は山を降りて自宅に帰ることになりました。夕暮れか夜だったと思います。それで、10キロほど離れた自宅に帰る途中、電波塔の見える海岸から電波塔に向けて懐中電灯を照らしたらそれが見えるかどうか、というものです。(「猟奇的な彼女」の「キョヌ、あっちの山から叫んでみて」ってのに近い感じもしますが)
結果はどうだったのでしょう?光は見えたでしょうか?

さて、aruduino(アルデュイーノ)のイーサネットシールドがやってきて、それなりに使おうと思いながらも、先達の華々しい活躍に少々消沈して、「何事にも先達はあらまほしきことなり」というのにも例外はあるものだ、などと思っていた中の人ですが、ここはせっかくねぎうぉっちをやっているので、カメラを使ったいいものをと思い、LEDを使って遊んでみました。

LEDシステム こんなの。

構想はこうです。

「ねぎうぉっちをみている人が、画面上のボタンを押すと、ねぎ観察画像内のLEDが光る」

さて、では、まずaruduinoのスケッチから。
短時間で作成を目的にしているので、簡単にスケッチのサンプルのサーバを使ってみました。IDE0017で、exsample->ethernet->webserverでつかわれているものを改造します。

#include <Ethernet.h> //イーサのライブラリ
#include <WString.h>  //文字列を扱うためのライブラリ
#define REDLED 7      //各色のLEDのポート
#define GRNLED 6
#define YLWLED 5

//MACアドレスとIP、ポート
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1,177 };
Server server(80);
//文字列の宣言
String inString = String(80);

void setup()
{
  //サーバ開始
  Ethernet.begin(mac, ip);
  server.begin();
  //ピンモードを設定
  pinMode(REDLED,OUTPUT);
  pinMode(GRNLED,OUTPUT);
  pinMode(YLWLED,OUTPUT);
}

void loop()
{
  Client client = server.available();
  if (client) {
    //読み込み文字列の初期化
    inString=String("");
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        inString.append(c);   
        //空行だと出力
        if (c == '¥n' && current_line_is_blank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          client.println("<br />");
          client.write(inString);
          client.println("<br />");         
          break;
        }
        if (c == '¥n') {
          //改行の場合は、空フラグをたてて中身をチェック
          current_line_is_blank = true;
          if(inString.contains("GET")){
             //リクエスト行の時、パスから判断
             if(inString.contains("RED_ON")){
               LEDON(0);
             }
             if(inString.contains("GREEN_ON")){
               LEDON(1);
             }
             if(inString.contains("YELLOW_ON")){
               LEDON(2);
             }            
          }
          inString=String("");         
        } else if (c != '¥r') {
          //改行でも復帰でもない時はこの行は空ではない
          current_line_is_blank = false;
        }
      }
    }
    //終了処理(delayがないとブラウザによってはうまく動作しないそうです)
    delay(1);
    client.stop();
  }
}

//LEDの点灯プロシージャ(1で緑、2で黄色、それ以外で赤)
void LEDON(int mode){
   digitalWrite(REDLED,LOW);
   digitalWrite(GRNLED,LOW);
   digitalWrite(YLWLED,LOW);
   if(mode==1){
     digitalWrite(GRNLED,HIGH);
   }else if(mode==2){
     digitalWrite(YLWLED,HIGH);
   }else{
     digitalWrite(REDLED,HIGH);
   }
}


サーバのサンプルはアクセスするとアナログインプットの値を調べてその値を返す、というスケッチですが、値を返すかわりに、LEDを点灯する、といものを作成します。

LEDの点灯スケッチを盛り込みますが、イーサネットシールドは、デジタルIOピンの11,12,13番を使って通信しているそうなので(建築初米工作ゼミ2008さん)、今回は、7,8,9を使います。それぞれに赤・緑・黄色を割り当てます。

さて、ねぎうぉっちのサイトから直接このaruduinoサーバにアクセスするのではなく、いったん間にねぎうぉっちのwebサーバをはさんで、ねぎwebサーバから信号を送るので、ここでは単純にhttpアクセスでLEDのライトが光るようにします。

aruduinoのwebサーバはどんな信号をうけとっているのかというと、HTTP入門さんのサイトによれば、

GET / HTTP/1.1
Accept: image/gif, image/jpeg, */*
Accept-Language: ja
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (Compatible; MSIE 6.0; Windows NT 5.1;)
Host: www.xxx.zzz
Connection: Keep-Alive

みたいなものをやりとりしているそうです。この一番上の行のGETの後の/のところにパスがはいるらいしので、
http://xxx.xxx.xxx/red
とかにアクセスすると、
GET /red HTTP/1.1
というふうになるようです。

そこで、GETが含まれている行があると、その行を検索して、RED_ONがあれば、赤LED、GREEN_ONがあれば緑LED、YELLOW_ONがあれば黄色LEDが点灯するようにしました。

さて、受け取った文字列を操作するのに、aruduinoのキャラクタ変数の配列だけでは難しいので、「aduinoをはじめよう」のテキストにあるように、TextStringというライブラリを使うことにしました。
aruduinoのサイトで検索すると、Stringというのが新しいみたいなので、そっちを使ってみます。

ここでサーバが受信したデータを表示してみようと、たまったinStringを出力すると、エラーがおきることに気が付きました。変だナー。と思ってしらべていると、
printlnでstringを出力するのはNGで、writeだといいみたいです。
このあたり、コーディングの知識がVB止まりな中の人の弱いところかも、です。

さて、スケッチができましたので、アップロードしてテストしてみると、うまくLEDが切り替わることがわかりました。
それで、今度はIPをグローバルなものに変えて、カメラの前に設置します。

設置状況

さて、今度はねぎサーバのコーディングですが、だんだん経過時間も長くなってきたので、新しいボタンをつくらず、コメント欄で操作しては?と思い、コメント欄に「赤」「黄」「緑」がある時は、arduinoサーバにそれぞれのコマンドを置くって色を変えることにしました。
直接リンクすると、ページ全体がそっちのページにいってしまうので、xmlHTTPオブジェクトを使ってhttp://xxx.xxx.xxx/GREEN_ONなどにアクセスさせます。

php部分
 //LED操作
  $ledcom = -1;
 $ledcommand = "";
  if(strpos($memo,"赤")!==false){  $ledcom = 0; }
  if(strpos($memo,"緑")!==false){  $ledcom = 1; }
  if(strpos($memo,"黄")!==false){  $ledcom = 2; }
  if($ledcom>=0){      $ledcommand = "LED(".$ledcom.");"; }

javascript部分
function LED(col){
 xmlhttp = createXMLHttp();
 if (xmlhttp){
  xmlhttp.open('GET','/led.php?col='+col+'&m='+Math.random());
  xmlhttp.send(null);
 }else{ alert("アクセス失敗"); } 
}
 

led.phpは引数からarduinoサーバにリダイレクトされます。
(ああ、ここにこれを書くとリダイレクトで転送先を隠したのがバレバレですが)

これでコメント欄に「赤」とか「緑」とか「黄」とか入ったコメントを書き込むと、LEDの色がかわります。

さて、もう1つ問題が。。。
ねぎうぉっちの画像の切り替えは5分に1回なので、せっかくLEDの色を変えてもそのタイミングまでわからないのではつまらない、と思い、カメラの動体センサをつかって変化があった時は自動で画像を更新するようにしました。もっとも、昼間LEDの光だけでは、どうもセンサーが働かないこともあるようで、実験するなら夜のほうがうまくいくようです。

LEDの切り替えには失敗はないようですが、画像の更新は失敗することもあるので、うまく切り替えが見られない時は別の色で試してみるか、しばらく立って更新画像を見ててください。あと、画像が更新されると同時にサイトにアクセスになるので、ねぎの画像がでないことがあります。その時は、更新ボタンを押してみてください。これもいずれ改善しようと思います。

幻想的な黄色あまり見えない赤定番グリーン

時間帯にもよりますが、黄色は幻想的です。赤はあまりめだちません。
昼間はどのLEDもあまりよくみえません。

さて、ケータイやインターネットの発達した現代では、自分の思いを遠くに伝えることも容易な時代になりましたが、なにかコミュニケーションできた時の快感というものは人間のDNAに埋め込まれたしくみのひとつなのでしょうか?
高校時代に行った懐中電灯の実験も、みごと成功しました。
10キロ近く離れていても、懐中電灯がぴかぴかするのは見ることができたのです。わずか5cm程度の懐中電灯の明かりを10キロ離れても確認できるってことにものすごく感動したことを覚えています。つけたり消したりするのをお互いに繰り返した覚えがあります。

そういう感動をネットで再現できればなーと思っています。


| ねぎうぉっち中の人 | arduino(アルデュイーノ) | 10:19 | comments(0) | trackbacks(0) | pookmark |
2009.08.27 Thursday
イーサネットシールドをはじめる
休憩時間を有効に活用してarduino(アルデュイーノ)を使っていろいろやってみたりもしましたが、後からネットで探してみると、同じようなことを考える人はたくさんいるのがわかりました。しかも、みなさん細かく説明付き動画付きでブログにアップしてくださっているので、中の人がその後を追いかける必要もないほどです。

1)テキストのLEDが光サンプルをつくったので次はスイッチで光LEDが次々に変わるスケッチをつくってみたけど、やっぱり先に作っている人がいた。
http://shin-ishimaru.cocolog-nifty.com/blog/2009/06/arduinoled-1fc0.html
2)arduinoの入力をtwitter(ツイッター)に出してやろうとおもっったら、もう先につくった人がいる、というか、すでにライブラリーにまでなって出回っていた。
http://d.hatena.ne.jp/NeoCat/20090505/1241466723
3)ネギと連動して何かやろうと思ったら、何かの先をいって鉢の水分と連動したつぶやきをぽにょ風にしてツイッターにつぶやくスケッチをつくっている人がいた。
http://d.hatena.ne.jp/iwkn/20090322
4)イーサネットシールドを使う時に固定IPしか使えないのは不便だとおもってDHCPを使えるようにしたいなと思ったら、これもライブラリになっていた。(1と同じ人)
http://shin-ishimaru.cocolog-nifty.com/blog/2009/06/arduinoarduinod.html

まあ、簡単に思いつくことは誰でも思いつくってことですね。
植木鉢のしくみも、中の人が考えていた構造とほぼ同じで、もっとスマートなPHPが動くWebサーバが仲介してarduinoはインターフェイスにとどまる、というところまでそっくりでした。

いやもう出遅れて、中の人のスキルでできそうなことで、やり残されたことはないのかもしれません。

まあ、中の人が考えていたことで、まだサイトには載っていないのが、いなかの母のための象印アイポットもどきのシステムです。いわゆる「いなかの母がポットを使うとメールで知らせが入る」ってシステムです。調べてみると初期5000円、月額3000円くらいかかるサービスなので、arduinoとイーサネットシールドとあわせた料金でも充分におつりがくるなーと思いました。しかも、これなら連絡先をメールだけでなくツイッターにつぶやいたりもできるなーと思いました。

さて、そんな大活躍予定のarduinoですが、イーサネットシールドを乗っけてサンプルを走らせる段階で、大きな疑問にぶつかりました。MACアドレス問題です。

さて、イーサネットシールドをスイッチサイエンスで買った方には(どうやらamazonでも)、MACアドレスがついているそうなのですが、ストロベリーリナックスで買った中の人にはMACアドレスがありません。
あちこち探していると、起動させたarduinoに設定したipでアクセスしてその後「arp -a」というコマンドでMACアドレスを見られるとのことでしたが、MACアドレスを設定しないとイーサネットシールドは動かないようですし、仮のもので設定してみても、見れるのはその設定した仮のMACアドレスでした。

みなさん、どうされているのでしょうか?
サンプルにある仮のMACアドレスを使われているのでしょうか?
ちょっと心配になってwikiでMACアドレスについて調べてみると、48bitのうち24bit(最初の3オクテット)がベンダー、つぎの8bitが機種、最後の16bitがシリアルなんだそうです。そうすると、基盤の後ろに印刷されているtinker.itがメーカーだとすると、最初の4オクテットはみんな同じはず、と思ったのですが、どうも、サンプルにあるDE-AD-BE-EF-FE-EDというMACアドレスと、スイッチサイエンスからもらったと言われるMACアドレスが違うので、これもなにがどうやら、という感じです。
もっとも、IDEのサンプルにあるアドレス「DE-AD-BE-EF-FE-ED」は、dead beef feed で「死んだ牛の餌」なので、このMACアドレスが正式なものとも思えません。

ただし、wikiには「先頭オクテットの0x02ビットがグローバルアドレスとローカルアドレスを識別するビットであり、OFFであればグローバルアドレス、ONであればローカルアドレスであることを示している。」とあるので、deadbeeffeedは先頭オクテットがde。この2ビット目はDE=11011110で立っているのでローカルアドレスと判断され、それなりに有効なのかもしれません。

とりあえず、MACアドレス問題で力を使い果たしたので、今晩はここまで。

 

| ねぎうぉっち中の人 | arduino(アルデュイーノ) | 00:38 | comments(0) | trackbacks(0) | pookmark |
2009.08.23 Sunday
アルデュイーノ動作実験

かなりバタバタしていた1週間でしたが、ちょっとづつ合間をぬっては、届いたアルデュイーノをいじってみました。
まずは、IDE(統合開発環境)のインストール。

ダウンロード

http://arduino.cc/en/Main/Software
からダウンロードできます。中の人はウインドウズなので、DownloadのところにあるWindowsをクリックしてダウンロードしました。解凍するとバージョン番号のついたフォルダが作成されるので、それを適当なフォルダ(C:¥program files¥とか)に入れます。フォルダの中にはarduino.exeがあるので、これのショートカットをデスクトップに貼り付けておきました)

解説本には、ここですぐにIDEを起動せずに、arduinoのボードをとりつけましょう、とあるので、起動を我慢して、ボードにUSBケーブルを差し込み、PCにつなぎます。特に何をするでもなくドライバがインストールされて接続OKになりました。(中の人はXPを使っています)

USBで接続 デバイスマネージャーで確認

デバイスマネージャで確認すると、COM5になっているようなので、IDEを起動して、接続をCOM5に変更します。さて、これで準備OKのはず。

IDEでポート確認

さて、何かやってみようと思い、解説本にあるaruduinoのhelloworldとも言えるLEDの点灯スケッチを作成してみることにしました。(arduinoではプログラムのことをスケッチと呼ぶそうです)を書いてみます。
昔、子どものプラレールの客車を改造してライトがつくように改造した時のLEDがどこかに残っていたはずだと、家捜ししてLEDを見つけ出して、ボードに差し込んでみました。

IDEを使ってみた

まず、IDEにスケッチを書き込んで、その後、アイコンの中にあるアップロードでボードに転送します。

LED発見

お!うまく点灯したぞ。
スケッチをちょっと改造して、0.1秒づつ3回光るプロシージャーを作成して、それを1秒ごとに呼び出すように変更してみました。おお、3回光っているか見分けがつかない速さですが、うまく動作しているようです。

さて、この段階では、arduinoボードは、USBから電源の供給を受けています。
そこで、ACDCにつないで、単独で動作するかテストしてみることにしました。ボードには説明書はないので解説本の中を探して電源は、9V・センタープラスと判明。事務所にころがっているAC電源の山から9Vセンタープラスを探して発見。

ACアダプター 光る!

さっそく接続してみます。
おお、ちゃんと光った。

電源を切ってもスケッチは維持されていることも確認できました。
これが組み込みってやつかーと、ちょっぴり感動を覚えたのでした。

| ねぎうぉっち中の人 | arduino(アルデュイーノ) | 23:45 | comments(0) | trackbacks(0) | pookmark |
2009.08.19 Wednesday
アルデュイーノがやってきた

お盆休み明けに注文していたアルデュイーノがやってきました。
アルデュイーノ / アルデュイーノその後
一応、買ったところを書いておくと、ストロベリー・リナックスというところです。注文して翌々日の朝に届きました。夜中に注文したので実質翌日についたようなもの。

アルデュイーノは、簡単なことなら、単独で動作できるちっちゃいパソコンのようなものです。
おまけに、イーサネットシールドというものを使うと(シールドってのはアルデュイーノの機能拡張パーツ)、ネットにも接続できるのです。なんだか夢が広がるボードですが、本体は1枚3200円というお値段。

アルデュイーノでやってみたいこと
ねぎにネットから水やりをする
・いなかの母がドアをあけるとツイッターにつぶやくシステム

なんとも宝くじのようの夢ばかり広がります。
その宝くじの券がこれ。本体とイーサネットシールド、ブレットボードにケーブルを買いました。これだけだと8050円+送料・代引き手数料700円で、8750円です。

送られてきた!

開封してみると、

アルデュイーノ イーサシールド

こんな感じ。

さあ、バリバリなにかつくってみたい!と思うのですが、実は中の人は今週2つも仕事の締め切りを抱えてしまって、ちょっと時間の余裕が。。

ということで、実際の開発&実験はまたの機会です。

| ねぎうぉっち中の人 | arduino(アルデュイーノ) | 08:20 | comments(0) | trackbacks(0) | pookmark |
2009.07.13 Monday
Arduinoその後
ねぎのフィードバックをPCを介さずにサーバに送ることを元に探していて見つけたArduino(アルデュイーノ)ですが、とりあえず本を買ってみようということで「Arduinoをはじめよう」という本を買ってみました。
本屋さんで探すと、組み込み関連の書籍のところでは、今、「Android」が幅をきかせていて、ぱっと見、アルデュイーノとアンドロイドがよく似ているので探すのにちょっとだけ困りました。あー、Amazonで買えば良かった、と思いながらも、実は新刊ということで、エンドの部分にどうどうと平積みされているのを発見したのでした。

読んでみると、なかなかおもしろい。
発想的には、ハード的な試行錯誤をもっと簡単にできるようにしましょう的コンセプトでつくられているようで、最初の数ページを読んだだけで、あっという間にアルデュイーノの虜になってしまいました。

これは、スゴイぞ!!。
性能を見て、あれこれ妄想が広がるデバイスってやつです。
余裕ができたら、さっそく買って、ネギのためのデバイスを何かつくってみよう。

そうこう思っていると、技術屋仲間が「あるまじろ」というのを教えてくれました。
https://www.zaikostore.com/zaikostore/jsp/special/armadillo/productList.jsp

これがまた面白い。小さなケースにlinuxサーバをまるごとおさめたようなもの。
お値段はアルデュイーノ(4000円〜)に比べると少々高めですが(2〜3万円)、なにかと実装の手間を考えるとこっちのほうが安くつく場合もあるのでは、と思いました。


| ねぎうぉっち中の人 | arduino(アルデュイーノ) | 10:21 | comments(0) | trackbacks(0) | pookmark |
2009.07.11 Saturday
Arduino(アルデュイーノ)
ねぎうぉっち(http://negiwatch.com)に、ブラインドの開け閉めや水やりの報告も乗せるようにしたのはいいのだけど、作業のたびにパソコンに座って「作業しました」ボタンを押さないといけないのは少々いただけない。
これをもっと簡単なスイッチにできないかなーと思って調べ始めた。(つまりブラウザを開いてポチするんじゃなくて、何かこう物理スイッチをポチっとな、できるようなイメージ)

調べた調べた。2時間くらい。

最初は組み込みOS調べて、組込用のブラウザ、それからそれから。。。
こんなの(http://www.i-dt.jp/product_info.php/products_id/187)とか使えそうと思ったり、組み込みサーバ(これは4300円でサーバ機能なので何かに使えそう)を見つけたり。
H8のマイコンのプログラミングに手をだしてみようかと関連書籍や図書館の本を探したり(もちろんネット検索だけど)したのだけど、でもやっぱり思っているものとチョト違う。

もっと簡単にプログラミングできるネットワークデバイスがあるはずだ。。。(しかも安い)

そしていきついたのが、お手頃価格で、しかも思ったとおりのシステム。「Arduino」だ。
アルデュイーノと発音するらしい。ここで売ってる。
http://strawberry-linux.com/catalog/?c=arduino

どうもネットワークデバイスを自作できるらしい。
ねぎうぉっちのあれこれを考えて検索したのだけど、もちろんこれは仕事でやってるASPやサーバサービスなどにも組み込める感じでとてもいい。上手につくればデバイスの原価は1万円を割りそうだ。

これを使えば、あんなことやこんなことが・・・・。
と、考えてみるとそんなに使い道はないか。
でも、常時起動しているPCなくても簡単な送信や受信ができるなら、応用はいくらでもききそうだ。
前に工場の受注管理システムで、当日受注当日発送の受注伝票があるとパトライトが回転するシステムをつくったことがあるが、そんなのとか、出先からの電源ON/OFFシステムとか。

いやまあ、お金を払えばそういうのありそうなんだけど、カスタマイズして自分でつくるシステムに組み込みたいの。

ちょいと落ち着いたら勉強してみよう。
とりあえず、たまった仕事とねぎうぉっちの画像をつくらなくちゃ。

| ねぎうぉっち中の人 | arduino(アルデュイーノ) | 01:51 | comments(1) | trackbacks(0) | pookmark |