IT×農家の長男

研究や趣味についてのメモ

Machinistを試してみる -超音波距離センサデータアップロードプログラムのデーモン化-

前回のMachinistに超音波距離センサデータアップロードするプログラムをデーモン化します。

crowsky.hatenablog.com

参考サイト

dreamerdream.hateblo.jp

デーモン化の設定

まず、デーモン化するプログラムの設定ファイルを作成します。
/usr/lib/systemd/system/python_deamon.serviceに以下の内容を記述する

次に以下のコマンドを実行する

デーモンをスタートするコマンド

systemctl start python_deamon.service

デーモンのステータスを確認するコマンド

systemctl status python_deamon.service

ラズパイ起動時にデーモンを実行するコマンド

systemctl enable python_deamon.service

ラズパイを再起動してMachinist上にデータがアップロードされていることを確認できればOK

Machinistを試してみる -ラズパイを用いた超音波距離センサデータのアップロード-

今回はラズパイを用いて超音波距離センサのデータをMachinistにアップロードするプログラムを作成します。

実行環境

  • Raspberry Pi 4 Model B
  • python 2.7.16
  • 超音波距離センサ:A02YYUW
  • シリアル変換モジュール:Rasbee CP-2102

超音波距離センサ

  • モデル:DYP-A02YY-V1.0
  • 電圧: 5V
  • 測定範囲:3cm-450cm
  • 通信:UART
  • 測定精度:±(1 + S * 0.5%)/±(1+S*0.3%)CM(Sは測定距離)

製品情報
www.mouser.jp


ラズパイと超音波距離センサとの接続方法

ラズパイと超音波距離センサはUARTで通信させます。今回はシリアル変換モジュールを利用します。

超音波距離センサのピンアサインは以下のサイトから確認
1:VCC Power Input
2:GND Ground
3:RX Processed Value/Real-time Value Output Selection
4:TX UART Output

wiki.dfrobot.com


実際にラズパイと超音波距離センサを接続すると以下のようになる

シリアル変換モジュール (ジャンプワイヤーの色)
5v :赤
GND:黒
RX:橙
TX:黄
f:id:crowsky:20210523085417p:plain

超音波距離センサ (ジャンプワイヤーの色)
5v :赤
GND:黒
RX:黄色
TX:白
f:id:crowsky:20210523085423p:plain


f:id:crowsky:20210523085435p:plain

センサデータ取得とMachinistへのデータアップロード

超音波距離センサのデータを取得するため以下のリポジトリのコードを使用する
github.com

また、Machinistへデータアップロードするため前回の記事の内容を流用する
Machinistを試してみる -pythonでデータをアップロード- - IT×農家の長男

ホームディレクトリまたは作業用ディレクトリで以下のコマンドを実行する

git clone https://github.com/DFRobot/DFRobot_RaspberryPi_A02YYUW.git
cd DFRobot_RaspberryPi_A02YYUW/raspberry
touch upload_distance.py

以下のソースコードをコピーし、upload_distance.pyにペーストする
このプログラムは1ループ毎にデータの取得を行い、1分毎に直近の取得データをMachinistにアップロードするもの

プログラムの実行には以下のコマンドを入力する

python upload_distance.py


データの確認

10cmの位置に箱を設置して、データを計測した。
f:id:crowsky:20210523100020j:plain

プログラム実行結果
f:id:crowsky:20210523105854p:plain

平均誤差2mmの結果となった
f:id:crowsky:20210523105825p:plain

Machinistを試してみる -pythonでデータをアップロード-

はじめに

IoTデータの可視化サービスについてネットで検索していたところ、Machinist(マシニスト)が無料で利用できるようです。
そこで今回はpythonを利用してMachinistにダミーのデータをアップロードし、可視化されることを確認してみます。

参考サイト

www.iij.ad.jp

lang-ship.com

実行環境

手順

1. まずはこちらのリンクにアクセス

f:id:crowsky:20210518214755j:plain

2. アカウントの登録を行う

f:id:crowsky:20210518214504p:plain

3. APIキーの確認

アカウント登録が完了したら、サイトにログインし、アカウント設定をクリック

f:id:crowsky:20210519052752p:plain

APIキーはデータアップロード時に使用するのでメモする

f:id:crowsky:20210519052754p:plain


4. ホームディレクトリ直下に./API_KEYSディレクトリを作成し、API_KEYをjson形式で保存する

APIキーを第3者に知られないようにするため、別の場所にAPIキーを保存し、ソースコードから読み込むようにする

mkdir ~/.API_KEYS
cd ~/.API_KEYS
touch machinist.json


5. サンプルコードを作成

ユーザマニュアルに記載されているデータをアップロードするプログラムを作成
f:id:crowsky:20210519054804p:plain

任意の場所にpyhonのファイルを作成

mkdir ~/workspace 
cd ~/workspace
touch post_dummy_sensor_data.py

以下pyhonのサンプルプログラム
このプログラムでは

  • json形式で保存したAPIキーの読み込み
  • アップロードするデータのヘッダおよびデータをjson形式で作成
  • requestモジュールを利用したデータのポスト

を実行します


プログラムの実行

python post_dummy_sensor_data.py

実行結果が以下の通りになれば、データのアップロードが成功。

data posted. status: 200
check status? 200->ok! 4**->bad!

