2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

カテゴリー

ブログパーツ

無料ブログはココログ

« 2010年12月 | トップページ | 2011年2月 »

2011年1月

2011年1月30日 (日)

XBeeネットカメラを組み立てる

前回試作したXBeeネットカメラが好調なので、実用試作をしてみました。
完成写真がこれです。本体はセブンスターを2個重ねたくらいのサイズ。なんかのオマケでもらったミニ三脚に載せてます。

Dscn1465  Dscn1464_2

まずはオシロで試作品各所の信号をチェックします。きちんと組んで実用的に使うなら、この段階で問題を修正しておかなくてはなりません。ブレットボードで作るのはあまり好きではないんですが、こう言う時は便利ですね、

その結果、致命的な欠陥が見つかりました。カメラとXBeeからのシリアル信号をダイオードORして、PICのシリアル入力としている部分で、Hレベルが2Vそこそこしかありません。いくらなんでも低すぎます。電源電圧が3.4Vくらいになるとスレショルドに達せず"1"として認識されなくなります。 回路をチェックすると、電源を切っている状態のカメラのシリアルポートが、GNDへの抵抗となって、ダイオードORのプルアップ抵抗に直列に接続、その結果、Hレベルの電圧が分圧されていることがわかりました。

そこで、PchMOSでカメラの+側をON/OFFしていたのを、NchでGND側を切るようにしました。これで電源OFFの時にカメラの回路はGNDから切り離されるので、前の問題は無くなります。

また、ダイオードORのプルアップ抵抗が大きすぎたので4.7Kに変更、ダイオードもショットキーに変更…したかったのですが、手持ちが無く、とりあえず昔懐かしいゲルマニウムダイオードを入れておきました。SD46です。これも順方向電圧降下が小さいので使えます。(でも、なんでゲルマダイオードなんか持っているんでしょう)

次に通信速度の改善です。前回の試作は38.4Kbpsで通信しています。これはカメラの電源投入時の通信速度がこれなので、それにあわせてあるからです。
今回は、PICの通信速度を動的に変えて、カメラを38.4Kbpsで初期化した後115.2Kbpsに設定し、以降XBeeとの通信もそのボーレートで行います。これでずいぶん高速化できるのでは?

試作品とPCをシリアルポートで直接接続して38.4Kbpsと115.2Kbpsを比較すると、劇的に高速になるのが確認できました。しめしめ、これはうまく行きそうです。ところが、XBeeの通信速度を115.2Kbpsに設定して無線テストすると、1~2秒ほどしか早くなりません。

いろいろ調べてみましたが、現在のうちの無線環境では、40Kbpsくらいの転送速度が関の山のようです。XBeeの通信速度は、あくまでもインターフェイスするデバイスとの速度で、XBee間の通信は、電波をどれだけぶんどれるかで決まるのですね。
ちなみに、ウチでは同じ2.4G帯の無線LANと、ブルーツゥースの無線マウス常時使用しています。

組み込みの様子はこんな感じです。ケースはタカチのSW-85、電源は単三電池2本です。この電池で4、5日間は連続で使えます。基板はブラケースにリブを立ててはめ込んであります。止めビスは使っていません。NchFETは手持ちのこれです。ゲート電圧が不足気味ですが、実測するとONした時のカメラとPICとのGNDの電位差は0.1V程度、これなら特に問題はないでしょう。

Dscn1469  Dscn1470

最後に回路図、ccscのプロジェクトはこれです。

回路図をダウンロード(PDF)
CCSC使用のMPLABプロジェクト「serialBridge2.zip」をダウンロード

VC#2008EEのプロジェクトは以前と同じですが、sirialPort1のプロパティを115200bpsに設定します。XBeeの通信速度も設定するのをお忘れなく。

2011年1月20日 (木)

XBeeシリアルカメラにインターネットからアクセス(続き)

花岡ちゃんのウィークエンド:

ハードウェアは「XBeeでシリアルカメラを無線化する」で製作したものです。これのパソコン側のソフトを改造し、ロリポップなどのレンタルサーバに専用ページを製作すればよいのです。

