おうちづくり としお 工作

【DIY】アレクサを使った自作スマートスイッチシステムを、つくる。

スポンサーリンク

はじめに

どうもこんにちは、旦那のトシオです。

中古住宅を購入して早くも1ヶ月は経過し、(ブログをサボって)部屋の改造に勤しんでおりました。

その中でも、私が家に住みだして絶対にやりたかった事。それが【スマートホーム(スマートハウス)】

スマートホームといえば、AmazonのアレクサやGoogleのようなサービスを経由して、家の中の機器とネットワークをつなげる事です。

私としては、こういった「使えるかよくわからんけど、ロマンがある内容」が大好きなので、今回の家づくりにはぜひ応用したいと考えておりました。

今回は、その中でも定番中の定番、家の中の壁スイッチをIoT化し、アレクサを使ってコントロールするという方法について紹介します。

 

 

 

スマートスイッチシステムの概要

スマートスイッチといえば、一般的にはSwitchbot社のスイッチが有名です。

ただしこちらの製品は値段が高いし、いつかは電池交換が必要。そしてあまりオシャレではないです。

家の中の壁コンセントが一つだけであれば十分かもしれませんが、複数箇所をコントロールするには不適切といえるでしょう。

 

また別手法として壁コンセントを入れ替えるという方法もあります。

見た目はスマートになりますが、技術が必要になります。特に電気工事士の資格が必須となるので、資格未所有者にはハードルが高いです。

また資格を持っていても、構造上AC100Vラインを別途用意する必要があります。そのため家作成時から準備をしておかなければ後付は簡単ではありません。

高いのから安いのまであるので、新築で家を作られる際はぜひ導入検討して欲しいグッズです。


個人的に電気工事士の資格を持ってると色々やれることが増えそうだな…と思いましたが、

①壁コンセントしか使えない(他に応用が効かない)
②わざわざそのために数万円使うのは嫌

という理由で、一旦は無資格でもできる方法を模索しました。

 

そこで見つけたのが、スマートスイッチの自作化です。

 

サーボモータを使用したスマートスイッチ化

つまるところ、Switchbotさんの製品の機構を自作するということです。

同様の事を考えている先人の方はたくさんいらっしゃるので、それほど情報を得るのは苦労しませんでした。

参考:

fauxmoESP で スマートホームデバイス自作

赤外線リモコンで動くSwitchBotもどき

 

とはいえ参考元の情報は、全てESP32(ESP8266)というArduino系列のデバイスを使った方法になっています。

Arduinoは便利ですが、複数箇所をコントロールするためには大量の数が必要となってしまいます。

そのため私はRasberry Piを使った一括コントロールを目指してみました。

 

基本的な仕様

先に書いたように、基本的にはRasberry Piを使ってサーボモータを動かします。

今回は8台のサーボモーターを使用する予定なので、PCA9685を使います。

 


なお、Rasberry Piの基本的なOSインストール方法はこちらが一番参考になります。

 

 

なおPCA9685はI2C通信をしているので、それに関してもここを参考にすると問題ないかと思います。

 

 

 

また、基本的にサーボモータは電源ONすると常に励磁がかかり、「その位置に留まろうとする」電力が発生します。

つまり、スイッチを動かす以外の場面でも電気を使ってしまいます。これは電気の無駄使い。

ということで、リレーを使ってコントロールします。最近はこういうモジュールを使っています。楽。

ハードとしてはこんな感じです。
パソコンできれいに作りたかったのですが、イマイチうまく作る方法がわからず、結局適当な手書きになってしまいました。

 

 

プログラム

モーターを動かすプログラム

モーターを動かす箇所はpythonで作っております。

プログラムは上記のI2C通信のプログラムをほぼ丸々参考にしています。

メモもあえて残しています。圧倒的感謝。。!!

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import Adafruit_PCA9685
import time
import RPi.GPIO as GPIO

