2012/02/25

ライフログ

FemtoCubeを移動時に鞄に放り込み、移動時間の間ずっと記録してみたものを、GoogleDocsのグラフ作成機能でトレンドとして表示してみた。
上から、バッテリ、カラーセンサのRGB値(12bit)、SCP1000の温度と気圧の順となっている。3秒間隔でだいたい1時間半程度のスパンを持つ。
シリアルSDロガーの消費電力分が加わっているので、本来の運用ではもっと緩やかに電圧降下するだろう。今のままでも一日は持ちこたえそう。
カラーセンサは今回WayPointの記録用に使った。ピークは乗り込んだ駅と降りた駅で鞄から取り出して明かりに当てた様子を表す。
温度はだいたい鞄の中の温度となる。 最後は外に出し、部屋に置いたのでだんだん低下していく。 
気圧は高度を表す。途中地下を経由するので、その高度変化が高くなる方へ現れている。

これに加速度とか加えると楽しそうだ。そしてディテールを増やしすぎて生活が駄々漏れに・・・ 
記録をこうしたグラフにするだけでなく、一日のログから消灯時間が勝手に決まるスマート住宅とか(やや迷惑だが)、蓄積したデータから何か現実や行動者自身にフィードバックがかかるものも面白いだろう。生活リズムから健康診断するとかそういう用途は、今あるスマートフォンとかでも十分できそうではある。ライフターゲティング広告ビジネスとかとか。人がアフィリエイトを稼ぐために運動し外出する時代はもう来ていたのだ・・・(完)

**********
オムロンのPC連携できる歩数計
上を書いた後で、新古品として見つけた歩数計。
最近の歩数計は加速度センサで歩行リズムの周期だけを取り出してカウントするらしい。
オムロンの製品はRFIDによる非接触データ通信に対応していて、一日ごとのデータを会員制サイトにアップロードできる。同じ仕組み(WirelessLink)に対応した体重計と血圧計もあるようだ。

ライフログに重点を置いたヘルスケア製品はどんどん増えていくだろう。 通信端末もNFCやBT4LE規格などによってより柔軟な機器連携をするようになりつつあるので、体重計や血圧計の管理画面がスマートフォンアプリ、という形態は容易に想像できる。

ライフログの悪用の危険性についてはどうなのだろう。
歩数も体重も心拍も、日付以外にGPSの位置座標のような絶対基準を持っていないので、個人と紐付けなければデータ単体の悪用は難しそうだ。 

 実際のところ、高齢の親にらくらくホンを持たせて、その歩数計とメール報告機能で安否と体調をモニターするといった用途では積極的に活用されている。 
テクノロジーベースで考えると良く間違えるけれど、魅力的な技術が普及するのではなく、ニーズが技術に魅力を持たせる。TwitterやPachubeみたいな空間で刻々と情報を自ら駄々漏れにしても、無視されるか価値を持つかは、発信者や情報が注目されているかどうかによる。
 直接的な脅威は、何時の時代も関門の突破であり、古典的なソーシャルエンジニアリングによるものだ。 携帯端末が盗む側にとっても魅力的な端末になってしまっている。

**********

用事であっちこっち行き来していたら1万歩を超えていた。開けた場所が必要なGPSと違い、歩行ベースのログはとても単純かつ実用的だと改めて思った。
ライフログも測るという行為により自分や他者の行動にフィードバックをかける手段であって、目的ではない・・・ と機器作りとしては自戒を込めて。 



2012/02/23

FemtoCubeの外装とA/D周り


12月と比べると見た目はあまり変わってないけど、中身のほうがだいぶ完成したFemtoCubeプロトタイプ機。この機体は最初から宇宙志向では無いので(考え方は流用したが)、気圧センサや地上仕様の照度センサなどを実装して、ワイヤレス気象センサとしての作り込みをすすめている。 過去作のローバーなどは、ひとつのマシンの制作にはそれほど時間をかけて来なかったけれど、それに比べると今回は回路的にだいぶ充実した構成になった。
プロトタイピング病を回避するために、ATmega328Pでできること(I/Oピン)という制限を課し、外形を制限してたけど、結構うまくいったと思う。

