相關閱讀 |
>>> 技術話題—商業文明的嶄新時代 >>> | 簡體 傳統 |
有很多情況下我們會用到電腦控制照明的開關,比如:智能家居,如果屋里沒人,那么控制系統自動關燈以達到省電的目的;比如有很多場合,當會員刷卡后,系統才給照明,或系統才會啟動某個設備等等。
傳統的實現辦法要使用單片機開發接口板,電腦的軟件使用232/485串口通訊協議來發送指令給接口板。這種辦法的缺點是:1.需要軟件人員+硬件人員來合作完成,開發周期長;2.串口等復雜參數需要配置,不利于用戶方便使用。3.需要外接電源來給單片機供電;
我們在這里給大家介紹一種軟件人員也能完成的方法:
這種方法的優點是:
1. 只需要進行軟件開發;
2. 硬件使用USB線連接電腦USB接口,無需任何其他配置就可以使用;
3. 無需外接電源,直接由USB獲取所需電量;
要準備的東西如下:
所需硬件:
8/8/8 Interface Kit.(接口板) http://www.dengfengsoft.com/ViewDetails87.aspx 產品編號: 1018 含USB連接線.
|
Dual Relay Board (雙繼電器板). http://www.dengfengsoft.com/ViewDetails204.aspx 產品編號: 3051
|
|||
燈泡和燈座 數量: 1 可在五金店買到。
|
保險絲. 10A 250V 用于保護電路,避免電流過高。(可選) 在各電子城都能找到。
|
|||
電源線 從中間剪斷備用
|
電線若干 |
所需要的軟件:
1..Net Framework 3.5 (Windows 7 自帶,Windows XP 請下載)
2. Visual Studio 2010 Express (下載)
3. 本文范例源碼 (C#)
我們先按以下步驟把所需要的硬件都搭建起來:
系統硬件連接草圖
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. 找另一根電線,一端連接電燈泡的負極,另一端連接電源線的地線。
硬件連接完畢!
連接后的實物圖如下圖所示:
好,我們來看軟件部分:
首先我們安裝Phidgets驅動程序 然后把1018 PhidgetInterfaceKit 8/8/8 接口板的USB線插入電腦的USB口。把電源線插入接線板插座中取電。
運行我們提供的范例程序:
上電后電燈泡是不亮的。
點擊“開”或“關”就可以打開和關閉電燈泡了!
軟件關鍵源碼(以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
稱謂:
内容: