ブログ

ορεσικα ψομαναι κυσο βλογ

Arduino yunで放射線センサのデータをxivelyとM2Xにアップロードする

xivelyだけでは不安

xivelyはたまにサービスが止まるので、センサデータをxivelyだけに上げるのは良いアイディアとは言えません。M2Xにも同時に上げてデータロストに備えましょう。

yunのプログラムスペースはやはり小さい

複数クラウドへの同時データアップロードの例として、pocket geiger type5の測定データをarduino yunでxivelyとM2Xの両方に上げるプログラムを書いてみました。当初はxivelyと同様にarduino側のProcessクラス経由のcurlを利用してM2Xにもアップロードしようと試みましたが、パラメータの文字列を用意するためにメモリが足りなくなって断念し、結局linux側のシェルスクリプトにM2Xへのアップロード機能を移しました。また、放射線データ保存用の配列も、デフォルトでは200要素ありましたが、150まで減らしてやっとうまく動作しました。しかしここまで苦労するなら素直に全部linux側でやってしまったほうが良いような気もします。

つかいかた

スケッチの下の方でコメントになっているシェルスクリプトを、yunの/root/にm2x_up.shという名前で作成して実行権限を付与します。スクリプト内の

M2X_DEV_KEY='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
M2X_API_KEY='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
M2X_RADIATION='radiation' # radiation stream
M2X_RAD_ERROR='radiation_error' # radiation error stream

を自分用のM2Xの適切な文字列に変更します。

次にスケッチ内の

#define APIKEY "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
#define FEEDID "000000000"

を自分用のxivelyの適切な文字列に変更してyunにアップロードします。うまくいけば一分に一回の頻度でxivelyとM2Xの両方に放射線センサのデータが上がります。

データ例

以下の様な感じで、両方共アップロードがうまくいっているようです。

f:id:XX-Prime:20150426221329p:plain

f:id:XX-Prime:20150426221340p:plain

これでどちらか(というかxively)が止まっても安心です。

コード

まとめ

シェルスクリプトjsonデータの構築部分がどうしてもうまく行かず、3日くらい試行錯誤したことは人として恥ずべき過去です。

Xively障害発生と復旧

サーバ障害発生

f:id:XX-Prime:20150418212254p:plain

これまでで一番長いダウンタイムかもしれません。先日、しょうもないUIアップデートがありましたが、そんなことやってるヒマがあるなら以下略。

乗り換え先は

M2Xとかどうでしょうか。

xx-prime.hatenablog.com

ちなみに私はAT&Tとは何の関係もないただのアホです。いくつか試してみて、乗り換えが容易だと思えるのがM2Xでした。

念の為に、XivelyとM2Xの両方に同じデータを上げておくと、片方が死んでいても安心です。私は放射線データだけを一つのrubyプログラムからXivelyとM2Xの両方に上げていますが、特に問題は生じていません。更に念押しするなら、3つ目のどこか別のクラウドストレージサービスを同時利用するのも良いかもしれません。クラウド利用は便利ですが、データロストの対策はしておく必要があります。

Xivelyの有料アカウントを利用している人は今回の障害の影響は受けているのでしょうか?

復旧

障害発生日時:2015年15時36分(JST)

障害復旧日時:2015年23時19分(JST)

でした。これまでも一時間程度の障害は度々発生していましたが、7時間以上というのは珍しいです。この先も障害が頻発するのかどうか注視が必要です。

3つのスイッチの状態を一つのアナログポートで検知したい

経緯

あるマイクロコントローラの、自由に使える入力ポートがアナログ1ポートしかないという状況で、ノーマリオープンのスイッチ3つの開閉状態を検知したいという状況が発生しました。スイッチは同時に閉じられることもあるので、2^3 = 8通りの開閉状態を電圧の変化として検知できるかどうかを考えてみました。だいぶ無理がありそうですが。

回路案

cacoo.com

こんなもんしか思いつきませんでした。Rとr1,r2,r3の値をどう選ぶかが問題です。ヘタに選ぶと複数の状態が同じVoutになってしまいそうです。

抵抗の選択

スプレッドシート上でいろいろと計算した結果、以下の組み合わせが良さそうだと思います。

{ \displaystyle R = 1\text{k}, r_1 = 4\text{k}, r_2 = 2\text{k}, r_3 = 1\text{k} }

