微生物燃料電池のDIYやってみた〜その15〜


微生物燃料電池で小型冷却ファンを回すマイプロジェクトを実行中である。

前回は、電流発生菌の餌となりうるお酢や乳酸菌飲料を入れることで電池の性能が上がるか実験したが、思った結果が得られなかった。性能を測る上での測定条件がばらついていることや、測定データが少ないことが原因の可能性もあるので、この辺りの懸念を取り除くよう、自動で電圧を測定できる仕組みを構築しようと思う。

実現したいこと(要求仕様)

  • 電池のI-V特性を測るため、開放電圧及び、負荷電圧を自動で測定する。測定は、一定時刻(AM6:00)に開始し、以下4つの状態の電圧を測定する。
    1) 開放状態
    2) 2kΩ抵抗接続時
    3) 1kΩ抵抗接続時
    4) 680Ω抵抗接続時
  • 負荷抵抗を接続した後は、電圧が安定するまで一定時間待ち、その後、電圧を測定する。
  • 負荷電流は、接続する抵抗が既知であることからオームの法則で求める。I=V/R
  • 測定が完了したら、測定した電圧値及び求めた電流値をスマホへ通知する。

※I-V特性のフラフは、上記1)~4)の状態の電圧・電流から手動でグラフを作る。将来的には、グラフの作成も自動化したいと思う。

システムの概要

上図は、要求仕様を満たすためのシステムの概要となる。小型コンピュータであるRaspberry Pi3に、AD変換モジュール(アナログ値をデジタル値へ変換するモジュール)を接続し電圧を測定する。AD変換モジュールは、4チャンネル/分解能16ビット/I2Cインターフェース対応のADS1115のチップを搭載したモジュールを使用。アナログ値からデジタル値へ変換された電圧データはI2Cインターフェースを経由してRaspberry Pi3で取得する。

また4つの状態の切り替えはリレーモジュールによって実現する。リレーとは電磁石を利用したスイッチである。スイッチなのでオンとオフの状態を切り替えられる。例えば下図で考えると、リレー1のスイッチをオン、リレー2のスイッチをオフとすると、電池には抵抗1がつながる。また、リレー1のスイッチをオフ、リレー2のスイッチをオンとすると、電池には抵抗2がつながる。リレー1とリレー2のスイッチを両方オフにすると、電池には抵抗がつながらない状態、つまり開放状態になる。

なので、3つのスイッチを使えば、1)抵抗を繋げない状態(開放状態)、2)2kΩ抵抗を繋いだ状態、3)1kΩ抵抗を繋いだ状態、4)680Ω抵抗を繋いだ状態を作り出すことができる。それぞれのリレースイッチの状態は、Raspberry Pi3の信号(GPIO)から制御できる。

リレースイッチをオン・オフするためのGPIOの制御、測定した電圧を得るためのI2Cインターフェースの制御、そして、電圧データをスマホへ送信するためのLine Notifyの制御は、Python3のプラグラムを作成し、そのプログラムを定時に起動する。

完成したシステム

上の写真は、自動で電圧を測定するシステム概観である。朝06:00にPython3のプログラムが起動し、4つの状態の電圧を測定したあと、計算で求めた負荷電流とともにLineへメッセージが送られるようになった。

これまで、電圧計を使って手動で測定していたが、私が寝ている間にも、自動で測定してくれるので、とても楽になった。

現状は1台の電池の測定しかできないが、リレーモジュールを増やせば同時に複数の電池の測定も可能となるだろう。しかし、実験している電池は2台であるので、電池を繋ぎ変えることで十分対応ができる。06:00と07:00にPython3プログラムを2回起動するようにしておけば、私がやることはたった2つだ。

  1. 1回目の測定が完了する06:30にLine Notifyからのプッシュ通知がスマホにくるので、この音で目覚める。
  2. そして、次の測定が始まる07:00までの間に、別の電池へ繋ぎ変える。

電池の繋ぎ変え作業があると思うと2度寝が絶対にできないので、軽い使命感のもと早起きができて、朝の時間を有効に使うことにも役立っているように思う。

作り方を知りたい人は、以降の記事も読み進めてほしいと思う。

使用した部材

  • Raspberry Pi 3 x1
    OS: Raspbian GNU/Linux 8.0 (jessie)
    Python: 3.6.9
  • AD変換モジュール(HiLetgo 2個セット ADS1115 4チャンネル 16ビット I2C ADC モジュール ゲインアンプ Arduino Rpiと互換) x1
  • リレーモジュール(SODIAL(R) 4チャンネル5Vリレーモジュール) x1
  • 抵抗 2kΩ x1、1kΩ x1、680Ω x1
  • 線材
  • みのむしクリップ x2

接続方法

I2Cのスレーブアドレスは、ADDRピンを繋ぐ場所によって4種類から設定できるが、今回はVDD(+3.3V)へ繋ぐことで0x49とした。

また、差動入力A0-A1を電池の+と-に接続して電圧を測定した。

Raspberry Pi3の初期設定

I2Cの有効化

以下コマンドを入力し、Raspberry Pi3の初期設定画面を起動する。Interfacing Options->I2CからI2Cを有効化する。

$ sudo raspi-config
ライブラリのインストール

以下コマンドを入力し、ライブラリをインストールする。

$ pip3 install adafruit-circuitpython-ads1x15
以下コマンドを入力すると、ライブラリがインストールされていることが確認できる。
$ pip3 list
Adafruit-Blinka
adafruit-circuitpython-ads1x15
adafruit-circuitpython-busdevice
Adafruit-PlatformDetect
Adafruit-PureIO
詳しくは、Python & CircuitPythonを参照。

Line Notifyの初期設定

Line Notifyを使ってRaspberry Pi3からスマホのLineへメッセージを送るには、次の設定が必要になる。

  1. スマホのLineアプリで、メッセージを受け取るためのトークルームを作る。
  2. 次に、LINE Notifyのホームページからログインした後、マイページの「アクセストークンを発行」によってアクセストークンを発行する。発行の際に、トークン名(通知の際に表示される文字)と通知を送信するトークルーム(1で用意したもの)を入力する。発行されたアクセストークンは、Python3のプログラムで使うので、メモ帳などにコピーしておく。
  3. LINE NotifyのLINEアカウントを、1で用意したトークルームに招待する。

作成したコード

プログラムの定時起動

プログラムを定時に起動するには、crontabファイルを編集する。以下のコマンドを入力するとエディタが開く。

$ crontab -u pi -e
一番下の行に次のコードを記述し、保存する。なお、私の環境では、Ppython3のパスが通ていなかったので、フルパスで指定した。(/usr/local/bin/python3)

以上で、毎朝6時と7時にプログラムが起動し、システムが電圧を測定することができる。