MENU
IoT・電子工作

PythonとAIで作るスマートホーム入門【センサーデータ収集から自動化まで徹底解説】

「スマートホームって、なんか専用のデバイスを買わないといけないんじゃないの?」

そんなふうに思っている方、多いんじゃないでしょうか。実は、PythonとAI、そして安価なセンサーを組み合わせるだけで、自分だけのスマートホームシステムを作れちゃうんです 🏠✨

今回は、センサーからのデータ収集・AI判断・自動化まで、ざっくりとした流れがつかめるように解説していきます。「むずかしそう」を「できそう」に変える記事を目指しました!

📋 この記事でわかること・対象読者

smart home IoT
smart home IoT / Photo by Jakub Zerdzicki via Pexels
  • ✅ Pythonの基本構文がわかる初〜中級者の方
  • ✅ IoTやスマートホームに興味があるけど何から始めればいいかわからない方
  • ✅ センサーデータをAIで解析して「自動化」まで持っていきたい方

難易度の目安は ⭐⭐⭐(中級) です。Pythonが少し書けるなら十分チャレンジできます!

🏗️ スマートホームの全体像をざっくり理解しよう

まず「スマートホームって何をするシステムなの?」というイメージを固めましょう。

イメージとしてはこんな感じです:

  1. センサーがデータを取得する(温度・湿度・人感など)
  2. Pythonがそのデータを収集・整理する
  3. AIが「今どんな状況か」を判断する
  4. 判断結果に応じてデバイスを自動制御する(エアコンON、照明調整など)

この4ステップが、スマートホームの骨格です。難しそうに見えますが、一つひとつは意外とシンプルなんですよね。

🔧 必要なものを確認しておきましょう

ハード面とソフト面、両方確認しておきましょう。

ハードウェア

  • Raspberry Pi(ラズパイ)または Arduino
  • 温湿度センサー(例:DHT22)
  • 人感センサー(PIRセンサー)
  • リレーモジュール(家電のON/OFFに使う)

ソフトウェア・ライブラリ

# 必要なライブラリをインストール
pip install RPi.GPIO  # Raspberry Pi GPIO制御
pip install Adafruit-DHT  # 温湿度センサー用
pip install scikit-learn  # AI(機械学習)用
pip install pandas        # データ整理用
pip install requests      # 通知送信用

ポイントをまとめるとこんな感じです。

  • scikit-learn:学習済みモデルの作成・推論に使います
  • pandas:センサーデータをCSVに保存・読み込みする際に便利
  • requests:LINEやSlackへの通知送信に使います

📡 STEP1:センサーデータをPythonで収集する

まずは温湿度センサー(DHT22)からデータを取得してみましょう。ここが「スマートホームの耳と鼻」になる部分です 👃

import Adafruit_DHT
import time
import csv
from datetime import datetime

# センサーの種類とGPIOピン番号を設定
SENSOR = Adafruit_DHT.DHT22
PIN = 4  # Raspberry PiのGPIOピン番号

def collect_sensor_data(interval_sec=60, save_file="sensor_log.csv"):
    """センサーデータを定期的に収集してCSVに保存する関数"""
    print("📡 センサーデータの収集を開始します...")

    with open(save_file, mode="a", newline="") as f:
        writer = csv.writer(f)
        # ヘッダー行(初回のみ書き込む想定)
        writer.writerow(["timestamp", "temperature", "humidity"])

        while True:
            # センサーから温度・湿度を取得
            humidity, temperature = Adafruit_DHT.read_retry(SENSOR, PIN)

            if humidity is not None and temperature is not None:
                now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                writer.writerow([now, round(temperature, 1), round(humidity, 1)])
                print(f"✅ [{now}] 温度: {temperature:.1f}℃ / 湿度: {humidity:.1f}%")
            else:
                print("⚠️ センサーの読み取りに失敗しました")

            time.sleep(interval_sec)  # 指定した間隔で繰り返す

collect_sensor_data()

ここが重要です。

  • Adafruit_DHT.read_retry()は読み取り失敗時に自動でリトライしてくれます
  • データはCSVに追記していくので、ログとして蓄積されていきます
  • この蓄積データが後のAI学習に使われます 🤖

🤖 STEP2:AIで「快適かどうか」を判断させる


次はAI(機械学習)の出番です。収集したデータをもとに、「今の室内環境が快適かどうか」を自動判断させます。

つまり、「温度28℃・湿度75%」というデータを入れたら、「暑くて不快 → エアコンをONにすべき」という判断をAIにさせるイメージです。

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import pickle

