【自作】光目覚まし時計を作ってみた【Raspberry Pi】

こんにちは! けい【Twitter】です.

前回の記事では,Raspberry Piで赤外線リモコンを作りました.

今回はその続きとなりますので,ぜひご覧になってください。

コンセプト

動機

最近寝起きが悪くて,「寝起きが良くなりたいなぁ」とネットサーフィンしていたら,光目覚まし時計という商品があることを知りました.

そこで,アマゾンでポチろうとしていたら,置く場所がなく,諦めていました.

なぜなら私のベッドは高床式で,サイドテーブル的な物は高さ的に置けないし,置くなら枕元になるので,それでは意味がないという結論に至りました.

我が家のベッド

我が家のライト

私の家のライトはシーリングライトで,リモコンで操作はできるんですが,目覚まし機能がついてないんですよね.

シーリングライトの中には,目覚まし機能が元々ついているやつがあって羨ましいですが,目覚まし機能のためだけにライトを新しくするのは馬鹿馬鹿しいので,それなら自作しようという結論に.

機能

・自動で毎日動いてくれる.

・曜日ごとに,時間を設定できる.

・リモートでpcから設定できる.

必要なもの

Raspberrypiに加え,赤外線を受信する回路,赤外線を送信する回路を組む必要があります.

Raspberrypi本体

私は「Raspberry Pi3B+」のモデルで作成しましたが,これから購入を検討する方は4を買うことをお勧めします.もちろん「Raspberry Pi zero」で作っても問題ありません.

赤外線受信・送信回路に必要なもの

赤外線LED・赤外線受光モジュール

赤外線を受信するために,受光モジュールが必要です.
また,送信するために赤外線LEDが必要です.

下のセットがAmazonではお得なので,私はこのセットを購入しました.

抵抗・ジャンパワイヤー

これらが一つあれば便利です.

作り方

回路構成や,必要なパッケージのダウンロードは前回の記事でまとめたので,そちらをご覧ください.

GPIOの初期化

ターミナルを開いて,次のコマンドを入力します.

$ sudo pigpiod

このコマンドはpigpioを使うためにpigpiodデーモンを起動させるコマンドです.pigpiodを起動時に自動的に立ち上げている方は無視して構いません.

そして,GPIOに機能を割り当てます.
コマンド上でgpioを設定することができます.

$ echo 'm 17 w   w 17 0   m 18 r   pud 18 u' > /dev/pigpio
  1. ‘m 17 w’  gpio17を出力として設定
  2. ‘w 17 0’ gpio17に0(LOW)を出力
  3. ‘w 18 r’ gpio18を入力として設定
  4. ‘pud 18 u’ gpio18をプルアップする

このコマンドの意味はpigpioの公式サイトから詳しく見ることができます.

赤外線通信を学習

前回インストールした「irrp.py」を用いて,赤外線通信を学習します.

次のコマンドで,pythonプログラムを実行します.
実行後,リモコンで学習させたいボタンをレシーバに向かって押します.

$ python3 irrp.py -r -g18 -f codes light_on

irrp.py以降の命令は,このプログラムをコマンド上で完結できるように指定されたオプションです.

  1. ‘-r’ レコード用として設定
  2. ‘-g18’ IRレシーバに繋ぐgpioを指定
  3. ‘-f codes’ 赤外線のコードを記録しておくファイル指定(codesというファイルに保存される)
  4. ‘light_on’ light_onという名前で信号を保存

次に,codesというテキストファイルに信号が保存されていることを確認してください.

今回はライトを付ける信号だけを学習しましたが,色々な信号を学習することもできます.

赤外線信号が送信できるか確認

送信の自動化をする前に,先ほど保存した赤外線信号でライトが付くかを確認します.

$ python3 irrp.py -p -g17 -f codes light_on

先ほど同様,オプションで指定します.

  1. ‘-p’ プレイバックを指定.ここのオプションは’-r’か’-p’
  2. ‘-g17’ gpio17をIR送信機に接続
  3. ‘-f codes’ 送信するコードを格納するファイル
  4. ‘light_on’ 先ほど記録した信号の名前を渡す

受信させたい家電のセンサーにLEDを向けてコマンドを実行してみて下さい.
これでライトが付けば学習と送信ができているので,次のステップに進みましょう.

赤外線信号の送信を自動化

ある決まった時間に信号を送るには,送信コマンドを自動化させる必要があります.

そこで,linuxにはプロセスを自動化させるコマンドcronがあるので,そちらを設定します.

cronを使う

次のコマンドを実行することで,crontabを編集することができます.

$ crontab -e

実行すると,下の画像のように,エディタを選択する画面が出てくるので,番号を選んでEnterを押します.
私はvimで編集したかったので2を選択しました.

編集画面が開いたらお好みで下の文を追加することで,何時何分に何のコマンドを実行するかを設定できます.

#分 時 日 月 曜日 コマンド
 *  *  *  *  *  コマンド

*の部分を下の表に沿って変更することで時刻や曜日を設定できます.

指定対象指定範囲
0〜59
0〜23
1〜31
1〜12 または jan〜dec
曜日0〜7 または sun〜sat

私は,「毎日8時にライトを付ける」という設定で行いました.

40 7 * * * python3 ~/irrp.py -p -g17 -f codes light_on

これで自動化の設定は完了です.

一応次のコマンドで,先ほど編集したファイルの中身を見ることができます.

$ crontab -l

まとめ

今回は,Raspberry piで家のライトを目覚まし時計にしてみました.

しかし起きれるようにはなりませんでした.悲しい..
結局,スマホの目覚まし時計に頼っています.

ちょっぴり目覚めが良くなったかも??

cronコマンドを使えば,様々なことが自動化できます.シェルスクリプトを作れば一連の複雑な処理も自動化できるので,機会があればやってみたいです.

ではまた!