新しいものづくりがわかるメディア

RSS


それ、ラズパイでつくれるよ

それ、ラズパイでつくれるよ——ホームオートメーションもできるよ

「Raspberry Pi」の活用例を紹介する連載企画「それ、ラズパイでつくれるよ」。第5回では、「Grove Pi+」「IFTTT」「Mini Smart Socket」(以下スマートプラグ)を使って家電を制御する。

家で騒ぎすぎたらブレーカーを落としてしまおう

今回はラズパイを使って家電の制御をやってみよう。家でばか騒ぎをしてしまうこともあると思う。きっと悪気はないのだが、一緒に住んでいる人やご近所には迷惑が掛かってしまう。騒ぎすぎたときにはラズパイでコンセントをコントロールし、ドライヤーなどの電気をたくさん使う家電のスイッチをたくさん入れてブレーカーを落とそう。ホームオートメーションだ。

今回作るシステムは下の画像の通り。ラズパイで音センサーのデータを読み、騒がしいと判断したら「IFTTT」にトリガーを送る。IFTTTは異なるネット上のサービスを連携して動かせるサービスで、ラズパイからトリガーを受け取り、スマート家電を制御できるアプリ「Smart Life」にスマートプラグの電源を入れるよう要請する。最後にSmart Lifeがスマートプラグの電源を入れ、ドライヤーが起動し電力を消費する仕組みだ。スマートプラグの操作にはWi-Fi環境が必要になる。

スマートプラグの準備

今回使ったスマートプラグはAitmexcn製のスマートプラグだ。Smart Lifeというスマホアプリでコントロールが可能で、設定も全てスマホアプリで行なった。

今回は2つ用意した。 今回は2つ用意した。

スマートプラグをコンセントに挿した状態でアプリを起動し、利用者登録、デバイスの追加を行う。

中国語をそのまま日本語に直した感じが心地よいアプリだ。 中国語をそのまま日本語に直した感じが心地よいアプリだ。

“ソケット”を選択した後スマートプラグの電源ボタンを長押しし、ランプが点滅したら“フラッシュで確認ライト”をタップする。

Wi-Fiのパスワードを聞かれるのでスマホが接続しているのと同じネットワークのパスワードを入力する。

接続が完了するとスマートプラグに名前を付けられるので、それぞれ任意の名前を付けて区別しておく。私はRaijin-01,02とした。

これでスマートプラグの準備はOKだ。

IFTTTの準備

IFTTTは“IF This Then That(これをしたら次にあれをする)”の略で、サービス同士を連携させることができるサービスだ。こちらもスマホアプリで全て設定できる。

まずアプリを起動し、Searchタブで“Webhooks”を検索する。右上の“Documentation”を選択すると、トリガーのために使うキーを入手できる。これを記録しておこう。Webhooksはあるサービスの情報を、リアルタイムにほかのサービスに送ることができるサービスです。

次にMy Appletsタブで自分のIFTTT Appletを作っていく。thisを選択し“Webhooks”を検索、選択する。“Receive a web request”を選択し、次の画面でEvent Nameを任意の名称に設定する。私は“RAIJIN”とした。

thatには“smart life”を検索すると先ほどのアプリが出てくる。“Turn on”を選択し、アプリと接続する。設定しておいたスマートプラグの名称を“Which device/group?”の部分で選択できるので、Raijinプラグを選ぶ。

以下のように表示されれば準備OK。用意したスマートプラグの分、同じ操作でAppletを用意しよう。

WebhooksのDocumentationページで、{event}の部分に設定したイベント名を入力し、画面下部の”Test it”をタップするとトリガーのテストを行うことができる。スマートプラグのスイッチが入ることを確認しておこう。

ハード作るのにはんだ付けしたくない

今回はGrove Pi+というHATを使って、簡単にセンサーデータを読んでみよう。
これを使うことで、はんだ付けの作業はおろか第3回のようなブレッドボードも見なくて済む。

これが「Grove Pi+」 これが「Grove Pi+」

ラズパイ側の準備

ハードウェアは以下のものを用意しよう。

  • Grove Pi+ 1個
  • Grove LED 1個
  • Grove Sound Sensor 1個

Grove Pi+を使うためにラズパイに必要なデータをダウンロードする。まだGrove Pi+はラズパイに取り付けない。
ターミナルを開いて以下のコマンドを入力。

$ cd /home/pi/Desktop
$ sudo git clone https://github.com/DexterInd/GrovePi

“pi”の部分は任意のユーザー名でいいだろう、と思っていたが、そうすると次のステップでエラーをまくし立てられ辛い気持ちになる。私はOSのインストールからし直す羽目になったため、piユーザーで実行することをお勧めする。

その辛いコマンドは以下の通り。