Machinistのページに移動し、以下のようなグラフが表示されればOK!
f:id:crowsky:20210519060639p:plain

VMWareでgazeboが起動できない時の対処法

はじめに

VMware上でgazeboが起動できなかったので、その対処法のメモ。

環境構築

実行環境

問題

ROSのインストール作業完了後、試しにgazeboを起動しようとしたら以下のようなエラーがかえってきた。

gazebo
VMware: vmw_ioctl_command error Invalid argument.

解決法

環境変数を設定し、OpenGLのサポートを無効することによって解決する。

以下のコマンドを入力する。

export SVGA_VGPU10=0

以降、設定を維持したい場合は以下のように.bashrcにコマンドを記述。

echo "export SVGA_VGPU10=0" >> ~/.bashrc

力センサデータをROSノードにしてみた

はじめに

以前の記事で力センサデータをArduino UNOのシリアルモニタ上で表示させました。 今回はセンサデータをROSのノードにしてターミナルに表示してみたいと思います。

rosserial_arduino

最近知ったのですが、 rosserial_arduinoのパッケージをインストールすればArduinoをROSノードにすることができるようです。

公式のROS Wikiにパッケージのチュートリアルがあるのでこれを参考にすすめていきます。

rosserial_arduino/Tutorials - ROS Wiki

実行環境

まずはパッケージのインストールから。

$ sudo apt-get install ros-kinetic-rosserial ros-kinetic-rosserial-arduino

次にgithubからrosserialのパッケージをビルド。

$ cd ~/catkin_ws/src 
$ git clone https://github.com/ros-drivers/rosserial.git
$ cd ~/catkin_ws
$ catkin_make

Arduinoで使用するros_libの作成。 もし、ros_libが存在している場合はライブラリを削除する必要がある。

$ cd Arduinodir/libraries 
$ rm -rf ros_lib
$ rosrun rosserial_arduino make_libraries.py .


おわりに

複数のセンサを扱うときはトピック名を変えれば大丈夫です。

ラズパイで監視カメラ作成 -その2-

はじめに

今回はLINEとの連携についてまとめます。

blue-black.ink

LINE Notifyの利用

LINE Notifyについては以下のサイトで説明されています。

LINE Notifyは、メッセージ アプリ「LINE」が提供する外部サービスとの通知連携サービスです。
LINE意外の アプリやWebサービスAPIで連携し、各サービスにきた通知をLINEのメッセージで送信することができます。
出典元: https://ferret-plus.com/5355

セッティング

以下のURLを参考に進めていきます。
四流女子大学生がRaspberry Piに手を出してみた[監視カメラ編] - Qiita
四流女子大学生がRaspberry Piに手を出してみた[LINE通知編] - Qiita

はじめにトークンを取得します。トークンは忘れないようにメモをしましょう。

次にラズパイ上に監視カメラ用のディレクトリを作成し、ソースコードを追加します。

$ mkdir ~/motion && cd motion 
$ cd motion
$ sudo vi line_notify.py

motionの設定ファイルを以下のように書き換えます。

$ sudo vi /etc/motion/motion.conf 
以下に変更
# 100行目:取得画像のサイズ
width 640
# 103行目:取得画像のサイズ
height 480
# 196行目:画像取得の閾値
threshold 8000
# 273行目:画像ファイルの出力を無効
output_pictures on
# 450行目:画像を保存するディレクトリ
target_dir /home/pi/motion
# 468行目:画像のファイル名
picture_filename %Y%m%d%H%M%S
# 647行目:画像保存時のコマンド
on_picture_save python3 /home/pi/motion/line_notify.py %f

動作確認

$ cd ~/motion && sudo motion -c /etc/motion/motion.conf &

f:id:crowsky:20190312112444j:plain:w420

LINE上に画像が送られればOK!(偶然に猫が通過したみたいです。)

ctr + c で終了しても動作は続きます。

終わりに

動作検出が行われるとすぐにLINE通知が来てしまうので、次は通知周りを改善します。

ラズパイで監視カメラ作成 -その1-

はじめに

今回はラズパイとUSBカメラを使って監視カメラをつくっていきます。

motionというライブラリを使うことで、カメラ画像のストリーミングが見れるそうです。

raspberry pi motion で動体検知する方法 - アイシステムBLOG


motionの導入

環境

まずはmotionのインストール

$ sudo apt install motion

デーモンの設定

$ cd /etc/default 
$ sudo vi motion

設定ファイルの修正

$ sudo vi /etc/motion/motion.conf 
以下に変更
# 11行目:デーモンの有効化
daemon on
# 100行目:取得画像のサイズ
width 320
# 103行目:取得画像のサイズ
height 240
# 107行目:フレームレート
framerate 2
# 273行目:画像ファイルの出力を無効
output_pictures off
# 293行目:映像ファイルの出力を無効
ffmpeg_output_movies off
# 504行目:外部からストリームへのアクセスを許可
stream_localhost off

動作確認

以下のコマンドを入力して実行

$ sudo motion -c /etc/motion/motion.conf
ブラウザ上で以下のような画像が取得できればOK。

f:id:crowsky:20190301230235j:plain

終了は以下のコマンドを入力して実行

$ sudo service motion stop

おわりに

次はLINEかslackで連携させていきたいと思います。