50mm角のキューブケースに収めるという制約は健在。
観測センサが一段落ついたので、タイムスタンプ用RTCと照度計、回路電圧などの計測chを実装した。RTCは秋月のものを基板の端っこに立てて取り付けている。

ブロック図

電源周りなどがまだ未完成だけれど、だいぶ完成形に近づいてきた。


A/D周り
照度、回路電圧、太陽電池発電電圧はAVRのA/Dを使う。内蔵Ref1.1Vに設定したので、測定電圧は抵抗分圧で電圧変換した。手持ちの1MΩ台の1608抵抗などを動員する。

電源電圧については、現在はバッテリから直に取り出しているため非安定化バスとなっている。電子系はDCDCも搭載していない状態だが、4.2V~3.0V程度でなら回路の動作範囲なので、回路電圧(=バッテリ電圧)を監視しておき、照度センサなどの電圧依存なセンサのために補正値を提供するという対応でよさそうだと判断した。(4.2V側が若干高めなので、3VくらいのLDOを挟んでもいいかもしれない・・・)

照度はS9706の電源端子と共用だが、明るさによっては電流がポートの許容範囲を超えそうで怖い。
とりあえずセンサ電源OFFでクロックダウン中の消費電流は実装前とあまり変わらずに済んでいる。

奥に立ってるのがRTC

カオス配線

電源系と電子系あわせて
電源についてはバッテリを大容量Li-ion生セル(880mA)にした。そうなるともともと小容量バッテリ向けのLTC4071では負荷がキツくなったため、FETなどのディスクリート部品で充放電回路を実装することにする。 生セルなどは扱いを間違えると焼損したりするので、使用について自己責任でお願いします、詳細はあえて触れません。

回路デバッグ周りの設計

基板は電子系基板を中心として、下に電源、上にXBeeなどの通信系基板を載せる構造。3つは11ピンの貫通ピンヘッダで接続されている。
電源、通信バスを通しているので、隙間にプローブを挟んでデバッグできる。

データ送受信ボード。XBeeかOpenlogで記録できるようにしてある。
電車ではOpenLogをつけて鞄に放り込んでおいた。

XBee通信装備。 さぼてん計画の置土産です
FMトランスミッタの影がどんどん薄くなってる気がするなあ・・・ でも解決策は用意してある! (ちゃんとソフト書ければだけど・・・)

2012/02/18

物語駆動開発


※脈略のない話です。

組立中の本物の人工衛星を見る機会に恵まれていたこともあり、時々、「陸にあるときの衛星ってなんて呼べばいいんだろう」というロクでもない思考を始めることがあった。 
人工衛星という単語自体は、まず天文学的な定義がある。惑星をまわる物体を衛星といい、中でも人が打ち上げたものが該当する。 速度的には第一宇宙速度に達したものとなる。(速度を得るのはロケットの仕事だけれど)

 冒頭のどうでもいい疑問については、宇宙機(SpaceCraft)という上位の言葉が用意されている。 人工衛星の制作現場では、単に「衛星」と略されるため、手のひらサイズのキューブサットから、大型衛星、惑星探査機まで含まれていて、はじめは混乱する。地上でいえば、携帯電話とその携帯基地局くらい規模の違うシステムが含まれている。

 衛星って一般的にどう理解されているのか。その思いはMAKE会場で展示に興味を持ってくれた人の衛星観を見聞きしてきた中でだんだん育っていった。 普段衛星技術そのものを考えたことのない人が衛星について抱くイメージを知るチャンスってなかなか無い。 大学衛星も時折ニュースにはなるが、それほど数は多くないので、まったく知らない人が多いだろう。
 軌道には決して投入されない模擬衛星実験や高層気球でも衛星と混同するような説明の文章をたまに見かける。(これは英語でも見かける)、広報媒体で採用される言葉には公報用語的な飛躍が見え隠れすることも多いので、さらに混乱を招いているかもしれない。

 話を交わした中で、特徴的な誤解には以下のようなものがあった。

