おまけ

AC 100V を on/off する

AC 100 V で動作する普通の電気器具を on/off する機能を 付けることができます。

ただし、AC 100 V は危険です。 感電すると最悪、死ぬ可能性があります。 ショートすると発火の可能性があります。 製作と使用は自己責任でお願いします。

回路図は以下の通りです。


(クリックすると PDF が開きます)

端子 a-b の間に 100V を on/off するリレーと インジケーター用の赤色 LED を接続します。


(クリックすると PDF が開きます)

機械式リレーを使うときは、回路図のように還流ダイオードが 必要ですが、ソリッドステートリレーを使う場合は、還流ダイオードは 不要です。

ソリッドステートリレーは還流ダイオードが不要というメリットは ありますが、デメリットの方が多いです。 発熱するので、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 を使う

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

以下にあります。

USB ケーブルを使わずにシリアル通信する

私は当初(2015.12)、 USB ケーブルでシリアル通信ができることに気づいていませんでした。 USB ケーブルでシリアル通信ができることは、 書籍『おしゃべりロボット「マグボット」 −ラズパイとArduinoで電子工作−  小池星多』 から教えてもらいました。

私が最初に作ったものは、以下のような回路でした。


(クリックすると PDF が開きます)

ラズパイでシリアル通信をするときは、シリアルポート が使えるように設定して下さい。ターミナルで

$ 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 ケーブルを使わずに シリアル通信を行う場合の回路図です)。


(クリックすると PDF が開きます)

これまでに提示した 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
次のページヘ