ArduinoでSRF02のI2Cアドレスを書き換え
Arduinoで超音波距離センサ SRF02のI2Cアドレスを書き換える方法です。
元のアドレスを確認
デフォルトではSRF02のアドレスは0xE0(224)なので、I2CScanerのスケッチを利用すると、0xE0の上位7bitである0x70(112)にデバイスが見つかります。
シリアルモニタの出力結果
I2C device found at address 0x70 ! done
I2Cアドレスを変更
同一センサを複数個利用するケースでは、各センサのアドレスをそれぞれ別の物にする必要があります。
以下のスケッチを実行すると、SRF02のアドレスが224から226に変更されます。
変更後のアドレスを確認
再度I2CScannerを実行すると、確かにアドレスが226(上位7bitは0x71=113)に変更されています。
I2C device found at address 0x71 ! done
参考URL
RealSense R200の新しいROSパッケージ(realsense_camera)のインストール手順
2016年3月1日にIntelからRealSense R200の新しいROSパッケージがリリースされましたので、早速インストールして使ってみました。
GitHub - intel-ros/realsense: Intel(R) RealSense(TM) ROS packages
動作環境
- Ubuntu 14.04
- ROS Indigo
- RealSense R200 Camera
インストール手順
R200のファームウェアの更新
R200のファームウェアを最新のものにしておきます。
Windows 8.1 / 10のPCで、以下のサイトから最新のファームウェアをダウンロードします。
Intel® RealSense™ SDK | Intel® Developer Zone
PCにR200を接続し、ダウンロードファイルを実行するとファームウェアが更新されます。
librealsenseのインストール
以前のRealSenseのROSパッケージはドライバ部分も含めてバイナリで提供されていましたが、新しいROSパッケージはlibrealsenseを利用するようです。
インストール手順は、 librealsense/installation.md at master · IntelRealSense/librealsense · GitHub にならって行います。
パッケージの更新
$ sudo apt-get update $ sudo apt-get upgrade
依存パッケージのインストール
$ sudo apt-get install libusb-1.0-0-dev
リポジトリのクローン
$ git clone https://github.com/IntelRealSense/librealsense.git
$ cd librealsense
glfw3のインストール
Ubuntu14.04ではglfw3がapt-getのリポジトリからダウンロードできないので、以下のスクリプトを実行。
$ scripts/install_glfw3.sh
コンパイル&インストール
$ make
$ sudo make install
bin
フォルダ以下にサンプルのプログラムが作成されます。
udevルールのコピー
RealSenseカメラがUSBに刺さっていないことを確認して、以下のコマンドを実行します。
$ sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
udevのリロード
sudo udevadm control --reload-rules && udevadm trigger
以下の手順では★か☆のどちらかを実行してください。
★の手順を行うと、Ubuntuのカーネルが4.4系にアップデートされます(デフォルトは3.19系)。
4.4系のほうがlibrealsenseが安定して動作するとのことですが、他のソフトウェア等で不具合が発生する場合があるため、不安な方や解決できる自身のない方は☆の手順を行ってください。
カーネルのバージョンアップ(★)
$ sudo ./scripts/install_dependencies-4.4.sh $ sudo reboot
uvcvideoのパッチを当てる(★)
$ sudo ./scripts/patch-uvcvideo-4.4.sh v4.4-wily
uvcvideoのパッチを当てる(☆)
$ sudo ./scripts/patch-uvcvideo-3.19.sh
udevルールの修正(☆)
$ ./scripts/install-r200-udev-fix.sh
ここからは★と☆のどちらを選択した場合でも実行します
ドライバのロード
$ sudo modprobe uvcvideo
動作テスト
RealSense R200をUSB 3.0ポートに接続し、サンプルプログラムを動かします。
$ bin/cpp-capture
下図のように、RGB, Depth, 左右のIRカメラの画像が取得できたらインストールは成功です。
ROSパッケージのインストール
下準備
以下のコマンドを実行してLD_LIBRARY_PATH
に/usr/local/lib
が含まれているかを確認します。
$ echo $LD_LIBRARY_PATH | grep /usr/local/lib
何も出力されなかった場合は~/.bashrc
に追記します。
$ vi ~/.bashrc
# 以下の1行を追記 export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
librealsenseのヘッダファイルをコピー
$ sudo cp -r <先ほどcloneしたlibrealsenseのパス>/include/librealsense /usr/local/include
realsense_cameraリポジトリのクローン
$ git clone https://github.com/intel-ros/realsense.git
$ cd realsense
realsense_cameraパッケージのコピー
$ cp -r camera ~/catkin_ws/src/realsense_camera
catkin_make
$ cd ~/catkin_ws/ $ catkin_make $ catkin_make install
動作の確認
$ roscore $ roslaunch realsense_camera realsense_r200_rgbd.launch $ rosrun rviz rviz
rvizのOpen Configから~/catkin_ws/src/realsense_camera/rviz/realsenseRvizConfiguration1.rviz
を選択して開きます。
下図のように/camera/rgb/image_raw
, /camera/depth/points
などのトピックが表示されていれば成功です。
参考URL
Milkcocoaを使ってセンサー情報をウェブサイトで表示
Milkcocoaを利用すると、センサー情報をクラウドに上げてウェブサイト等で利用するといった、IoTチックなことが超簡単にできてしまいます。
僕も、自宅にあるRaspberry Piに接続した温湿度センサとPIRセンサの値をMilkcocoaにアップロードして、僕のウェブサイトのトップページの右下あたりに表示しています。
センサー情報の取得の仕方やMilkcocoaへの送信方法については、PIRセンサ(SB00412A-1)とMilkcocoaで簡易見守りシステムを構築 - Yura YuLife の記事を参考にしてください。
JavaScriptでMilkcocoaのデータストアにアクセス
こんな感じで書くだけです。
HTML部分
<p> 現在の温度: <span id="temperature"></span>度 </p>
JavaScript部分
<script src="https://code.jquery.com/jquery-1.12.1.min.js"></script> <script src="http://cdn.mlkcca.com/v2.0.0/milkcocoa.js"></script> <script> // Milkcocoaに接続 var milkcocoa = new MilkCocoa('アプリID.mlkcca.com'); // データストアを取得 var ds = milkcocoa.dataStore('データストア名'); ds.stream().next(function(err, msgs){ // データストアの最新メッセージ var last_msg = msgs[msgs.length - 1]; // 例えばメッセージが{"temperature": 20.0}みたいな形式とする var temperature = last_msg.value.temperature; // spanに温度を表示 $('#temperature').text(temperature); }); </script>
めちゃくちゃ簡単ですね!
なお、好き勝手にセンサー値を悪用されないよう、設定画面で許可Originの設定はちゃんと行いましょう。
参考URL
PIRセンサ(SB00412A-1)とMilkcocoaで簡易見守りシステムを構築
見守りシステムで家の中に監視カメラを置くなんて話がありますが、さすがに部屋をずっと撮影されているといい気持ちはしないと思います。そこで、前の記事で紹介したaitendoの人感センサ(SB00412A-1)のデータをRaspberry PiからMilkcocoaにアップロードして、簡単な見守りシステムを構築します。
PIRセンサならば見られてる感もないですし、留守じゃないのに全く反応がなければ何かがおかしいはずなので、簡易的な見守りセンサーとしては役割を果たせるのかもしれません。
必要なもの
- Raspberry Pi
- PIRセンサ(SB00412A-1)
- ブレッドボード
- ジャンパーワイヤ 4〜6本
- 1kオームの抵抗 3個
配線
Raspberry Piで人感センサ(SB00412A-1)を5Vで利用する方法 - Yura YuLifeの記事を参考に配線してください。
Pythonからセンサー情報を取得してMilkcocoaへ送信
下準備
Raspberry Pi上でMilkcocoaのPython SDKをインストールしておきます。
$ git clone https://github.com/milk-cocoa/python_sdk.git $ cd python_sdk/ $ sudo python setup.py install
また、Milkcocoaのウェブサイトでアプリを作成して、API Key とAPI Secretを作成しておきます。
センサー情報をMilkcocoaに送信
以下のスクリプトを保存し、PIRセンサを接続したGPIOのピン番号、MilkcocoaのアプリID、API Key、API Secret、データストア名を記入します。
後は$ nohup ./pir_to_milkcocoa.py &
で動かしておけば、30秒毎にMilkcocoaにJSONデータが送信されます。
アプリの管理画面から、確かにデータが送信されていることが確認できます。
データの可視化
Milkcocoaのfreeboardを利用して、データを可視化します。
画面右上のDatasourcesにデータストアを追加します。DATASTOREにデータストア名を記入、API
はpush
を選択します。
続いてADD PANE
からPANEを追加します。TYPEはSparkline
、VALUEにはdatasources["データストア名"]["value"]["count"]
と記入します。
下図のように30秒ごとの検知回数がグラフ化されます。
コレを使えば、不在のはずなのに0以外の値が頻繁に返ってきたり、在宅のはずなのに0ばかりの場合は何かおかしなことが起きている、くらいのことが分かりますね。
参考URL
Raspberry Piで人感センサ(SB00412A-1)を5Vで利用する方法
aitendoで購入したPIRセンサ(SB00412A-1)ですが、Raspberry Piで3.3Vで利用すると誤検知を繰り返し動作が不安定なので、5Vで利用する方法をまとめました。
必要なもの
- Raspberry Pi2 Model B
- 低電圧極小PIRセンサー SB00412A-1
- 1kΩ以上の同じ種類の抵抗 3個
- ブレッドボード
- ジャンパーワイヤ 4〜6本
配線
配線は下図のとおりです。
抵抗3つを利用して、VOUTの5Vの電圧の2/3(=3.3V)を取り出しています。
Raspberry PiのGPIOは5Vに対応していないため、直接VOUTを接続するとRaspberry Pi自体が壊れる恐れがあるので、間違えないよう注意して接続します。
動作用のPythonスクリプトは以前の記事(人感センサ(SB00412A-1)検知時にLEDを光らせる - Yura YuLife)を参照してください。
動作の違い
3.3Vで動作させた場合
人の有無にかかわらず、約7秒間HIGH → 約1秒間LOWを繰り返す。覆いなどをかぶせても同様。
5.0Vで動作させた場合
覆いをかぶせると常にLOWを返し、人が近づいたり動いたりするとHIGHに切り替わる。人が去ると約10秒程度でLOWに切り替わる。