Raspberry PiとArduinoでアクアリウム(その4)「実際にスマホでコントロール編」

その1はこちらです。

 前回まではちょっと詳しく解説しすぎたり、内容が定まっていなかったので今回から調整します。書き直しても良いのですが、教訓として残しておきます。応援よろしくお願いします。
 実際にスマホでコントロールしてみました動画です。Arduinoは基板が上に載っていて、分かりにくいですがRaspberry Piの隣に写ってます。スマホからは専用のページでコントロールしています。 www.youtube.com

仕組み

f:id:takumus:20160908235429p:plain  動画内のiPod TouchとAndroidはどちらもブラウザで特定のページを開いていますが、このページはPiではなく、さくらのVPSで用意したウェブサーバーで立てています。ページを開くとwebsocket.io(以降ws)でさくらVPS(以降親サーバー)と繋がります。ライト点灯命令はすべてwsを使って送信されます。(動画内でもわかる通り、2台の端末でライトの点灯状態が同期しています。)そして、親サーバーはブラウザから受信した命令をPiへ流すのです。Piとは親サーバーが立てたSocketサーバーで繋がっています。PiとArduinoはSerial接続しています。
 なぜこうなったかと言うと、

  1. ポート開放をしたくなかったのと、
  2. 家は固定IPではないのと、
  3. 将来的に大人数がこの監視システムにアクセス出来たらよいと思っているので、Piはサーバーにせず極力休んでいてほしいのと、
  4. 命令ログやその他のデータの保管や処理はPiではなく、スペックの十分な親サーバーで行いたい、

など。その他理由はいくつかありますが、とにかく直接Piに外から繋ぎたくはなかったのです。
 自分にある知識を絞り出して考えた設計なので変な所ありましたら意見いただけると嬉しいです。

設定もリアルタイム

www.youtube.com  今回全ての情報はwsでリアルタイム共有されることになっているので、一応こういう仕様になっています。IoT系のもので多いのが、IからTまで非常にラグがあることです。自分的にそれは嫌だったので今回贅沢にもwsリアルタイム重視で設計しています。

ソース達

 このブログはすでに大体完成してから書いているので、ソースにはまだ紹介していない機能などが載っていて分かりにくいと思います。
 arduinoディレクトリにはarduinoのソース、piにはpiのソース。clientはスマホで表示するページのソースです。serverは、clientとpiを繋ぐ親サーバー部分です。 github.com

Raspberry PiとArduinoでアクアリウム(その3)

その1はこちらです。

実際にリレーをArduinoに繋ぐ

リレーをつなぐ

 前回紹介したリレーモジュールです。これをArduinoで使用した場合は以下のようになります。端子はこの向きで左から となっており、はArduinoのGND5Vにそれぞれ繋ぎ、Sは仮に13番ピンに接続します。

f:id:takumus:20160907224938p:plain  これで、13番をHIGHにすれば、電気は点き、LOWにすれば電気が消えます。リレーは便利ですね。ArduinoでHIGHかLOWするだけで家電がコントロールできます。

リレーを繋ぐ回路を組む時の注意

 上記の回路のように制御したい家電のコードを切断して、リレーを挟めば制御は可能です。しかし、家電のコードは切断するのは安全とは言えませんし、他の電化製品への応用も出来なくなります。なので延長コード制作キット等を使って作りましょう。
 ただし、リレーも多くの種類があり、それぞれ電力の制限もあります。使用する電化製品の消費電力と相談しながらリレー選びをしましょう。

反省

 ブログを書くのを慣れていないせいか、説明が具体的な部分があったり、簡単すぎる部分があったり、バランスが取れてないですね。ターゲットも絞れてない感じもあります。過去の記事は編集しないので今後改善していこうと思います。

その4はこちらです。

Raspberry PiとArduinoでアクアリウム(その2)

その1はこちらです。

照明をスマホでコントロール

 まず、簡単そうな照明コントロールから作っていきます。照明はアクアリウム用のものを使い、その電源をスマホから制御できるようにします。スマホからRaspberry Pi(以下Pi)へ、PiからArduinoへと経由し、Arduinoがリレーを使って電源のオンオフを切り替えます。

リレーとは

 操作にはリレーを使います。リレーは簡潔に説明すると他の回路のスイッチをコントロールできるもの。になります。
 家庭用の電球を点けるとき、皆さんはスイッチを押します。それにより回路に電気が通り電気が点きます。 f:id:takumus:20160906195609p:plain
 そのスイッチを代わりに押してくれるのがリレーです。スイッチで乾電池の電気が電磁石に流れ、電磁石はハンマーのようなものをを動かし、コンセント側の回路のスイッチを押すので電気が点きます。指を離せば電磁石は力を失い、コンセント側のスイッチも元に戻るため電気が消えます。 f:id:takumus:20160906195628p:plain
 この仕組みをそのままArduinoで使うとこうなります。Arduinoで、OUTPUTにしたピンをHIGHLOWにすることでコンセントの電球をON, OFFできます。 f:id:takumus:20160906200801p:plain

リレーモジュールを使うべき

 先ほどの図はあくまでリレーの仕組みの例なので、本物のリレーはもっとちゃんとしています。そんなリレーですが、実際Arduinoでリレーを扱うときはモジュールを使った方が安全です。今回は、Amazonで売っていた安いリレーモジュールを使いました。

(↑はてなのAmazon商品紹介という機能で貼り付けたリンクですが、アフィリエイトになっているのかどうかは分かりません笑)
 なぜリレーモジュールを使うべきかというと、電磁石式のリレーを単体で買う場合、逆起電力防止用のダイオードを挟んだりしなければなりませんし、またArduinoだとoutピンからの出力では電力が足りず、リレー用の電磁石をコントロールできない事があるからです。
 モジュールの場合はGNDと5Vをつなぎ、ピンからの出力をトランジスタに流してリレーを動かしていたり、工夫があるので、モジュールの方が良いのかなと思います(どちらかというと入門者向けのアドバイスです)
次回以降このリレーモジュールを使って作っていきます。

その3はこちらです。