・ロケットが打ちあがった姿でそのまま回っている
・地上から昇っていく
・みんな静止衛星になる(衛星放送や気象衛星のことをわかっているなら合格)

衛星の立場から見て、上の誤解の中でやや懸念したのが、「地上から昇っていく」という認識だった。
実際には第一宇宙速度を稼ぐロケットがあってはじめて、衛星は軌道を巡ることができる。
ウェブではしばしば高高度気球がバルーンサットと紹介され、そこに載せた搭載カメラのHD映像が大手ブログサイトなどでも取り上げられて結構有名になった。 メディアの書き方をみると、気球と衛星を混同している人は結構いるらしい。
ということで、低軌道衛星というものはどうもスルーされている気がする。(その事実は家族に説明を試みた場面ですでに直面済みであったけど)

人工衛星の活動は一言で言い表すのが難しい。

ISSから撮った地球の動画のバリエーションが増えており、軌道からの眺めが纏っていた神秘性は減りつつあるが、衛星自体は一度打ち上げたら回収もできず、衛星の視点を見る機会はほとんどない。限られたリソースの中で、衛星自身が高画質な画像や映像をたくさん撮って下ろすということも難しい。

 対してバルーンサットの場合は、まず高高度からの地球の映像や写真というわかりやすいアウトプットから話が始まるので、そこに技術的な理解はなくても良い。必要な技術もDIYの延長で、殆どの場合高性能な民生モバイル機器を寄せ集めて搭載したシンプルなものだ。しかも安価で、高ビットレート。 これは後で物理的にデータを回収すること前提だからできる割り切りでもある。

 アメリカみたいに広大な土地がある場所だと、少人数とわずかな投資で綺麗な写真という成果が得られるし、プロジェクトとしては個人でも始められるので、ブログやメディアの記事を見るととても楽しそうだ。
(日本でやる場合は土地も空も狭いために、許可が取れる場所がかなり限られるのがネック)

同じ(ような)成果でも、アプローチが違えば技術的難易度も違う。 でも、人は使われた技術よりもわかりやすい成果やストーリーを求めるものだ。 バルーンはまだ地球大気圏内での話だから、そこも連想を呼びやすい。自分の身体感覚でわかる範囲から想像しやすいからだ。

 衛星の運用方法、打ち上げ後の動作や降りてくるデータまで頭に入ってくると、電波を聞くだけで、その衛星が宇宙にいる様子(信号の強弱から姿勢と自転速度が、電波波形の歪みから電源の調子が)を思い浮かべることができるようになる。
心眼を磨き、軌道上の状態を人力拡張現実感で運用していくには、現場でそれなりの下積みが必要になる。こうして個人が獲得した感覚体験/経験を言葉に翻訳するのは難しい。
 自分の中でも、携わる中で、衛星という概念はどんどん変化している。 ビーコンを発する小さな機械から、電波の司令で結果を返す遠隔機械へ。これはキューブサットでの話だから、大きな衛星になってくるとまた違うのかもしれない。

*****************************

一般的なイメージと現実が違うのに、その差をお互いに見ていないということはよくある。「ロボット」も震災後のイメージはだいぶ変わった。高度なロボット技術という物語と現実のすれ違いがニュースで取り上げられていた時期があった。