def train_comfort_model(csv_file="sensor_log_labeled.csv"):
    """
    ラベル付きデータでAIモデルを学習する。
    CSVには temperature, humidity, label(0=快適, 1=不快)の列が必要。
    """
    df = pd.read_csv(csv_file)

    # 特徴量とラベルを分離
    X = df[["temperature", "humidity"]]
    y = df["label"]  # 0=快適, 1=不快

    # 学習データとテストデータに分割(8:2の割合)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

    # ランダムフォレストで学習
    model = RandomForestClassifier(n_estimators=100, random_state=42)
    model.fit(X_train, y_train)

    accuracy = model.score(X_test, y_test)
    print(f"🎯 モデルの精度: {accuracy * 100:.1f}%")

    # 学習済みモデルを保存しておく
    with open("comfort_model.pkl", "wb") as f:
        pickle.dump(model, f)
    print("💾 モデルを保存しました: comfort_model.pkl")

    return model

def predict_comfort(temperature, humidity):
    """保存済みモデルを使って快適度を予測する"""
    with open("comfort_model.pkl", "rb") as f:
        model = pickle.load(f)

    result = model.predict([[temperature, humidity]])[0]
    label = "快適 😊" if result == 0 else "不快 😓 → 自動制御を実行します"
    print(f"🌡️ 温度:{temperature}℃ / 湿度:{humidity}% → {label}")
    return result

# 使用例
train_comfort_model()
predict_comfort(28.5, 75.0)

ポイントをまとめるとこんな感じです。

  • ランダムフォレスト(RandomForest):複数の決定木を組み合わせた手法。少ないデータでも比較的精度が出やすいです
  • 学習済みモデルは pickle で保存しておけば、次回起動時に読み込むだけでOK
  • ラベルは最初のうちは自分で「これは不快だった」と手動入力して学習データを作ります

⚡ STEP3:AIの判断に応じてデバイスを自動制御する

AI判断と自動制御を組み合わせます。「不快と判断されたらリレーをONにしてエアコンを動かす」流れを作りましょう。

import RPi.GPIO as GPIO
import requests

# リレーモジュールが接続されているGPIOピン
RELAY_PIN = 17

GPIO.setmode(GPIO.BCM)
GPIO.setup(RELAY_PIN, GPIO.OUT)

LINE_TOKEN = "あなたのLINE Notifyトークン"  # LINE Notifyで取得

def send_line_notification(message):
    """LINEに通知を送る"""
    headers = {"Authorization": f"Bearer {LINE_TOKEN}"}
    payload = {"message": message}
    requests.post("https://notify-api.line.me/api/notify", headers=headers, data=payload)

def control_device(is_uncomfortable: bool):
    """不快と判断された場合にエアコン(リレー)をONにする"""
    if is_uncomfortable:
        GPIO.output(RELAY_PIN, GPIO.HIGH)  # リレーON → エアコン起動
        print("🔌 エアコンをONにしました")
        send_line_notification("🏠 室温が上昇しました。エアコンを自動でONにしました!")
    else:
        GPIO.output(RELAY_PIN, GPIO.LOW)   # リレーOFF
        print("✅ 環境は快適です。エアコンOFF")

# 実際の制御フロー
result = predict_comfort(28.5, 75.0)  # AIで判断
control_device(result == 1)           # 結果に応じてデバイス制御

# 終了時はGPIOをリセット
GPIO.cleanup()

ここが重要です。

  • リレーモジュール:小さな電気信号で大きな電力を制御できるパーツ。家電の電源ラインに挟み込む形で使います
  • LINE Notify:無料で使えるLINE通知API。自動制御のたびにスマホに通知が来るようにすると安心です 📱
  • GPIO.cleanup()は忘れずに。GPIOを初期化しないとピンが壊れる原因になります

🔄 全体をつなげてループさせる


3つのステップをまとめて、定期的に動き続けるシステムにするにはこんな流れになります。

  1. センサーデータを取得(STEP1)
  2. AIで快適度を判断(STEP2)
  3. 判断に応じてデバイスを制御・通知(STEP3)
  4. 一定時間待って①に戻る

あとは Raspberry Pi を常時起動にしておくだけで、完全自動のスマートホームシステムの完成です 🎉

📝 まとめ

今回は、PythonとAIを使ったスマートホームの作り方を、センサーデータ収集・AI判断・デバイス自動制御の3ステップで解説しました。

  • 📡 センサーデータをCSVに蓄積する
  • 🤖 scikit-learnでAIモデルを作り、快適度を判断させる
  • ⚡ 判断結果でリレーを制御し、LINEに通知する

「スマートホームって高価なデバイスが必要」という思い込み、少し薄れてきましたか? Pythonがあれば、ここまでできちゃうんですよね 😊

まずはセンサーデータの収集だけでも試してみてください。データが貯まってくると、「次はこれを自動化したい!」というアイデアがどんどん湧いてきますよ。ぜひ一緒に作っていきましょう!

📡 Arduinoをもっと深く学ぼう!

Arduino・ラズパイ・ロボットプログラミングを体系的に学びたい方へ。おすすめのUdemyコースや電子部品もまとめています。

Arduinoロボット入門のおすすめコース・部品を見る →

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

Arduinoをはじめよう 第4版 (Make: PROJECTS)

もしも

Arduinoをはじめよう 第4版 (Make: PROJECTS)

Arduino公式推薦の定番入門書

Amazonで見る

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です