これらの比率だけが意味を持つので、全体を適当に定数倍してもVoutは変わりません。この組み合わせの結果、Voutは以下のようになります。

0V付近とVcc付近の空きが大きく、右のほうの電位差が小さいなどの欠点はありますが、とりあえず8通りの電圧として分離できているようです。最小の電位差が右端2つの0.036 Vcc [V]なので、分解能が8bitもあれば十分識別できそうです。あ、抵抗の誤差をちゃんと考えないとマズそうな気もします。

もっと良い組み合わせや回路はあるか

ほぼ間違いなくもっと良いアイディアがあるのでしょうが、腐って紫色に変色している私の脳みそではこの程度が限界でした。特にVcc付近がうまく利用できてない点が激しく間抜けです。

スイッチはいくつまで増やせるか?

A/D変換のビット数に応じて、限界が決まると思います。面倒なのでここで思考を停止します。

一応計算式

間違ってるかもしれませんが

https://www.circuitlab.com/

でシミュレートしたら同じVoutになったので多分合っているのでしょう。

{ \displaystyle V_{out}(SW1のみON) = \frac{V_{cc}}{ \frac{1}{\frac{R}{r_1}} + 1} }

{ \displaystyle V_{out}(SW1とSW2が共にON) = \frac{V_{cc}}{ \frac{1}{\frac{R}{r_1} + \frac{R}{r_2}} + 1} }

{ \displaystyle V_{out}(全てON) = \frac{V_{cc}}{ \frac{1}{\frac{R}{r_1} + \frac{R}{r_2} + \frac{R}{r_3}} + 1} }

こうやって具体的に例示すると見やすいですが、例えば

{ \displaystyle V(SWxのみON) = \frac{V_{cc}}{ \frac{1}{\frac{R}{r_x}} + 1} }

とか

{ \displaystyle V_{out}(SWxとSWyが共にON) = \frac{V_{cc}}{ \frac{1}{\frac{R}{r_x} + \frac{R}{r_y}} + 1} }

とか

{ \displaystyle V_{out}(SWkだけが全てON) = \frac{V_{cc}}{\frac{1}{\displaystyle {\sum_{ONになっているSWのk} \frac{R}{r_k}}}+1} }

とかいうふうに一般化した式を書くといきなり分かりづらくなって読む気が失せますね。

まとめ

雨が降って憂鬱だったので、いろんなリンクを埋め込んだり、数式を書いたりしてみたかった。反省はしていない。

 

The Art of Electronics 3rd edition が届いた

表紙ボコボコ

BookDepositoryで予約購入していたThe Art of Electronics 3rd Editionが届きました。郵便受けに無理やり押し込まれていたせいか、表紙が凹んだり折れ目がついたりしてました。配達人さん出てきなさい。背景のビニールシートっぽい袋の中に、薄いダンボール封筒が入っており、その中に本が入っていました。

f:id:XX-Prime:20150407220556p:plain

昔に2nd editionを新品で入手した時も非常に状態の悪いものを掴まされたので、私は何かの罪でも背負っているのでしょうか。だから不思議と腹は立ちません。

あの演習問題は健在

f:id:XX-Prime:20150407220939p:plain

イラストがちょっと新しくなってます。

2ndとの違い

触って5分も経ってませんが、とりあえず気づいた二点だけ挙げておきます

内容的な差

チャプターの最後にReview of Chapter というまとめページが数ページつきました。最初にこのReviewだけざっと読んで、興味をひかれた部分を詳しく読むという使い方ができるようになりました。

物理的な差

総ページ数は1192ページでした。表紙カバーは外れない仕様になったので取り扱いはしやすくなりました。鈍器級の重さは相変わらずです。地震の多い国では保管場所に注意が必要です。

4th は出ないが

PREFACE TO THE THIRD EDITIONに、

In this new third (and final!) edition we have responded to this upheaval with major enhancements:(以下略)

とあります。これが最後の改訂版です。ただ、本に収まらなかったテーマについての補助的な本『The Art of Electronics: The x-Chapters』がこれから出るようです。

また、3rd ed.に対応した副読本もこれから出るようなので気長に待ちましょう。

artofelectronics.net

(**A new 3rd Edition** companion is in preparation: “Learning the Art of Electronics”)とのことですが、これまでの経緯を考えると、まあ当分先でしょう。

