如何用普通电脑控制电灯泡开关灯

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

有很多情况下我们会用到电脑控制照明的开关,比如:智能家居,如果屋里没人,那么控制系统自动关灯以达到省电的目的;比如有很多场合,当会员刷卡后,系统才给照明,或系统才会启动某个设备等等。

 

传统的实现办法要使用单片机开发接口板,电脑的软件使用232/485串口通讯协议来发送指令给接口板。这种办法的缺点是:1.需要软件人员+硬件人员来合作完成,开发周期长;2.串口等复杂参数需要配置,不利于用户方便使用。3.需要外接电源来给单片机供电;

 

我们在这里给大家介绍一种软件人员也能完成的方法:

这种方法的优点是:

1.    只需要进行软件开发;

2.    硬件使用USB线连接电脑USB接口,无需任何其他配置就可以使用;

3.    无需外接电源,直接由USB获取所需电量;

 

要准备的东西如下:

 

所需硬件:

8/8/8 Interface Kit.(接口板)

http://www.dengfengsoft.com/ViewDetails87.aspx

产品编号: 1018

含USB连接线.

1013

Dual Relay Board (双继电器板).

http://www.dengfengsoft.com/ViewDetails204.aspx

产品编号: 3051

3051.jpg

灯泡和灯座

数量: 1

可在五金店买到。

bulb.gif

 

保险丝.

10A 250V

用于保护电路,避免电流过高。(可选)

在各电子城都能找到。

fuse.jpg

电源线

从中间剪断备用

 
  power.JPG

 

 

 

 

 


电线若干

 

所需要的软件:

 

1..Net Framework 3.5 (Windows 7 自带,Windows XP 请下载)

2. Visual Studio 2010 Express (下载)

3. 本文范例源码 (C#


 

 

我们先按以下步骤把所需要的硬件都搭建起来:

系统硬件连接草图

handPaint.JPG

 

1.    首先用一根电线一端连接 1018-PhidgetInterfaceKit 8/8/8 接口板的数据输出口 6 (可以选择其他口,我们这里暂时用6口),另一端连接3051-Dual Relay Board(双继电器板)的开关控制 1 口。

2.    把电源线从中间剪断,把尾部的电线抽出来,与电源的一端先连接10A 保险丝(可选,如果要带的电器比较多,最好加这个保险丝,1个灯泡加不加都行),然后接入3051-Dual Relay Board(双继电器板)的C1口。

3.    找另一根电线,一端连接3051-Dual Relay Board(双继电器板)的NO口,另一端连接电灯泡的正极。

4.    找另一根电线,一端连接电灯泡的负极,另一端连接电源线的地线。

 

硬件连接完毕!


 

 

连接后的实物图如下图所示:

 

Dengfengsoft_FinalLayout.gif

 

好,我们来看软件部分:

首先我们安装Phidgets驱动程序  然后把1018 PhidgetInterfaceKit 8/8/8 接口板的USB线插入电脑的USB口。把电源线插入接线板插座中取电。

 

运行我们提供的范例程序:

software.jpg

上电后电灯泡是不亮的。

点击“开”或“关”就可以打开和关闭电灯泡了!

 

软件关键源码(以C#为例,更多编程语言范例,请参考:http://www.dengfengsoft.com/dengfengsoft_phidgets_programming_resources.html)分析如下:

 

private void iniPhidget()//初始化Phidget

        {

            try

            {

                //初始化InterfaceKit object

                ifKit = new InterfaceKit();

 

                //定义接口板基础事件

                ifKit.Attach += new AttachEventHandler(ifKit_Attach);

                ifKit.Detach += new DetachEventHandler(ifKit_Detach);

                ifKit.Error += new ErrorEventHandler(ifKit_Error);

 

                //定义接口板特殊事件

                //接口板数据接收触发事件

                ifKit.InputChange += new InputChangeEventHandler(ifKit_InputChange);

                //接口板数据输出触发事件

                ifKit.OutputChange += new OutputChangeEventHandler(ifKit_OutputChange);

                //传感器数据变化事件

                ifKit.SensorChange += new SensorChangeEventHandler(ifKit_SensorChange);

 

                //Open打开连接

                ifKit.open();

 

                //等候接口板连接

                ifKit.waitForAttachment();

            }

            catch (PhidgetException pe)

            {

                MessageBox.Show(pe.ToString());

            }

        }

        void ifKit_SensorChange(object sender, SensorChangeEventArgs e)//传感器事件变化事件

        {

            //e.Index 传感器所插的插口编号 0-7

            //e.Value 传感器的值

        }

        void ifKit_OutputChange(object sender, OutputChangeEventArgs e)//接口板输出事件

        {

            //e.Index 输出口编号

            //e.Value 输出的值

 

        }

 

        void ifKit_InputChange(object sender, InputChangeEventArgs e)//接口板输入事件

        {

            //e.Index 输入口编号

            //e.Value 输入的值

        }

 

        void ifKit_Error(object sender, ErrorEventArgs e)

        {

            //e.Description; 错误信息

        }

 

        void ifKit_Detach(object sender, DetachEventArgs e)

        {

             //连接状态提示

            //1018-PhidgetInterfaceKit 8/8/8 接口板 "已和硬件成功断开连接!";       

}


 

 

        void ifKit_Attach(object sender, AttachEventArgs e)

        {

            //连接状态提示

            //1018-PhidgetInterfaceKit 8/8/8 接口板 "已和硬件成功建立连接!";

        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)

        {

            if (this.checkBox1.Checked) //打勾=开

            {

                this.checkBox1.Text = "关?";

                ifKit.outputs[6] = true; //从6信号口输出1信号打开电源(本文仅有的关键代码)

                this.pictureBox1.Image = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + "\\lights_On.png");

            }

            else//=关?

            {

                this.checkBox1.Text = "开a";

                ifKit.outputs[6] = false; //从6信号口输出0信号打开电源(本文仅有的关键代码)

                this.pictureBox1.Image = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + "\\lights_Off.png");

 

            }

        }

 

        private void frmMain_FormClosing(object sender, FormClosingEventArgs e)//窗体退出前注销所有事件

        {

            ifKit.Attach -= new AttachEventHandler(ifKit_Attach);

            ifKit.Detach -= new DetachEventHandler(ifKit_Detach);

            ifKit.InputChange -= new InputChangeEventHandler(ifKit_InputChange);

            ifKit.OutputChange -= new OutputChangeEventHandler(ifKit_OutputChange);

            ifKit.SensorChange -= new SensorChangeEventHandler(ifKit_SensorChange);

            ifKit.Error -= new ErrorEventHandler(ifKit_Error);

 

            //run any events in the message queue - otherwise close will hang if there are any outstanding events

            Application.DoEvents();

 

            ifKit.close();

        }

 

 

 

我们看到,实际起作用的仅仅用了两行代码:

ifKit.outputs[6] = true;//开灯

ifKit.outputs[6] = false;//关灯

 

用这个方法是不是超级无敌简单呢?

http://www.dengfengsoft.com/docs/web/dengfengsoft_phidgets_powercontrol.htm

 

本文视频:

 

 

 

增加红外距离传感器,就可以使用手势控制电灯泡的开关了:


网载 2013-07-12 11:06:05

[新一篇] 伍迷創意隨想集 之 兒童樂學園

[舊一篇] 為什么蘋果官網設計如此吸引人?
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表