おはようございます!
昨日、ラズパイこと
Raspberry Pi用のリモコン学習回路が
届き、早速電子工作して取り付け
プログラミングして
様々なリモコン信号を
ラズパイから送れるようになりました。
ここで、激ハマりポイントを紹介します。
信号線の長さです。
このリモコン学習回路を
ラズパイから遠いところに設置しようと
信号線を半田でつなげて
5メートルくらいにしました。
そしてラズパイに取り付けると
何と 回路を認識しません!
首を捻りながら 信号線を
13cmぐらいのジャンパー線に変えました。
すると 回路を認識しました。
おそらく線の抵抗値が高すぎて
信号が途中で減衰してしまっているのでしょう。
この回路の使い方ですが
まず 電源、バス線をつないで
回路上のスイッチを
LEARN(学習)にして
1〜10のうちの
バス線をつないだ番号のボタンを押し
回路に向けてリモコンで信号を
発射するとリモコンが学習します。
配線方法はこちらが詳しいです。
次に、先ほどのスイッチを
CONTROL(操作)にして
先ほどのボタンを押すと
リモコン信号が発射され家電が動作します。
ラズパイ側ではまず「I2C」を
有効にしなければなりません。
やり方はここでは割愛します。
こちらが詳しいので、ご参照ください。
Raspberry Pi で I2C を利用するための設定 - Qoosky
次に、Pythonスクリプトをダウンロードしてきます。
こちらからダウンロードできます。
リモコンいじり放題!!ラズパイ専用 学習リモコン基板で使えるソフトウェア3種詰め合わせ公開 | Bit Trade One, LTD
このスクリプトはどこに置いても構いませんが
171行目を、このスクリプトを置いた
ディレクトリに変更してください。
変更前は
dir_name = '/home/pi/I2C0x52-IR/'
になっています。
ホーム(~)に置いた場合は
dir_name = '/home/pi/'
になります。
あと、スクリプト名がやたらと長く
コマンドを打つときに面倒なので
「IR02cmd.py」のように適宜変更してください。
以降、スクリプト名をIR02cmd.pyに変更したとして
説明を続けます。
今、1番のボタンに何かの
リモコン信号を学習した状態だとします。
この状態で、
python3 IR02cmd.py r 0 > a.dat
とコマンドを打つと、リモコン信号のデータが
a.datというファイル名でラズパイに保存できます。
rのあとの0は1番ボタンということで
2番ボタンなら1、3番ボタンなら2、と
ボタン番号から1減らしたものを指定します。
次に、
python3 IR02cmd.py t `cat a.dat`
とコマンドを打つと、 先ほど保存した
リモコン信号を回路から発射します。
回路には10個のボタンがあり
信号も10種類しか覚えられませんが
学習してはファイル名を変えて
ラズパイに取り込むを繰り返すことにより
リモコン信号をいくつも記憶できます。
そうして、ラズパイに先に取り付けた
温度センサーを組み合わせて
室温を30度前後に保つ仕組みを完成させました。
こちらがそのコードです。
#!/bin/bash
if [ ! -e mode.dat ]; then
echo "Couldn't find \"mode.dat\""
exit 1
fi
hi_temp=32
lo_temp=29
on_dat="aircon-on.dat"
off_dat="aircon-off.dat"
while :
do
current_temp=`python ondo.py`
mode=`cat mode.dat`
if [ $mode = "off" ]; then
if [ $current_temp -ge $hi_temp ]; then
echo "on" > mode.dat
python3 IR02cmd.py t `cat $on_dat`
fi
else
if [ $current_temp -le $lo_temp ]; then
echo "off" > mode.dat
python3 IR02cmd.py t `cat $off_dat`
fi
fi
sleep 15
done
ondo.pyは、実行すると現在の室温を
「30」というふうに表示するPythonスクリプトです。
これについては割愛します。
シェルを記述するときは
if文の[の前後のスペース忘れやセミコロンの忘れに
気をつけてください。
また、最初に「off」とだけ書かれた
mode.datというファイルを用意してください。
また、このシェルは無限ループになってますので
実行の際は
./hogehoge.sh &
と、最後に&をつけてください。
終了させる場合は
ps -ef | grep hogehoge
とやってプロセス番号調べてkillするか
ほかのシェルから実行させ$!で
プロセス番号を記憶してkillしてください。