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
apache2 は 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.conf (以下は 2024 年現在不要。2016 の時点では必要だったようだ) <Directory /home/pi/public_html/> Options Indexes FollowSymLinks AllowOverride None Require all granted SetEnv PYTHONIOENCODING utf-8 SetEnv LC_ALL en_US.UTF-8 </Directory> (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で電子工作− 小池星多』 から教えてもらいました。
私が最初に作ったものは、以下のような回路でした。
ラズパイでシリアル通信をするときは、シリアルポート が使えるように設定して下さい。ターミナルで
$ sudo -s
# raspi-config
で設定して下さい。メニューの移動は tab キーです (このインターフェースを知らないと操作できません)。
Interface options --- serial port
の項目で
would you like a login shell to be accessible over serial: no
would you like the serial port hardware to be enabled: yes
と設定して下さい。 設定後リブートする 必要があるかも知れません。
ラズパイの 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 を以下のように変更して下さい。
ラズパイ 2 まで: /dev/ttyAMA0
ラズパイ 3 以降: /dev/serial0
温度を測定する必要がない場合は、 「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,30 分に /home/pi/public_html/cgi-bin/ondo/log_temp_light.py を 実行したいとき、以下のように書きます。*/30 は 30 分おきを意味します。
0,30 * * * * /home/pi/public_html/cgi-bin/ondo/log_temp_light.py あるいは */30 * * * * /home/pi/public_html/cgi-bin/ondo/log_temp_light.py
ユーザー pi の権限で実行されるので、pi がパスワード無しで sudo できるようにします(デフォルトでそうなっています)。
$ sudo visudo ファイルの末尾に以下の 1 行を追加 pi ALL=(ALL) NOPASSWD: ALL
ここでは、定期的に温度と照度を測定する例を示しましたが、 「定期的に温度を測定し、基準温度を下回ったら 暖房を on にする」という使い方も可能です。
「基準照度を下回ったら照明を on にする」 という使い方もありますが、 エアコンに比べると、照明器具を赤外線で操作するには、 非常に強い赤外線の放射が必要なようです(照明器具のカバーを 透過する必要があるからだと思われます)。 今回の回路は赤外線LEDに流す電流が 100 mA になるよう設計しています。 これを増やすには 1kΩ, 33Ω の抵抗を、より抵抗値が小さいものに 交換し、赤外線 LED は大電流に耐える型番のものに交換する 必要があります。
「cgi-bin/timer というフォルダの中に timer.set というファイルを 作り、その内容が 1 だったらタイマーに従って操作する」という 使い方ができます。timer.set というファイルに書き込む index.html の例が これ です。 Web サーバが apache2 の場合は www-data という ID で書き込みを するので、cgi-bin/timer のディレクトリの mode は 777 に しておいてください。
timer.set の内容を読み取って、タイマー動作させるプログラムは これ です。
以下のように使います。timer.set の内容が 1 なら、22:00 に header_1 のリモコン信号を送信し、0:00 に header_2 のリモコン 信号を送信し、9:00 に header_3 のリモコン信号を送信します。 きめ細かな運転が可能です。
0 22 * * * /home/pi/public_html/cgi-bin/timer/timer.py timer.set header_1 0 0 * * * /home/pi/public_html/cgi-bin/timer/timer.py timer.set header_2 0 9 * * * /home/pi/public_html/cgi-bin/timer/timer.py timer.set header_3次のページヘ