#サーボモーターをコントロールするためのクラス
class servo_Class:
    #ChannelはPCA9685のサーボモーターを繋いだチャンネル
    #ZeroOffsetはサーボモーターの基準の位置を調節するためのパラメーターです
    def __init__(self, Channel, ZeroOffset):
        self.Channel = Channel
        self.ZeroOffset = ZeroOffset

        #Adafruit_PCA9685の初期化
        self.pwm = Adafruit_PCA9685.PCA9685(address=0x40)
        self.pwm.set_pwm_freq(60)

    """角度を設定する関数です"""
    def SetPos(self,pos):
        #pulse = 150~650 : 0 ~ 180度
        #PCA9685はパルスで角度を制御しているため0~180のように角度を指定しても思った角度にはなりません
        #そこで角度の値からパルスの値へと変換します。PCA9685ではパルス150~650が角度の0~180に対応しているみたいです
        #下の式の(650-150)/180は1度あたりのパルスを表しています
        #それにpos(制御したい角度)を掛けた後、150を足すことでことで角度をパルスに直しています。
        #最後にZeroOffsetを足すことで基準にしたい位置に補正します
        pulse = (650-150)/180*pos+150+self.ZeroOffset
#        pulse = (650-150)/180*pos+150+self.ZeroOffset
        self.pwm.set_pwm(self.Channel, 0, pulse)


"""電源ON"""
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)

GPIO.output(4,True)
time.sleep(0.2)

"""制御を行うメインの部分です"""
Servo1 = servo_Class(Channel=1, ZeroOffset=0)

print 'initial'
Servo1.SetPos(0)
time.sleep(0.2)

print 'do'
Servo1.SetPos(70)
time.sleep(0.5)

print 'initial'
Servo1.SetPos(0)
time.sleep(0.2)

"""電源OFF"""
GPIO.output(4,False)

GPIO.cleanup()

 

GPIOの4をリレーのINに繋ぎます。

プログラムが動いた時だけ、全てのサーボに励磁をかける仕組みですね。

 

 

Node-REDを使ってアレクサとRasberry Piを繋ぐ

Node-REDと呼ばれるサービスを使い、アレクサの指示でRasberry Piのプログラムを動かすようにします。

Node-REDの説明はこちらでは省きます。設定に関しては、こちらの記事を参考にしました。

 

Node-REDとアレクサの連携についてはこちらを参考にしました。

 

 

 

Node-REDはこのように記載しています。

 

 

 

 

肝としては、ON状態でON,OFF状態でOFFしないように、現在のステータスをログファイルに保存し、それを読み込ませる手法をとっています。

これにより電気が入ってる状態で、アレクサに電気をつけてと話しても電気が逆に消えるというシチュエーションをなくせます。

 

ちなみに私はpythonのプログラムをそのまま使うためにpython-shellとよばれるスクリプトを使用していますが、そもそもシェルスクリプトであれば特別なことをせずとも使用できるみたいです。

 

接続

3Dプリンターで外枠を作成し、その中にサーボモータを組み込みます。

ちなみにサーボモーターは、当初SG90という格安のサーボを使っていましたが、トルクが不安定のためこちらに変更しました。


注意点としては、サーボのトルクに対して外枠が浮いてしまわないようにすることですかね。

あと、ケーブルに関してはケーブルモールを使っています。ブサイクだし高価なので、可能であれば壁内に埋め込みたかった…。

いずれにせよ、両面テープ等では接着力に不安もあるので壁に穴をあけた方が確実です。

中古住宅なのもあり、躊躇なく穴を開けまくりました。

 

 

実際の挙動

 

声でコントロールできるのも便利ですが、やはり定形アクションで「決まった時間に」「まとめて」作業してくれるのがアレクサの便利ポイントです。

現状、プログラムが同時に動くと通信がうまくいかない+電力不足に陥るので、各種スイッチの感覚は5秒タイマーをあけて作動するように調整しています。

この辺はちょっともっさりしているので、対策を考えているところです。

 

 

おわりに

そんなわけで、今回はRaspberry Piとサーボモータを使ったスマートスイッチ化でした。

一般的な方法よりは安価に済みますのでお勧め。

Raspberry Piは小型で場所をとらず、常に電源を入れていても消費電力が少ないため、リビングで使うにも最適だと思います。

他にもアレクサやRaspberry Piを使って部屋のコントロールはたくさんしたいので、また類似の案件があったら投稿しようと思います!

スポンサーリンク

  • この記事を書いた人

toshio

旦那。 趣味は写真と工作。自作(改造)カメラ、IoT、電子工作、インテリア、家や暮らしが好き。

-おうちづくり, としお, 工作

© 2021 レツクル! Powered by AFFINGER5