おまけ

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 を使う

自宅外から接続する場合、認証機能を付けた方がよいでしょう。 それには、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


	Options 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

以下にあります。

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

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

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


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

ラズパイでシリアル通信をするときは 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 ケーブルを使わずに シリアル通信を行う場合の回路図です)。


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

これまでに提示した Arduino 用の ir_send4.ico や ラズパイ用の arduino.py は照度測定に対応しています。

ただし、照度測定用 IC と直列接続する抵抗が異なると、 「電圧 → 照度」の変換式が変わります。 本サイトの arduino.py は AMS302T という IC と 1 kΩ の抵抗を直接接続した場合の 式が書き込まれています。 自分用に変更してください。

1 時間おきに温度を計測して、メ−ルする

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」という使い方を しています。


次のページヘ