衛星よりも、単語の包括範囲が広くて面倒なのがロボットという言葉だ。 人によって解釈が異なるが、文化の影響でたいていの人はヒューマノイド・ロボットを思い浮かべるらしい。
 しかし、実際には人型である必要は無いものが大半で、今は産業ロボットのUIとして実装される動きがあるほかは、研究、展示用途でしか見当たらない。  伊藤計劃氏の言うように、最初に実用化されるとしたらアメリカ軍が配備するだろう。


 工場のロボットが正確で精密な作業を行えるのは、環境のほうをロボットに合わせて構築しているという側面が隠れている。 たとえば、瓦礫の中を単独行動するロボットというのは結構難しい。自然環境は、無視していい情報と、無視してはいけない情報が区別なく存在していて、極めて曖昧だ。
センサの多重化、処理能力の向上などが続けばいいのかというと、処理能力さえ増やせばAIができる、というのと同じくらい怪しい。 訓練された救助犬ですら、瓦礫を歩くのは手こずるし、怪我をする。
瓦礫の中を行動するよりも、片っ端から瓦礫を運び出せる自走式ベルトコンベアの投入というのがロボット的解決法かもしれない。

  すぐれたソフトウェアと同じように、知的に見えるロボットもすぐれた課題設定や課題解決を行った技術者の功績が具現化したものだ。現実にハードウェアを持つがために、優れたロボット技術は八面六臂の活躍を期待されるが、設定されたルールの外では役に立つとは限らない。それが普通であり、ロボットも設計したとおりに動くが、意図したようには動かない。 見た人それぞれが抱く物語という要素で過大評価されがちな道具だと思う。

 人にかわって、人にできることの一部を効率良く繰り返すロボット。人にかわって、人の出来ないことをこなすロボット。 人と機械の間のインターフェースになろうとするロボット。

人間社会は例外だらけであり、例外は人の数ほど存在する。ありとあらゆる事態を想定することは不可能だし、ロボットの可塑性を増やせば増やすほど、安全率の面で設計すら不可能になってゆく。 人がある程度歩み寄ることを前提とするか、あくまで人をコアとして、動作を補助する分野での開発例は多い。

*****************************

Spinnerの動画をとっていて感じたのが、編集では隠れてる背後でのロボットの制御の様子や、カット無しの動作の様子を見せずに、いい場面だけ公開することはそのロボットの性能を過大評価させるだけだなあということだった。ストーリーのある映像作品としては面白くなるかもしれないけれども、そのあたりがおもちゃの域を出ない理由なのかもしれない。

物語の発信者は理想を現実の言葉と技術に包んで語る。 ただ、その理想像を技術者が現実に落としこもうとしても、物語の目指す理想を実現する手段がしばしば存在しなかったり、解釈を誤ったりする。
 ロボットSFでは特に頭脳―制御システムが架空のブラックボックスとして導入されるし、宇宙SFではすでに宇宙進出した世界で物語が進行していたりする。ナノマシンという便利アイテムも使われるが、よくできた物語ほど、そうした前提を意識させることがない。

もともと物語は何かを語り継ぐ流れの中で生まるものだと思う。
満身創痍ながら帰還した探査機が運用者チームの活動とともに擬人化され、魂とストーリーを付加されたように。 

 既に開発された技術とそれにまつわる人間ドラマを語る時、物語化は便利なのだが、物語(構想)を現実に外挿するには、物語を選ぶセンスと使う手法の理解が必要になる。トップダウンとボトムアップの接点を運任せにするか、ある程度考えてから狙うか。 だんだんと話がヒット商品開発秘話みたいになってきた。

視野を身近に戻せば、生活に密着したデバイスに纏わせることができる「万能感」は、日常というもののなかですぐすり減ってしまう。  実際は、デバイスのおかげで日常が底上げされているのだけれども。 大企業は、常に自分たちが底上げした「日常」に追われながら、巨大な資本で明日の万能感を手探りしている。

 自動車はドライバーを補助する電子装置の塊だし、ヒトの個体は成長とともに電波による通信能力を獲得するのが当たり前になった。
この記事もどこかのサーバーに蓄えられているけど、その所在はまったく知らない。
 過去の人間からみた未来を今の人間は日々消費しているわけで、今の文学に登場する装置は100年前の人間から見れば全部SFだということを簡単に忘れてしまう。 日常の海で踊るうたかたの物語たち。

