如何用普通電腦控制電燈泡開關燈

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

有很多情況下我們會用到電腦控制照明的開關,比如:智能家居,如果屋里沒人,那么控制系統自動關燈以達到省電的目的;比如有很多場合,當會員刷卡后,系統才給照明,或系統才會啟動某個設備等等。

 

傳統的實現辦法要使用單片機開發接口板,電腦的軟件使用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

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

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


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表