センサーとArduinoとRaspberry Piでしたいこと(2)

準備したもの。

Arduino UNO R32
Raspberry Pi 2 Model B1
DIGI-XB24-Z7WIT-0042
Arduino ワイヤレスプロトシールド1
DFR0015(Xbeeシールド)1
BME280使用 温湿度・気圧センサモジュール1
FT232RL USBシリアル変換モジュール1

Arduino UNOはプロトタイプとして使ってます。真面目に使う時は互換機を作るなりして、コストダウンを図らないとダメだなとか思います。それとXbeeもXbeeシールドを使っているのだけど、プロトタイプとして作るには便利ですけど、実際に使うとなるとコストがかかるので、これも考えないといけないです。XbeeシールドはArduino ワイヤレスプロトシールドを2つでも良いのですが、DFR0015の方が安かったので途中で路線変更した結果です。

 

これを順番に組み立てて、それぞれで動作確認をしながら組み立てていきます。

  1. Arduino UNOとBME280の接続
  2. Xbee同士の通信
  3. Arduino UNOからXBeeでの通信
  4. Xbee経由でArduino UNOとの通信
  5. Arduino UNOとRaspberry Pi 2 Model Bとの通信
  6. Raspberry Pi 2 Model BでMySQLへの書き込み
  7. Raspberry Pi 2 Model B上のMySQLとCentOS7上のMySQLとでレプリケーション
  8. CentOS7上のMySQLのデータを使って、グラフ化をする

くらいでしょうか。随分としないといけないことが多いです。

センサーとArduinoとRaspberry Piでしたいこと(1)

今のところのモチベーションとして、センサーを配置して、センサーのデータを収集して、それをデータベースに入力して、そのデータを使って、いろいろなことに使いたいなぁというものがある。最近だと、Raspberry PiやArduinoとかの小型PC、マイコンが簡単に扱えるので、これを使えばできないかなぁと思うところです。

 

Raspberry PiとArduinoの大きな違いはRaspberry PiはあくまでPCなので電源をきちんと確保しないといけないとか、電源を突然切ってはいけないとか取り扱いがちょっと面倒というのがあるけど、その一方で複数のプログラムを同時にうごかすことができるから機能的には便利です。Arduinoは複数のプログラムを動かすことはできないという問題はあるんですけど、消費電力が小さくて、電源を突然切っても問題がないという利点があります。

 

センサーをあちこちに配置する時に一番の問題になるのが電源です。センサーを設置したいところで必ずしも電源が確保できるとは限らないので、太陽電池、バッテリーで長時間稼動できないといけなくなります。こうなうとRaspberry Piには不向きです。消費電力が小さく、電源断でも機器的に問題のないArduinoに向いています。逆にネットワークを使っていろいろしたいというならばRaspberry Piの方が便利です。

ということで、最初のモチベーションの実現方法を考えると次の図のようになるかなと思います。

 

Xbee_1

 

センサーから得られた情報をArduinoで数値化して、それをXbee経由でもう一台のArduinoに転送します。その他とで、シリアルでRaspberry Piとつないで、Raspberry Piに転送します。Raspberry PiではMysqlが稼動していて、いったんそこにデータを格納します。基本、ここまでできればいいのですけど、データのバックアップも兼ねて、センター側のサーバーにデータを転送します。

直接、センサーとXbeeをつないで、XbeeとRaspberry Piをつないで、Arduinoなしでつなぐという方法もあるのだけど、様々な種類のセンサーをつないでも大丈夫なようにしようとすると、Arduinoで一度、データを整形してからの方が便利かなと思ってます。センサーはアナログのものもあれば、デジタルのもあるので、こういうのの処理はArduinoの方が得意です。Raspberry Piはアナログ系が弱いという問題もありますから。アナログはArduino、デジタルはRaspberry Piで処理するというのもあると思いますが、構造が複雑になりそうなので、センサーからの情報はArduinoで処理した方が簡単になると思っています。それに、Arduinoは先人の人たちによるそれぞれのセンサーに合わせてスケッチがあったりして便利なんです。また、Arduinoは互換機を簡単に作れるので、安く作ろうとしたら500円くらいで作ることができるので、あまりコストも高くないのでコントロール性を考えると良いのかと思っています。

 

ということで、この仕組みを作り上げるために順番に作っていきたいと思います。

2つのArduino UnoをXBeeで通信してみる

センサーを買ってきて、Arduinoとか、Raspberry Piとかにセンサーを付けて計測するというのでも問題はないのですが、複数の場所に設置しないといけなくなると配線しないといけないとか、いろいろめんどくさいことが起きます。そういう時は無線化してしまうのが一番簡単な方法だと思います。無線化してしまえば、電源の確保をどうするかと、電波が届くかどうかを考えていればいいだけで、めんどくさいのはずいぶん無くなります。電波が届くのかどうかを調べる必要がありますけど。

 

ArduinoもRaspberry Piも小型なので無線化してセンサープローブとして利用するというのが便利な方法なのですが、Raspberry PiはあくまでPCなので、急な電源断とかを繰り返していると不具合が起きそうなのですが、Arduinoはマイコンでしかないので、その部分としてはArduinoの方は強いと思います。それにArduino UNOだとマイコンのチップを移植することが可能で、プローブをできる限り安く作ることもできるという利点があります。

 

ということで、ここでは2つのArduino Unoを使って無線通信でセンサーから読み取ったデータを転送するということを考えてみます。

 

では、どういう規格の無線を考えるかということになるのだけど、WiFiなり、3G(LTE)なりいろいろあるのですが、ここではZigBeeを使ってみることにします。比較的に安い(対で買うことを考えると決して安くない)のが理由です。Arduino UNOでZigBeeといえば、XBeeが有名なので、変なのを使ってドツボにはまることもないのでXbeeを使ってみることにします。今回は、値段も手頃なXBee ZBを購入してみた。

 

センサーですが、なんでもいいのですが、I2Cで使えるBME280の気圧・温度・湿度センサーがあるのでそれを使います。

 

今回の手順は次のように行います。

  1. XBee ZBの設定して、通信確認をする
  2. センサー側(送信側)のArduino UNOの開発
    1. データの転送の確認
    2. 実際にセンサーを使って、データを送信する
  3. 受信側のArduino UNOの開発

という感じです。