2021-05-14

“Raspberry pi”を使った温熱治療の冷却システムの構築について


現代農業6月号への寄稿について問い合わせを頂いていますので、Raspberry pi を使った冷却システムの構築方法について公開することにいたしました。


寄稿記事の要点

詳しくは「現代農業」6月号の該当記事を読んでいただきたいのですが、ポイントは「ヘギイタダニは41、42℃を2、3時間保つことで殺すことができる」というものです。しかしミツバチも高温で死ぬため、「ダニは死ぬがミツバチは死なない」絶妙な温度を保つ必要があります。

この温度制御が難しいため、温熱治療は、基礎研究はあるものの、技術的に困難でした。もちろん金に糸目を付けなければできますが、それならわざわざ温熱治療を行う必要もないわけなので、安価で、電気系統のない養蜂場で、誰もができるシステムの確立が課題だったわけです。

幸い、シングルボードコンピュータ“Raspberry pi”は、養蜂箱に入るほど小さく、比較的安価で、柔軟性も高く、モバイルバッテリーで動作することから実現できた次第です。


機材の調達

必ずしもRaspberry Pi でなければならないわけではありませんが、最も多くの人に使われ、情報も多く、今後も生き残ると思われるRaspberry Pi が望ましいです。

Raspberry Pi は、「シングルボードコンピュータ」ですが、家電量販店では取り扱われていません。Amazon楽天などの通信販売で入手するのが一般的です。


「Raspberry Pi 4 Model B / 4GB」が必要ですが、それ以外にも、「micro sdカード8GB以上のもの」、「マイクロUSB TYPE C のACアダプタ 5V3Aのもの」、「micro HDMIケーブル」などが必要です。よく分からない人はセットのものを入手して下さい。


温度センサーとして、SwitchBot社の温湿度計を使います。これはBluetoothでスマホと通信できる温湿度計です。このブログでも度々登場しています。温度や湿度のログをグラフ表示することもできます。温熱治療中の温度検知とモニタリングはこれにかかっています。



他にも、「USBで駆動する冷却ファン」、「モバイルバッテリー」、「ガーデニング用のビニール温室」、「ポリエチレンやポリプロピレンの黒いシート」が必要です。


OSのインストール

上のRaspberry Pi を組み立て冷却ファンやモバイルバッテリーをつないでも、すぐには使えません。Raspberry Pi もパソコンですので、OSのインストールや設定が必要です。

まずパソコンで、ラズベリーパイ財団(Raspberry Pi Foundation)のサイトのSoftwareのページから、ラズベリーパイ・イメージャー(Raspberry Pi Imager)をダウンロードし、PCにインストールします。
https://www.raspberrypi.org/software/



パソコンにmicro SDカードを挿入します。
そして、Raspberry Pi Imagerを起動し、“CHOOSE OS”をクリックします。


Raspberry Pi OSを選択します。


“CHOOSE SD CARD”で、Raspberry Piで使うmicroSD cardを選択します。


“WRITE”をクリックし、“YES”をクリックします。


書き込みが始まるのでしばらくお待ち下さい。


書き込みが終わるとチェックが始まりますので、これが終わるまでしばらくお待ち下さい。


下の画面になったらインストール終了です。



初期設定

Raspberry Pi OSがインストールされたmicroSD cardをRaspberry Pi 4 Model Bに入れ、電源を入れます。

下の画面が現れるので“Next”をクリックして下さい。

Countryで「Japan」を選択して下さい。Raspberry Piはイギリスの財団が作っているのでデフォルト設定はイギリスになっています。


下のようになったら、“Next”をクリックして下さい。


パスワードの設定です。お好きなパスワードを入れていただいて構いません。下の画面では、デフォルトのパスワードである“raspberry”を入れています。

上下の欄に同じパスワードを入れたら“Next”をクリックして下さい。

ディスプレイをよく見て下さい。画面外周に黒色のスペースがある場合はチェックを入れて下さい。ディスプレイ一杯に画像が映っている場合は、チェックは入れません。

“Next”をクリックして下さい。

Wi-Fiを使えるようにします。ご自分のWi-Fiを選んで下さい。

選んだら、“Next”をクリックして下さい。

Wi-Fiのパスワードを入力して下さい。

入力したら、“Next”をクリックして下さい。

OSを最新の状態にします。“Next”をクリックして下さい。


下のような画面になるのでしばらくお待ち下さい。


ダウンロード中です。


インストール中です。


OSのアップデートが終了したので、“OK”をクリックして下さい。


最後に再起動します。“Restart”をクリックして下さい。


これで、Raspberry Piが使えるようになりました。
次は、ソフトウェアのインストールです。


uhubctlのインストール

この温熱治療の冷却システムは、上にある温かい空気を下に送り、あるいは下の冷たい空気を上に送り温度が上がりすぎないようにする仕組みです。この空気の移動は冷却ファンが行っています。冷却ファンはUSBから電気を得ているので、USBへの給電を任意に止めたり入れたりできる必要があります。

そのUSBへの通電の制御を行うことができるのが、"uhubctl"です。

"uhubctl"とは、Vadim MikhailovがGNU General Public License version 2で公開しているUSBの電源管理ツールです。これをビルドすればよいのです。

そうするにあたり、ターミナルを開き、以下のコマンドを順に入力します。

----
$ sudo apt install libusb-dev
$ sudo git clone https://github.com/mvp/uhubctl
$ sudo apt install libusb-1.0
$ cd uhubctl
$ sudo make
$ sudo make install
----

画面左上をよく見て下さい。黒色長方形で「>_」と書かれたアイコンがあります。これがターミナルというアプリです。


そのアイコンをクリックすると下の画面が現れます。これがターミナルです。


sudo apt install libusb-dev
と入力しエンターキーを押して下さい。


すると、ドライバがインストールされて下の画面のようになるはずです。


次に
sudo git clone https://github.com/mvp/uhubctl
と入力しエンターキーを押して下さい。
githubというリポジトリーから“uhubctl”というUSBの電気を操作できるアプリがダウンロードされます。


さらに
sudo apt install libusb-1.0
と入力しエンターキーを押して下さい。“uhubctl”に必要なドライバがインストールされます。


まず、
cd uhubctl
と入力しエンターキーを押して下さい。
現在のディレクトリがuhubctlに移動します。
次に、
sudo make
と入力しエンターキーを押して下さい。
さらに、
sudo make install
と入力しエンターキーを押して下さい。
“uhubctl”がビルドされます。


以上で、USBの電気がコントロールできるようになります。
少し先取りすると、
sudo uhubctl -l 1-1 -a off
で、USBの給電を落とすことができるようになります。
sudo uhubctl -l 1-1 -a on
で給電が再開するようになります。


bluepyのインストール

Raspberry Pi で温度を把握する方法としては、GPIOピン(生け花の剣山のようになっている端子)に温湿度センサーをつなげるのがオーソドックスですが、抜けやすい問題があるため、現代農業の画像とは異なり、Switchbot社の温湿度計を使用します。その温湿度計は温度などの値をBluetoothで拾えるよう放送(ブロードキャスト)しているので、それを拾えるようにします。

そのためにbluepyというアプリをインストールする必要があります。
ターミナルを開き、以下の順で入力します。

--
$ sudo apt install python3-pip
$ sudo apt install git
$ sudo apt install python-pexpect
$ sudo apt install libusb-dev libdbus-1-dev libglib2.0-dev
$ sudo apt install libudev-dev libical-dev libreadline-dev
$ sudo pip3 install bluepy
$ cd /usr/local/lib/python3.7/dist-packages/bluepy
$ sudo setcap'cap_net_raw,cap_net_admin + eip 'bluepy-helper
--

まず、
sudo apt install python3-pip
sudo apt install git
sudo apt install python-pexpect
と入力しエンターキーを押して下さい。
以下のようになるはずです。

次に、
sudo apt install libusb-dev libdbus-1-dev libglib2.0-dev
sudo apt install libudev-dev libical-dev libreadline-dev
と入力しエンターキーを押して下さい。
以下のようになるはずです。

上はbluepyに必要なドライバのインストールでしたが、いよいよbluepyのインストールと権限賦与です。

sudo pip3 install bluepy
cd /usr/local/lib/python3.7/dist-packages/bluepy
sudo setcap'cap_net_raw,cap_net_admin + eip 'bluepy-helper
と入力しエンターキーを押して下さい。


以上で、Switchbotの温湿度計が発する温度をRaspberry Pi で拾えるようになりました。


Thonnyを使いPythonで書いたスクリプトの作成

温室の温度が分かり、USBの給電を制御できるようになってもまだ用をなしません。プログラムを書く必要があります。

プログラムはパイソンで書きます。パイソンは非常に簡単なインタープリタ式のスクリプト言語です。簡単ですし情報も豊富にあるので応用が効きます。しかし今回は得にそれを習得する必要はありません。コード(プログラム)をコピーして貼り付けて保存するだけです。

まず、Thonnyというパイソンの開発プログラムを起動します。
画面左上のラズベリーのアイコンをクリックしプルダウンメニューを出し、「プログラミング」から「Thonny」を選択します。


以下のプログラムをコピーし貼り付けます。
--
from bluepy import btle
import struct