Arduino Yún(OpenWRTYun)の設定情報書き出しには注意

YúnのWebインターフェースからOpenWRTYunの設定画面へ

YúnのWebインターフェースはシンプルなので、できることが限られています。しかし、Yúnの実体はOpenWRTであり立派なLinuxです。OpenWRTの設定は複雑なので初心者にはなるべく見せないように工夫されていますが、YúnのWebインターフェースからOpenWRTの設定画面を開く経路があります。初心者は読んでもろくな事がありませんのでこの先は読まずに寝るといいよ。

Yúnに普通にログインした後、CONFIGUREボタンを押します。

f:id:XX-Prime:20150406213543p:plain

次に、advanced configuration panelリンクをクリックします。

f:id:XX-Prime:20150406213737p:plain

さらにSystem->Backup / Flash Firmware タブに進み、Generate archiveリンクをクリックすると、設定情報を含んだbackup-Arduino-<日付>.tar.gzという名前の設定情報アーカイブファイルをダウンロードできます。

f:id:XX-Prime:20150406214057p:plain

このファイルを、同じページのRestore backupからアップロードすれば設定情報を復元できます。この機能はとても便利で使いやすいのですが、一点注意が必要です。

設定情報アーカイブの中身

ダウンロードしたアーカイブファイルを展開してみると、/etc/ディレクトリをトップディレクトリとして、重要そうなファイルとディレクトリが見えます。なお、アーカイブファイル自体にはパスワードのロックはかけられておらず、入手すれば誰でも中を見ることができます。

f:id:XX-Prime:20150406214800p:plain

configディレクトリにあるwirelessというファイルが問題のファイルです。このファイルを開くと以下の様な内容になっています。

f:id:XX-Prime:20150406215515p:plain

ssidとそのプリシェアードキー(パスワード)が平文で書いてあります。ssidは見えても特に問題ではありませんが、パスワードが平文で入っていることは覚えておいたほうが良いです。「俺のYúnの設定情報はこんな感じだから参考にしてね」とか言って、このアーカイブファイルをおっぴろげてしまうとパスワードをおっぴろげてしまいます。

提案

Generate archiveリンクの横に、「このリンクをクリックしてダウンロードされる設定ファイルには、パスワード情報が含まれているので取り扱いに注意してね。」という注意書きを入れると良いと思います。赤いボールド体で。

ま、俺しか見てないこんなブログで提案しても意味ないんですが。

とりあえず俺が忘れないようにメモっておきました。

まとめ

Yúnの設定情報アーカイブファイルの中に無線LANアクセスポイントのパスワードが平文で入っている事を知らないナイスガイは、ナイスガイとは呼べません。

Arduino YúnのWi-Fi機能を復活させる

Arduino Yúnとは

Arduino Yúnは、Wi-Fiおよび有線Ethernet通信機能が実装されているArduinoボードの一種です。私がSwitch Science社から買った時点(去年の何月か忘れた)では、技適の関係でWi-Fi通信機能が使えないように改変された状態で売られていました。私が入手したのはそれです。

Yúnが技適を取得

http://mag.switch-science.com/2015/03/06/try-arduino-yun-1/

を見ると、YúnのWi-Fi部分が日本の技適を取得できたらしく、今ではWi-Fiの機能が使える状態(Switch Science社による独自改変なし)のYúnが販売されているようです。ということは、私のYúnのWi-Fi機能を復活させても問題ないのではないか、と解釈して復活させることにしました。厳密には法に抵触する恐れがあるので、夢も希望もあるまっとうな人々にはお勧めできません。こんな駄文を読んでないで早く寝るといいよ。夢も希望も失った私のような人は続きをどうぞ。

復活方法

まず、マイクロSDカードを一枚用意します。容量は32MB以上あればOKです。これを適当なカードリーダーでWindowsに接続して、FAT32でフォーマットします。

次にYúnの最新イメージを

http://arduino.cc/en/Main/Software#toc8

からダウンロードします。現時点で1.5.3が最新版のようです。ダウンロードしたzipファイルを展開して、約16MBのバイナリファイルをマイクロSDカードにコピーします。ディレクトリは作らずカードのルート直下にbinファイルが配置される必要があるようです。

