ラズベリーパイ(Raspberry Pi Zero WH)とフォトリフレクタでハムスターの回転計

2019年4月27日

ラズベリーパイ(Raspberry Pi Zero WH)とフォトリフレクタを使って、ハムスターの回し車の回転計を作成しました。

測定した回転数は、JavaScriptのチャートライブラリ「Chart.js」を使ってグラフ表示し、リアルタイムでパソコンやスマホから確認することができます。

ハムスター回し車の回転数グラフ

Left Caption
まあちゃん
わぁ グラフ きれい!
Right Caption
ままあちゃん
Chart.jsを使うと簡単に
グラフが作れるんだよ

ハムスターの紹介

我が家のプリンセス! ジャンガリアンハムスターの「ハムハム」です。

ジャンガリアンハムスター

2018年の8月末くらいに生まれたそうなので、生後8カ月くらいです。

しぐさがとっても愛らしくて、手を入れるとすぐに寄ってくる人懐っこい女の子です。

Left Caption
うさたん
むっちゃ、かわいいです
Right Caption
ままあちゃん
ほんと、癒されます

でも、かわいがりすぎて、最近ちょっと太め? ダイエットが必要でしょうか?

夜、結構、回し車を回しているようなのですが、実際どのくらい回しているのか、調べてみたいと思います。それには回転計が必要です。

これこそラズベリーパイ(Raspberry Pi Zero WH)の出番ですよね。

前回作成したラズベリーパイ(Raspberry Pi Zero WH)をスマホから操作する方法(WebIOPi)のしくみを利用して、ハムスターの回転計を作成しました。

回転計の作成にあたって、こちらのブログを参考にさせていただきました。ありがとうざいました!
ハムスターの回転計(回し車 カウンター) [光学]

準備するもの

回し車

ハムスターの回し車に赤いピカピカのテープを貼りました。

回し車が回転すると、フォトリフレクタがこのテープが通過したことを検出します。

テープを貼ったハムスターの回し車

 

ブレッドボードを固定する台

フォトリフレクタの高さを調節するため、ブレッドボードを固定する台を作成しました。

ブレッドボードの後ろにも両面テープが貼ってあるようなので、空き箱を利用して作ろうかと思っていたのですが、子どもが小さいころ遊んでたレゴブロックのドアがちょうどいいサイズ!

レゴでラズベリーパイの台

 

こちらは、後ろからの写真です。ブレッドボードの横にちょっと隙間があくので、ジャンパーワイヤを通すことができました。

レゴでラズベリーパイの台

横にラズベリーパイ(Raspberry Pi Zero WH)を置いて、赤い柵で固定しています。

ちょうどラズベリーパイ(Raspberry Pi Zero WH)の電源ケーブルが赤い柵の隙間に固定されていいかんじです。

レゴでラズベリーパイの台

この台を、ハムスターの回し車のところにおいて、回転数を数えます。

レゴでラズベリーパイの台

横から見るとこんなかんじです。フォトリフレクタを回し車の近くにおいて、赤いピカピカテープが通過すると数をカウントしていきます。

レゴでラズベリーパイの台

回路

回路は前回の「ラズベリーパイ(Raspberry Pi Zero WH)をスマホから操作する方法(WebIOPi)」で作成したものを利用します。

配線の関係で、フォトリフレクタからの入力をGPIO26からGPIO17に変更しました。

JavaScriptのチャートライブラリー(Chart.js)

ブラウザからアクセスがあったら、JavaScriptのチャートライブラリー(Chart.js)を使ってグラフを表示します。

Chart.jsはHTML5のcanvasを使って、JavaScriptベースで簡単にいろいろな種類のグラフをきれいに表示することができるライブラリです。

公式サイトなどで使い方や設定などが、詳しく説明されています。

設定方法1 ライブラリにアクセス

外部のライブラリにアクセスするのであれば、htmlファイルのheadタグに以下を記述するだけでOKです。

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.4/Chart.min.js"></script>

設定方法2 ダウンロードする

外部にアクセスしないで、ダウンロードしてローカルで使うこともできます。

でも、その方法がなかなか見つからなかったので、設定方法を紹介します。

公式サイトにアクセスし、「Git Started」ボタンをクリックします。

chart.jsのダウンロード1

InstallationのGitHub releasesリンクをクリックします。

chart.jsのダウンロード2

ページの一番下のChart.jsファイルをクリックしてダウンロードします。

chart.jsのダウンロード3

/home/pi/webiopi/test/jsフォルダを作成し、ダウンロードしたChart.jsファイルを保存します。

htmlファイルのheadタグでChart.jsを読み込みます。

