1. ホーム
  2. /
  3. [Raspberry Pi]
  4. /
  5. Raspberry Piで植物育成LEDライトを自動制御!日没・日の出時刻に合わせてON/OFFする方法

Raspberry Piで植物育成LEDライトを自動制御!日没・日の出時刻に合わせてON/OFFする方法

Raspberry Piで植物育成LEDライトを自動制御!日没・日の出時刻に合わせてON/OFFする方法

自宅で水耕栽培の効率をさらに高めるため、Raspberry Piを使って植物育成LEDライトのON/OFFを自動化するシステムを構築しました。

この記事では、日没と日の出の時刻に合わせてLEDライトを自動で点灯・消灯させる方法を、最新のコードと共に分かりやすく解説します。

実際にライトが自動でON/OFFする様子がこちらです。

LEDライト自動制御の様子

システムの概要

このシステムの仕組みはとてもシンプルです。

  1. Pythonスクリプトの作成: 緯度と経度からその日の日の出・日没時刻を計算するスクリプトを用意します。
  2. シェルスクリプトの作成: LEDライトをON/OFFするための具体的なコマンドを記述したスクリプトを作成します。
  3. cronによる自動実行: cronを使い、毎日決まった時刻にPythonスクリプトを実行し、計算された時刻にシェルスクリプトが動作するようにスケジュールします。

必要なライブラリのインストール

まず、Pythonで天文計算を行うためのライブラリ skyfield をインストールします。

pip install skyfield

また、USBポートの電源を制御するために hub-ctrl が必要です。

# hub-ctrlのインストール例
sudo apt-get install hub-ctrl

自動化のためのコード

以下に、LEDライトを自動制御するためのPythonスクリプトとシェルスクリプトを紹介します。

Pythonスクリプト (schedule_light.py)

このスクリプトは、日の出・日没時刻を計算し、at コマンドで指定した時刻にシェルスクリプトを実行予約します。

from skyfield.api import load, Topos
import datetime
import subprocess
import pytz

# --- 設定項目 ---
# タイムゾーンを指定
TIMEZONE = 'Asia/Tokyo'
# 緯度と経度を指定 (例: 東京)
LATITUDE = '35.6895N'
LONGITUDE = '139.6917E'
# 実行するシェルスクリプトのフルパス
SCRIPT_PATH_ON = '/home/pi/hydroponic_culture_light_on.sh'
SCRIPT_PATH_OFF = '/home/pi/hydroponic_culture_light_off.sh'
# --- 設定ここまで ---

def get_sunrise_sunset():
    """
    指定した地点の次の日の出・日没時刻を取得する
    """
    ts = load.timescale()
    eph = load('de421.bsp')  # 天体暦データ
    observer = Topos(latitude_degrees=float(LATITUDE[:-1]), longitude_degrees=float(LONGITUDE[:-1]))
    
    # JSTタイムゾーンオブジェクト
    jst = pytz.timezone(TIMEZONE)
    now = datetime.datetime.now(jst)

    # 次の日の出・日没時刻を検索
    t0 = ts.from_datetime(now)
    t1 = ts.from_datetime(now + datetime.timedelta(days=1))
    times, events = eph['sun'].find_settings(observer, t0, t1)
    
    sunrise_time = None
    sunset_time = None

    for t, event in zip(times, events):
        if event == 0 and sunrise_time is None: # 0: 日の出
            sunrise_time = t.astimezone(jst)
        elif event == 1 and sunset_time is None: # 1: 日没
            sunset_time = t.astimezone(jst)

    return sunrise_time, sunset_time

def schedule_at_job(exec_time, script_path):
    """
    指定した時刻にatコマンドでジョブをスケジュールする
    """
    if exec_time is None:
        print(f"時刻が取得できなかったため、{script_path} のスケジュールは行いません。")
        return
        
    time_str = exec_time.strftime('%H:%M')
    cmd = f'echo "bash {script_path}" | at {time_str}'
    print(f"コマンドを実行: {cmd}")
    subprocess.run(cmd, shell=True, check=True)
    print(f"{time_str}{script_path} を実行するようにスケジュールしました。")

