マインドコントロールドローン
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 4 | ||||
| × | 4 | ||||
| × | 12 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
| |||
|
アプリとオンラインサービス
| ||||
|
このプロジェクトについて
背景
私はドローンが魅力的で、何でもできる小さな飛行機械だと思います。クールなテクノロジーでプロジェクトを行う機会を得たとき、私は男の子の夢を実現することに決めました。あなたの心でドローンを制御します。
調査では、このプロジェクトのために、ドローンコントローラーを簡単にハックする方法をカバーするチュートリアルは見つかりませんでした。利用可能なチュートリアルのほとんどは、Arduinoを使用して独自のドローンを作成する方法、または送信プロトコルをハックする方法に関するものです。
このチュートリアルでは、PCBをハッキングしてデジタル制御するための最も基本的な概念について説明します。このチュートリアルの目的は、ドローンを使って自分で実験し、何か楽しいものを作成できるようにする基本的な概念を学ぶことです。
通知
ドローンやコントローラーを殺して使用できなくする可能性があります。
このプロジェクトでは、ドローンの離陸と着陸のみを操縦する方法については説明しません。
MindWave / EEGセンサーは必ずしも必要ではなく、任意の入力を使用できます。しかし、あなたの心でドローンを制御することは純粋な素晴らしさです!
ビデオチュートリアル
必要なスキル
このチュートリアルは、はんだ付けとはんだ除去の経験があることを前提としています。
パーツリスト
- ドローン+コントローラー
- はんだ付けステーション+アクセサリ(編組銅線、はんだ除去ポンプ、補助手、ソリッドコアワイヤ、スズ)
- マルチメータ
- MindWaveセンサー
- Arduino MKR1000
- ブレッドボード
- 4x100uFコンデンサ
- 4x220Ω抵抗器
- 12xジャンパー線
- 6つのクロコダイルクリップワイヤー(オプション)
また、抵抗値がまだわからない4つの抵抗が必要です。
フェーズ1:ドローンPCB
あなたが望むほとんどすべてのドローンを使用することができます。ほとんどのコントローラーは2軸ジョイスティックで動作します。バイパスするジョイスティック。
まず、コントローラーのケースを開きます。このコントローラーは、約3.3vの2つの1.5vバッテリーを使用します。この値は、ArduinoMKR1000の出力と同じです。
お好みの別のArduinoを使用することも可能ですが、PCBが処理できるより多くの電圧を回路基板に与えると、回路基板が破損する可能性があることに注意してください。 (私は経験から話します。)
<図>マルチメーターを使用して、電源を入れた後のジョイスティックの中電圧、高電圧、低電圧を確認します。後で使用できるように書き留めておきます。
<図>PCBからジョイスティックコンポーネントをはんだ除去します。
<図><図>
実際には、これらのジョイスティックコンポーネントは単なるポテンショメータです。ポテンショメータはアナログ可変抵抗器です。マルチメータで最大抵抗を測定できます。マルチメータを+と-に接続して抵抗を読み取ります。
<図>ジョイスティックの+と-の穴に4つの抵抗器(この場合は10Ωの抵抗器)をはんだ付けして、回路を完成させます。
<図>また、PCBの+(このボードのB +)および-(このボードのB-)ポートにソリッドコアワイヤをはんだ付けします。そして、中実の芯線をジョイスティックの信号ポートにはんだ付けします。
これで、次のステップに備えてコントローラーを準備できました。
<図>
フェーズ2:デジタルからアナログへ
ArduinoでAnalogWriteをオンに使用すると、出力はPWM(パルス幅変調)信号になります。勝利は決定された頻度でそれ自身の値をHIGHとLOWに変えます。
私たちが用意したPCBはPWMが好きではなく、安定した電圧を期待しています。
<図>アナログ値を作成するために、DACチップやRFラダーフィルターなどのさまざまなデジタル-アナログコンバーターを使用できます。
そのため、このプロジェクトを可能な限りシンプルに保ちたいと思います。ローパスフィルターの使用方法を学習します。これにより、目的の出力が得られます。
ローパスフィルターを作成するには、コンデンサーと抵抗器が必要です。
<図>ローパスフィルターの特徴の1つは、アナログ電圧が徐々に変化することです(時間がかかります)。この回路は、望ましい結果が得られ、使用する部品の量が少ないため、私にとって最適です。
<図>
フェーズ3:Arduino回路
回路の主要部分は、最近作成したローパスフィルターです。それらを4つ続けて作成すると、4つのコントローラー入力すべてにアナログ電圧がかかります。
<図><図>
正しい出力をコントローラーPCBの正しい入力に接続します。 Arduino Sketchをアップロードする前に、正しく入手したことを確認してください。
<図>標準のドローンレイアウトは次のとおりです。
- スロットル=>コントローラーの左側で上下
- ヨー=>コントローラーの左側の左/右
- ピッチ=>コントローラーの右側で上/下
- ロール=>コントローラーの右側で左/右
すべてが接続されたら、スケッチをArduinoMKR1000にアップロードできます。スケッチはこのチュートリアルの下部にあります。
Arduinoはバッテリーを交換し、バイパスされたジョイスティックに信号を(電圧として)送信できます。この時点で、PWMでドローンを制御するための実験で独自のプログラムを作成できます。
<図>次に、ProcessingとMindWaveセンサーを使用してドローンを持ち上げる方法を説明します。
フェーズ4:マインドコントロール
コンピューターにすべてのドライバーをインストールします。このMindWaveセンサーにはCDが付属しています。
<図>MindWaveセンサーをBluetoothを使用してコンピューターにペアリングします。ボタンを3秒間押し続けると、青いLEDが2回点滅し、検出可能になります。
<図>接続したら、処理を開始します。
http://jorgecardoso.eu/processing/MindSetProcessing/#download
から処理するために、Jorge C. SCardosoによって作成されたMindSetライブラリをインストールします。ライブラリをライブラリフォルダに解凍します。ライブラリフォルダは処理フォルダにあります。
セットアップでcom-portsが正しいことを確認してください。正しくないと、エラーが発生します。 com-portsはデバイスマネージャーで見つけることができます。
Arduinoのcom-portは、ArduinoIDEの「Port」
の「Tools」にもあります。MindWaveセンサーのcom-portは、ThinkGearコネクタの設定(ドライバーをインストールするとこのプログラムが表示されます)の[オプション]にあります
。 receiver =new Serial(this、 "COM10"、115200); mindSet =new MindSet(this、 "COM5");
処理はシリアル経由でArduinoと通信します。処理コードを好みに合わせて変更し、スケッチのコメントを読んで何が起こっているのかを理解することができます。
処理スケッチを実行し、ドローンに集中します。集中力が40%を超えると、ドローンが離陸します。ドローンがより攻撃的になるほど、集中するのが難しくなります。心をさまよって集中をやめることで、ドローンを着陸させることができます。
<図>
結論
このチュートリアルで、ドローンコントローラー(または任意のPCB)をハッキングして、別の入力を与えることがいかに簡単であるかについての洞察が得られたことを願っています。実験を行うことで、他の入力を制御する方法や、揚力と着陸に加えて他の動きをする方法を理解できます。
皆さんがどんなクールなものを作るのか楽しみです!
コード
- 処理マスター
- ドローンコントロール
処理マスター処理
Bluetoothシリアルを介してMindWaveセンサーに接続し、8ビット整数としてアテンション値をコントローラーに送信します/ **ドローンマインドコントロール**このスケッチはシリアル値をレシーバーレシーバーに送信します**入力はNeuroskyMindSetモバイルヘッドセット** 2018年3月21日作成* WesleyHartogs作成*通信およびマルチメディアデザイン* Avans University of Applied Sciences * * * /// import Serial libaryimportprocessing.serial。*; //定義レシーバーSerialSerialレシーバー; //インポートMindSet libaryimportpt.citar.diablu.processing.mindset。*; MindSet mindSet; //初期値を設定しますintthroter =0; int yaw =127; intpitch =127; int roll =127; void setup(){size(150、 500); // COM10レシーバーでシリアル通信を開始=new Serial(this、 "COM10"、115200); // MindSet通信を開始します// MindSetはBluetoothシリアル通信を使用します//デバイスマネージャーのThinkGearコネクタのCOMポットを確認しますmindSet =new MindSet(this、 "COM5"); //アンチエイリアスsmooth();を有効にします//ストロークプロパティを設定しますstrokeWeight(5);ストローク(255); strokeCap(SQUARE); //線の色を設定しますfill(255); } // setup()void draw(){//黒の背景で開始background(0); //下から40%の位置に水平線を引きます//この線は、注意が必要な最小(40%)を示しますline(0、height * 0.60、width、height * .60); //水平方向の中心から上に向かって線を引きます//この線は注意を示します//高さは逆にマッピングされて上からのパーセンテージを取得します//例:40%(0.4)の注意によって高さの値は( 100-40)トップラインから60%(0.6)(width * .5、height、width * .5、height * map(float(attentionLevel)/ 100、0、1、1、0)); //アテンションレベルをスロットル変数にプッシュします// 40 =何かを行うために必要な最小アテンション// 100 =最大アテンション// 30 =Arduinoの8ビット最小値// 255 =Arduinoスロットルの8ビット最大値=int(map(attentionLevel、40、100、30、255)); //エラーを防ぐために値を8ビット値に制限しますthrottle =strike(throttle、0、255);ピッチ=制約(ピッチ、0、255);ロール=制約(ロール、0、255);ヨー=制約(ヨー、0、255); //通信が可能な場合は、Arduinoレシーバーに値を送信しますif(receiver .available()> 0){println( "attentionLevel:" + attentionLevel + "throttle:" + throttle + "yaw:" + yaw + "pitch:" +ピッチ+ "ロール:" +ロール);レシーバー.write( "スロットル:" +スロットル+ "ヨー:" +ヨー+ "ピッチ:" +ピッチ+ "ロール:" +ロール); }} // draw()// Killswitch、Kを押してプログラムをリセットして閉じますvoid keyPressed(){if(key =='k' || key ==ESC){if(receiver .available()> 0){レシーバー.write( "スロットル:" + 0 + "ヨー:" + 127 + "ピッチ:" + 127 + "ロール:" + 127);出口(); }}} // MindSet変数と関数intsignalStrenght =0; int AttentionLevel =0; public void AttentionEvent(int AttentionLevel_val){attentionLevel =AttentionLevel_val;} //この関数は、MindSetとの接続が最適でない場合にアクティブになりますpublic void poorSignalEvent(int signalNoise){//マインドセットは調整中ですif(signalNoise ==200){println( "マインドセットはあなたの肌に触れていません!"); } //信号強度をパーセンテージにマッピングしますsignalStrenght =int(map((200-signalNoise)、200、0、100、0)); println( "信号強度:" + signalStrenght + "%");}
ドローンコントロール Arduino
彼のスケッチはシリアル入力値(処理から)を受け取り、これらの値をハッキングされたコントローラーに送信します。/ **ドローンコントロール**このスケッチはシリアル入力値(処理から)を受け取り、これらの値をハッキングされたコントローラーに送信します。 *このプログラムはArduinoMKR1000(またはArduinoベースの別の3.3ボルト出力)でのみ使用してください* *回路:*-100 µFのコンデンサと220Ωの抵抗を備えた4つのローパスフィルター**ハッキングされたドローンコントローラー** 2018年3月21日作成* Wesley Hartogs *コミュニケーションおよびマルチメディアデザイン* Avans University of Applied Sciences **このスケッチは自己責任で使用してください。 * * ///初期値を設定しますintthrottle =0; int yaw =255/2; // 3.3v / 2intピッチ=255/2; // 3.3v / 2intロール=255/2; // 3.3v / 2intthrottlePin =2; // PWMint yawPin =3; // PWMintピッチピン=4; // PWMint rollPin =5; // PWMvoid setup(){// 115200ボーでシリアル通信を開始Serial.begin(115200); // pinModesを設定しますpinMode(throttlePin、OUTPUT); pinMode(yawPin、OUTPUT); pinMode(pitchPin、OUTPUT); pinMode(rollPin、OUTPUT);} void loop(){//使用可能なシリアル接続がある場合、値を取得しますif(Serial.available()> 0){throttle =Serial.parseInt(); //シリアルバッファからの最初の整数値を格納しますyaw =Serial.parseInt(); //シリアルバッファから2番目の整数値を格納しますpitch =Serial.parseInt(); //シリアルバッファから3番目の整数値を格納しますroll =Serial.parseInt(); //シリアルバッファから4番目のインタージャー値を保存します} //ドローンコントローラに値を書き込みます//ローパスフィルタまたはDAC(デジタル-アナログコンバータ)を使用してPWMをアナログ電圧に変換しますanalogWrite(throttlePin、throttle); analogWrite(yawPin、yaw); analogWrite(pitchPin、pitch); analogWrite(rollPin、roll);}
回路図
PWM信号をアナログ電圧に変換します ArduinoMK1000をハッキングされたコントローラーに配線するための回路 製造プロセス