<!-- グラフ描画用のチャートライブラリファイル読み込み -->
<script src="js/Chart.js"></script>

グラフのデータ・オプションを設定

javascriptで、描画するグラフのデータやオプションを設定することができます。(詳しくは、プログラムを見てください)

// グラフのデータ・オプションを設定
var ctx = $('#canvas').get(0);
var myChart = new Chart(ctx, {
  type: 'bar', // 棒グラフを指定
  data: {
    labels: array_lavels, // 横軸のラベル
    datasets: [{
      data: array_data, // グラフのデータ
      backgroundColor: 'rgba(153, 102, 255, 0.2)', // 棒グラフの背景の色
      borderColor: 'rgba(153, 102, 255, 1)', // 棒グラフの縁取りの色
      borderWidth: 1  // 棒グラフの縁取りの太さ
             ……

キャンバスでグラフ描画

あとは、bodyタグ内のグラフを描画したい場所に「canvasタグ」をおくだけで、きれいなグラフが描けてしまいます。とっても簡単で楽しいです。

<!-- HTML5のcanvasで、グラフを描画 -->
<canvas id="canvas"></canvas>

Pythonのスケジューラーモジュール

インストール

Pythonのプログラムで「5分ごとに処理を実行」したいので、スケジューラーモジュールをインストールします。

まずは、現在インストール済みのパッケージを一覧で確認します。

> pip3 list

pip3とは、Python3のパッケージを管理するコマンドです。

しばらくすると、インストール済みのパッケージがずらっと表示されます。

schedule」がなければpip3でインストールします。

> sudo pip3 install schedule

使い方

スケジューラを使う方法は、

  1. プログラム内でインポートして
  2. 実行したいスケジュールと関数を登録
  3. 実際に実行する

という3段階攻撃です。(詳しくは、プログラムを見てください)

import schedule              # スケジューラライブラリ
  ……
# 5分毎にseveCSVを実行するようスケジュールを登録
schedule.every(5).minutes.do(seveCSV)
  ……
# 設定したスケジュール通り、5分毎にseveCSV関数を実行
schedule.run_pending()

プログラム

前回の「ラズベリーパイ(Raspberry Pi Zero WH)をスマホから操作する方法(WebIOPi)」で紹介したプログラムに処理を追加し、表示文字を少し変更しました。

それと配線の関係で、GPIO26に挿していたフォトリフレクタからの入力の線をGPIO17に変更しています。

プログラムは、大きく2つの流れで処理しています。

  1. 回転数をCSVファイルに保存
  2. CSVファイルを読み込んでグラフ描画

回転数をCSVファイルに保存

フォトリフレクタからの回転数の信号をカウントし、一定時間ごとにCSVファイルに保存します。

ハムスターは夜行性なので、夜20時くらいから、翌朝の6時くらいまでの回転数を測定します。

夜間の回転数を続けて見たいので、昼間の12時から24時間の単位で区切って保存することにしました。

CSVファイルを読み込んでグラフ描画

保存してあるCSVファイルのうち最新のファイルを読み込み、グラフを描画します。

保存されているCSVファイルから、日付選択のセレクトボックスを生成します。

セレクトボックスで日付を選択すると、グラフのデータを切り替えて再表示します。

ちょっと長くなってしまいましたが、プログラムはこちらです。

index.html

script.py

 

動作確認

ハムハムが回し車を回すと……。

回し車をまわすハムハム

 

回転数グラフの下の「回転中」ボタンが赤くなって、回転数がアップしていきます。

ハムスター回し車の回転数グラフ

 

ーー追記ーー

温湿度センサ(DHT11)を追加して、温度と湿度も測れるようにしました。また今度、ソースをアップしたいと思います。

ハムスター回し車の回転数グラフ

 

まとめ

気になっていたハムハムの回し車の回転数を、実際に測定してグラフ化したことで、運動量が一目で分かるようになりましたし、自動で夜間ずっと計測してくれる便利さを実感することができました。

測り始めてまだ数日ですが、日によって回転数にばらつきがあることも分かりました。

多い日には、ほとんど休みなく回して2万回以上! 休みが多くて1万回くらいの日もあります。

年齢や季節、温度にもよるようですし、運動量で体調が分かって、エサの量を調節することもできそうです。もしかしたら地震の予知ができるかもしれません。

今後は、温度や湿度を監視して、異常時に光やスマホで通知してくれるロボットとか、Webからカメラで様子を確認するとか、いろいろ夢が広がっています。

これからもなるべく簡単な方法で、楽しくラズベリーパイ(Raspberry Pi Zero WH)を使っていけたらと思います。

Posted by ままあちゃん