文/王乐刚 每天下班之前,在办公室就能登录到家里的电脑中,向家用电器发出指令,让空调启动,调节好室内温度;让洗衣机开始洗涤衣物,回到家后即可晾晒;电饭锅、微波炉也通上了电,开始烹调菜肴。这一切,不只限于比尔·盖茨的描述中,不需要额外的插卡,仅需极普通的一台电脑,就可实现对家电的控制。
系统的功用
或许很多人都想知道这些是怎样实现的,甚至还表示一些怀疑,我要告诉你的是这很简单,几乎只需要简单的电子制作和简单的程序调试技巧就行。当然,你还可以在本文介绍的基础上做得更程式化和网络化。
我所制作和改进的这个电脑家电控制电路,可以方便地利用电脑程序,设定室内电灯、空调等家用电器,可以在一定的时间上,执行自动开启的简单操作。比如我家的电视和VCD都被我做过修改,所以“播放/停止”、“前进/后退”、频道转换等都可以由电脑控制。总之,只要是涉及电路的开关操作,用这个电路都能有效地控制。
实现这些功能得写个小小的程序,这个简短程序后文将有介绍。在程序方面值得做的改进是写一个CGI脚本,然后再做几个漂亮的网页,把它放到服务器上,这样就可以利用Web来控制家电了。
系统的要求
实践本文中介绍的方法,几乎随便找一台电脑都行,因为它的要求是能运行DOS、并有个正常工作的并行口就可以了。我目前正在用一台486DX/4MB RAM/40MB硬盘的电脑控制我的家电。软件方面,需要自己去调试和编译控制程序,这主要是一个并口控制程序,如果想用telnet控制,那么你还需要telnetd。
电路基本原理
总示意图如图1所示,其实质就是从电脑输出一个控制电压,然后通过继电器或者别的电路来驱动被隔离的电子回路。
 图1总示意图
关于并行口
我们需要用到的只是并口的pin 2到pin 9这八个pin(针脚2~9是数据总线的信号,通过一个OUTB命令发信给并口的门闩线路。可以得到+5v电压)。pin 18到pin 25是联通的,是地线。并行口pin示意图如下:
 图2并口pin的排列
控制电路的基本原理
利用电脑并行口资料线的2到9pin,可以提供0到5伏电压的特性,就能控制一个继电器而达到控制电器的目的。这个电路通过电脑的并行口得到一个+5V电压打开继电器,这样继电器端的家电就被接通了,当并行口的电压变成0的时候,继电器就会跳回关闭状态,家电也就关闭了。需要重点说一下,这里用的是并行口,即接打印机的接口,而不是串行口。
控制电路如图3所示:
 图3控制电路图
并口数据脚——并行口资料线(pin2到pin9都可用,图3所示简单电路只用到了其中一条);
并口地线——并行口18~25pin任意;
Vcc——继电器额定电压,根据继电器类型而定,应同所选继电器型号的电压一致(通常是5V或者是12V),图中选用的是12V的继电器,所以就接了12V的直流电源接口;
接地——12V直流电源接口的地线;
4.7K——4.7K电阻;
NPN——普通NPN三极管即可,图中用的是c2235,也可以用BC547A或者2N222A;
1N4002——1N4002的二极管;
LED——任何发光二极管都可,作为指示灯用,当家电的开关被打开后,此指示灯就会发亮;
继电器——继电器功率根据家用电器的功率而定,最小得用300W,如果接空调之类的,需要3000W才安全。
初学者通常倾向于在三极管之后再放置继电器,然后用发射极(E脚)代替集电极(C脚)来连接继电器,这是一个错误的做法,因为三极管被错误地偏置了。二极管1N4002对保护三极管避免被从继电器流出的电流烧毁很有帮助,如果不用它,三极管很可能会被烧坏。对220V电压的操作应该非常小心,而且还应该用上一根合适的保险丝。
继电器工作原理
一些读者可能对继电器不是很熟悉,这里简单介绍一下。
图4所示是一个4个脚的继电器的内部工作原理。
 图4继电器工作原理
继电器“3~4”端平时是断开的,当“1~2”端之间加上电压以后(此例中为+12V),通过线圈coil,就会把开关switch打开,此时“3~4”就是导通的。因此,“1~2”端所起到的作用,只是一个控制开关而已。继电器本身就是一个开关。
把家电连接到继电器上
只要把家电的电源线与继电器串联起来就可以了,也就是说不用对家电做任何的改变,最多只要改个插座就行。
控制程序示例
此程序用Turbo2.0在DOS下编译成功,是一段用来存取I/O端口的简单的程序示例子,仅供参考。
/
I/O.c:一个用来存取I/O端口的非常简单的例子
这个程序并没有什么用处,它只是做了端口的写入、暂停
以及端口的读出几个动作
/
#include<stdio.h>
#include<unistd.h>
#include<asm/io.h>
#define BASEPORT 0x378 /lp1/
int main()
{
/取得端口位址的存取权限/
if (ioperm(BASEPORT, 3, 1)) {perror("ioperm"); exit(1);}
/设定端口的输出资料信号为零(0)/
outb(0, BASEPORT);
/休息一下(100 ms)/
usleep(100000);
/从状态端口(BASE+1)读出资料并显示结果/
printf("status: %d
", inb(BASEPORT + 1));
/我们不再需要这些端口位址/
if (ioperm(BASEPORT, 3, 0)) {perror("ioperm"); exit(1);}
exit(0);
}
/结束I/O.c/
这个程序只控制了并行口的第二针的电压,如控制其它针脚则需进一步编写其它7个类似的程序,仅需改变BASEPORT(0x378到0x37f)的值即可。也可以使用其它程序语言(如VC、VB),利用类似C语言的ioperm和outb(value,port)函数,来控制并行口,通过value值的改变达到控制多组家电的目的。
扩展使用
此方案完整的电路可以控制八组继电器,也就是说可以控制八组不同的家电。另外还需要一个DB25接头(并行口接头)的接口,这样一条并行口数据线就能简单地把电脑和控制电路连接到一起。
建议做个漂亮的盒子,电路都放在盒子里,盒子的正面是开关、指示灯和DB25的接口。
|