民初思韻網

加入收藏   設為首頁
選擇語言   簡體中文
你好,請 登陸 或 注冊
首頁 人文思韻 傳奇人物 歷史思潮 時代作品 話題討論 國民思韻 民初捐助 賬戶管理
  搜索  
    人文精神 >>> 技術的天空 溫和的思緒
字體    

如何用普通電腦控制電燈泡開關燈
如何用普通電腦控制電燈泡開關燈
網載     阅读简体中文版

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

 

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

歡迎訂閱我們的微信公眾賬號!
春秋茶館訂閱號
微信號 season-tea(春秋茶館)
每天分享一篇科技/遊戲/人文類的資訊,點綴生活,啟迪思想,探討古典韻味。
  清末民初歷史人物  民初人物
教育專家大學思想啟蒙
蔡元培(1868年1月11日-1940年3月5日),字鶴卿,又字仲申、民友、孑民,乳名阿培,並曾化名蔡振、周子餘,浙江紹興山陰縣(今紹興縣)人,革命家、教育家、政治家。中....
散文大家曠達風趣
梁實秋(1903年1月6日-1987年11月3日),號均默,原名梁治華,字實秋,筆名子佳、秋郎,程淑等,中國著名的散文家、學者、文學批評家、翻譯家,華人世界第一個研究莎士....
資助民初精神網
        回頂部     寫評論

 
評論集
暫無評論!
發表評論歡迎你的評論
昵稱:     登陸  註冊
主頁:  
郵箱:  (僅管理員可見)

驗證:   验证码(不區分大小寫)  
© 2011   民初思韻網-清末民初傳奇時代的發現與復興   版權所有   加入收藏    設為首頁    聯繫我們    1616導航