$ cd /home/pi/Desktop/GrovePi/Script
$ sudo chmod +x install.sh
$ sudo ./install.sh

公式やさまざまなサイトには自動的に再起動すると書かれているが、私のラズパイは何事もなかったかのように動き続けていたため、手動で再起動した。

$ sudo reboot

これでソフトウェアの準備はOK。Grove Pi+を載せてあげよう。取り付けるときは電源を切っておく。

USBやLANの部分に触れそうなところは絶縁しておくと良い。 USBやLANの部分に触れそうなところは絶縁しておくと良い。
ラズパイのGPIOピンに付ける。 ラズパイのGPIOピンに付ける。

画像のようにピンがたくさん余る。だがそれでいい。

電源を入れてGrove Pi+についている緑のLEDがつくことを確認した後ターミナルで、

$ sudo i2cdetect –y 1

と入力して、スクリーンショットのように「04」と表示されていればOK。

最後にGroveのモジュールを次のように接続して準備完了だ。

Grove Sound Sensor – A0
Grove LED – D2
モジュールを接続した様子。 モジュールを接続した様子。

Pythonスクリプトで動作させる

以下のようにpythonスクリプトを作成し、動作させよう。
サウンドセンサーは周囲の音が大きいほど、大きな値を出力する。特にヒャッハーな声に強く反応し、読んだ値が閾値を超えた回数をnumに記録する。そしてnumが3になった時、IFTTTへトリガーを送る。EVENTとKEYの部分を自分の設定に合わせて書き換え、hotokenokaomosandomade.py として保存しよう。私の場合はEVENTが”RAIJIN”になる。

from time import sleep
import grovepi
import requests

# Maker Webhooks Name
EVENT = ""
# Maker Webhooks Key
KEY = ""

# Connect the Grove Sound Sensor to analog port A0
sound_sensor = 0
grovepi.pinMode(sound_sensor,"INPUT")

# Connect the Grove LED to digital port D2
led = 2
grovepi.pinMode(led,"OUTPUT")
grovepi.digitalWrite(led,0)

# The threshold
threshold_value = 400

# Setup Progress
num = 0
hotoke = True

def nidoarukotohasandoaru():
    url = "https://maker.ifttt.com/trigger/" + EVENT + "/with/key/" + KEY
    requests.post(url=url)


while True:
    try:
        # Read the sound level
        sensor_value = grovepi.analogRead(sound_sensor)
        if num == 1:
            grovepi.digitalWrite(led,1)
            print("HOTOKE NO")

        if num == 2:
            grovepi.digitalWrite(led,hotoke)
            hotoke = not(hotoke)
            print("KAO MO")

        if num >= 3 :
            print("SANDOMADE\n\r")
            grovepi.digitalWrite(led,0)
            nidoarukotohasandoaru()
            break

        if sensor_value > threshold_value:
            num += 1

        print("sensor_value = %d" %sensor_value)
        sleep(0.2)

    except KeyboardInterrupt:
        grovepi.digitalWrite(led,0)
        break
    except IOError:
        print ("Error")

ターミナルから以下のコマンドで実行する。

$ python hotokenokaomosandomade.py

LEDでの警告も無視してヒャッハーを続けたなら仏の顔も三度までだ、ドライヤーの電源が入り、ブレーカーが落ちるだろう。私の家のブレーカー(アンペアブレーカー)は20Aなのだが、ドライヤー2台程度では全然落ちなかった。こたつ出力最大、700Wレンジ、1000Wオーブントースター、電気ケトルを付けた状態でやっとこさブレーカーを落とすことができた。そういうことがあったため、動画であんな顔をしている。

※編集部注:ブレーカー(アンペアブレーカー)が落ちると、家全体が停電します。動作中のパソコンやDVDレコーダーなどのHDD内蔵機器のHDDに損傷を与える可能性があります。さまざまな家電が内蔵するタイマーや時計がリセットされたり、動作中だった家電がエラー表示になったりします。実際にブレーカーを落とす場合、およびブレーカーを入れる場合には十分に注意してください。

今回は、ラズパイを使って家電の制御を行った。ブレーカーを落とすといろいろ大変なので、照明に応用するなど生活に役立つ使い方でも試してみてほしい。

※このコーナーでは、みなさんの「それ、ラズパイでつくれるよ」をお待ちしています。問い合わせフォームからドシドシご応募ください。

参考リンク:
Grove Pi+の初期設定: https://www.dexterindustries.com/GrovePi/get-started-with-the-grovepi/setting-software/
IFTTTへのトリガー:
http://www.daipanman.com/entry/2017/07/07/071949
スマートコンセントとIFTTTの連携:
https://www.masamedia.top/archives/3343.html

ニュース

編集部のおすすめ

連載・シリーズ

注目のキーワード

もっと見る