當前位置:製作窩 >

創意生活 >電子DIY >

用“飛來咒”控制你的直升機手工電子DIY教程

用“飛來咒”控制你的直升機手工電子DIY教程

用“飛來咒”控制你的直升機

 

DIYer:puzzlebox 製作時間:一星期 製作難度:★★★★★ GEEK指數:★★★★★ 

這個製作會向你展示如何拆開一架遙控直升機,然後修改它的遠端控制硬體使之能夠通過開源的電腦軟體來控制。更重要的是,它可以通過常見的消費級 腦電圖 頭戴式感應器感應到人腦的專注和放鬆狀態,進而控制直升機的飛行!

專案中用到的軟體包含兩個應用程式,Puzzlebox Synapse和 Puzzlebox Brainstorms 。前者連線到市售的消費級頭戴式腦電圖感應器,比如 NeuroSky MindSet 或者 Emotiv EPOC 。後者連線到從遙控器拆出的發射晶片上,依據Puzzlebox Synapse給出的訊號向直升機傳送飛行命令。這些軟體(包括原始碼)可以在 Brainstorms Puzzlebox 的網站下載。


 

1   材料和工具 

 

○ 一架遙控直升機

○ 頭戴式腦電圖感應器,比如 NeuroSky MindSet 或者 Emotiv EPOC

○ USB轉串列埠線,可以設定任意波特率

 

● 示波器

● 邏輯分析儀

● 烙鐵和焊錫(可選)

● 連線線和萬能電路板(可選)

● Puzzlebox Synapse和Puzzlebox Brainstorms軟體

開始幹活之前,拆解直升機。充電並安裝好電池,確定所有部件都工作良好之後再開始檢查或拆卸單個部件(譯註:開拆前別忘了取下電池,不要帶電拆卸)。你也應該事先熟悉直升機的基本控制,包括如何設定,基本控制和飛行特徵。這裡我們用的直升機是一架 Blade mCX2 。

 

2   檢查遙控器元件首先要拆卸和檢查遙控器電路板的元件。弄個顯微鏡記錄製造商的名稱和各種晶片的編號和數目可能是有用的,這對研究電路的功能和通訊協議的時候有幫助,可以在下一步用 示波器 或 邏輯分析儀 工作時節省時間。我們用的遙控器是 Blade MLP4DSM 。 

遙控器上有4個控制飛行的遙控通道:A. 油門(在空中上升/下降)

B. 升降舵(前進/後退)

C. 副翼(左右轉向)

D. 方向舵(順時針/逆時針旋轉)

 

這兩個操縱桿連線到 電位器 上,能夠控制電位器的輸出電壓。電位器與電源相連,抽頭連線到 Atmega88PA 微控制器的埠上。 

微控制器測量輸入電壓,然後轉換成 PCM 數字訊號傳送到發射晶片。發射晶片通過 Spektrum DSM2 協議和直升機進行通訊。 

簡要說明:這裡的說明可能不是100%準確,但卻是一個簡要有用,易於理解的視覺化說明方式。 

把電類比成水可能會簡單一些,水通過管道而不是電線或者電路板上的印刷線路流動。如果你測量水壓或者管道中某點的水位,就相當於測量電壓。管道的直徑就是電路可接受的最大電壓。測量在某一點單位時間內通過的水量相當於在電路中測量電流。想象高處不斷落下的大水滴,這是一個高電壓,低電流的電路。而一場爆發式的洪水,是一個相對低電壓但是大電流的電路。也正是由於這一原因,放大器(它們放大電流)通常被認為比高電壓還要危險一些。 

這些電池充當著水源的角色,和水(電力)通過管道(電路)流動的目標。連線在遙控杆上的電位器起的作用就像管道中的閥門,能夠改變之後管道中的水位(電壓)。比如說,當油門搖桿處在最低的位置,相當於閥門的轉子葉片完全關閉,所以管道中沒有水流動(電壓為0)。當搖桿在最高的位置,閥門開啟,後面管道的水位(電壓)則處在最高位置。 

如果水管途中經過一個水輪,水輪轉動時就能驅動直升機的旋翼。這裡可以看出越多的水衝擊水輪(電壓越高),輪子和旋翼就轉的越快,使直升機飛的越高。不過這裡討論的搖桿和電路在遙控器而不是直升機上,所以需要一些額外的中繼步驟。在這個假想的例子中,微處理器(微控制器)測量管道中的流水水位。這個數字代表著電壓和搖桿的當前位置。這個數字將被轉換成數字格式並且通過發射晶片發射,數目對應於各操縱桿的這些數字發射到直升機以後,直升機上的接收器傳送這些資料給微處理器,在那裡數字訊號最後轉化成用於驅動漿葉和舵機的模擬輸出。 

3   將控制電路板連線到示波器利用一個示波器,我們可以探測微處理器和發射晶片之間通訊訊號的特徵。把示波器的探頭輪流接到發射晶片的每個引腳和地線上,直到找出哪個腳用於訊號傳輸,那些腳是電氣地線。調整示波器的靈敏度將使顯示的影象更加清晰可見。最重要的是,我們將可以確定我們的遙控器傳送一個數字訊號,而不是相反的 模擬訊號 。另外一點也很重要,就是我們可以測量數字訊號的電平電壓,來確保我們的USB轉串列埠線可以產生和接收相同電平的訊號。如果不是這種情況,就需要一個簡單電平轉換電路來變換訊號電平,以適合現有的USB轉串列埠線。 

在第一幅照片裡,下邊沿附近的亮點顯示了資料包(又名資料幀)的傳送,我們想要知道每一個數據包內含的資訊,為此需要使用邏輯分析儀。 

在第二張放大的照片中可以看到,在數字訊號的垂直邊沿上,部分線條將隨著操縱桿的操作而閃動。這表明每個資料包的內含資料都隨著對搖桿的操作而變化,變化方式隨通道不同而不同。更具體的討論和示波器的使用方法超出了本教程的範圍,暫且不表。 

4   連線邏輯分析儀一個邏輯分析儀能夠幫助你抓到從微處理器傳送到發射晶片間的每幀PCM資料包。顯示並且解碼它們。在這個專案裡我們用了Tektronix 1241邏輯分析儀。 Saleae Logic 軟體能夠幫助我們精確測量每幀資料傳送的頻率(22ms一幀),還有資料格式,位數,每個位元組資料的格式(8個數據位,無效驗,1個停止位),波特率(133000波特)。每幀資料中包含14個可以用十六進位制方便表示的位元組。注意:波特率是相當重要的。最接近我們使用要求的,並且被大多數串列埠裝置(比如專案中的USB轉串列埠線)支援的標準波特率是115200。但這離我們的無線發射頻率差距太遠,開始的嘗試失敗了。所以選用一個轉換晶片允許任意設定波特率的USB轉串列埠線就顯得十分重要。在之後的版本里我們選用了一個基於 FTDI 晶片的版本。(FT232 USB-Serial 'UART' IC,詳見最後的說明。)同這一步驟有關的是Saleae邏輯分析軟體捕獲資料的記錄檔案示例。在第一個檔案示例中油門搖桿完全出於最下方,而在第二個檔案裡油門搖桿始終處於最上方。更多搖桿位置的資料例項和討論以及邏輯分析儀的使用超出了本教程的範圍。 

簡要說明:在我們之前的比喻裡,我們說水流的水壓(水位)可以類比為電流流過電路時的電壓,由於操縱桿控制的閥門而升降。然而當我們使用示波器的時候可以觀測到,在微處理器和發射晶片之間的訊號是數字的,而不是模擬的。這實際上意味著管道要麼充滿水要麼枯竭,沒有中間狀態。通過兩種極端狀態的變化,在管道中傳送二進位制資料。用另一種方式思考,想象管道兩端分別有著傳送者和接收者。在這種情況下,傳送者是微處理器(因為它知道將要傳送的數字值)而接收者是傳送晶片。試圖通過調節管道中的水流傳送資訊非常緩慢,所以他們採用了手電筒互打莫爾斯電碼的方式。每隔一段時間,接收者探頭進入管道觀察情況。同一時刻發射者要麼開啟手電錶示一個1,要麼關上手電筒將之表示為0。每次發生這種情況,稱作一個位(bit)的傳送。這會連續快速傳送8次,形成一個位元組(Byte)。如果每個詞的一個字母是一位,一個詞就是一個位元組。邏輯分析儀還告訴我們微處理器朝發射晶片說的每個‘句子’有14個‘詞’,這個句子包含了所有的搖桿位置和每個運動方向的訊號。只要遙控器開啟,完整的句子每秒重複約45次(每22ms一次)。波特率非常重要是因為它代表了發射方和接收方之間預先約定的訊號時間間隔。換句話說,如果傳送方每五秒鐘傳送一次閃光,而接收方每十秒鐘看一次管道,他就只會記錄到一半的訊號,並且將它記錄下來以後,實際上每個位都是錯的。當我們說波特率是133000的時候,實際上這一意味著每秒鐘發生的閃爍高達133000次! 

5   拆焊發射晶片在使用示波器觀察微處理器和發射晶片之間的數字訊號,並使用邏輯分析儀對 序列 通訊協議進行解碼之後,通過軟體遙控直升機的道路就變得清晰了。我們的軟體會繞過所有其他元件,直接通過USB轉串列埠線同發射晶片進行通訊。如果這一步不順利,我們還有一個替代方案。可以使用 Arduino 輸出模擬電壓來模擬電位器的輸出電平。 

由於發射器晶片實際上是一塊單獨的電路板(見附圖),而且在兩個引腳之間有足夠的空間讓我們飛出訊號,我們已經能夠記錄和分析所有微處理器傳送給它的原始資料,但我們最終希望能夠自行產生這些資料。這需要給發射板額外供電,如果遙控器的電源開關開啟,然後微處理器也將傳送資料,這將與我們插入的資料產生衝突;如果我們關閉了電源開關,發射器晶片也將關閉,任何資料都不會發送到直升機。我們認為我們將能夠從USB轉串列埠線為發射器晶片供電,但是我們不能肯定,電力會不會迴流到微處理器使之開始工作。因此,我們決定從遙控器上拆下發射器晶片板,因為這是我們的專案唯一需要的部分。 

6   連線控制板與USB轉串列埠線當發射晶片板被拆下來以後,我們需要重新用導線將原來的遙控器與發射晶片板飛線相連,這樣就既可以像以前一樣放飛直升機,又可以將它連線到USB轉串列埠線通過軟體遙控飛行,還可以通過USB轉串列埠線直接記錄遙控器發出的資料幀。我們最終使用一塊萬能板搭建了簡易的開關電路,使我們能夠控制訊號流向任意需要的方向。通過這些收集到的資訊我們用 Python 語言編寫了“Helicopter_”模組作為Puzzlebox Brainstorms軟體的一部分。 

在圖片裡,我們從控制檯運行了這個此模組,像下面這樣發出了“讀”的命令:python Helicopter_ --command=read --device=/dev/ttyUSB0注意:在我們的具體配置裡,我們的Linux系統在建立USB到串列埠裝置時串列埠被附加了“/ dev/ttyUSB0”,這可能根據您的特定系統有所不同。比如在Windows下的COM埠可能被注為“COM1“。當以這種方式執行模組時很容易看到從微處理器傳送到發射器晶片的實時資料。將這個模組納入我們的原始碼之後,我們可以任意傳送特定的命令字串給直升機。順便提一句,我們注意到,當直升機首次啟動時,需要傳送一個“中間”油門位置的命令來建立匹配(不論是由連線到發射器晶片遙控器或計算機軟體發出該字串)。否則直升機將不會識別發射器晶片,並進入同步模式(由一個在駕駛艙閃爍的藍燈表示)。 

此外,當控制檯命令不再發送,直升機會顯示斷開連線(在駕駛艙外長亮的藍燈),為了重新建立連線,需要再次發射了大約兩秒鐘的“中間”油門位置命令才能傳送其它操縱命令,例如“懸停”或“向前飛。”這些設定傳輸會自動由Puzzlebox Brainstorms軟體處理。 

7   測試飛行-從命令控制檯遙控直升機在這個示例視訊中,遙控直升機首先通過原來的遙控器操作,再經過萬能板電路切換訊號通道,由在控制檯模式下執行的Puzzlebox Brainstorms軟體傳送“向前飛”的命令。注意在直升機起飛前有一個延遲,在此期間,發射器和直升機之間重新建立了同步。 

可用的控制檯命令示例:Neutral: 使用此命令來與直升機建立初始同步

python Helicopter_ --command=neutral

Hover: 直升機在空中懸停

python Helicopter_ --command=hover

Fly Forward: 直升機向前飛行,高度降低,此時易於著陸

python Helicopter_ --command=fly_forward

Read: 讀取遙控器的輸出指令並直接在顯示器上顯示

python Helicopter_ --command=read

 

8   連線腦電圖感應器到Puzzlebox SynapsePuzzlebox Synapse是一個免費,開源,跨平臺的應用程式,它能直接連線到市售的消費級腦電圖頭戴感應器上,採集腦電波訊號(包括檢測狀態),將資料繪圖,選擇性地記錄資料到磁碟,並提供了TCP / IP伺服器功能來為遠端客戶端傳遞資訊。 

這個專案我們將使用Puzzlebox Synapse連線到一個NeuroSky MindSet感應器,然後區分 “專注”和“冥想”的思想集中程度,Puzzlebox Brainstorms則使用這些資料來遙控直升機飛行,懸停,或著陸。如果使用的是Emotiv EPOC感應器則可以使用“EmoKey”軟體直接同Puzzlebox Brainstorms通訊,從而跳過這一步。 

首先需要建立一個電腦與NeuroSky MindSet的藍芽連線。連線方法應該已經在感應器的說明中提供了,不在本教程的範圍之內。如果你使用的是Windows XP,建議使用東芝(Toshiba)藍芽驅動(感應器安裝光碟中有),而不是內建的Microsoft藍芽驅動,我們使用東芝公司的軟體獲得了更好的效果。對於NeuroSky MindSet預設的藍芽Pin識別碼為“0000”,一旦連線到你的Windows系統會獲得新的COM埠或Linux下的/ dev/ ttyUSB。建議Mac OS X的任何使用者嘗試使用Python直譯器從原始碼開始執行,並通知我遇到的任何問題。理論上這些軟體應當相容,但是截至交稿時我還沒有在OS X上實際測試過。 

一旦連線建立,只需選擇你NeuroSky MindSet的藍芽連線MAC地址,或選擇顯示的的適當COM埠。點選“Server Daemon”下面的“Start”按鈕,圖形介面將開始顯示實時腦電圖測量結果。腦波和“eSense”計算每秒更新一次。它也可以繪製原始腦電圖輸出波形圖用來檢視,顯示隨著時間的推移被測物件專注和放鬆的趨勢,並存儲使用者會話的全部內容到磁碟或輸出為 Calc或Microsoft Excel中使用的CSV檔案。 

9   使用Puzzlebox Brainstorms遙控直升機飛行Puzzlebox Brainstorms是一個免費,開源,跨平臺的軟體應用程式,它允許通過腦機介面(BCI)控制車輛,裝置,玩具(例如 LEGO MINDSTORMS ),遙控直升機,甚至電動輪椅。 

在這個專案裡我們將使用該軟體控制直升機的向前飛行,懸停和/或著陸。這些操作的控制命令來源於NeuroSky MindSet或Emotiv EPOC腦電圖頭戴感應器自動檢測到的被測物件專注/放鬆的程度。 

第一步是在啟動應用程式之後連線到上一步的準備好的Puzzlebox Synapse的伺服器。伺服器可以搭建在同一臺計算機上或通過TCP/ IP協議或者因特網進行訪問。在“控制面板”點選Puzzlebox Brainstorms標籤,核對主機和埠設定後,點選“連線”,開始接收腦電圖檢測資料。下一步點選“遙控直升機”標籤。該發射器晶片應該已經被改裝並連線到電腦系統。如前面的步驟中所述,USB轉換的序列介面將出現在Windows下的COM埠或/ dev/ ttyUSB Linux下的序列裝置裡。預設情況下,當大腦“專注”或“放鬆”的水平達到一定的閾值(約60%或更高,在“puzzlebox_brainstorms_”檔案中定義) “速度”表將開始上升,遙控直升機將工作在“懸停”模式,一旦放鬆水平低於閾值直升機則自動下降並著陸。如果使用Emotiv EPOC感應器,你可以通過“EmoKey”程式指定以下快捷鍵並用它們任意指定直升機的工作狀態:"Home " or "[ " -懸停

"Page Up " or "] " – 向前飛行

"End " or "" -著陸

 

簡要說明(注意:這裡的說明可能不是100%準確,但卻是一個簡要有用,易於理解的視覺化說明方式。)A. 假設你站在正在進行棒球比賽的體育場外,你不能看到球場上的球員(我們不能“讀你的心”),但每過一段時間,你就可以聽到人群歡呼和叫喊,知道發生了令人興奮的事件。我們知道,當發生類似這樣的情況,就意味著你在保持專注。你可以設想頭上的電極就像接收場內人群歡呼聲訊號的天線,當我們調整到合適的頻率(電極處於合適的位置),聽到興奮的叫喊轟鳴(電極傳出訊號),我們就知道你在專注。

B. 人類的大腦是由約100億個 神經元 組成的,它們不斷通過化學過程交換資訊,在這一過程產生電訊號,當與特定功能相關的大腦區域高度活躍時,可以直接在該區域對應的頭皮表面測量出電訊號的微小變化。就像遙控控制電路,我們測量這些電訊號的幅度和變化並用電壓表示(儘管實際的變化小而又小)。

C. 如果你從遙控器中取出單節AA電池,你會發現在一邊寫著“1.5V”,表示該電池正常電壓為1.5伏。我們測量腦電訊號用的單位是伏特十萬分之一(微伏),腦電圖本質上就是一個極靈敏的電壓表的測量結果。

D. 當我們使用腦電圖感應器測量出大腦的電活動後,就可以用數學知識來處理這些訊號。結合腦科學上的知識,我們將電極放置在大腦皮層(大腦右額葉,位於前額右下部),同時採集了中立參考點的訊號(例如使用者的耳朵,那裡沒有神經元。,據此我們可以計算出人們的大腦對事物注意的程度——是專注還是放鬆。

 

10   致謝 

最後,感謝以下給了這個專案很大幫助的人和機構:NoisebridgeHackerspace

Miloh Alexander, Jake Walters, Tony Roberts, Paul Tonkin, Greg Smith, Chris Hellyar

 

 

  • 文章版權屬於文章作者所有,轉載請註明 https://zhizuowo.com/shenghuo/dianzidiy/qlj4z.html