このマイクロSDカードをYúnのカードスロットに挿してYúnを再起動します。YúnにWebブラウザでアクセスしてログインすると、以下の様なイメージフラッシュ用のRESETボタンが現れるのでこれを押します。

f:id:XX-Prime:20150402222558p:plain

3分くらい待ってから再びYúnにログインすると、めでたく以下のようにWi-Fiインターフェースが見えるようになります。これでようやくYúnらしい使い方ができるようになりました。

f:id:XX-Prime:20150402223028p:plain

スクリーンショットを取るのを忘れましたが、Wi-Fi復活前の画面はETH1だけが見える寂しいものでした。

なお、この手順はYúnの最新イメージをフラッシュする方法そのものなので、技適取得後のYúnを購入した方も、新しいイメージやカスタムイメージをフラッシュするにはこうします。sshでフラッシュコマンドを実行する方法もありますが、Webインターフェースからボタンクリックでフラッシュするのが一番楽です。

ParseがIoT用SDKをリリース。最初はYúnをサポート。

www.itmedia.co.jp

Yúnを持っている人は試してみるのも良いのではないでしょうか。

まとめ

Wi-Fi機能が停止されたYúnを購入して号泣していたナイスガイには、Wi-Fi機能の復活をお勧めしたいです。

 

SensorTag 旧アプリ

注意:この文書の内容は古くなっています。すでに新しいバージョンのアプリにOTAアップロードの機能も実装されているため、何か特別な目的がない限りわざわざ旧アプリを使う理由はもうありません。新アプリには加速度センサの扱いでバグっぽい動きがありますが・・・。

旧アプリが欲しい

Play StoreではTIのSensorTag用のアプリがアップデートされており、グラフ化やSensorTag2への対応などの新機能が実装されています。それはそれで良いのですが、ジャイロスコープが使えなくなったり、ファームウェアのOTAアップロード機能が無くなるなど、人によっては致命的な機能が失われています。そこで旧アプリを再び使えるようにする方法をメモします。

旧アプリはソースコードごと入手可能

SensorTag-Android - Gitorious@TI Open Source Collaboration

上記リンクからSensorTag用(旧)アプリのソースコード一式を入手してAndroid Studioにインポートします。下記のように実デバイスを指定して実行すれば自動的にインストールできます。

f:id:XX-Prime:20150325200912p:plain

 なお、新アプリとの共存が可能なので躊躇なくインストールできます。ただし、アイコンファイルをいじらないと下のように同じアプリが二つ見えてちょっとぶざまです。

f:id:XX-Prime:20150325202009p:plain

上が旧アプリです。AndroidManifest.xmlを見ると、/res/drawable/tible.png/にあるのがアイコンファイルなので、これらのアイコンファイルを適当に加工して旧アプリであることを強調すると良いかもしれません。

実際に動作させてみて、旧アプリの機能が正しく動作することを確認できました。各センサのON/OFFはセンサタグ内部ではなくアプリで制御していたことがわかりました。センサの出力を取る手順は、まず読みたいセンサ(群)をONにして、少し待ってから出力を読み取ります。

旧アプリもSensorTag2に対応?

旧アプリと呼んで良いのか不明ですが、アプリのメイン画面を定義しているxmlファイルが二つあります。

/res/layout/services_browser.xml

が以下。旧アプリそのものです。

f:id:XX-Prime:20150325203247p:plain

/res/layout/services_browser2.xml

が以下。LuxometerがあるのでSensorTag2用の画面定義でしょう。SensorTag2を持っていないので実際の動作は確認できません。SensorTag2にはマイクロフォンが実装されているはずですが、それに対応する行は(まだ)無いようです。

f:id:XX-Prime:20150325203300p:plain

Barometerの単位が変じゃね?

新旧アプリとも、Barometerセンサの物理単位がnPAになってます。ナノパスカルなわけないです。1000ナノパスカルじゃそこそこの高真空です。正しいのはhPaですよね。たぶん、アプリ設計者の手書きメモの段階ではhPaと書いてあって、「インド人を右に」現象を経てnPAという単位になってしまったと思われます。今の今まで誰も気づかずに誰も直してないのが不気味です。

まとめ

アプリが勝手にアップデートされてしまって、ファームウェアのOTAアップロードができなくなって困って酒を飲んで寝ていたナイスガイには、ソースコードのダウンロードとビルドとインストールをお勧めしたいです。