まずはサーバに必要なファイルをアップします。ファイルはこれです。
「neko.zip」をダウンロード

これを自分のウェブサーバの適当なディレクトリに置いてください。以前の投稿ではここここを参考にしてください。サーバの要件やインストール方法は一緒です。

インストールしたらブラウザでVision.htmlを開いてください。下のように表示されればOKです。

Testimg

Photoボタンだけ有効です。これをクリックすると写真撮影のコマンドを送ります。

次にVisual C# 2008 ExpressEditionのプロジェクトファイルをダウンロードします。
「LowPowerWebCam.zip」をダウンロード

重要です! ビルドする前にForm1.csの最初の方に記載してあるURLを、先ほどサーバ用のファイルを設置したURLに変更してください。

後はビルドして実行するだけです。パソコンに接続した「XBeeエクスプローラUSB」の仮想シリアルポートを選んで、OPENボタンをクリックすれば準備完了。

ブラウザでVision.htmlを開いてPhotoボタンをクリックすれば、20秒ほどで画面に写真が表示されるはずです。

なお、iPhoneでアクセスすると写真が非常に小さく表示されてしまいます。そんな時は、アクセス先をVision_i.htmlにすると、写真のサイズがいい感じになります。

これで、ケーブルレスでカンタンに設置でき、電池寿命の長いインターネットカメラの出来上がりです。留守中のペットの様子を見るには最適のキカイですね。そのうちコンパクトに組み直したいと思います。
ただし、今回のはあくまでも試作品です。エラーハンドリングもキチンとしていませんから、通信の状況によってはハングアップする可能性もあります。追試される方はこの辺をご理解下さいね。

さらにパソコンをボードコンピュータに置き換えればカンペキですね。電力を食うパソコンを、ずーっと動かしっぱなしにしなくて済みます。最近はLAN接続の出来るボードコンピュータも多いですから、いつか挑戦してみようと思います。

2011年1月18日 (火)

XBeeシリアルカメラにインターネットからアクセス

花岡ちゃんのウィークエンド

今週は、この間試作したXBeeシリアルカメラに、インターネットからアクセスして、留守中の猫の様子を覗き見しちゃいましょう。

ウチの猫は棚の上に登って昼寝をするのが大好きです。僕と奥さんを上から見下ろして優越感に浸っているのではないでしょうか。
家人が居ない時でも、どうやらここで昼寝をしているようです。そこで、棚の奥にカメラをセットして、留守中の猫の様子をのぞいてみようと言うわけです。

Dscn1445_2

猫の人相(?)がえらく悪いですが… 猫の後ろに見えているのが、試作したXBeeシリアルカメラです。電池式だから、こんなところにもカンタンにセットできます。

システムはこんな感じです。(このブログのほとんどの写真は、クリックすると拡大します)

Xbee

ロボタとの違いは、写真のアップロードをFTPを使わずに、C#のWebClientクラスとサーバ上のPHPスクリプトで行っている点です。こっちの方が普通のようですね。僕は知りませんでした。このサイトのコードをほとんどそのまま使っています。なんか不思議なサイトですが、yahooでc# upload phpとやると一番にヒットします。

とまれ、試作PCソフトの画面です。

Xbeewebcamcont

XBeeUSBアダプタの仮想シリアルポートを選んで、OPENボタンをクリックするだけて機能開始です。STARTボタンをクリックすると、ローカルで撮影コマンドを送ることが出来ます。撮影した写真は、画面上にも表示されます。

専用サーバにブラウザでアクセスするとこのような画面が開きます。

Nekocam

ボタンが二つありますが、有効なのはPhotoボタンだけです。これをクリックすると、20秒後に写真が更新されます。猫は不在のようですね。

ソフトの詳しい説明とサンプルコードは次回に。

2011年1月15日 (土)

ロボタ、ダメ出しされる

今回は久しぶりのiPhoneネタです。ただし、製作記ではありません。SDK4へのアップデートの話です。
えー、いまごろ?と、いわれそうですが。

