大人の冬休み宿題工作 マイ警告灯を作ろう 後編

大人の冬休み宿題工作 マイ警告灯を作ろう 前編の続きです。

警告灯動作テスト 1

USBリレーモジュールをPCに接続すると、最近のLinuxでは自動的にUSBシリアルポートとして認識されます。通常は /dev/ttyUSB0 や /dev/ttyUSB1 といったデバイスファイルになります。
ただし、一般ユーザーではアクセス権限が制限されているため、そのままでは操作できません。

$ ls -l /dev | grep ttyUSB
crw-rw----  1 root dialout 188,   0 12月 18 20:11 ttyUSB0
$ sudo chgrp root /dev/ttyUSB0  もしくは
$ sudo chmod 777 /dev/ttyUSB0

chgrp でグループを変更した場合は、以後のコマンドも sudo を付けて実行する必要があります。これでLinux上からUSBリレーモジュールと通信できるようになります。

このモジュール(ICSE012)を調べると、初期化のために特定のコマンドを送信する必要があるようです。具体的には0x50を送信すると0xABが返ってきて、次に0x51を送信すると制御可能になるという情報があります。

$ echo '50' | xxd -r -p >> /dev/ttyUSB0
$ echo '51' | xxd -r -p >> /dev/ttyUSB0
$ echo '0f' | xxd -r -p >> /dev/ttyUSB0

50と51だけを送っただけではすぐに制御できない場合があります。何度か試すと動くようになりますが、より確実な方法として以下のようにまとめて送信する方法もあります。

$ echo '50 51 0f' | xxd -r -p >> /dev/ttyUSB0

他にも、xxdを使わずにechoだけで送信する方法があります。

$ echo -e -m '\x01' > /dev/ttyUSB0

後半の動画ではこの方法を使用しています。

このモジュールは4chリレーなので、00から0Fまでの4ビット(16通り)の値を送信して制御します。注意点として、このUSBリレーモジュールでは「ビットを1に立てるとOFF」になるため、通常のオン/オフの感覚と逆になります。

以下の表は、1=OFF、0=ONとしてまとめています。
リレースイッチ1 = 赤ランプ
リレースイッチ2 = 黄ランプ
リレースイッチ3 = 緑ランプ
リレースイッチ4 = ブザー(鳴/静)

     赤 黄 緑 鳴
00   0  0  0  0  赤+黄+緑+鳴
01   1  0  0  0  黄+緑+鳴
02   0  1  0  0  赤+緑+鳴
03   1  1  0  0  緑+鳴
04   0  0  1  0  赤+黄+鳴
05   1  0  1  0  黄+鳴
06   0  1  1  0  赤+鳴
07   1  1  1  0  鳴
08   0  0  0  1  赤+黄+緑+静
09   1  0  0  1  黄+緑+静
0a   0  1  0  1  赤+緑+静  何故か鳴る
0b   1  1  0  1  緑+静
0c   0  0  1  1  赤+黄+静
0d   1  0  1  1  黄+静
0e   0  1  1  1  赤+静
0f   1  1  1  1  静

この内、0aを送信したときはランプの点灯パターンは想定通りですが、なぜかブザーが鳴ってしまいます。これはモジュールの仕様(またはバグ)と思われます。
各リレーの現在の状態を取得する方法は存在しないようです。初期化時に0xABが返ってくる以外は応答がないため、コマンドを送りっぱなしで制御することになります。状態を把握したい場合は、別途プログラム側で管理する必要があります。

警告灯動作テスト 2
赤点灯

警告灯動作テスト 3
黄点灯

警告灯動作テスト 4
写真ではほぼ白色に見えますが、実際には緑色です。

赤・黄・緑から複数色を同時に点灯させると中間色(オレンジなど)になりますが、遠くから一目で色を識別しにくいため、基本は単色(赤・黄・緑)のみを使うのがおすすめです。ブザーについては、静かな部屋では音が大きすぎ、サーバールームのような騒音環境では逆に音量不足で、中途半端に感じます。今回は使用しない方向で考えています。後日、この警告灯をシステム監視用途で活用する予定です。

後日、この警告灯をシステム監視用途で活用する予定です。

関連記事: