AC 100 V で動作する普通の電気器具を on/off する機能を 付けることができます。
ただし、AC 100 V は危険です。 感電すると最悪、死ぬ可能性があります。 ショートすると発火の可能性があります。 製作と使用は自己責任でお願いします。
回路図は以下の通りです。
端子 a-b の間に 100V を on/off するリレーと インジケーター用の赤色 LED を接続します。
機械式リレーを使うときは、回路図のように還流ダイオードが 必要ですが、ソリッドステートリレーを使う場合は、還流ダイオードは 不要です。
ソリッドステートリレーは還流ダイオードが不要というメリットは ありますが、デメリットの方が多いです。 発熱するので、5A 以上の電流を流すときは、放熱板を付ける 必要があります。 off のときは漏れ電流があります。 G3NE という型番のソリッドステートリレー場合、 漏れ電流は 2mA なので、抵抗に換算すると 50kΩ 程度になります。 消費電力の小さい負荷(高抵抗の負荷)を接続した場合、 完全な off とは言えません。 リレーは機械式リレーがお薦めです。
実装例を以下に示します。AC 100 V は危険 なので、100 V を扱う部分は、ラズパイや Arduino とは 別の箱に実装しました (繰り返しますが、製作と使用は自己責任でお願いします)。 AC 100V 用のケーブルは、ホームセンターなどで 延長コードを買い、途中で切断するのが良いでしょう (延長コードを利用するという アイデアは書籍「Raspberry Pi 電子工作レシピ 河野悦昌」から 教えてもらいました)。 図中の白と黒のより線の先を端子 a-b に接続します。
AC 100V を on/off する box
自宅外から接続する場合、認証機能を付けた方がよいでしょう。 それには、Web サーバとして apache2 を導入する必要が あります。以下のようにします。
インストール $ sudo -s # apt-get install apache2 これで、ラズパイ起動時に apache2 が自動起動するよう、設定されます。 デフォルトの設定 ルートディレクトリ /var/www/html cgi 用ディレクトリ /usr/lib/cgi-bin/ <---- ? 実行できない は使いにくいので、以下のようにします。 (1) ユーザーディレクトリを可能にする $ sudo -s # a2enmod userdir # service apache2 restart (2) cgi を使えるようにする # cd /etc/apache2/mods-enabled # ln -s ../mods-available/cgi.load . (3) 設定ファイルの編集 /etc/apache2/sites-available/000-default.conf // 以下のコメントを外す Include conf-available/serve-cgi-bin.conf /etc/apache2/mods-available/mime.conf AddHandler cgi-script .cgi .py /etc/apache2/conf-available/serve-cgi-bin.conf ScriptAlias /cgi-bin/ /home/pi/public_html/cgi-bin/ <Directory "/home/pi/public_html/cgi-bin"> /etc/apache2/apache2.confOptions Indexes FollowSymLinks AllowOverride None Require all granted SetEnv PYTHONIOENCODING utf-8 SetEnv LC_ALL en_US.UTF-8 (4) リスタート # /etc/init.d/apache2 restart あるいは # apachectl restart (5) おまけ サーバーの名前でアクセスしたときのために、 /var/www/html/index.html の内容を以下のようにします。/~pi/ のトップディレクトリ へジャンプします。 <html> <head> <meta http-equiv="Refresh" content="0;URL=/~pi/"> <title>top page</title> </head> <body> </body> </html>
CGI は www-data というユーザー名で実行され、実行時の カレントディレクトリはデフォルトでは ~pi/public_html/cgi-bin/ です。
cgi がカレントディレクトリにファイルを作成するときは、 cgi-bin のアクセス権限を 777 に設定する必要があります。
GPIO にアクセスするには root 権限が必要です。 ユーザー www-data が sudo コマンドを実行するときに、 パスワードを必要としないよう、以下のように設定します。
$ sudo visudo ファイルの末尾に以下の 1 行を追加 www-data ALL=(ALL) NOPASSWD: ALL
エラーが出るときはログを見ましょう。ログは
/var/log/apache2
以下にあります。
私は当初(2015.12)、 USB ケーブルでシリアル通信ができることに気づいていませんでした。 USB ケーブルでシリアル通信ができることは、 書籍『おしゃべりロボット「マグボット」 −ラズパイとArduinoで電子工作− 小池星多』 から教えてもらいました。
私が最初に作ったものは、以下のような回路でした。
ラズパイでシリアル通信をするときは GUI で設定するか、CUI で設定するときは
$ sudo -s
# raspi-config
で設定して下さい。メニューの移動は tab キーで します(このインターフェースを知らないと 操作できません)。設定後リブートする 必要があるかも知れません。
ラズパイの Tx 出力(3.3V or 0V)を Arduino の Rx 入力(5V or 0V)に 直接入れても、問題なく信号を伝送できます。
Arduino の Tx 出力(5 V or 0 V)をラズパイの Rx 入力(3.3 V or 0 V)に 直接接続すると、ラズパイが壊れる可能性が高いので、 10k と 20k の抵抗で分圧して、電圧を変換しています。 ラズパイの Rx 入力端子はデフォルトで 50k のプルアップ抵抗が 入っています。ゆえに、分圧用抵抗の値はこれ以上大きくしないで 下さい。例えば、100k と 200k で分圧するとうまくいきません。
USB ケーブルでシリアル接続すると、ラズパイから Arduino に シリアル信号を送るとき、Arduino が起動するのを待つために 3 秒の ディレイが必要です(他の Web サイトでは 2 秒のディレイを入れて いますが、2 秒では失敗する現象に遭遇したため、 私は 3 秒入れています)。Rx Tx 端子を使って通信する 長所と短所は以下の通りです。
長所:ディレイを入れる必要がなくなる。ほぼ瞬時に反応する。
短所:Arduino の電源ケーブルを自作する必要がある。 Arduino と PC を USB 接続するとき、Arduino の 0, 1 番端子に接続した 線を外す必要がある。電子回路のミスにより 通信できないというトラブルが発生しうる。
電源ケーブルを自作したり、分圧回路を作ったり、 手間はかかりますが、3 秒のディレイがなくなるので 反応は瞬時となり、快適です。 この装置は実用的に長く使えるので、USB ケーブルを使わずに 通信するバージョンを作る価値は十分にあると思います。
この回路を使うとき、arduino.py の rc = serial.Serial 付近の コードを変更して下さい。time.sleep(3) をコメントアウトし、 /dev/ttyACM0 を /dev/ttyAMA0 に変更して下さい。
温度を測定する必要がない場合は、 「LM35 とその周辺の配線」「Arduino -----> ラズパイ の信号線」 は不要です。赤字部分は省略できます。
この回路の場合、USB 端子経由で Arduino に 5 V を供給する必要があります。
余っているケーブルがある場合は、 以下のように、USB ケーブルを途中で切断して、 赤と黒の線だけを取り出します。
ブレッドボード用ワイヤーをハンダ付けして 以下のような電源用ケーブルを自作します。
あるいは USB Type-B のオス端子の部品を購入し、 線をハンダ付けします。
照度測定用 IC を Arduino に接続すると、照度を測定することが できます。回路図は以下のようになります(USB ケーブルを使わずに シリアル通信を行う場合の回路図です)。
これまでに提示した Arduino 用の ir_send4.ico や ラズパイ用の arduino.py は照度測定に対応しています。
ただし、照度測定用 IC と直列接続する抵抗が異なると、 「電圧 → 照度」の変換式が変わります。 本サイトの arduino.py は AMS302T という IC と 1 kΩ の抵抗を直接接続した場合の 式が書き込まれています。 自分用に変更してください。
1 時間おきに温度を計測して、ファイルに記録すると 同時に、メ−ルを送信する機能を持たせることができます。 一定時間ごとにコマンドを実行するには、 cron というデーモンを利用します。
$ crontab -e
で設定ファイル(crontab)を記述します。 毎時 0 分に /home/pi/public_html/cgi-bin/ondo/check_temp.py を 実行したいとき、以下のように書きます。
0 * * * * /home/pi/public_html/cgi-bin/ondo/check_temp.py
ユーザー pi の権限で実行されるので、pi がパスワード無しで sudo できるようにします(デフォルトでそうなっています)。
$ sudo visudo ファイルの末尾に以下の 1 行を追加 pi ALL=(ALL) NOPASSWD: ALL
index.html, action3.py, check_temp.py のサンプルを 以下に示します。 温度測定関係のスクリプト (check_temp.py) は ~/public_html/cgi-bin/ondo に置きます。 action3.py は設定ファイル (itumo.set, jyoken.set) を ~/public_html/cgi-bin/ondo に書き込みます。
以下のプログラムは python ver.2 用かつ USB ケーブルを 使わずにシリアル通信をするバージョンです。 プログラムを理解した上で、自分用に改造してお使いください。 action.py の代わりに action3.py を呼び、arduino.py の 代わりに rsinout.py を呼び出します。
index.html(action3.py を呼ぶ)
action3.py(rsinout.py を呼ぶ)
check_temp.py
index.html では 「1 時間ごとにメールを送るか否か」 「温度がある値を超えたときだけメールを送るか否か」を設定します。
設定は、ファイル isumo.set, jyoken.set の中に 0 か 1 を 書き込むことで示します。
check_temp.py は cron から 1 時間ごとに実行します。 ファイルに 1 時間毎に温度を記録すると同時に、 条件が設定されている場合は、メールを送信します。
ここでは、温度測定の例を示しましたが、 前節で述べた照度測定機能を付加した場合、 「定期的に照度を測定し、暗くなってきたら部屋の電灯を自動点灯 する」という使い方も可能です。
ただし、エアコンに比べると、照明器具を赤外線で操作するには、 非常に強い赤外線の放射が必要なようです(照明器具のカバーを 透過する必要があるからだと思われます)。 今回の回路は赤外線LEDに流す電流が 100 mA になるよう設計しています。 これを増やすには 1kΩ, 33Ω の抵抗を、より抵抗値が小さいものに 交換し、赤外線 LED は大電流に耐える型番のものに交換する 必要があります。
(2018.7 追記)
cron を使うと決まった時間にプログラムを実行することができます。 現在は、スマホからタイマーの on/off を操作し、on のときは 「夜 10:00 にエアコンを 26 度で on。夜 12:00 に温度設定を 27.5 度に 変更し、風量は最弱。朝 9:00 にエアコン off」という使い方を しています。