《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 微波|射頻 > 設(shè)計(jì)應(yīng)用 > 利用Web Camera模擬Windows Phone 7的重力加速度傳感器
利用Web Camera模擬Windows Phone 7的重力加速度傳感器
摘要: 加速度傳感器是WindowsPhone7中一個(gè)基本的傳感器,,很多應(yīng)用軟件和游戲軟件都需要用到它,因此,,使用其他手段來(lái)模擬重力加速度傳感器是一個(gè)十分有用的嘗試,。
Abstract:
Key words :

  引言

  目前,,對(duì)于我們國(guó)內(nèi)大多數(shù)的Windows Phone 7開發(fā)者來(lái)說(shuō),模擬器是調(diào)試程序的唯一選擇,。因此,,和硬件相關(guān)的一些功能就沒(méi)有辦法進(jìn)行測(cè)試。加速度傳感器是Windows Phone 7中一個(gè)基本的傳感器,,很多應(yīng)用軟件和游戲軟件都需要用到它,,因此,使用其他手段來(lái)模擬重力加速度傳感器是一個(gè)十分有用的嘗試,。

  線索

  在今年8月,,Windows Phone 7開發(fā)工具還是Beta版本的時(shí)候,山羊胡大叔的Blog《給你的Windows Phone 7模擬器加入GPS和加速度傳感器模擬功能》中,,已經(jīng)給出了一種途徑,,其方法是:使用一臺(tái)真實(shí)的HD2來(lái)獲取加速度傳感器的數(shù)據(jù),然后把這些數(shù)據(jù)再傳回WCF服務(wù),;同時(shí)Windows Phone 7的應(yīng)用程序通過(guò)這個(gè)WCF服務(wù)來(lái)獲取加速度傳感器的值,。由于手頭沒(méi)有HD2設(shè)備,所以就無(wú)法去嘗試和驗(yàn)證這個(gè)方法,。

  兩個(gè)月之后,,距離Windows Phone 7正式版本的開發(fā)工具發(fā)布后不久,Charles Petzold給出了他的電子書《Programming Windows Phone 7》,,提供廣大開發(fā)者們免費(fèi)下載,。他在前言中就提到了如何在Windows Phone 7模擬器中實(shí)現(xiàn)加速度傳感器的方法。本文根據(jù)Charles Petzold給出的提示信息進(jìn)行了驗(yàn)證,,試想一下,,用一個(gè)攝像頭就可以模擬加速度傳感器,真是挺有趣的,。

  準(zhǔn)備工作

  1. 安裝Windows Phone 7的開發(fā)工具,,這個(gè)我就不再啰嗦了,。

  2. 網(wǎng)絡(luò)攝像頭一個(gè),普通的就可以,。

  3. 去Codeplex網(wǎng)站下載開源項(xiàng)目AccelKit,,網(wǎng)址為:http://accelkit.codeplex.com/。

  4. 解壓AccelKit以后,,里面包括EmuClasses,、Executable、src這三個(gè)文件夾和Print_This_Cutout這個(gè)pdf文件,。EmuClasses文件夾中的文件可以引入到我們的應(yīng)用程序中,,實(shí)現(xiàn)加速度傳感器數(shù)值的讀取,;Executable文件夾中的文件用來(lái)運(yùn)行在桌面PC上,,控制攝像頭,并保存數(shù)據(jù),;src中的文件是對(duì)應(yīng)的控制攝像頭程序的源程序,。

  5. 將Print_This_Cutout.pdf文件打印,并用剪刀剪裁其中一個(gè)Windows Phone 7的面板,,將其固定于一塊板子上,。

  開始測(cè)試

  1. 啟動(dòng)Executable文件夾中的accelKit.exe文件,開啟攝像頭,。

  2. 開啟Windows Phone 7模擬器,,運(yùn)行帶有加速度傳感器的應(yīng)用程序。

  3. 在攝像頭前晃動(dòng)帶有Windows Phone 7面板的板子,,檢驗(yàn)效果,。

  1

 

  引言

  目前,對(duì)于我們國(guó)內(nèi)大多數(shù)的Windows Phone 7開發(fā)者來(lái)說(shuō),,模擬器是調(diào)試程序的唯一選擇,。因此,,和硬件相關(guān)的一些功能就沒(méi)有辦法進(jìn)行測(cè)試,。加速度傳感器是Windows Phone 7中一個(gè)基本的傳感器,很多應(yīng)用軟件和游戲軟件都需要用到它,,因此,,使用其他手段來(lái)模擬重力加速度傳感器是一個(gè)十分有用的嘗試。

  線索

  在今年8月,,Windows Phone 7開發(fā)工具還是Beta版本的時(shí)候,,山羊胡大叔的Blog《給你的Windows Phone 7模擬器加入GPS和加速度傳感器模擬功能》中,已經(jīng)給出了一種途徑,,其方法是:使用一臺(tái)真實(shí)的HD2來(lái)獲取加速度傳感器的數(shù)據(jù),,然后把這些數(shù)據(jù)再傳回WCF服務(wù),;同時(shí)Windows Phone 7的應(yīng)用程序通過(guò)這個(gè)WCF服務(wù)來(lái)獲取加速度傳感器的值。由于手頭沒(méi)有HD2設(shè)備,,所以就無(wú)法去嘗試和驗(yàn)證這個(gè)方法,。

  兩個(gè)月之后,距離Windows Phone 7正式版本的開發(fā)工具發(fā)布后不久,,Charles Petzold給出了他的電子書《Programming Windows Phone 7》,,提供廣大開發(fā)者們免費(fèi)下載。他在前言中就提到了如何在Windows Phone 7模擬器中實(shí)現(xiàn)加速度傳感器的方法,。本文根據(jù)Charles Petzold給出的提示信息進(jìn)行了驗(yàn)證,,試想一下,用一個(gè)攝像頭就可以模擬加速度傳感器,,真是挺有趣的,。

  準(zhǔn)備工作

  1. 安裝Windows Phone 7的開發(fā)工具,這個(gè)我就不再啰嗦了,。

  2. 網(wǎng)絡(luò)攝像頭一個(gè),,普通的就可以。

  3. 去Codeplex網(wǎng)站下載開源項(xiàng)目AccelKit,,網(wǎng)址為:http://accelkit.codeplex.com/,。

  4. 解壓AccelKit以后,里面包括EmuClasses,、Executable,、src這三個(gè)文件夾和Print_This_Cutout這個(gè)pdf文件。EmuClasses文件夾中的文件可以引入到我們的應(yīng)用程序中,,實(shí)現(xiàn)加速度傳感器數(shù)值的讀?。籈xecutable文件夾中的文件用來(lái)運(yùn)行在桌面PC上,,控制攝像頭,,并保存數(shù)據(jù);src中的文件是對(duì)應(yīng)的控制攝像頭程序的源程序,。

  5. 將Print_This_Cutout.pdf文件打印,,并用剪刀剪裁其中一個(gè)Windows Phone 7的面板,將其固定于一塊板子上,。

  開始測(cè)試

  1. 啟動(dòng)Executable文件夾中的accelKit.exe文件,,開啟攝像頭。

  2. 開啟Windows Phone 7模擬器,,運(yùn)行帶有加速度傳感器的應(yīng)用程序,。

  3. 在攝像頭前晃動(dòng)帶有Windows Phone 7面板的板子,檢驗(yàn)效果。

  1

 

  實(shí)現(xiàn)原理

  攝像頭對(duì)捕捉到的圖像進(jìn)行分析,,識(shí)別Windows Phone 7面板的移動(dòng)加速度,,按照一定的時(shí)間間隔發(fā)送給本地的端口:http://127.0.0.1:88/。

  我們?cè)趯慦indows Phone 7的應(yīng)用程序時(shí),,利用WebClient來(lái)獲取88端口的數(shù)據(jù):

  ,。.

  WebClient wc;

  wc = new WebClient();

  wc.AllowReadStreamBuffering = false;

  wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);

  wc.DownloadStringAsync(new Uri(http://127.0.0.1:88/));

  。.

  void wc_DownloadStringCompleted(object sender,, DownloadStringCompletedEventArgs e)

  {

  if (e.Error ,!= null) { timer.Begin(); return; }

  if (e.Result == null) { timer.Begin(); return; }

  string[] vc = e.Result.Split(new Char[] {‘,’,, ‘ ’});

  double x = Convert.ToDouble(vc[0]);

  double y = Convert.ToDouble(vc[1]);

  double z = Convert.ToDouble(vc[2]);

  }

  具體可以參考EmuClasses文件中的文件,。

  注意

  1. 目前該方法只實(shí)現(xiàn)了重力加速度,沒(méi)有實(shí)現(xiàn)運(yùn)動(dòng)方向的加速度,,即給出的X/Y/Z這三個(gè)值是在垂直方向上的加速度,。

  2. PC機(jī)上運(yùn)行的攝像頭程序會(huì)比較耗費(fèi)CPU資源,建議分辨率不用調(diào)太高,,可以識(shí)別就行,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。