特に不便も感じていなかったので、今までiOS3.2で通してきてました。でも、流石にそろそろアップデートしないとなあ、AppStoreに並べることも出来ないし、ということで、iPhoneをアップデートしました。それに伴い、SDKもアップデートしようとしたところ、なんと! 僕のOSXをアップデートしないとダメですといわれちゃいました。

僕は、特に不便も感じないので、ヤフオクで買った格安の中古MacBook(OSX10.5)を使ってたのですが、やむなくSnow Leopaldをヨドバシで買わざるを得なくなりました。

それはそうなんだろうけれど‥ なーんかモヤモヤするんですよねえ。特に不便も無かったのにねえ。

ともあれ、完成した新しい環境で、ロボタのプロジェクトをビルドしてみました。

なんと、エラーでビルドできません。「ここにはカンマがいるよ」といわれてしまいました。前はいわれなかったのに‥ とにかくそれを直して再ビルド。ワーニングが盛大に出ますが、とりあえず実機に転送できました。なぜかオリジナルのアイコンは出ませんが。

試してみると‥
○一度コマンドを送ると、そのコマンドを繰り返し実行する
○今まで出ていなかった(オーディオケーブルをさしているので)シャッター音が出る
○アプリのSTOPボタンをタップすると落ちる

シャッター音は盗撮防止のためそういう仕様にしたのだと思いますが、他のはアプリの作りの問題でしょう。ということで新SDKの目玉の一つ、静的解析ツールを使ってみました。

その結果、いくつかメモリリークの可能性を指摘されました。「これ怪しいけど、他に思いつかないからとりあえずやっちゃえ」と思っていた部分です。この辺が厳しくなっているようです。

なーるほど。でも、前のバージョンではとりあえず動いてたじゃん! という気分です。
経理の担当が新人にかわったとたん、キャバクラでの接待費が落ちなくなったみたいな?

でもまあ、プロジェクトの名前を安全に変えられる機能が追加されたのはありがたいです。前に作ったプロジェクトのコピーをタネにして、新たなプロジェクトを作るという、サンデープログラマのスタイルには必須の機能ですからね。

2011年1月12日 (水)

XBeeでシリアルカメラを無線化する(その3-おしまい)

花岡ちゃんのウィークエンド

Dscn1442_2

別アングルからの写真です。搭載してある部品がわかると思います。XBeeは秋月で買ったチップアンテナのものです。
押しボタンはデバッグ用で、実際は使用していません。

パソコン側はこれでXBeeを仮想シリアルポートとして接続します。

Dscn1451

さて、気になる消費電流ですが、待機時の電流は下記の写真の通りです。

Dscn1433

待機電流約12mA、ほとんどはXBeeモジュールの消費電流です。写真撮影時にはカメラの電源が入るので、電流は約80mAになります。

アルカリ単三電池2個で4~5日は連続使用できるのではないでしょうか。もちろん撮影頻度にもよりますが。
デジタルの無線カメラとしては相当な省エネです。小型の太陽電池と組み合わせて、電源のとれない、庭先の定点観測カメラなんかも実現できそうですね。

そのかわり、一回の撮影に18秒近く(起動時間4秒含む)かかります。シリアル通信速度を115.2Kbpsにあげれば10秒くらいにはなるかと思いますが、それでも動画は無理です。

また、カメラの起動時間を4秒みているので、このままではセンサーで決定的瞬間を撮影するような用途には向きません。

やはり、インターネットに接続して、カンタンに設置できるネットカメラにするのがよさそうです。次の週末にでもチャレンジしたいと思います。

今回のウィークエンドはこれでおしまいです。

2011年1月11日 (火)

XBeeでシリアルカメラを無線化する(その2)

花岡ちゃんのウィークエンド

PICのブログラムはいつものようにccscで作りました。特に変わったことはやっていないので、他のcへの移植も難しくないでしょう。
「serialBridge.zip」をダウンロード

PCからXBee経由で"P"一文字を受信すると

1・カメラの電源を入れる(デフォルトの通信速度38400bps)
2・4秒待つ
3・カメラに撮影コマンドを送る
4・カメラから256バイト読み込む
5・XBeeからホストへ256バイト送る
6・4と5をJPEGファイルデリミタ(0xFF 0xD9)が来るまで繰り返す
7・カメラに終了コマンドを送る
8・カメラの電源を切る

