Arduinoゲームコントローラー
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 12 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
| ||||
| ||||
|
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
ビデオ
イントロ
したがって、この投稿は「DIYゲーミングUSBコントローラー」に関するものになります。 最近ElectroPunkzLabsで取り組んでいます。
ここでのアイデアは、ゲームのプレイに使用できるボタンとアナログジョイスティックを備えた安価なAtmega32UベースのUSBコントローラーを作成することです
NFS、GTA、半減期、リトルファイター2! など
コントローラーは2つのフォームファクターで作成されています。1つはPS1またはSNES構成に基づいており、もう1つはアナログスティックとボタンを備えたストレートアップXbox USBコントローラーです(まだ完成していません)
<図>この投稿では、PS1レイアウトコントローラーであるV1を作成します!
プロジェクトのビデオを最初に見る方が良いです-
材料
ハードウェアは非常にシンプルで入手が簡単です(PCBを除いて、PCBの添付PDFファイルを使用して独自に作成できます)
- Arduino Leonardo / Pro Micro / Atmega32U
- ボタン(ティックタックスイッチ)
- カスタムエッチングされたPCB(ボタンマトリックスPDFが添付されています)
- 10K抵抗器
- ジャンパー線
ありがとう UTSOURCE.netは、このプロジェクトに電子部品を提供します! UTSOURCE.netを確認できます。たとえば、このプロジェクトで使用されているすべてのコンポーネントなど、あらゆる種類の電子部品を扱っています。
構築プロセス (配線、組み立て 、など)
最初に行う必要があるのは、基本セットアップを準備することです。これは、基本的には、ProMicroを使用してプルダウン構成で接続された12個のプッシュボタンです。基本的にはこれです-
これをブレッドボードでテストし、上記の回路図に従ってPCBを準備しました。
<図> <図>PCBを(OrCadケイデンスで)作成した後、そのTOPLayerのPDFを光沢紙に印刷しました。
光沢紙をPCBの形状に合わせてカットし、銅製のコート紙の上に置き、熱を加えて、光沢紙から銅製のコート紙にインクを転写します。 (基本的なトーン転送方法、このトピックに関する私のビデオをご覧ください)
<図>PCBの準備ができたら、エッチング液に落とし、PCBをエッチングします。その後、コンポーネントと DIYゲームコントローラーPCB にドリルで穴を開けました。 準備ができました!
次に、回路図に従ってすべてをその上に置くだけで、回路の準備が整いました。
回路の準備ができたら、Fusion360のコントローラー用のPCBハウジング/ケースを設計して3Dプリントしました。
<図>コードをアップロードして、ゲームをプレイするだけです。
コード
ProMicroで提供されているコードをアップロードします。
アドバイスの言葉、最初にボード/セットアップを徹底的にテストし、PCBトレースの抵抗と接続性を確認します。何かが欠落していると、接地線が欠落しているとピンに不規則な信号が送信され、プロマイクロが維持されるため、キーボードエラーが多く発生します。ランダムキーを押すと、Promicroの再プログラミングが非常に困難になります。
テスト
最初に行う必要があるのは、メモ帳を開き、コントローラーのキーを押し始め、プレスのキーが割り当てられた正しい単語を表示しているかどうかを確認することです
または、キーボードテストアプリまたはウェブアプリを使用します。
すべてがコードに従って機能している場合は、ゲームを開いて、このDIYゲームコンソールでプレイを開始してください!
ビデオを見る-
さらなる改善
さて、このセットアップに最初に追加するのは、XBOX ONE CONSOLEのように、プレーヤーをナビゲートするためにマウスを使用する適切なゲームをプレイするためのアナログジョイスティックです。
V2にはXBOXOne Controllerレイアウトを備えた適切なPCBが搭載されているので、しばらくお待ちください。
何か問題があればコメントを残してください!
コード
- コード
CODE C / C ++
#includeint WPin =2; // UP int SPin =3; // DOWNint APin =4; // LEFT int DPin =5; // RIGHTint UPLpin =7; //左上のQintUPRpin =9; //右上のXpin =14; // xint Apin =10; // iint Ypin =15; // yint Bpin =16; // bvoid setup(){pinMode(WPin、INPUT); pinMode(SPin、INPUT); pinMode(APin、INPUT); pinMode(DPin、INPUT); pinMode(UPLpin、INPUT); pinMode(UPRpin、INPUT); pinMode(Xpin、INPUT); pinMode(Apin、INPUT); pinMode(Ypin、INPUT); pinMode(Bpin、INPUT); digitalWrite(WPin、HIGH); digitalWrite(SPin、HIGH); digitalWrite(APin、HIGH); digitalWrite(DPin、HIGH); digitalWrite(UPLpin、HIGH); digitalWrite(UPRpin、HIGH); digitalWrite(Xpin、HIGH); digitalWrite(Apin、HIGH); digitalWrite(Ypin、HIGH); digitalWrite(Bpin、HIGH); Keyboard.begin(); } void loop(){if(digitalRead(WPin)==0){Keyboard.write( 'W'); delayMicroseconds(1); } if(digitalRead(SPin)==0){Keyboard.write( 'S'); delayMicroseconds(1); } if(digitalRead(APin)==0){Keyboard.write( 'A'); delayMicroseconds(1); } if(digitalRead(DPin)==0){Keyboard.write( 'D'); delayMicroseconds(1); } if(digitalRead(UPLpin)==0){Keyboard.write( 'q'); delayMicroseconds(1); } if(digitalRead(UPRpin)==0){Keyboard.write( 'e'); delayMicroseconds(1); } if(digitalRead(Xpin)==0){Keyboard.write( 'x'); delayMicroseconds(1); } if(digitalRead(Apin)==0){Keyboard.write( 'i'); delayMicroseconds(1); } if(digitalRead(Ypin)==0){Keyboard.write( 'y'); delayMicroseconds(1); } if(digitalRead(Bpin)==0){Keyboard.write( 'b'); delayMicroseconds(1); }}
カスタムパーツとエンクロージャー
回路図
製造プロセス