2012/02/17

続、FemtoCube電力管理 (SCP1000とプリスケーラ編)

お散歩デバッグ

引き続き、SCP1000の制御とATmega328p自体の電力を下げる方法を探る。SCP1000はArduinoIDEのSPIライブラリでサンプルスケッチとして載っているので、それを使った。 バグ情報などを参考にして、若干修正している。このソースではDREDYピンをタイミング監視用に使っているようだ。


SCP1000-D01の読み出し

SCP1000は通常でも25μAと省電力だが、垂れ流し状態の連続取得モードではなくトリガ読み出しを行う。使わないときは待機していてもらえると助かるので。
このモードを使うためには,
・オペレーションレジスタ(0x03)に0x0cを書き込む
              or
・TRIGピンにパルス入力を入れる
(from SCP1000データシート 2.2.2 Measurment mode selection)


という2通りがあるようなので、オペレーションレジスタの方を試した。オリジナルがすでにメインループの先頭で高速読み出しモードに設定しているので、設定値を0c に書き換える。あとは一連の処理を関数化しておいた。ちゃんと動いている様子。
他のセンサと読み出しタイミングを揃えなくて良ければ、TRIGピンは省略できそうだ。 (空きIOピンが1本増えた!) 

この状態で電池駆動し、動作テストを試みた。
電車に乗って移動していたときの気圧変化が以下となる。(5秒周期のパワーセーブ)

気圧が下がれば高度は上がる。1000秒あたりで列車が地下に潜って、地下鉄を乗り継いで都心に出たので、いい感じに大深度地下を経由してる気がするような・・・ 

標準大気で「hPa]から高度[m]を出し、出発地の高度補正をかけてみた。
路線は途中から高架を走り、新宿あたりで地下に入って、それからどんどん潜って最後に似たような高度の目的地に出てくる。という感じだろうか。
時刻管理と他のセンサによる地点を推定する情報と自分の活動を示す情報が欲しい。 (歩数計かな・・・)
もともとライフログ用途では作ってなかったから、これはまた別に検討したい。


プリスケーラ

消費電流削減のためにもともと8MHz駆動だが、さらにクロック分周比を変えてみる。ライブラリ化されたものを使ってみた。
クロックを落としている間は、その他ライブラリのタイミング設計が衝突するので、とりあえずセンサ読み込み、結果保存時に8MHzへ戻す。

待機状態 
8MHz 6mA
32分周 2mA

I/Oだけでなく内蔵機能にもアクセス!とりあえず動作してくれたみたい。

話がずれると自作PC(木製筐体)時代は定格派です。ケースのエアフロー性能にこだわってたので。

周辺機能の停止、スリープ

此処から先はCPUをスリープさせたり、内蔵機能を直接叩いて停止させたりすることになりる。こうなるといよいよセンサの使い方をモードごとに定義せねばなるまい・・・。
作り込むとだんだんとArduinoらしさは薄くなって、最終的にそこには一つのマイコン学習の世界があったのでした。 シンプルさと機能性の両立は色々と難しい。

はやく充放電回路完成させないとな・・・


参考

気圧センサー 秋月電子通商
http://akizukidenshi.com/catalog/g/gM-03468/

Using SPI to read a Barometric Pressure Sensor (Arduino.cc)

http://arduino.cc/en/Tutorial/BarometricPressureSensor

SCP1000 気圧センサーで気圧と温度を測定 (下手の横好きのスクラップブック!!)
http://blog.goo.ne.jp/mkidmtr70/e/bedb2067d520dbd9541f1b98cb716676

Arduinoで遊ぼう -動作クロックを切り替えて省電力制御 (なんでも作っちゃう、かも)

2012/02/11