と言うシーケンスを実行します。
カメラ起動後4秒待っているのは、電源投入後2-3秒まてとマニュアルにあるためです。おそらく明るさの自動調整の時間ではないかと思います。

シリアルカメラは320X240dotに設定し、XBeeのシリアル通信速度は両方とも38400bpsに設定します。もちろん、PC側をCoodinator、カメラ側をEnd Deviceに設定するのをお忘れなく。ここでやってますね。

PC側のソフトはVC#2008ExprssEditionで製作しました。画面は丸まって熟睡しているウチのネコです。どこが頭だかわかりませんが。

Nekocam

OPENボタンをクリックしてXBeeのポートを開きます。(コンパイル前にserialPort1のプロパテイにポート番号をセットしておく必要があります。)
あとはSTARTボタンをクリックすれば、写真が表示されます。起動から転送にはこのサイズの画像で18秒ほどかかります。

参考までにVC#のプロジェクトを公開します。
「JPEGbridgeTest.zip」をダウンロード

次回は試作品の性能をチェックします。

2011年1月10日 (月)

XBeeでシリアルカメラを無線化する(その1)

花岡ちゃんのウィークエンド

今週は前に実験したシリアルJPEGカメラを無線化してみます。単に無線化するだけではなく、長時間の電池駆動のため、省エネ化にもチャレンジします。

昔ながらのコンポジットビデオを電波で送るのはとても簡単で、トランジスタ1個でも作ることが出来ます。マイコンを自作していた70年代は、この方法でテレビの空きチャンネルにVRAMの表示をさせていました。コンポジット入力のついたモニタが普及するまでは大活躍したものです。

普通はテレビのアンテナ端子に同軸ケーブルで接続しますが、送信機の出力をあげて簡単なアンテナを付けると数メートルの無線伝送も出来ます。電流もわずか数mAです。もっとも電波法違反ですけど。

昔のハナシはともかくとして、今回はシリアルカメラとXBeeを使って、静止画の無線カメラを作ってみましょう。

Xbeeで通信するためにはフロー制御が必要なので、垂れ流しの画像データを直接接続できません。そこで間にマイコンを入れて制御するようにします。

【後日追加:下記のバッファサイズは間違いです。訂正はこちら
なお、XBeeの仕様書によるとXBeeの送信バッファサイズはわずかに37バイトで、バッファの残りが17バイトになると/CTSがインアクティブ(H)になり、データの停止を要求します。CoodinatorとEnd Deviceを38400bpsに設定してデータ転送をすると、この写真のように/CTSは結構バタバタします。(Lの時だけデータを受け付け)

Dscn1443_2

XBeeとシリアルカメラ、二つのシリアルデバイスを接続するので、マイコンにはシリアルポートが二つ必要です。しかし、いつも使っているPIC16F886には一つしかありません。

身近なマイコンでは、SH-7125やH8-3052ならシリアルポートは複数ありますが、消費電流が面白くありません。50mA近くも食います。電源電圧が5Vなのも省エネ機器には向きません。

と、いうことで、今回はPICのシリアルポートをXBee側とシリアルカメラ側に切り替えて使うことにしました。ソフトでシリアル通信をすることも考えましたが、8MHzのクロックでは高速で安定な動作は期待できません。クロックを20MHzまであげれば良さそうですが、そうすると3Vでの動作が保証できなくなります。そんなわけで、素朴な実装となりました。

シリアルカメラから256バイト分の画像データを受信し、ポートを切り替えて、XBeeに送り出すという仕掛けなので、あまり効率は良くありませんが、まあ、確実です。

3V動作、内蔵8MHzオシレータ使用時の16F886の消費電流は1mA程度ですが、シリアルカメラはそうはいきません。実測すると動作時の電流が70mA弱、パワーセーブモードでもなんと40mA以上も食っています。使わないときに電源を切るのが良さそうです。秋月で売っているPch MOS FET DMG3215Uで電源をON/OFFします。このFETはVGSが1.5V位から使えるので、今回のような低電圧のキカイにはもってこいです。