class SwitchDelegate(btle.DefaultDelegate):
    def __init__(self, macaddr):
        btle.DefaultDelegate.__init__(self)
        self.sensorValue = None
        self.macaddr = macaddr

    def handleDiscovery(self, dev, isNewDev, isNewData):
        if dev.addr == self.macaddr:
            for (adtype, desc, value) in dev.getScanData():  
                if desc == '16b Service Data':
                    self._decodeSensorData(value)

    def _decodeSensorData(self, valueStr):
        valueBinary = bytes.fromhex(valueStr[4:])
        isTemperatureAboveFreezing = valueBinary[4] & 0b10000000
        temp = ( valueBinary[3] & 0b00001111 ) / 10 + ( valueBinary[4] & 0b01111111 )
        if not isTemperatureAboveFreezing:
            temp = -temp
        self.sensorValue = temp
--

「Save」を押して、名前を“switch”として「OK」を押し、“switch.py”というファイルを作ります。


次に、
新規作成(New)し、以下のプログラムをコピーして貼り付けて下さい。
--
from bluepy import btle
from switch import SwitchDelegate
import time
import subprocess

while True:
       scanner = btle.Scanner().withDelegate(SwitchDelegate('e4:07:6d:a3:3d:a0'))
       scanner.scan(5.0)
       tmp = scanner.delegate.sensorValue
       print(tmp)
       if tmp is not None:
          if tmp >= 43.2:
              subprocess.call("sudo uhubctl -l 1-1 -a on", shell=True)
          else:
              subprocess.call("sudo uhubctl -l 1-1 -a off", shell=True)
       time.sleep(1)
--

なお、プログラム中の'e4:07:6d:a3:3d:a0'は、Switchbotの温湿度計の識別情報です。ひとつずつ異なっているので、ご自分の温湿度計の識別情報を入れて下さい。調べ方は、後述します。

“43.2”というのは、冷却ファンが回転を始める温度です。これは自由に変更することができます。
また、温度判定に入る前に、“tmp”が“not none”であることを調べていますが、これは時々温度情報が取れないことがあるからです。これを挟まずに温度判定を行うと、温度情報がない場合はエラーが出て止まってしまいます。


「Save」を押して、「名前」を“bot”とし、“bot.py”というファイルを作ります。




Switchbotの識別情報の調べ方

SwitchBotの温湿度計を使うには、以下からアプリをインストールして下さい。
メールアドレスとパスワードを設定すると使えるようになります。

通常は以上の手続きで十分ですが、Raspberry Piで使えるようにするためには、個体の識別情報を調べる必要があります。

まず、温湿度計をタップして下さい。通常ひとつしか表示されません。わたしは、ふたつ持っているので2個並んでいます。
次に、右上の歯車のアイコンをタップして下さい。
さらに、右上の三点リーダー(・・・)をタップして下さい。
赤色で囲まれたアドレスが識別情報です。
プログラムの該当箇所に入れて下さい。


自動起動の設定


以上で、プログラムを走らせれば43.2℃以上でファンが回り、未満ならファンが止まるようになります。
しかし、野外で使う場合はモニターがありませんから、モバイルバッテリーをつないだら自動でプログラムが動くようにする必要があります。

以下、自動起動の設定です。

まず、ターミナルを起動し
sudo vi /etc/rc.local
と入力します。


“exit”の上に
sleep 10
sudo python3 /home/pi/bot.py &
の2文追加します。

上の"sleep 10"は必ずしも要りませんが、rc.localの読み込みが早過ぎて他の準備が間に合わずに自動実行されない場合には有効です。



:w
と押して保存します。変な保存方法ですが、まず「:」を押して、次に「w」を押し、エンターキーを押します。


以上で完成です。
お疲れさまでした。

運用に先立って正常に動作するか、必ずテストするようにしてください。


温熱治療の実践


温熱治療は晴れの日に行います。薄曇りでもできなくはありませんが、快晴の方が望ましいです。
養蜂箱は2段にします。最上段に蜂児枠を置きます。

巣枠の上にRaspberry Piなどをつないで置きます。
空冷ファンは回転を始めますが、20秒くらいで止まります。

蓋をします。蓋は種類によっては閉まらないこともあります。わたしは、別の蓋の側面を上下につないでいます。

ポリエチレンやポリプロピレンの黒いシートで全体を覆います。

それにビニール温室を被せます。あとは内部が加熱されるのを待つだけです。

なお、巣門付近は蜂が出入りできるように開けておきます。


また、帰巣した蜂がビニール温室の方に入って出られなくなることがありますが、そのまま放置していると熱で死んでしまいます。定期的に外に出してやって下さい。


これは治療実施時の温度の推移です。43.2℃でファンが回転するよう設定したところ、目論見通りに動作しました。

【追記】ここまで読んで下さりありがとうございます。このRaspberry piが温熱療法の普及の妨げになることを、ずっと悩ましく思っていました。そこで逆転の発想で、「機械にできることを人がやる」ということで、Raspberry piなしの温熱療法を確立しました。詳しくは、「現代農業2021年9月号」をご覧ください。