2010/09

arduinoとEthernetShieldを使う[Step.4]

2010/09/19 Sunday - 17:55:45 by chameleon

閑話休題です。 部品を買いに久しぶりに秋葉原に出かけたついでに、書店に立ち寄ったら「Make:」という雑誌が目に付きました。 同じようなことをしている人がいるなぁと思ったので、購入しました。 読んでみると自分では想像も付かないおもしろいことを考えている人もいると実感です。 やっていることがかなりかぶっています 家の近くの書店では見かけたことはないんですよね・・・。 Make: Technology on Your Time Volume 10 オライリー・ジャパン オライリージャパン 2010-08-26売り上げランキング : 2639 Amazonで詳しく見る by G-Tools

arduinoとEthernetShieldを使う[Step.3]

2010/09/19 Sunday - 17:38:12 by chameleon

Step.2で動作確認ができたので、これを遠隔地からコントロールできるようにします。WEBブラウザでインターフェースを表示して、コントロールするのが適当でしょう。というか、それしか思いつきません・・・。あまり手間をかけて大がかりなものにするほどの内容でもありませんから、サクッと書くのを目標にします。スクリプトは今の自分的にはPythonがブームなのですが、慣れたPHPで作ることにします。 適当に書き上げたものなので、非常に地味ですがラジオボタンをクリックして「SEND」ボタンを押せば、arduinoのLEDをコントロールできます。LEDの光る時間から、0.5秒や5秒と言った時間設定もきちんと実行されていることがわかります。 PCの稼働状況を得るためのデジタル入力も、とりあえずarduinoの5V出力に手動でジャンパピンを刺したり抜いたりすることで、取得できる電源状況が変化することを確認できました。 ただし、短時間で書き上げるというのが大前提でしたのでリロード対策などはしていません。ページをリロードすると「直近に実行したコマンド」が再実行されます。汎用化するならリロード対策位はしておいた方がいいでしょうが、自分用ですのでそこまでする必要もないでしょう。うっかりリロードして、予期せぬリセット動作をくり返してしまったとかがないように気をつけておけばいいだけです。まあ、一応リロードするときは気をつけろと自分宛のメッセージを表示することにしておきます。 そもそも成り行きで作り出したので、コードも見直しできていない部分があったりしてちょっと反省です。プロトタイプと言うことで自分を納得させます。 電源状態がどうなったかを知るには、一番下のラジオボタンを選択して「SEND」ボタンを押せば、電源供給状態の変化を得られます。 作成したPHPは、この間設定したSheevaPlugにWEBサーバーを立てて置きました。SheevaPlugはNASのN4100ProをWOLで外部からコントロールするためにも使っていますが、自宅に消費電力の少ないサーバーが一台稼働していると、あれこれとやれることの自由度が高まります(と、無理に、衝動買いした自分を納得させます)。 とりあえず書いた実証用コード(PHP) <?php echo <<<EOH <html> <head> <meta http-equiv="Content-Type" content="text/php; charset=euc-jp"> <link rel="stylesheet" href="/main.css" type="text/css"> <title> LED Direct Control </title> </head> <body bgcolor="#CCCCCC"> <b>LED Direct Control</b><br> EOH; function ShowButton($res_response){ $dat = ""; if(ereg("0\r\n",$res_response)){ $dat .= "<tr><td><input type=\"radio\" name=\"power\" value=\"POWER\" />Turn on a power switch.</td></tr>\n"; $dat .= "<tr><td><input type=\"radio\" name=\"power\" [...]

arduinoとEthShieldを使う[Step.2]

2010/09/19 Sunday - 14:36:37 by chameleon

arduinoのチップにアップロードするスケッチと呼ばれるプログラムを作成します。 POWERピンを0.5秒短絡させる。 RESETピンを0.5秒短絡させる。 POWERピンを5秒短絡させる。 PCの電源状態を取得する。 WEBインタフェースでは(POWERピンの入力は電源状態に応じてTrunOnとTrunOffを切り替える。)必要があるかな・・・。 WEBからコントロール可能にする。 今回の目的では、EtherShieldというシールドを使ってarduino側にWEBサーバーを構築しなければなりません。IDEにWEBサーバーのサンプルプログラムがあったのでそれを修正して使いました。もっとも、メモリーも限られたハードなので、非常に単純なWEBサーバーになっています。コードを見ると、リクエストやレスポンスはキャラクター単位で処理していますから、あまり大量のデータをやりとりすることは現実的ではありません。DHCPも実装したいところですが、習作なので本番用に組み込むことにしてスケッチはできるだけ単純にします。 さて、arduinoはデータをネットワークにむけて「発信」するのは簡単なのですが、ネットワークからデータを受信して処理することはあまり得意ではないようです。arduino側のWEBサーバーでPHPとかperlとかが動作すれば、それに越したことはないのですが、そんな高度なWEBサーバーはハードウェアの制約上からも自分の実力からも構築できそうにありません。 よって、データというか諸々のパラメータをどうやって渡すかと言うことで、ちょっと悩みました。 結局、URLに乗せて渡すという方法が単純でarduino側の処理も簡単であると考えました。 いきなり実機のPCの電源をコントロールするというのも何だし、なにより周辺回路をまだ制作していないので、各ピンに送る信号をLEDで確認するというデバック用の回路をブレッドボード上に構築しました。そんなたいそうな物ではなく、LEDとarduinoのデジタルI/Oをジャンパ線でつないだだけです。 EtherShieldがデジタルI/Oの11,12,13ピンを占有するようなので、空いたポートを出力に設定して3ポート確保します。実際は、マザーボードのPOWERピンとRESETピンの二つに入力するだけなので、2ポートでいいのですが、1ポートは別の何かをコントロールするためのリザーブポートとしておきます。 あと、PCの電源状態を取得するために、デジタルI/Oポートを入力に設定して1ポート確保しました。ディスクドライブの電源ライン当たりから5Vを得れば、PCが稼働状態かどうかを判別できますね。 arduinoへアップロードしたスケッチ /* * Sketch to control the MotherBord switches. */ #include <SPI.h> //Will be required from EthernetLibrary Ver.0019. #include <Ethernet.h> #define POWER 7 //power:red #define RESET 6 //reset:blue #define RESERVED 5 //reserved:green #define STATUS 4 //alive byte mac[] = { 0x##, [...]

arduinoとEthShieldを使う[Step.1]

2010/09/19 Sunday - 13:51:52 by chameleon

arduinoはUSBでPCとシリアル通信をするようになっています。PCがもれなく必須なら、わざわざマイコンボードで処理させなくても、PCを使ってリッチな環境で目的が達成できます。 しかし、現実世界ではコストとか単におもしろいからとかいった事情で、小さなマイコンボードだけで目的を達成できないかと考えるわけです。 が、とにかくネットにつながらないことには遠隔からのコントロールができませんのでEtherShieldというシールドを購入しました。 arduinoにプラグインするだけで増設できるという便利なオプションがシールドだそうです。 今回は、このシールドを扱う習作もかねてarduinoをWEBから遠隔コントロールするスケッチと呼ばれるソフトウェアを書いてみることにします。 IDEは現在Ver.0019が最新のようですので、そちらを使いました。Ver.0018からの変更は何点かあるようで、従来のコードは変更をしないと動作しないスケッチもあります。 これについては機会があれば記述します。 まず制作する物を構想しなければなりません。 プログラムの世界では、どの言語でも初めて書くプログラムというのは「Hello,World!」というのが定番なのですが、マイコンボードでの定番は「Lチカ」らしいです LEDを光らせたり点滅させたりするということですね。 購入した書籍にもサンプルプログラムがついていましたから、パラメータを変えたりしてしばし遊んでみました。 ハードウェアの回路だけで点滅時間をコントロールするのはかなり面倒で、自由に変更したりするというのは回路設計の制約から簡単には実現できません。やはりソフトウェアを書き換えるだけで、ハードウェアを自在にコントロールできるのは楽です。 もっともサンプルの「Lチカ」には実用性は全くありません。モチベーションも上がりません・・・。 で、LEDのかわりにリレーを駆動して、遠隔地からPCの電源をコントロールすることにしました。 自宅のPCにVNCでリモート接続したりするのですが常時起動しておくのも無駄なので、WOLで起動しようとするとPCは「休止状態」にしておかなければなりません。Windows7にOSをアップデートしてから自宅のPCは休止状態からの復帰に、ほぼ失敗すると言うことに気づきました。古めのマザーボードですから、その当たりが問題なのかもしれません。 かといって、サスペンドではネコがマウスに絡んだだけでも、PCが起動してしまいます・・・。そもそも、「休止状態」のコマンドがデフォルトでは隠されているので、Windows7では「休止状態」を推奨していないのかもしれませんね。 何か妙案はないのかなぁと思ってはいたのですが、この際、解決に向けてがんばることにしました。 PCの電源のコントロールはスイッチを物理的に接触させてやれば、OSの状態に関係なく実行できます。 リモート接続中に、支配下のPCがクラッシュしても再起動させたり、強制的に電源を切ったりすることも可能になります。 さすがに、PCの電源スイッチを押したりする機械装置は簡単には作れそうにありませんから、マザーボードのPOWERやRESET信号を受けるピンをリレーで短絡させてやることにすれば、実現できそうです。 POWERピンを0.5秒短絡させる。 RESETピンを0.5秒短絡させる。 POWERピンを5秒短絡させる。 PCの電源状態を取得する。 WEBインタフェースでは(POWERピンの入力は電源状態に応じてTrunOnとTrunOffを切り替える。)必要があるかな・・・。 WEBからコントロール可能にする。 電源ボタンを押したりする動作は、0.5秒程度のピンの短絡でエミュレートできるでしょう。5秒間短絡させるのは、いわゆる4秒強制切断を意識した実装です。5秒あれば確実に、PCの電源を強制切断できるはずです。 マザーボードのピンとのインタフェースは、別途設計し自作しなければなりませんが、それほど複雑な回路にはならないでしょう。 リレーではなく、フォトカプラーをおごってarduinoとPCをアイソレートしておけばなお良さそうです。

AppleStoreからiPodTouch 4Gが届いた

2010/09/18 Saturday - 11:07:09 by chameleon

予約していた、新型iPodTochが到着しました。思っていたより早かった・・・。Amazonで予約しているケースや保護シートの方がまだ来ていないくらい・・・。 箱も小さくシンプルでした。 ヘッドフォンは・・・別途に購入した方がいいかも。もっとも、音楽プレーヤーとして頻繁に使うことは今のところないか・・・。 たぶんすぐ容量が足りなくなるんじゃないかということで、64Gにしています。 すぐにでも遊びたいところですが、ケースが到着していませんし、別件で取り込み中だったりするのでしばらくおあずけです。 しかし、母艦にmac Book Proとかほしくなるのは何でだろう・・・

Arduino購入

2010/09/14 Tuesday - 20:24:28 by chameleon

少しばかりデータの収集を自動化したいことがあったので、いろいろ物色した結果Arduinoというマイコンボードを見つけたので買ってみました。 ブレッドボードとか持っていなければ、キットもあります。 Arduinoというベースになるボードに、シールドというモジュール化された拡張ボードを増設することで手軽にハード的な機能アップをすることができるようです。また、I/OをC・C++ライクな言語でコントロールできるようですので、目的の機能を実装した基盤のプロトタイプを制作するにはうってつけです。 Arduinoをはじめようキット スイッチサイエンス 売り上げランキング : 1225 おすすめ平均 まとめて入っているので便利面倒くさい人にとってはうってつけArduino楽しめます Amazonで詳しく見る by G-Tools 入門用の書籍もありました。半分くらいはリファレンスになっているんですが、WEBで調べたりするよりも手早くって、買って正解でした。上記のキットを購入していれば、書籍の内容はほとんど実践できました。 Arduinoをはじめよう Massimo Banzi 船田 巧 オライリージャパン 2009-03-27売り上げランキング : 8076 おすすめ平均 Arduinoの最初の教科書プログラミング初心者でもわかりやすい価格の割には Amazonで詳しく見る by G-Tools

iPodTouch 4Gとケース

2010/09/11 Saturday - 16:23:54 by chameleon

iPodTouchの新型をAppleStoreで予約。ちょっと何で買ったのかは自分でもわからない部分があ るけど、Walkman持っているので音楽を聞こうと思った訳じゃないことは確か・・・。 Apple iPod touch 64GB MC547J/A 【最新モデル】 おすすめ平均 アメリカで購入しました Amazonで詳しく見る by G-Tools ケースと保護フィルムはAmazonで予約。ケースはラバー加工ありということでブラックにしたけど、本体にレーザー加工した意味がないなぁ。クリアにしとけば良かったか・・・。 他にも、カーボン調の加工がしてあるやつもあっていい感じだった。今回はアマゾンのポイントで収まる範囲にしたので、除外・・・。 TUNEWEAR 第4世代iPod Touch対応ハードケース TUNESHELL RubbeFrame for iPod touch 4G ブラック TUN-IP-000139 FocalPointComputer 2010-09-21売り上げランキング : 148 Amazonで詳しく見る by G-Tools フィルムはアンチグレアにした。 TUNEWEAR 第4世代iPod Touch対応液晶保護フィルム TUNEFILM for iPod touch 4G 「アンチグレア」タイプ TUN-IP-000132 Amazonで詳しく見る by G-Tools

SheevaPlug Ubuntu9.04のアップデートを自動化する

2010/09/05 Sunday - 14:23:18 by chameleon

SheevaPlugのUbuntuOSのメンテナンスは、いつも気が向いたときに apt-get update apt-get upgrade としていたのですが、CUIはやはりめんどくさい・・・。 なので、自動化してみることにしました。 こんな目的にぴったりなのが「cron-apt」です。 apt-get install cron-apt あとは、 /etc/cron-apt/configを編集します。 私は、アップデートにapt-getコマンドを使っているので、 APTCOMMAND=/usr/bin/apt-get #APTCOMMAND=/usr/bin/aptitude apt-getの方のコメント文を外します。 あと以下の部分もコメント文を外します。 ACTIONDIR=”/etc/cron-apt/action.d” ACTIONCONFDIR=”/etc/cron-apt/config.d” ERRORMSGDIR=”/etc/cron-apt/errormsg.d” LOGMSGDIR=”/etc/cron-apt/logmsg.d” SYSLOGONMSGSDIR=”/etc/cron-apt/syslogonmsgs” ERROR=”/var/log/cron-apt/error” TEMP=”/var/log/cron-apt/temp” LOG=”/var/log/cron-apt/log” SYSLOGON=”upgrade” HOSTNAMEには、自分のホスト名を書いておけばいいでしょう。 HOSTNAME=”MyHostName” /etc/cron.d/cron-aptを見ると、毎日午前4時に実行してくれるようです。まあ、これでいいや・・・。意中の時間に変更してもかまいません。cornの書式です。 /etc/cron-apt/action.d/3-downloadに具体的なコマンドが、以下のように設定されていました。 dist-upgrade -d -y -o APT::Get::Show-Upgraded=true SheevaPlug対応のUbuntuは9.04以降、新しいものが出る気配はないのでdist-upgradeはやめてupgradeコマンドに変更します。 時々手動で、apt-get upgradeを実行して、保留のアップデートが多くなっていればそのときにdist-upgradeしておけばいいでしょう。 あと、「-d」スイッチもダウンロードしか実行してくれませんので外します。 upgrade -y -o APT::Get::Show-Upgraded=true これが編集後の設定です。 明日、確かに実行されているかログを見て確認することにします。