【後日追加:下記回路は電圧が3Vより高いと動作が不安定になります。改訂版はこちらのページにあります】
回路図はこんな感じです。
「XBeeCam.pdf」をダウンロード

回路の中にダイオードが二つあります。今回は普通のスイッチングダイオードを使って正常に動作していますが、ロジックレベルのマージンを稼ぐために、ショットキーのように順方向電圧降下が小さいモノを使うべきです。ホントはね。

完成した試作機の写真です。電源にはアルカリ単三電池を2本使っています。
次回はソフト回りのハナシをします。

Dscn1438_2

2011年1月 2日 (日)

アクエストークモジュールを作る(その3-おしまい)

花岡ちゃんのウィークエンド

モジュールをテストするには、シリアルカメラのテストで使ったようなRS232Cのレベルコンバータを用意して、teraTermからテキストデータを送ればOKですが、今回はテスト用のソフトをC#で作ってみました。

Talktester

ポートを選んでOPENし、大きなテキストボックスにアクエストークの規則文字列を入力後、SPEECHボタンをクリックすると喋ります。発声速度コマンドや特殊音コマンドも送信できます。また、デバイスのステータスを周期的に問い合わせて、STATUS CODEとして表示しています。参考までにC#のソースを公開します。これです↓

「MicroTalkTester.zip」をダウンロード

作ってみて気づいたことは下記です。
・スピーチ文字コードはShift-JISなので変換が必要(VC#やターミナルソフトではEUC)
・文字列が正しくないとERRORでしゃべらないが、改めて正しい文字列を送ればOK。特別な処理は必要ない

試作品(アンプ含む、3.3V動作)では待機電流が30mAくらい、発声時は40-60mAくらいです。

下の動画では枕草子の「春はあけぼの」の冒頭部分を読ませています。デジカメのマイクで録音している関係でちょっと音が悪いです。肉眼ならぬ肉耳(?)ではもっとクリアです。なお、バックグラウンドのゴーという音は、パソコンのファンの音です。(動画に対して音が遅れてますね)

平安時代のイントネーションは、誰にもわからない(たぶん)ので、読みだけを記述していますが、そこはかとなく雰囲気はあるのでは?

一度にチップに送信できる文字列は大体これくらいです。これ以上長い文章はいくつかに分割し、前のスピーチが終了してから次を送信するようにします。

このデバイスを使うと、電圧や電流を読み上げるテスターが作れそうですね。
目的の端子になんとかテスター棒を当てたはいいけど、メーターを見ようとしたとたんに、テスター棒がずれてショート、回路を壊してしまった経験なんかは、多くの人が持っているのでは?

今回の実験は、これでおしまいです。 

大物はつらいヨ

ロボット作ろう:シェーキー製作記

完成したベース部分に、ボディ部分を組上げて首から下を完成させたい!という意気込みで始めたのですが… なかなか進みません。

ロボットの体内バスとネットワークユニットを橋渡しするSH-Tinyのソフトや、電源回りの部品は一渡りそろっているのですが、肝心のボディの塗装が進みません。

フレームだけでもと思っているのですが、仕掛品を置いておくスペースが、現在のワンルームではとれないので、作業を始められないのが悩みのタネです。組上げると結構大きいんですよね、これが。

うーん、困りました。A案としては、部品ごとに分けてすこしずつに塗装しながら最後に組上げる、B案としては、どこか別の場所に作業場所を確保する、そしてC案は、10日くらい休みを取り、その間嫁さんと猫にどこかに行っていてもらう、なんてなプランはたてられますが。

B案はお金がかかりそう、C案は嫁と猫の総スカンを食いそう、となるとA案なんですが… 塗装が出来るのは週末だけなので何ヶ月もかかりそうです。

思い切ってロボットの組み上げは棚上げにして、簡単にバラせるバラックを組んで、実験の度に組んだりバラしたりしましょうか? でも、機能すると満足してしまうので、これだと完成しない?

楽しみとして始めたプロジェクト。シバリが無い分結構悩ましいものです。

« 2010年12月 | トップページ | 2011年2月 »