S9706の電源制御とFemtoCube電子系


 独立して動く回路では、周辺回路の電源を必要な時以外はOFFにすることで無駄な消費電力を削減することができる。
 既にFMトランスミッタはコマンドで電波発信を止められるようにしている。

S9706はデータシートを読むと消費電流が10mAとある。

これならAVRのポートでも駆動できそうなので、VccはATmega328のピンから取ることにした。
FemtoSatの回路は周辺機能全OFFで定常6mA程度(クロック8MHz)

ここで期待通りON/OFFができているかどうか確認するため、回路の消費電流を測定することにした。

まずは、単純にソースの上端下端で電源ピンをHIGH/LOWしてみた。
FemtoCubeの回路自体はLチカだけさせている状態で6mA以下なのだが、そこでS9706が一旦ONになったタイミングから、突然データシートの4倍くらいの電流が流れ続けた。異常な数値だ。これに送信中のFMトランスミッタが加わると回路の消費電流は80mAを超える。

・異常電流でもS9706の動作は問題ない。前記事
・S9706の電源OFFをやめると10mA程度で一定に。 

消費電流は嘘をつかない。ということで、電源ピンをONにしないで起動してみたところ、データは届かず、やっぱり4倍の電流が現れた。どうも電源OFFにした時、データラインはそのまま放置してるのが問題だった様子。

とりあえず電源OFF時にS9706の全てのピンをLOWに落とすようにしたら、こんどこそはデータシート通りの消費電流が再現できた。単純なことだったね・・・
読み出し時だけONなので、連続取得以外では消費電流はピーク値として扱えそう。

電子系の作り込み


デモ用プロトタイプの頃からすると、少し思想を変える。FMトランスミッタは乗っけておくけど、データ通信はXBeeに譲る。太陽電池で運用することを視野に入れたEM設計を進める。

現在の電流モード
(3.3v時)
・待機 6mA ~20mW
・計測 10mA 
・電波送信 41mA 135mW

待機モードなら、日光下では以前作った小さなアモルファスセルでもギリギリ動かせそうだ。足りなければ電波送信の回数を減らせば良い。
あとは充電させるために、クロック分周比をいじってスリープさせるとよさそう。

残り少ないA/Dも活用したい。部品箱の底で眠っていた気圧センサを搭載することにしたので、そっちの温度センサをアテにしてLM60は外す。1ch、あるいはI/Oの空きができた。
ここにはXBeeのシャットダウン制御端子がつく予定。
SCP1000の制御線を全実装すると、残りのI/Oは埋まった。
残されたA/D3つは照度、光電池出力、バッテリ電圧計測に割り当てる。
観測周期も通常は1Hz以下を想定しているのでこれでいいのだ・・・。

以下は作業管理テキストより。


------------------------------
端子管理
D0 RXD //XBee/ATP3011F4-PU
D1 TXD //
D2 //SCP1000_TRIG(1)
D3 NS73M TX(LineOut)
D4 //SCP1000_DRDY(2)
D5 //S9706_CK
D6 //S9706_DOUT
D7 S9706_VCC
D8 S9706_Range
D9 S9706_Gate
D10 CS //SCP1000_CSB(7)
D11 MOSI //SCP1000_MOSI(5)
D12 MISO //SCP1000_MISO(6)
D13 SCK LED//SCP1000_SCK(3)
A0 //XBee_sleep/LTC3105_shdn/LED
A1 //solarcell_voltage(ref1V1)
A2 //battery_voltage(ref1V1)
A3 Light_sensor_NaPiCa(ref1V1)
A4 SDA NS73M, mag, EEPROM
A5 SCL NS73M, mag, EEPROM


最近はやりのRAMオンチップSOCの内部を見てるような


UP-204GSR基板が狭い。SCP1000基板は足を切ってAtmegaと24C1024の上に貼り付けることになるようだ・・・


参考
浜松ホトニクス デジタルカラーセンサ S9706

Arduinoで遊ぼう -動作クロックを切り替えて省電力制御 (なんでも作っちゃう、かも)