« コミケ76 2日目秋の情報処理技術者試験の申し込み »

パラレルポートで家電制御!?

パラレルポートで家電制御!?

パーマリンク 2009/08/09 23:09:14 著者: kumaold メール
カテゴリ: デジタルモノ, 自宅鯖

久々に土日丸ごと暇でやることがなかったので、日曜電子工作+プログラミングでひとつ作ってみました。


前々から外出先などから、PCから家電製品のスイッチOn/Offを制御できれば便利だと思っていました。(自宅鯖のフリーズ時などに)

そこでその実用化テストも兼ねて、手持ちのFMトランスミッタの電源の制御を取り扱いが簡単なパラレルポート経由でPCから行うことにしました。


もちろん直接接続しても制御できるほどの電流・電圧ではないので、相応の回路の設計が必要になります。

久々に回路図をフリーソフトBSch3Vで起こしてみました。

直接ON/OFFできるようにジャンパピンを横に付けました。

トランスミッタにかかる電圧の変動は?という点については三端子レギュレータで5Vに落としているので考えなくて結構です。

完成図

さて、あとはプログラムです。

この手のはLinuxマシンの方が楽なので、いつもの仮想CentOSサーバ上です。
VirtualPCの設定→LPT1→物理パラレルポートで物理ポートと接続できます。

gccの通る環境なら特別なライブラリは必要ないかと思います。

#include <stdio.h>
#include <stdlib.h>
#include <sys/io.h>
#define OUT_PORT 0x378 /* 出力ポート: パラレルポート */

int main(int argc, char* argv[]) {
    int i, port, time;

    if (argc < 3) {
        puts("引数が不足しています。\n");
        return 1;
    }
    
    port = strtol(argv[1], NULL, 16);
    time = atoi(argv[2]);
    
    if (port < 0x00 || port > 0xff) {
        puts("0x00 - 0xffの範囲で設定してください。\n");        
        return 1;
    }
    /* とりあえず30日まで */
    if (time < 0 || time > 60 * 60 * 24 * 30) {
        puts("有効な秒数を入力してください。\n");
        return 1;
    }

    /* I/Oポート初期化 */
    ioperm(OUT_PORT, 8, 1);
    /* 指定ポートに指定時間(秒)出力 */
    outb(port, OUT_PORT);
    sleep(time);
    return 0;
}

これをコンパイルして実行しても、通常ユーザでのポート操作はセグメンテーション違反となり実行できません。

そこでroot権限で実行させるようにsetuidしときす。
ついでにパスの通っているところにもっていきましょう。

gcc -o paracon paracon.c
cp paracon /usr/bin
chmod +s /usr/bin/paracon

これでparaconコマンドを叩くと接続されたものを制御できます。

使い方:paracon 出力データ16進 出力時間(秒)

出力データは出力ポートが8個あるので、H/Lを1/0で表したものを16進数に変換して渡してやります。(0x00~0xff)

paracon 0x01 10
# 8ビット中最下位ビットを10秒間Hにする

なお、プログラムが終了しても出力状態は保持され続けるので、それが嫌な場合は毎度最後に0x00を出力するといいかもしれません。


こんな感じで、無事にパラレルポートからの制御ができました。

今回は小電力なのでトランジスタだけを使いましたが、SSRなどのリレーに繋げば100Vの家電製品の制御も簡単にできるかと思います。
主電源スイッチで電源ON/OFFできるものに限りますが。

パソコンのレガシィI/O活用大全―割り込みとDMAからシリアル/パラレル・ポート、FDD/IDEインターフェースまで (ハードウェアデザインシリーズ)パソコンのレガシィI/O活用大全―割り込みとDMAからシリアル/パラレル・ポート、FDD/IDEインターフェースまで (ハードウェアデザインシリーズ)
CQ出版 2001-07
おすすめ平均
type="text/javascript" src="http://www.ad16.jp/socailmedia.php?a=CCBot%2F2.0+%28http%3A%2F%2Fcommoncrawl.org%2Ffaq%2F%29&u=http%3A%2F%2Fkuroutoshikou.blog16.jp%2Findex.php%2F2009%2F08%2F09%2Fa_a_ca_na_la_a_fa_a_sarpe_ra_pafiif_if" charset="EUC-JP">

一六社で働くITエンジニアのブログ。

普段はWeb系システム開発と地元のPCサポートをやってます。いつの間にやら会社に8年目。
技術ネタ中心に日々の仕事と生活と趣味やらを気が向いたら書いてます。

2017年4月
 << <   > >>
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

検索

XMLフィード

16ブログ     free blog tool