資料介紹
描述
你想用你的思想來控制事物嗎?這個教程描述了如何使用腦電波駕駛遙控卡車。耳機感應到我的腦電波并將它們傳輸到一臺小型計算機。當我提高注意力或眨眼時,計算機會轉換信號并將它們傳遞給卡車的遙控器,我已將其連接到計算機。當我集中注意力時,車輪會旋轉。0ne 強烈的眨眼左轉。強烈的雙眨眼會右轉。
耳機是NeuroSky MindWave Mobile 2,電腦是Arduino Uno微控制器,藍牙模塊是HC-05。
實際應用
一些開發人員已經應用這些想法來幫助癱瘓的人;例如,駕駛輪椅、家庭自動化或在屏幕上選擇字母和單詞以便在屏幕上或通過語音進行交流。他們的項目可以在 YouTube 上找到。
項目的主要步驟
這個項目有5個主要步驟:
- 將 HC-05 連接到 Arduino,對其進行配置,并將其與 MindWave 配對。
- 將舵機連接到遙控器。
- 給 Arduino 接線。
- Arduino 草圖(代碼)。
- 上傳 Arduino 草圖并使用它。
控制機器人車輛的方法
在開始我的項目之前,我在 Internet 上搜索了 NeuroSky 項目,以了解開發人員選擇使用哪些腦電波信號。許多項目只使用了注意力和冥想級別,還有一些項目還使用了眨眼。在我的項目中,我決定使用注意力級別來控制向前和停止行駛,單閃左轉或雙閃右轉。
有一個項目采用了非常不同的方法:當用戶眨眼時,軟件開始循環向前、向后、向左、向右,每個循環 2 秒。如果用戶眨了兩下眼,那么車輛就會在那個瞬間朝自行車所在的任何方向行駛。這種方法提供了很大的靈活性,但可能會很慢。例如,如果用戶右轉,他們將無法左轉大約 6 秒,
將 NeuroSky MindWave Mobile 2 連接到 Arduino 的方法
一些開發人員通過藍牙將他們的 NeuroSky MindWave Mobile 直接連接到 Arduino 板,這是我決定做的。這種方法比下一種方法更容易(如下所述),但檢測到眨眼需要更長的時間(略超過 1 秒)。這對我的項目來說沒問題。
其他開發人員通過計算機或智能手機對信號進行實時預處理,然后將數據發送到 Arduino。這允許進行更復雜的分析或處理,并且可以更快地檢測到眨眼(大約半秒)。NeuroSky 在這個網站上有關于這種方法的教程,適用于 PC Windows、Apple Mac OSX、Android 和 IOS:我決定不使用這種方法,因為它需要學習如何在計算機或智能手機上對軟件進行編程。
最大化注意力水平
最大化注意力水平的方法因人而異。以下是一些建議:
- 專注于一個對象。
- 仔細閱讀食品容器上的成分清單。
- 記住食品容器上的一些營養成分。
- 從 100 倒數到 6 或 7。
- 在頭腦中進行算術運算。
- 聽一首說唱歌曲并嘗試理解歌詞。
- 用你不流利的語言閱讀一些東西。
眨眼
眨眼需要很強才能被檢測到。正常的眨眼被忽略。
頭部應保持靜止,以避免錯誤的眨眼檢測。在這個項目中檢測眨眼的方法包括檢查從耳機接收到的信號的質量。強烈的眨眼會使前額的皮膚移動,從而降低信號的質量,這被解釋為眨眼。如果頭部移動,耳機的傳感器可能會輕微移動,從而降低信號質量,這將被識別為眨眼。
這種檢測眨眼的方法不使用大腦的神經信號。我的理解是 NeuroSky 的計算機/智能手機方法可以。
電子零件
- NeuroSky MindWave Mobile 2 耳機和 1 節 AAA 電池
- 一臺電腦(我用的是 Apple iMac)
- Arduino Uno 或其他型號及其 USB 數據線
- HC-05藍牙模塊
- 兩個伺服電機(我使用 Solarbotics HXT900 Micro Servos)
- 面包板和面包板電線
- 綠色、黃色和紅色 LED
- 3 x 330 歐姆電阻
- 2 x 1K 歐姆電阻
- 2 個 2K 歐姆電阻
- 電源,約 5 伏,如支架中的 3 節 AA 電池
伺服連接到遙控器的零件
- 小塑料或紙板箱,或其他方式將伺服系統固定到位
- 膠水或螺母和螺栓將盒子的各個部分連接在一起
- 將其連接到遙控器的某種方式。(我用了 2 個螺絲。)
- 用于連接伺服系統的小螺母和螺栓。(我使用了一些實心線和 2-56 號螺栓,并且不得不稍微擴大伺服中的螺栓孔。)
第 1 步:將 HC-05 連接到 Arduino,配置并配對
有關詳細信息,請查看我之前的一個項目中的步驟 1 和 2:
第 2 步:將伺服器連接到遙控器
有兩種方法可以將 Arduino 連接到卡車的遙控器:
遙控器可能被黑客攻擊如下:移除或繞過由控件推動的開關,然后將 Arduino 連接到控制器的電路板并對 Arduino 進行編程以在適當的電線上施加電壓。我的遙控器中的開關非常小,以至于我認為嘗試將新電線焊接到電路板上的適當位置太棘手了。如果我犯了一個小錯誤,董事會可能會被毀掉。
我使用伺服系統來移動控件。將伺服系統連接到遙控器上被證明是一個“有趣”的挑戰,但現在一切正常。
幸運的是,經過一些切割和裝配后,有一個大小合適的小塑料盒可以將伺服系統連接到卡車的遙控器上。尺寸為 2-56 的螺母和螺栓將盒子的各個部分固定在一起。兩個螺絲將盒子固定在遙控器上。
?
左/右控制的伺服臂末端有一個小凹口,給它一些擺動空間。伺服臂的中心不太可能與控制中心完全對齊。固定該臂末端的螺釘需要稍微松動。
?
為了連接左/右舵機,我使用了 2-56 尺寸的螺母和螺栓,并且不得不稍微擴大舵機上的螺栓孔。實心線將 Go/Stop 伺服固定到位。
?
第 3 步:連接 Arduino
電路如圖所示,描述如下:
- Arduino 的 +5V 連接到面包板上的 +
- Arduino 的 GND 連接到 - 在面包板上
- 330 歐姆電阻從引腳 2 到黃色 LED 的長線和另一根 LED 線到 - 在面包板上
- 330 歐姆電阻從引腳 4 到綠色 LED 的長線和另一根 LED 線到 - 面包板上
- 330 歐姆電阻從引腳 7 到紅色 LED 的長線和另一根 LED 線到 - 在面包板上
- 引腳 9 連接到 Go/Stop 伺服的信號線。是那個黃色的。
- 引腳 10 連接到左/右舵機的信號線。
- - 伺服系統的橙色線連接到單獨的 4.5 伏電源的正極。
- - 伺服系統的棕色電線連接到 - 面包板上。
- - 單獨電源的負號轉到 - 在面包板上。
- HC-05 TXD 連接到 Arduino 的 RX(引腳 0)
- HC-05 + 轉到面包板上的 +
- HC-05 GND 連接到 - 在面包板上
?
第 4 步:Arduino 草圖(代碼)
該代碼具有以下主要功能:
- 從 MindWave 耳機讀取數據。
- 當注意力超過 70 時打開綠色 LED 并移動 Go/Stop 伺服臂以推動 Go/Stop 觸發器。
- 當注意力小于 70 時關閉綠色 LED 并將 Go/Stop 伺服臂移回其中點。
- 檢測到閃爍時打開黃色 LED,并將閃爍信號設置為 1。
- 1.2 秒后檢查第二次閃爍。
- 如果是單次閃爍,將左/右伺服臂向“左”移動 2 秒鐘,然后將其轉回,并關閉黃色 LED。
- 如果是雙閃,打開紅色 LED,關閉黃色 LED,將左/右伺服臂“向右”移動 2 秒鐘,然后將其轉回,然后關閉紅色 LED。
- 在每個主要步驟中,在計算機上的串行監視器中顯示數據。
Arduino 草圖(代碼)可以從該項目中包含的.ino 文件中下載,或者可以將以下代碼復制并粘貼到新的 Arduino 草圖中。(在編寫這些指令時,instructables 系統有時會刪除位于代碼開頭的部分#include 語句。第一個應該是#include 后跟左箭頭 < 后跟 Servo.h 后跟右箭頭 > 和第二個應該是#include,后跟左箭頭<,然后是Mindwave.h,然后是右箭頭>)。
草圖使用一個特殊的庫,必須在運行草圖之前安裝。
這個項目可以不使用庫來完成,但是代碼會更復雜。從耳機讀取數據、提取注意力級別和檢查信號質量的代碼在本網站包含的示例代碼中:
草圖應該可以成功編譯,但可能會顯示 MindWave.cpp 庫的警告消息。這可能會被忽略。
//
// 草圖使用大腦的注意力水平進行 Go/Stop 和
// 轉彎時眨眼。
//
// 硬件:Arduino Uno、HC-05 藍牙、NeuroSky MindWave Mobile 2。
// 高度關注 = 綠色 LED 亮(開始);低 Att = 綠色 LED 熄滅(停止)。
//第一次閃爍&左轉=黃色LED;雙閃 = 紅色 LED(右)。
// 左右轉為 2 秒。
// 信息顯示在串行監視器上。
//
#include
#include
思維波思維波;
#define YLED 2 // 定義 LED 引腳
#define GLED 4
#定義 RLED 7
伺服myservoG;// 開始/停止伺服
伺服myservoLR;//左/右舵機
int gosignal = 0; // 走或停指標
int 閃爍信號 = 0; // 第一次閃爍后的信號計數器
int 閃爍 = 0; // 一組閃爍次數
長時間未簽名;// 經過時間的變量
無符號長時間0;// 第一次閃爍時間的變量
無符號長時間1;// 從第一次閃爍到第二次閃爍的時間變量
無效設置(){
Serial.begin(MINDWAVE_BAUDRATE);
pinMode(13,輸出);// 將 LED 引腳初始化為輸出
pinMode(GLED,輸出);
pinMode(YLED,輸出);
pinMode(RLED,輸出);
myservoG.attach(9); // 將 Go/Stop 伺服連接到引腳 9
myservoG.write(90); // 將舵機移動到中點
myservoLR.attach(10); // 將左/右伺服器連接到引腳 10
myservoLR.write(90); // 將舵機移動到中點
延遲(15);// 給伺服時間移動到那里
}
無效 onMindwaveData() {
if (mindwave.quality() < 90) { // 如果質量差,板載 LED 亮起
數字寫入(13,高);
} 別的 {
數字寫入(13,低);
}
// 檢查注意力等級
if ((mindwave.attention() > 70) && (gosignal == 0)) {
Serial.print("Go, ");
Serial.print("\注意:");
Serial.print(mindwave.attention());
時間=毫秒();
Serial.print("\ttime:");
序列號。打印(時間);
序列號.println();
數字寫入(GLED,高);// 綠色 LED 亮
信號 = 1; // 表示去
myservoG.write(130); // 機器人前進的伺服
延遲(4000);// 在檢查前等待 4 秒
// 如果注意力下降
}
if ((mindwave.attention() < 70) && (gosignal == 1)) {
Serial.print("停止, ");
Serial.print("\注意:");
Serial.print(mindwave.attention());
時間=毫秒();
Serial.print("\ttime:");
序列號。打印(時間);
序列號.println();
數字寫入(GLED,低);// 綠色 LED 熄滅
信號 = 0; // 表示停止前進
myservoG.write(90); // 機器人停止伺服
延遲(15);
}
// 第一次閃爍
if ((mindwave.quality() < 95) && (blinksignal == 0)) {
Serial.print("第一次閃爍");
Serial.print("\tquality:");
Serial.print(mindwave.quality());
時間=毫秒();
Serial.print("\ttime:");
序列號。打印(時間);
Serial.print("\tgosignal:");
Serial.print(gosignal);
Serial.print("\tblinksignal:");
串行打印(閃爍信號);
序列號.println();
time0 = 毫秒();
眨眼 = 1;
閃爍信號 = 1;// 第一次閃爍
數字寫入(YLED,高);// 黃色 LED 亮
}
// 閃爍后立即顯示質量,并增加計數器
// 來自耳機的信號
if ((blinksignal > 0) && (blinksignal < 4)) {
Serial.print("\tquality:");
Serial.print(mindwave.quality());
時間=毫秒();
Serial.print("\ttime:");
序列號。打印(時間);
Serial.print("\tgosignal:");
Serial.print(gosignal);
Serial.print("\tblinksignal:");
串行打印(閃爍信號);
序列號.println();
如果(閃爍信號> 0){
閃爍信號 = 1 + 閃爍信號;// 增加信號計數器
}
time1 = millis() - time0;
}
// 雙閃?
if ((mindwave.quality()<95) && (time1 > 1200)){
Serial.print("\tquality:");
Serial.print(mindwave.quality());
時間=毫秒();
Serial.print("\ttime:");
序列號。打印(時間);
Serial.print("\tgosignal:");
Serial.print(gosignal);
Serial.print("\tblinksignal:");
串行打印(閃爍信號);
Serial.print("\ttime1:");
序列號.print(time1);
Serial.print("\tblinks now = 2");
序列號.println();
眨眼 = 2;
}
// 單閃左轉
if ((blinks == 1) && (blinksignal > 3)) {
Serial.print("左, ");
Serial.print("\t單閃");
時間=毫秒();
Serial.print("\ttime:");
序列號。打印(時間);
Serial.print("\tgosignal:");
Serial.print(gosignal);
Serial.print("\tblinksignal:");
串行打印(閃爍信號);
序列號.println();
閃爍信號 = 0; // 為下一次閃爍重置
// 機器人左轉輪子 2 秒的代碼
myservoLR.write(55);
延遲(2000);
數字寫入(YLED,低);// 黃色 LED 熄滅
// 機器人將車輪從左轉直的代碼
myservoLR.write(90);
延遲(15);
}
// 雙閃右轉
if ((blinks == 2) && (blinksignal > 3)) {
Serial.print("對,");
Serial.print("\t雙閃");
時間=毫秒();
Serial.print("\ttime:");
序列號。打印(時間);
Serial.print("\tgosignal:");
Serial.print(gosignal);
Serial.print("\tblinksignal:");
串行打印(閃爍信號);
序列號.println();
數字寫入(RLED,高);// 如果右轉,紅色 LED 亮
數字寫入(YLED,低);// 黃色 LED 熄滅
閃爍信號 = 0; // 為下一次閃爍重置
// 機器人右轉輪子 2 秒的代碼
myservoLR.write(120);
延遲(2000);
數字寫入(RLED,低);// 紅色 LED 熄滅
// 機器人從右轉直的代碼
myservoLR.write(90);
延遲(15);
}
}
無效循環(){
mindwave.update(串行,onMindwaveData);
}
第 5 步:上傳 Arduino 草圖并使用它
- 在計算機上啟動 Arduino 應用程序。
- 將伺服系統連接到單獨的電源。伺服臂移動了幾度,但當草圖運行時它們會移回中點。
- 將 Arduino 的 USB 電纜連接到計算機。HC-05 應該快速閃爍。
- 斷開 HC-05 的 TXD 線與 Arduino 的 RX(引腳 0)的連接,上傳草圖,然后重新連接此 RX 線。
- 打開串行監視器。檢查波特率是否為 57600。
- 打開遙控卡車的電源。
- 開啟 MindWave。幾秒鐘后,HC-05 應每 3-4 秒快速閃爍 2 次,表示設備已配對。
- 將 MindWave 戴在頭上并連接耳夾。它現在應該將數據發送到 Arduino。
- 完成后,關閉串行監視器。
- 關閉 MindWave。
- 斷開 USB 電纜與 Arduino 或計算機的連接。
- 退出 Arduino 應用程序。
- 從單獨的電源上斷開伺服的電源線。
- 關閉卡車電源。
將草圖上傳到 Arduino 后,它可以使用單獨的電源,而不是通過 USB 連接到計算機。唯一的區別是沒有串行監視器來顯示數據。步驟如下:
- 將伺服系統連接到單獨的電源。伺服臂移動了幾度,但當草圖運行時它們會移回中點。
- 將 Arduino 連接到電源。
- 打開遙控卡車的電源。
- 開啟 MindWave。幾秒鐘后,HC-05 應每 3-4 秒快速閃爍 2 次,表示設備已配對。
- 將 MindWave 戴在頭上并連接耳夾。它現在應該將數據發送到 Arduino。
- 完成后,關閉 MindWave。
- 斷開 Arduino 與電源的連接。
- 從單獨的電源上斷開伺服的電源線。
- 關閉卡車電源。
重要筆記
如果你的 HC-05 的固件是 2 或 3 版本,我的理解是在 AT+INQ 命令之前需要 AT+INIT 命令。我的HC-05的固件是4.0-20190815版本,AT+INIT命令不識別。要檢查 HC-05 的版本,請輸入以下命令:AT+VERSION
如果您按下 Arduino 的重置按鈕,這會將 HC-05 的設置恢復為出廠默認設置。必須重復所有配對步驟。
如果在上傳草圖之前 HC-05 的 TXD 未與 Arduino 的 RX 斷開連接,則會在計算機屏幕上 Arduino 應用程序窗口的底部出現錯誤消息。以下錯誤消息重復 10 次:avrdude: stk500_recv(): 程序員沒有響應avrdude: stk500_getsync() 嘗試 1 of 10: not in sync: resp=0x00
使用舵機時,需要單獨的電源,例如 3 節 1.5 伏電池。Arduino 的 GND 必須連接到外部電源的負極。如果沒有外部電源,USB 源的電源似乎不足,并且 HC-05 會在伺服激活時失去配對。它在幾秒鐘后配對,然后在下次伺服激活時取消配對。
?
- 自動駕駛卡車,智周萬物,量產在即.zip
- 使用腦波控制無人機飛行 0次下載
- 遙控車原理圖下載 139次下載
- 通用的紅外遙控開關設計與實現 28次下載
- 無線遙控頻率計C語言源代碼下載 37次下載
- 使用單片機實現電波鐘的代碼免費下載使用
- 如何使用51單片機進行紅外遙控小車的設計和制作 60次下載
- 風神遙控器正確拆卸方法步驟 15次下載
- 瑞典Einride公司推出自動駕駛電動卡車 11次下載
- 腦電波檢測電路 0次下載
- 腦電波調試軟件 6次下載
- 基于RTlinux的腦電波信號采集系統設計
- 電波傳播計算圖
- 電波的基本概念
- 電波傳輸計算軟件
- 簡儀高性能平臺在小鼠腦電波實驗中的應用 173次閱讀
- 自動泊車和遙控泊車的區別 1427次閱讀
- 無線遙控開關原理 無線遙控開關怎么配對 5481次閱讀
- 半電波暗室建設涉及的幾個方面 1060次閱讀
- 紅外遙控與藍牙遙控的區別,紅外遙控與藍牙遙控哪個好 3.4w次閱讀
- 全電波暗室與半電波暗室的電磁兼容設計 1806次閱讀
- 腦電波如何實現追蹤虛擬現實控制 3826次閱讀
- dfrobotIR kit紅外遙控簡介 1586次閱讀
- 無線電波的傳播方式和頻率分配 2w次閱讀
- 帶你了解無線電遙控技術 9902次閱讀
- 機械手臂為你加持!再也不擔心雙手忙不過來了 4286次閱讀
- 全球六大自動駕駛卡車 硬件配置及方案對比 7578次閱讀
- 電燈遙控開關怎么接線_電燈遙控開關接線原理圖 13w次閱讀
- 特斯拉推出電動卡車_特斯拉電動卡車性能如何 1520次閱讀
- 生物識別新技術—基因、腦電波識別 2141次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多