def main():
    """
    メイン処理
    """
    sunrise, sunset = get_sunrise_sunset()

    if sunrise:
        # 日の出の30分後にライトをOFF
        light_off_time = sunrise + datetime.timedelta(minutes=30)
        schedule_at_job(light_off_time, SCRIPT_PATH_OFF)

    if sunset:
        # 日没の30分前にライトをON
        light_on_time = sunset - datetime.timedelta(minutes=30)
        schedule_at_job(light_on_time, SCRIPT_PATH_ON)

if __name__ == '__main__':
    main()

ON用シェルスクリプト (hydroponic_culture_light_on.sh)

#!/bin/bash
# USBポートの電源をONにする (環境に合わせて数値を変更)
# echo "【sudoのパスワード】" | sudo -S hub-ctrl -h 0 -P 2 -p 1
# パスワードなしでsudoを実行できる場合
sudo hub-ctrl -h 0 -P 2 -p 1

OFF用シェルスクリプト (hydroponic_culture_light_off.sh)

#!/bin/bash
# USBポートの電源をOFFにする (環境に合わせて数値を変更)
# echo "【sudoのパスワード】" | sudo -S hub-ctrl -h 0 -P 2 -p 0
# パスワードなしでsudoを実行できる場合
sudo hub-ctrl -h 0 -P 2 -p 0

cronで実行を自動化する

最後に、作成したPythonスクリプトを毎日決まった時刻(例: 深夜2時)に実行するようにcronに登録します。

crontab -e コマンドで編集画面を開き、以下の行を追加します。

# 毎日 02:00 にPythonスクリプトを実行して、その日のON/OFF時刻をスケジュールする
0 2 * * * /usr/bin/python3 /home/pi/schedule_light.py >> /home/pi/schedule_light.log 2>&1

/usr/bin/python3 やスクリプトのパスはご自身の環境に合わせて変更してください。 ログを出力しておくと、問題が発生したときに原因を調査しやすくなります。

これで、毎日自動で日没・日の出時刻が計算され、適切なタイミングでLEDライトがON/OFFされるようになります。

まとめ

Raspberry PiとPythonを使えば、天体の動きに合わせたスマートな植物育成環境を簡単に構築できます。この記事が、あなたのIoTプロジェクトの参考になれば嬉しいです!

関連記事

【DIY】100均グッズで植物育成LEDライトを自作する方法と効果を解説

【DIY】100均グッズで植物育成LEDライトを自作する方法と効果を解説

はじめに

室内で水耕栽培を行う際、太陽光の代わりとなる「植物育成LEDライト」は欠かせません。しかし、市販品は高価なものが多く、導入をためらう方もいるのではないでしょうか。

そこでこの記事では、100円ショップで手に入る材料だけを使って、安価で高性能な植物育成LEDライトを自作する方法を詳しく解説します。

自作したLEDライトの点灯の様子

さらに、Raspberry Piを活用して日の出・日の入りと連動させる自動制御システムの構築方法や、ランプシェードによる光量アップ効果についても検証しています。

GASとWixを連携してホームページ更新を自動化!スプレッドシートの情報を自動反映する方法

GASとWixを連携してホームページ更新を自動化!スプレッドシートの情報を自動反映する方法

Webサイト、特にイベント情報などを掲載しているホームページの更新作業、手間がかかっていませんか? 本記事では、Google Apps Script (GAS) と Wix を連携させ、スプレッドシートの情報をWixサイトへ自動で反映させる方法を紹介します。

この仕組みを導入することで、面倒な手動更新から解放され、サイトの情報を常に最新の状態に保つことができます。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索

システムの全体像

今回構築するシステムの処理の流れは以下の通りです。