ラズパイで熱帯夜を乗り切ろう!


エアコン操作を自動化して室温を一定に

上限温度に達すればオン

下限ならオフ

これをひたすら繰り返します笑


対象

ターミナル接続でLinuxを触ったことのある人向け。


用意するもの

ラズパイzero: 電源まで付いたスターターキットがオススメ。

リモコンアドバンス:パワフルで操作簡単なリモコンモジュール。

BME280:温度湿度気圧センサー。要ハンダ付け。

ブレッドボードケーブル(メス-メス)20cmぐらい。

USBケーブル:リモコンアドバンス(miniB) - ラズパイzero(microB)


ラズパイのセットアップに必要なもの

電源

microSD

おすすめキーボード・マウス(あったほうが楽)

HDMIケーブル


ラズパイzeroの注意点

ラズパイzeroは小ささや消費電力の点で魅力的なのですが反面USBやHDMIの規格が小さくなってます。

黄丸にはブレッドボードケーブルでBME280をつなぎます。

赤の左からミニHDMI、USB-microB、USB-microB

赤真ん中にリモコンアドバンス、赤右に電源をつなぎます。

IMG_0246.jpg


ラズパイzeroをセットアップして下さい。

OSインストール

パスワードの変更

wifi設定

SSH Enable

I2C Enable

起動時にCUIで立ち上げる設定

できればipアドレスの固定化

までできれば大丈夫です。

先人の偉い方々の記事がたくさんありますので参考にして下さい。

この後はリモートで作業しましょう。

ここではPiユーザーで設定しますが任意のユーザーを作成したほうがいいと思います。

センサーやリモコンアドバンスの接続時は念の為電源を切っておいてください。


BME280とラズパイzero

ピンがハンダ付けされてない場合はハンダ付けしてください。

IMG_0247(Edited).jpg

BME280.VCC -> ラズパイ.1ピン

BME280.GND -> ラズパイ.6ピン

BME280.SCL -> ラズパイ.5ピン

BME280.SDA -> ラズパイ.3ピン

BME280.SDO -> ラズパイ.9ピン

SCLとSDAがI2C通信をするピン。

RaspPiZero.png

こんな感じでブレッドボードケーブルで指して繋げばOK。

IMG_0248(Edited).jpg


BME280の設定

hawk777さんの記事が参考になります。ありがとうございます。

ラズパイ+BME280でIoT環境センサー構築(その1)

4.サンプルコードの実行はこちらと読み替えて下さい。

sudo apt install -y python-smbus

cd /home/pi/ダウンロード
wget https://github.com/SWITCHSCIENCE/BME280/archive/master.zip
unzip master.zip
sudo pip install smbus2

python BME280-master/Python27/bme280_sample.py

無事スイッチサイエンスさんのサンプルが動いたら次へ行きましょう。


リモコンアドバンスの設定

参考にさせていただきました。ありがとうございます。

エアコンを外出先から遠隔操作(by MQTT)

6. 赤外線リモコン信号送信まででOKです。


作業フォルダ

/home/pi/aircon

以下の作業は先程作成したairconフォルダ内でやります。


リモコン信号の記憶

#受信開始

$ bto_advanced_USBIR_cmd -r
#受信終了
$ bto_advanced_USBIR_cmd -s
#ファイル書き出し
$ bto_advanced_USBIR_cmd -g | tee aircon_XX.txt

22度設定でon -> aircon_22.txt

25度設定でon -> aircon_25.txt

オフ -> aircon_off.txt

上を参考に3種類のリモコン信号をファイル化してください。

書き出しのところでエラーがでたときはもう一度試すと成功することがあります。


BME280のライブラリをダウンロード

Raspberry PiとBME280モジュールで自動で温度・湿度・気圧を測定してグラフ化する

からあげさんの記事を参考に改変させていただきました。

git clone https://github.com/fell-procir2/bme280.git

cp ./bme280/bme280_sensor.py ./


フラグファイルの作成

off.aircon

というファイル名で空ファイルを作成して下さい。


auto_pirot.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import time, datetime
import bme280_sensor
import sys
import os

#温度設定
upper = 27.8
under = 26.4
on_files = ['aircon_25.txt']
strong_files = ['aircon_22.txt']
off_files = ['aircon_off.txt']

def ir_cmd(code_files):
for code_file in code_files:
_cmd = "bto_advanced_USBIR_cmd -d `cat " + code_file + "`"
while not 0 == os.system(_cmd):
time.sleep(1)
print(_cmd + ' -> ' + str('done'))
time.sleep(1)

#湿度による微調整
def clearance(hu):
clr = 0
if 60 <= hu:
clr = -0.5
elif 58 <= hu and hu < 60:
clr = -0.3
elif 50 <= hu and hu < 58:
clr = 0
elif hu < 50:
clr = 0.2
return clr

#初期設定 -> エアコン状態off -> フラグoff
ir_cmd(off_files)
if os.path.isfile('on.aircon'):
os.rename('on.aircon', 'off.aircon')
before_temp = 35

while True:
(temp, humi, press) = bme280_sensor.get_value()

temp_is_over = upper + clearance(humi) < temp and os.path.isfile('off.aircon')
temp_is_under = temp < under + clearance(humi) and os.path.isfile('on.aircon')
#冷房中に温度があがったか?
temp_is_back = before_temp < temp and os.path.isfile('on.aircon')

#冷えにくくなったらstrong_file送信
if temp_is_back:
ir_cmd(strong_files)

if temp_is_over:
ir_cmd(on_files)
os.rename('off.aircon', 'on.aircon')

if temp_is_under:
ir_cmd(off_files)
os.rename('on.aircon', 'off.aircon')

now = datetime.datetime.fromtimestamp(time.time())

log = now.strftime("%H:%M") + ": Temp: " + str(round(temp, 2)) + "C Humi: " + str(round(humi, 2)) + "% Press: " + str(round(press, 2)) + "hPa: "
print(log)
before_temp = temp
time.sleep(60)


テスト起動

全てのファイルが作業フォルダ上にあることを確認して下さい。

auto_pirot.py

off.aircon

aircon_22.txt

aircon_25.txt

aircon_off.txt

bme280_sensor.py

python auto_pirot.py

1分おきに気温・湿度・気圧が表示されauto_pirot.pyの設定温度になるとリモコン信号が照射されます。

ctrl-cで中断できます。

リモコン設定温度等、色々調整してみて下さい。

湿度によっても微調整するようにしています。


自動起動

aircon_auto_pirot.sh を作成して作業フォルダに保存します。

vi aircon_auto_pirot.sh

#!/bin/sh

cd /home/pi/aircon/
python auto_pirot.py

rc.configを編集。

sudo vi /etc/rc.config

・・・

sh /home/pi/aircon/aircon_auto_pirot.sh
exit 0

これで再起動すると自動起動でエアコン操作が始まります。

プロセスが動いているかは下記コマンドで確認できます。

pgrep -l python 


ケースに入れてみました

センサーが外でブラブラしてるのはラズパイの温度の影響を受けないためです笑

このぐらいの半透明でもこのリモコンはよく効きますね。

とりあえず2日ほどつけっぱなしでいますが特に不具合もなく動いています。

IMG_0244.jpg