ロボットの主サウロンの作り方
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
|
アプリとオンラインサービス
> |
|
このプロジェクトについて
<図> <図> あなたはロードオブザリングの映画シリーズのファンですか?もしそうなら、あなたは確かに「サウロン」を知っています!
このプロジェクトでは、サウロンのような人間サイズの半ヒューマノイドロボットを構築します:)
ロボットには、2つの3自由度アームと3自由度のヘッドと固定ベースがあります。 サウロンロボットは3つのモードで動作でき、2つのデジタル入力ピンに接続された2つのプッシュボタンを使用してこれらのモードを切り替えることができます:
1。スタンバイモード このモードでは、あらゆるイベントでロボットをケーシングします。ロボットは一連の動きを実行して、参加者を引き付けます。
2。ゲームパッドモード このモードでは、イベント参加者は1SheeldApplicationのゲームパッドシールドを使用してロボットを制御できます。
3。模倣モード このモードでは、ロボットはReal StealMovieの子供のようにイベント参加者の動きを模倣できます。そのため、スマートフォンを固定した手袋を着用すると、Arduinoがスマートフォンのセンサー値(向きやジャイロスコープなど)を読み取り、これらの値を使用してロボットの腕を制御します。
私はこのプロジェクトをニューヨークのMakerFaireに参加させて、子供たちを幸せにし、最新のテクノロジー、特にArduinoや1Sheeldなどのプラットフォームを開発して、リアルスティール映画のATOMやロードオブザリングのサウロンなどの映画キャラクターを構築するように促しました。映画シリーズ。必要なすべてのファイル(CAD図面、回路の概略図とレイアウト、Arduinoコードとレーザーカッター用のdxfファイル)を含めて、誰もが自分のサウロンを作成できるようにしました:)
ロボットの主の構築を始めましょう。
ステップ1:ロボットの頭を作る <図> <図> <図> <図> <図>
時間と労力を節約するために、車輪の再発明をしないことにしました。そこで、新しいロボットヘッドを設計する代わりに、xyzbotのこの素晴らしいオープンソースのロボットヘッド「Fritz」を使用しました。彼らのレーザーカッターファイルをダウンロードし、近くのメーカースペースでレーザーカッターを使用して頭の部分をカットしました。私の場合、時間とコストを削減しようとしたので、目の部分の3D印刷をスキップし、唇と眉毛をスキップしました。 。
3mmの合板を使用してヘッドパーツを実装しました。レーザーカッターを使用してこれらのパーツを切断した後、添付のビデオに従ってキットを組み立ててください。ただし、次の点に注意してください。
1.ベースの組み立てをスキップします。
2.目の3Dプリント部分に関連するすべての手順をスキップします。
3.眉毛と唇に関連するすべての手順をスキップします。
Open_Source_Files.zip FFRDB2LIKJ8MS1G.dxf
ステップ2:ロボットの本体を構築する <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図>
いつものように、Maker Faireのようなイベントに参加するために一緒に旅行する場合は、短時間で簡単に組み立てられるようにプロジェクトを構築するので、Artelonロッドと3mm合板シートを使用してロボットのボディを構築しました。
胸を肩、首、背中に固定するために、舌と溝の関節を使用しました。次に、4mm x 20mmのネジを使用してArtelonスケルトンで木製フレームを固定し、12mm x30mmのネジを使用してArtelonスケルトンをロボットのベースに固定しました.4mmx10mmのネジを使用してサーボモーターを木製フレームで固定しました.Artelonスケルトンは5つの部分:
1. 基本的なロッド 50mmのArtelonロッドでできています。
2. スケルトン 25mmアルテロンロッドでできています。
3. 幅ロッド ->ロボットには、Artelonスケルトンを使用して胸を背中に固定する3つのパーツがあり、これらのパーツは15mmのArtelonロッドでできています。
これらすべての部品の製造に関する詳細については、添付の図面を確認してください。
F7DSZV7IKMXH73S.pdf FI5J5H6IKMXH73X.pdf FYPCBU7IKMXH748.pdf FXN90VDIKMXH75Z.pdf F3LCJDQIKMXH763.pdf FZ2QN61IKMXH769.pdf FA2UEZBIKMXH90J.zip
ステップ3:ロボットのベースを作成する <図> <図> <図> <図> <図> <図>
- Solidworksを使用してこのベースを設計し、ロボットを机に固定しました。3本のネジを使用して机に固定するか、2つの4インチCクランプを使用できます。
- このベースの製造には6mmの板金を使用し、軽量化のためにこれらの開口部を作成しました。
- 12mm x 30mmのネジを使用して、Artelonスケルトンでベースを固定しました。
- 添付の.dxfファイルを使用して自分のファイルを実装できます。
ステップ4:ロボットの腕を作る <図> <図> <図> <図> <図> <図> <図> <図> <図> <図>
このプロジェクトでは、ロボットの腕が最大の課題でした。ロボットを持って米国に旅行できるように、モジュール式で簡単に組み立てたり分解したりできるようにしたかったのです。
これらのアームを汎用にし、簡単に変更できるようにしたかったのです。このロボットを海賊にしたい場合は、剣とフックを使用できます。また、リアルスティールの映画で、ロボットをAtomのようなボクサーにしたい場合は、拳を2つ追加し、グリッパーを2つ追加して、彼を汎用にすることができます。ロボットなので、この目的のために前腕の関節を設計しました。
3mmの合板を使用して、肩の関節にアームフレームとアルミニウム製のパンの傾きを実装し、次にバルサシートを使用して武器の剣とフックを切断しました。
Solidworksを使用して必要なトルクを計算した結果、3kg / cmのサーボモーターを使用する必要がありましたが、より大きなモーターを使用してロボットに何かを持ち上げさせました。旋盤で多くの機械加工を行って前腕を実装する代わりに、 Autodesk 123D Makeを使用してそれらをスライスのラックに分割し、次にレーザーカッターを使用してそれらを切断しました。
Solidworksにロボットアームの設計を添付したので、変更を加えてトルクを計算できます。
ステップ5:サウロンのヘルメットと鎧のコスプレ <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図>
これまで、ロボットは実際のスティール映画のATOMのように見えますが、ATOMがサウロンになるのを手伝ってください:D
友人のカリームは、ロボットのヘルメットと鎧を作るためにこれらの素晴らしい指示に従ってコスプレを実装するのを手伝ってくれましたが、ロボットの寸法に合うように少し変更しました。
http://www.instructables.com/id/Sauron-Cosplay/
http://www.instructables.com/id/Sauron-Cosplay-Hel ...
コスプレパートについて質問がある場合は、彼のFBページから質問できます
ネイトスペースに感謝します。
ステップ6:ロボットの電子機器 <図> <図> <図> <図> <図> <図> <図> <図>
1.1Sheeldを搭載したArduinoMegaを使用して、ロボットのアームとヘッドサーボモーターを制御しました。
2.5V / 5A電源を使用してモーターとArduinoに電力を供給しました。
3.小さなブレッドボードを使用して、すべてのモーターVccとGNDを電源に接続しました
4. 1Sheeldを使用して、スマートフォンを使用してロボットを制御しました。1Sheeldは、スマートフォンのセンサーと機能を利用してArduinoプロジェクトで使用できるようにするArduinoのラピッドプロトタイピングプラットフォームです。基本的に、これはArduinoボードの上に配置され、Bluetoothを介してこのAndroidアプリと通信し、アプリとスマートフォンの間でデータを転送するハードウェアシールドです。
1Sheeldモバイルアプリケーションにはシールドの長いリストがあります。このリストからゲームパッドシールド、オリエンテーションシールド、ミュージックプレーヤーシールド、ターミナルシールド、トグルボタンを選択する必要があります。
1. ゲームパッドシールド これは私のスマートフォンのGUIで、PlayStationジョイスティックのようないくつかのボタンがあり、Bluetoothを介してArduinoに接続されており、サーボモーターを手動で制御するために使用しました。ゲームパッドシールドのいずれかのボタンを押すと、アプリケーションは1Sheeldにデータを送信し、Arduinoがロボットの腕と頭のサーボモーターを制御します。
2. オリエンテーションシールド :スマートフォンを固定した手袋を着用し、スマートフォンのセンサーからの値をマッピングして、サーボモーターに角度として送信します。
3. ミュージックプレーヤーシールド: 私は音楽プレーヤーの盾を使用して、サウロンが口を上下に動かしたときにサウロンの声が聞こえるサウンドトラックを再生します。
4. トグルボタンシールド: 物理的なプッシュボタンを追加する代わりに、このシールドを使用して目的のモードを選択します
5. ターミナルシールド: 1SheeldはPCとBluetoothモジュールと同時に通信できないため、ArduinoIDEシリアルモニターを使用する代わりにこのシールドを使用します。
ステップ7:Arduinoコード <図> <図> <図> <図> <図> <図> <図> <図> <図> <図>
ステップ1: 1SheeldをArduinoボードに置き、ArduinoをラップトップまたはPCに接続します。
ステップ2: 1Sheeldアプリケーションをスマートフォンにダウンロードします。このアプリは、GooglePlayストアのhttp://1sheeld.com/app
で入手できます。ステップ3: 1SheeldライブラリをダウンロードするこのリンクからOneSheeldライブラリをコンピュータにダウンロードします。
ステップ4: フォルダを抽出してコピーし、Arduinoライブラリディレクトリに貼り付けます。
ステップ5: Arduinoスケッチを開きます(添付ファイルにあります)
ステップ6: スケッチをアップロードする
チュートリアル全体の最も重要な部分は、スケッチをArduinoボードにアップロードする前に、1Sheeldをアップロードモード(ボード上のUARTスイッチというラベルの付いたスイッチ)に切り替えて、1SheeldとArduinoの間のシリアル競合を回避することです。 IDEの[アップロード]ボタン。
UARTスイッチを1Sheeldロゴから離すと、アップロードモードがオンになります。アップロードが完了したら、1Sheeldを操作モードに戻す必要があります。
忘れないでください! UARTスイッチを動作モードに戻さないと、1SheeldとArduinoボード間の通信がないため、プロジェクトは正しく機能しません。 UARTスイッチが1Sheeldロゴの最も近くに押されると、動作モードがオンになります。
ステップ7: 1Sheeldアプリケーションを使用するAndroidスマートフォンで1Sheeldアプリケーションを開きます。アプリケーションは最初にBluetoothを介して1Sheeldをスキャンします。数秒かかり、電話がそれを検出します。画面に1Sheeld#xxxxと表示されたら、ペアリングコード(デフォルトのペアリングコードは1234)を入力し、Bluetooth経由で1Sheeldに接続する必要があります。
注: 問題が発生した場合は、AndroidスマートフォンのBluetoothがオンになっていることと、Androidスマートフォンが1Sheeldの近くにあることを確認してください。
ステップ8: シールドリストからゲームパッドシールド、オリエンテーションシールド、ミュージックプレーヤーシールド、トグルボタンシールドとターミナルシールドを選択し、アプリの右上にある複数のシールドアイコンを押します。
ステップ9: ロボットに電力を供給すると、ゲームパッドを使用して手動で制御する場合は、デフォルトでスタンバイモードで動作します。トグルボタンのシールドにアクセスし、ピン2を選択して、オンを押します。スタンバイモードに戻りたい場合は、OFFを押してください。
ステップ10: 方向センサーを使用して手動で制御する場合は、トグルボタンシールドにアクセスし、ピン3を選択して、オンを押します。ピン2のステータスがLOWであることを確認してください。
F5KJZGXIKMXG3DG.ino
ステップ8:Maker Faire NewYorkのサウロン <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図>
では、Maker Faire NewYorkでファンの間でサウロンを見てみましょう:)
ステップ9:今後の作業 <図> <図>
この指導可能なことについて: ロボットを組み立ててから3つのモードを試しながらビデオを録画します。
ロボットの頭について: この反復では、コストを削減することにしたので、頭に3つのモーターのみを使用しました。次の反復では、残りのモーターを追加し、目の部分(まぶた、アイブラケット、アイリング、クレビスピン、眼球)を3Dプリントします。シェル)
ロボットのベースについて: 固定ベースを4メカナムホイールロボットベースに交換して、ロボットが自由に動くことができるようにします。Solidworksでベースの設計を完了しましたが、ロボットとマージする時間がありません。
コード
- SauronArduinoコード
SauronArduinoコード Arduino
#define CUSTOM_SETTINGS#define INCLUDE_GAMEPAD_SHIELD#define INCLUDE_MUSIC_PLAYER_SHIELD#define INCLUDE_TERMINAL_SHIELD#define INCLUDE_ORIENTATION_SENSOR_SHIELD / * 1Sheeldライブラリをインクルードします。 * /#include#include サーボrightArm_Motor1;サーボrightArm_Motor2;サーボrightArm_Motor3;サーボleftArm_Motor1;サーボleftArm_Motor2;サーボleftArm_Motor3;サーボneckHorizontal;サーボneckVertical;サーボマウス; int modePin2 =3; volatile int modeState1 =LOW; volatile int modeState2 =LOW; volatile boolean gamepadMode_Enabled =false; volatile boolean imitationMode_Enabled =false; const int ledPin1 =A0; const int ledPin2 =A1; // ------- ----------------------------------- void setup ------------- -------------------------------------- void setup(){//通信を開始しますOneSheeld.begin (); //いくつかのピンを出力として設定しますpinMode(modePin1、INPUT); pinMode(modePin2、INPUT); // Ledを出力として設定し、HIGH "Saurons Eye" pinMode(ledPin1、OUTPUT); pinMode(ledPin2、OUTPUT); digitalWrite(ledPin1、HIGH); digitalWrite(ledPin2、HIGH); // Mega、Mega2560、MegaADK(2、3、18、19、20、21)を使用するときに割り込みに使用できるデジタルピンattachInterrupt(digitalPinToInterrupt(modePin1)、gampadMode_ChangeISR、CHANGE); attachInterrupt(digitalPinToInterrupt(modePin2)、imitationMode_ChangeISR、CHANGE); / *信号ピン(オレンジ)をモーターからArduinoメガPWMピンに直接接続し、Arduinoからではなく電源からモーターに電力を供給します。次にArduinoの両方のグランドと電源を相互に接続します* / rightArm_Motor1.attach(4); rightArm_Motor2.attach(5); rightArm_Motor3.attach(6); leftArm_Motor1.attach(7); leftArm_Motor2.attach(8); leftArm_Motor3.attach(9); NickHorizontal.attach(10); NickVertical.attach(11); mouse.attach(12); //ホームポジションrightArm_Motor1.write(95); rightArm_Motor2.write(150); rightArm_Motor3.write(20); leftArm_Motor1.write(90); leftArm_Motor2.write(45); leftArm_Motor3.write(180); NickHorizontal.write(105); NickVertical.write(30); mouth.write(100);} // ---------------------------------- void loop ---- ----------------------------------------------- void loop( ){modeState1 =digitalRead(modePin1); modeState2 =digitalRead(modePin2); //常に目的のモードを確認しますif(modeState1 ==HIGH){Terminal.println( "GamePad Mode selected"); gamePadMode(); } //ピン12 =高->ゲームパッドモードelseif(modeState2 ==HIGH){Terminal.println( "イミテーションモードが選択されました"); imitationMode(); } //ピン13 =高->模倣モードelse {Terminal.println( "スタンバイモードが選択されました");スタンバイモード(); }} // void loop // ----------------------------------------- voidスタンバイモード--------------------------------------------------------- voidstandbyMode( ){//スタンバイモードTerminal.println( "スタンバイモードがアクティブ化されました"); //ホームポジションTerminal.println( "1st position"); rightArm_Motor1.write(95); rightArm_Motor2.write(150); rightArm_Motor3.write(20); leftArm_Motor1.write(90); leftArm_Motor2.write(45); leftArm_Motor3.write(180); NickHorizontal.write(105); NickVertical.write(30); //音量を設定します//MusicPlayer.setVolume(10); MusicPlayer.play(); for(int i =0; i <=19; i ++){mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); } // MusicPlayer.pause();の場合mouth.write(100); OneSheeld.delay(3000); // ------------------------------------------------ ---- //常に目的のモードを確認するif(gamepadMode_Enabled ==true){Terminal.println( "システムが中断され、GamePadモードがアクティブになります"); gamePadMode(); } //ピン12 =高->ゲームパッドモードelseif(imitationMode_Enabled ==true){Terminal.println( "システムが中断され、今すぐ模倣モードがアクティブになります"); imitationMode(); } //ピン13 =高->模倣モードelse {//シーケンスの残りを完了します//ヘッドを移動します90-> 0-> 180-> 90 Terminal.println( "2番目の位置"); rightArm_Motor1.write(95); rightArm_Motor2.write(150); rightArm_Motor3.write(20); leftArm_Motor1.write(90); leftArm_Motor2.write(45); leftArm_Motor3.write(180); NickHorizontal.write(105); OneSheeld.delay(1500); NickHorizontal.write(65); OneSheeld.delay(1500); NickHorizontal.write(140); OneSheeld.delay(1500); NickHorizontal.write(105); NickVertical.write(30); //音量を設定します//MusicPlayer.setVolume(10); MusicPlayer.play(); for(int i =0; i <=19; i ++){mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); } // MusicPlayer.pause();の場合mouth.write(100); OneSheeld.delay(3000); } // else->残りのシーケンスを完了します// ----------------------------------- ----------------- //常に目的のモードを確認しますif(gamepadMode_Enabled ==true){Terminal.println( "システムが中断され、GamePadモードがアクティブになります"); gamePadMode(); } //ピン12 =高->ゲームパッドモードelseif(imitationMode_Enabled ==true){Terminal.println( "システムが中断され、今すぐ模倣モードがアクティブになります"); imitationMode(); } //ピン13 =高->模倣モードelse {//残りのシーケンスを完了します//手を動かして頭を45度に移動しますTerminal.println( "3rd position"); rightArm_Motor1.write(15); rightArm_Motor2.write(180); rightArm_Motor3.write(0); leftArm_Motor1.write(180); leftArm_Motor2.write(30); leftArm_Motor3.write(145); NickHorizontal.write(65); NickVertical.write(30); //音量を設定します//MusicPlayer.setVolume(10); MusicPlayer.play(); for(int i =0; i <=19; i ++){mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); } // MusicPlayer.pause();の場合mouth.write(100); OneSheeld.delay(3000); } // else->残りのシーケンスを完了します// ----------------------------------- -------------- //常に目的のモードを確認しますif(gamepadMode_Enabled ==true){Terminal.println( "システムが中断され、GamePadモードがアクティブになります"); gamePadMode(); } //ピン12 =高->ゲームパッドモードelseif(imitationMode_Enabled ==true){Terminal.println( "システムが中断され、今すぐ模倣モードがアクティブになります"); imitationMode(); } //ピン13 =高->模倣モードelse {//残りのシーケンスを完了します//右手で頭を135度に移動しますTerminal.println( "4番目の位置"); rightArm_Motor1.write(15); rightArm_Motor2.write(150); rightArm_Motor3.write(30); leftArm_Motor1.write(180); leftArm_Motor2.write(30); leftArm_Motor3.write(145); NickHorizontal.write(140); NickVertical.write(30); //音量を設定します//MusicPlayer.setVolume(10); MusicPlayer.play(); for(int i =0; i <=19; i ++){mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); } // MusicPlayer.pause();の場合mouth.write(100); OneSheeld.delay(3000); } // else->残りのシーケンスを完了します// ----------------------------------- ---------------- //常に目的のモードを確認するif(gamepadMode_Enabled ==true){Terminal.println( "システムが中断され、GamePadモードがアクティブになります"); gamePadMode(); } //ピン12 =高->ゲームパッドモードelseif(imitationMode_Enabled ==true){Terminal.println( "システムが中断され、今すぐ模倣モードがアクティブになります"); imitationMode(); } //ピン13 =高->模倣モードelse {//シーケンスの残りを完了します//ヘッドを中央に移動しますTerminal.println( "5番目の位置"); rightArm_Motor1.write(15); rightArm_Motor2.write(150); rightArm_Motor3.write(30); leftArm_Motor1.write(180); leftArm_Motor2.write(30); leftArm_Motor3.write(145); NickHorizontal.write(105); NickVertical.write(30); //音量を設定します//MusicPlayer.setVolume(10); MusicPlayer.play(); for(int i =0; i <=19; i ++){mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); } // MusicPlayer.pause();の場合mouth.write(100); OneSheeld.delay(3000); } // else->残りのシーケンスを完了します// ----------------------------------- ----------------- //常に目的のモードを確認しますif(gamepadMode_Enabled ==true){Terminal.println( "システムが中断され、GamePadモードがアクティブになります"); gamePadMode(); } //ピン12 =高->ゲームパッドモードelseif(imitationMode_Enabled ==true){Terminal.println( "システムが中断され、今すぐ模倣モードがアクティブになります"); imitationMode(); } //ピン13 =高->模倣モードelse {//残りのシーケンスを完了します//手を上に移動しますTerminal.println( "6番目の位置"); rightArm_Motor1.write(110); rightArm_Motor2.write(0); rightArm_Motor3.write(45); leftArm_Motor1.write(90); leftArm_Motor2.write(180); leftArm_Motor3.write(145); NickHorizontal.write(105); NickVertical.write(30); //音量を設定します//MusicPlayer.setVolume(10); MusicPlayer.play(); for(int i =0; i <=19; i ++){mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); } // MusicPlayer.pause();の場合mouth.write(100); OneSheeld.delay(3000); } // else->残りのシーケンスを完了します// ----------------------------------- -------------- //常に目的のモードを確認しますif(gamepadMode_Enabled ==true){Terminal.println( "システムが中断され、GamePadモードがアクティブになります"); gamePadMode(); } //ピン12 =高->ゲームパッドモードelseif(imitationMode_Enabled ==true){Terminal.println( "システムが中断され、今すぐ模倣モードがアクティブになります"); imitationMode(); } //ピン13 =高->模倣モードelse {//残りのシーケンスを完了します/ *手を横に動かしますo- | -^ * / Terminal.println( "7番目の位置"); rightArm_Motor1.write(110); rightArm_Motor2.write(80); rightArm_Motor3.write(60); leftArm_Motor1.write(90); leftArm_Motor2.write(115); leftArm_Motor3.write(140); NickHorizontal.write(105); NickVertical.write(30); //音量を設定します//MusicPlayer.setVolume(10); MusicPlayer.play(); for(int i =0; i <=19; i ++){mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); } // MusicPlayer.pause();の場合mouth.write(100); OneSheeld.delay(3000); } // else->残りのシーケンスを完了します// ----------------------------------- ---------------- //常に目的のモードを確認するif(gamepadMode_Enabled ==true){Terminal.println( "システムが中断され、GamePadモードがアクティブになります"); gamePadMode(); } //ピン12 =高->ゲームパッドモードelseif(imitationMode_Enabled ==true){Terminal.println( "システムが中断され、今すぐ模倣モードがアクティブになります"); imitationMode(); } //ピン13 =高->模倣モードelse {//シーケンスの残りを完了します//右側を打ちますTerminal.println( "8番目の位置"); rightArm_Motor1.write(0); rightArm_Motor2.write(0); rightArm_Motor3.write(45); leftArm_Motor1.write(90); leftArm_Motor2.write(45); leftArm_Motor3.write(180); OneSheeld.delay(500); rightArm_Motor1.write(180); rightArm_Motor2.write(0); rightArm_Motor3.write(45); OneSheeld.delay(1000); rightArm_Motor1.write(95); rightArm_Motor2.write(150); rightArm_Motor3.write(20); NickHorizontal.write(105); NickVertical.write(30); //音量を設定します//MusicPlayer.setVolume(10); MusicPlayer.play(); for(int i =0; i <=19; i ++){mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); } // MusicPlayer.pause();の場合mouth.write(100); OneSheeld.delay(3000); } // else->残りのシーケンスを完了します// ----------------------------------- --------------- //常に目的のモードを確認しますif(gamepadMode_Enabled ==true){Terminal.println( "システムが中断され、GamePadモードがアクティブになります"); gamePadMode(); } //ピン12 =高->ゲームパッドモードelseif(imitationMode_Enabled ==true){Terminal.println( "システムが中断され、今すぐ模倣モードがアクティブになります"); imitationMode(); } //ピン13 =高->模倣モードelse {//シーケンスの残りを完了します//左側のストライクTerminal.println( "9番目の位置"); rightArm_Motor1.write(95); rightArm_Motor2.write(150); rightArm_Motor3.write(20); leftArm_Motor1.write(90); leftArm_Motor2.write(180); leftArm_Motor3.write(110); OneSheeld.delay(500); leftArm_Motor1.write(0); leftArm_Motor2.write(180); leftArm_Motor3.write(110); OneSheeld.delay(1000); leftArm_Motor1.write(90); leftArm_Motor2.write(45); leftArm_Motor3.write(180); NickHorizontal.write(105); NickVertical.write(30); //音量を設定します//MusicPlayer.setVolume(10); MusicPlayer.play(); for(int i =0; i <=19; i ++){mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); } // MusicPlayer.pause();の場合mouth.write(100); OneSheeld.delay(3000); } // else->残りのシーケンスを完了します// ----------------------------------- ------------------ //常に目的のモードを確認するif(gamepadMode_Enabled ==true){Terminal.println( "システムが中断され、GamePadモードがアクティブになります"); gamePadMode(); } //ピン12 =高->ゲームパッドモードelseif(imitationMode_Enabled ==true){Terminal.println( "システムが中断され、今すぐ模倣モードがアクティブになります"); imitationMode(); } //ピン13 =高->模倣モードelse {//シーケンスの残りを完了します//ミュージックプレーヤーを再生し、ロボットの口を動かしますTerminal.println( "ホームポジションに戻る"); rightArm_Motor1.write(95); rightArm_Motor2.write(150); rightArm_Motor3.write(20); leftArm_Motor1.write(90); leftArm_Motor2.write(45); leftArm_Motor3.write(180); NickHorizontal.write(105); NickVertical.write(30); //音量を設定します//MusicPlayer.setVolume(10); MusicPlayer.play(); for(int i =0; i <=49; i ++){mouth.write(100); OneSheeld.delay(150); mouth.write(75); OneSheeld.delay(150); } // MusicPlayer.pause();の場合mouth.write(100); Terminal.println( "完了"); } // else->残りのシーケンスを完了します} // voidスタンバイモード// ----------------------------- ------------ voidゲームパッドモード----------------------------------- ---------- void gamePadMode(){Terminal.println( "ゲームパッドモードがアクティブ化されました"); //ゲームパッドボタンのステータスを常に確認しますif(GamePad.isUpPressed()){//両手を上に移動しますTerminal.println( "Up is Pressed"); rightArm_Motor1.write(110); rightArm_Motor2.write(0); rightArm_Motor3.write(45); leftArm_Motor1.write(90); leftArm_Motor2.write(180); leftArm_Motor3.write(145); NickHorizontal.write(105); NickVertical.write(30); mouth.write(100); } //上を押すif(GamePad.isDownPressed()){//両手を上に動かすTerminal.println( "下を押す"); rightArm_Motor1.write(110); rightArm_Motor2.write(170); rightArm_Motor3.write(45); leftArm_Motor1.write(90); leftArm_Motor2.write(20); leftArm_Motor3.write(145); NickHorizontal.write(105); NickVertical.write(30); mouth.write(100); } //下が押された場合if(GamePad.isRightPressed()){//右側に移動Terminal.println( "右が押された"); rightArm_Motor1.write(110); rightArm_Motor2.write(80); rightArm_Motor3.write(60); leftArm_Motor1.write(90); leftArm_Motor2.write(20); leftArm_Motor3.write(145); NickHorizontal.write(105); NickVertical.write(30); mouth.write(100); } //右が押された場合if(GamePad.isLeftPressed()){//左側に移動Terminal.println( "左が押された"); rightArm_Motor1.write(110); rightArm_Motor2.write(170); rightArm_Motor3.write(45); leftArm_Motor1.write(90); leftArm_Motor2.write(115); leftArm_Motor3.write(140); NickHorizontal.write(105); NickVertical.write(30); mouth.write(100); } //左が押された場合if(GamePad.isRedPressed()){//コンボ1 Terminal.println( "赤が押された"); rightArm_Motor1.write(180); rightArm_Motor2.write(45); rightArm_Motor3.write(100); leftArm_Motor1.write(90); leftArm_Motor2.write(180); leftArm_Motor3.write(110); NickHorizontal.write(105); NickVertical.write(30); mouth.write(100); } //赤が押された場合if(GamePad.isOrangePressed()){//コンボ2 Terminal.println( "オレンジが押された"); rightArm_Motor1.write(15); rightArm_Motor2.write(100); rightArm_Motor3.write(0); leftArm_Motor1.write(180); leftArm_Motor2.write(100); leftArm_Motor3.write(180); NickHorizontal.write(105); NickVertical.write(30); mouth.write(100); } //オレンジが押された場合if(GamePad.isGreenPressed()){//コンボ3 Terminal.println( "緑が押された"); rightArm_Motor1.write(95); rightArm_Motor2.write(45); rightArm_Motor3.write(120); leftArm_Motor1.write(90); leftArm_Motor2.write(135); leftArm_Motor3.write(60); NickHorizontal.write(105); NickVertical.write(10); mouth.write(100); } //緑が押された場合if(GamePad.isBluePressed()){//コンボ4 Terminal.println( "青が押された"); rightArm_Motor1.write(90); rightArm_Motor2.write(0); rightArm_Motor3.write(90); leftArm_Motor1.write(180); leftArm_Motor2.write(45); leftArm_Motor3.write(180); NickHorizontal.write(105); NickVertical.write(30); mouth.write(100); } //青が押されている} //ゲームパッドモード// ------------------------------------- ---- voidイミテーションモード------------------------------------------- void imitationMode(){//イミテーションモードTerminal.println( "イミテーションモードがアクティブ化されました"); if(OrientationSensor.getY()> -90 &&OrientationSensor.getY()<=90){leftArm_Motor1.write(map(OrientationSensor.getY()、-90、90、0、180)); } if(OrientationSensor.getZ()> -70 &&abs(OrientationSensor.getZ())<=70){leftArm_Motor2.write(map(OrientationSensor.getZ()、0、60、100、160)); leftArm_Motor3.write(map(OrientationSensor.getZ()、0、60、160、100)); }} //ボイドイミテーションモード// ----------------------------------------- -------------------------------------------------- ---------------- // -------------------------------- ------------モードISR ------------------------------------ ---------------- // -------------------------------- -------------------------------------------------- ------------------------- void gampadMode_ChangeISR(){if(gamepadMode_Enabled &&!imitationMode_Enabled){gamepadMode_Enabled =false; imitationMode_Enabled =false; } else {gamepadMode_Enabled =true; imitationMode_Enabled =false; }} // gampadMode_ChangeISR // ------------------------------------------- -------------------------------------------------- --------------- void imitationMode_ChangeISR(){if(imitationMode_Enabled &&!gamepadMode_Enabled){gamepadMode_Enabled =false; imitationMode_Enabled =false; } else {gamepadMode_Enabled =false; imitationMode_Enabled =true; }} // imitationMode_ChangeISR
回路図
製造プロセス