【DS Lite分解】GBAの操作を自動化したい【YouTube同時更新】

こんにちは、ますたーです。

 

今回は、16年前のゲーム機「Nintendo DS Lite」を分解して、Arduinoを使ってGBAの操作を自動化する、という記事です(21年前のゲームキューブの自動化はコチラ)。

筆者が電気回路も電子工作も、文字通り「経験0」から独学でカタチになったので、参考になれば幸いです。今回は動画も多めです。

 

※本ブログに初めてお越しの方は「本ブログについて」もぜひ、ご覧ください。

【!】本記事は、DS Liteの分解とはんだ付け(広義のハードウェア改造)を含みます。
【!】本記事でのみ、Arduino「UNO」を使って動作検証しています*1

 

概要

今回は、ArduinoとDSを銅線で接続してNintendo DS Lite」のキー操作をジャックしました。

動作確認がてら、ポケモンエメラルド版の「さいはてのことう*2」のミュウの色違い厳選を自動化してみました。

Arduinoを使ってNintendo DS Liteの操作を自動化した。GBA対応ゲームもしっかり操作可能だ

もくじです。いつも以上に盛りだくさん!

1章は、私がDS Liteの自動化に踏み切ったきっかけと先駆者の紹介、2章は準備する機材・道具の紹介、3章が本題(DS Liteの分解~はんだ付け~プログラム)です4章に、エメラルド版で「ミュウの色違い」を厳選するプログラムのソースコードと使い方を紹介、5章が、実際に利用した機材の購入リンクです。

 

お急ぎの方は、「3.DS Liteの操作自動化」から読むと良いかもしれません。

 

1.DS自動化のモチベーション

1-1.Nintendo DS LiteGBAが遊べる最新の互換機

まずは、DS Liteについての紹介です。もちろん読み飛ばしOK。

DS Liteは、ゲームボーイアドバンスGBA)の対応ソフトを遊ぶことができる最後の公式互換機です。発売は2006年3月なので、2022年5月現在、DS Liteは「16年前」のゲーム機ということになります。

純正のGBAの互換機・後継機としては「ゲームボーイアドバンスSPGBA SP;2003.2発売)」や「Nintendo DS(2004.12発売)」「ゲームボーイミクロGBM;2005.9発売)」などがありますが、シングルプレイに限って言えば「Nintendo DS Lite」に軍配が挙がります。

理由は「充電しながらゲームができる*3」「液晶が明るい」「充電が長持ち」など、既存のGBA互換・後継機と比しても、DS Liteは遊ぶ上でのストレスが少なく、入手性も優れているからです*4

GBA SPやDS Liteはまだまだ現役で稼働する。ポケモンRSEやFRLGなどの名作ソフトも多い

1-2.GBAポケモンは2022年現在も完全互換

前述の通り、DSではGBAのソフトが遊べるため、ポケモンRSE・FRLGなどのアドバンス対応ソフトに対応しているのはもちろんのこと、ダブルスロットによりパルパークを経由してDPPt・HGSSにつれてくることもできます*5。すなわち、GBAで入手・育成・厳選したポケモンも、Switch(剣盾)まで連れてくることができます

「Pokemon HOME」を使えば3DSポケモンバンクからSwicthに連れてくることができる

一方で、2022年2月16日、任天堂より2023年3月下旬に「ニンテンドーeショップ」のサービスが終了する旨がリリースされました。これはすなわち、3DSポケモンたちを「Pokemon HOME」に連れてくるための「ポケモンバンク」のDLソフト販売が終了する、ということを意味していますが、すでにDLしたソフトとしての「ポケモンバンク」は、少なくともサービス券の期間中は稼働するので、ポケモンには軽微な影響だったと言えます*6

ポケモン界隈では、GBA・DSの互換切りだと(一部のユーザーやメディアが早合点して)一時騒然としていましたが、同年3月18日には「ポケモンバンク」がeショップ終了同日に無償化する案内もあり、ひとまず、完全な互換切りの心配はなくなりました

とは言え、ポケモンの移動にサブスク型Webサービスを利用している以上、GBA/DSのポケモンが半永久的に移動できるとは限らないため、いよいよ本格的に、GBA/DSのポケモンはできるだけ早めに厳選/色厳選/オシャボ厳選/リボン集めを済ませておく必要が出てきたと言えます。もちろん、思い出の旅パ・育成済ポケモンたちも折を見て連れてくるべきでしょう。

当時を旅した懐かしの面々も、早めにPokemon HOMEに連れてきておこう。
親名やニックネームに時代や、自分の黒歴史を感じるかも!?

いずれにしても、裏を返せば2022年度中はGBA/DSの互換切りに怯えることなく厳選ができる、ということなので、これを好機と捉えて厳選にチャレンジしてみてはいかがでしょうか。

 

1-3.GBAやDSのポケモン厳選を自動化したい

さて、本題(まだ今回の実施に至った背景)です。

「いまさらGBAの厳選?」「DSってwww」と思われるかもしれませんが、この令和4年の現在においても過去作でしか入手・厳選できないポケモンが一定数いる、というのも事実です。

ところが、第3世代・第4世代をはじめとする過去作限定ポケモンの(色)厳選は苦行じみたものも多く*7環境によっては色厳選ができない場合*8もあり、非常に骨が折れます。

配達員からマナフィのタマゴを受け取ったROMでは色違いが出現しない(ブロックルーチン)

もちろん、過去作でしか入手できない「リボン」があることも、コンプ勢には重要な要素*9です(例えば、RSEのマスターランクコンテストでの高得点優勝でもらえる「にがおえリボン」など)。

リボンコンプも重要なやりこみ要素。過去作でしか入手できないリボン(二つ名)も存在する。

これらは、やりこみ要素としては申し分ないですが、いつかに迫る「サービス終了」というタイムリミットがあるとなると苦しいと感じる方も多いはずです(少なくとも筆者は色厳選は「のんびり」やりたいです)。

そこで、DS Liteの操作をArduinoで操作できるようにジャックできれば、GBAもDSも自動で操作できるようになるため、この部分での作業効率化や、厳選の易化が図れます*10

前置きが長くなりましたが、本記事ではDS LiteArduinoで操作するための改造(分解とはんだ付け)ならびにArduinoとの配線、基本的なプログラムの作り方について解説していきます。

 

1-4.先駆者もDSの自動化に成功している(参考)

余談ですが、電子工作も回路設計も未経験(ド素人)の筆者が、「DSの自動化をしよう!」と踏み切ったのには、偉大なる先駆者(成功者)の記事やブログ、アドバイスが大いに参考になり、「これならできるかも!」となったからです。

中でも下記ブログは、非常に参考にさせていただきました(下記参考記事ではボードとして「ラズベリーパイ」と呼ばれるミニコンピュータを使っています)。この場を借りて御礼申し上げます。

shibi-rr.hatenablog.com

 

また、下記ツイートには、私が実装する上でのエッセンスをいただきました。こちらも、この場を借りて御礼申し上げます(わかる人にはこれだけでわかる)。

 

2.DS Liteの自動化に必要なもの

本章では、DS Liteの分解・配線ならびにArduinoでの操作を行う上で必要となる機材・ソフトウェアについて紹介します。

「すでに持っているよ!」という方は→3.DS Liteの操作自動化 まで読み飛ばす。

2-1.必要なもの(ハードウェア)

詳しくは、筆者の利用機材一覧として後述しますが、まずは、下記に挙げるものが手元にあるかを確認してください。

特に、DS Liteの分解には、特殊な「Y字」のドライバーが必要です。この記事を読んでいる人で持っていない人は少ないかもしれませんが、念のためご確認をお願いします。

 →5.筆者が利用している機材一覧(購入リンク)

 

【必要な機材】

その他、あると便利なものは下記です(本記事では使う前提で書いています)。

  • ブレッドボード
  • ジャンパーケーブル(オス-オス)
  • 鰐口-ジャンパーピン 接続ケーブル
  • 作業用マット(カッターマットなど、ある程度熱に強くて汚れても良いもの)
  • 9V ACアダプター(センタープラス/1A/5.5mm(内径2.1mm)ジャック)

 

2-2.必要なもの(ソフトウェア)

Arduinoにプログラムを書き込むソフトウェア「Arduino IDE」が必要です。

本ブログ読者であれば、ほとんどの方が「Arduino IDE」のインストールを済ませていると思いますが、もし「まだインストールしていない」という方は、下記を参考にセットアップしてください*13

tangential-star.hatenablog.jp

 

 

3.DS Liteの操作自動化

さて、ここからが本題です。

DSの操作自動化のためには、大きく分けて3つの鬼門(手順)があります。

  1. DSの分解
  2. はんだづけ
  3. プログラム(Arduino配線)

特に、「1.DSの分解」は繊細な作業が求められる上、ちょっとしたミスでDSが起動しなくなります(筆者はDSを1台、壊してしまいました)。

ハードルがなかなか高かったので、初心者にはオススメしませんが、私自身が完全初心者(電子工作経験0、電子回路も読めない)で最後までなんとかやりきれたので、興味がある方は是非チャレンジしてみてください。

本ブログ記事では、初心者の私が調べてみて&実践してみて「はぁ??まじでわからんぞ!?」となった部分は、重点的に解説しているつもりです。なんなら、どこよりも詳しく書いたつもりです。

気が早いですが「参考になった」「チャレンジしてみた」という方は是非コメントや拡散をお願いします←

 

3-1.DS Liteの分解【YouTube動画あり】

まずは、DS Liteの分解です。多分、私が最も心理的ハードルが高かった部分です。

手順としては、本ブログ記事に詳細を載せますが「百聞は一見にしかず」とも言いますので、まずは動画を見ていただくことを推奨します(頑張ってYouTubeに動画をアップしました。参考になったら高評価をお願いします)。

YouTube動画「DS Liteを分解してボタンを外すまでの手順解説【DS分解・組み立て】」

 

なお、DSを分解するだけなら前半5分の視聴で大丈夫です(後半5分は、組み立て直す手順です)。また、本記事は動画の内容を補完するように書いておりますので、合わせてご参考いただければ幸いです。

もちろん「DSの分解はできる」という方は「3-2.はんだ付け」まで読み飛ばしOK。

 

DS分解-手順1.ネジを外してシェル(カバー)を外す

まずは、背面のネジを外します。プラスドライバーとY字ドライバーの2種類が必要です。底面滑り止めのゴムの裏にもネジ穴があるので、忘れずに外します。

見えにくいですが、DSのカートリッジを差し込むスロット入り口にも黒色のネジ(Y字)があるのでこれも確実にはずしてください。ネジをはずさずに無理にシェルを外すと破損します。また、電池蓋の内側にプラスネジが2箇所、Yネジが1箇所ありますので、これも間違えずに外しておきましょう。

DS Lite底面のネジは+型とY字型の2種類。滑り止めの裏にもあるので注意。

すべてのネジを外したら、底面のシェルが外せるようになります。底面シェルとDS本体は「ツメ」で固定されている状態なので、隙間を見誤らずに、慎重に分解すれば簡単に取り外すことができます。

なお、普通にやっていれば大丈夫ですが、誤って基盤に付いているツマミ部分(電源とボリューム)を折らないように、注意しましょう。また、RボタンとLボタンは、鉄心・ボタン・バネの3パーツで構成されており、気を抜くとバネでどこかに飛んでいくので、目を離さないようにしましょう。

DS底面のシェルを外した状態。Rボタン・Lボタンは飛んでいきやすいので注意。
DS分解-手順2.Rボタン・Lボタンと無線モジュールを外す

シェルを外したら、続いて、「Rボタン・Lボタン」と「無線モジュール」を外していきます。無線モジュールは、DSのカートリッジスロットの左側にある、スポンジが付いているパーツです。

まず、Rボタン・Lボタンですが、それぞれ、鉄心・バネ・ボタン(プラスチック部分)の3つのパーツに分かれます。特にバネが飛んでいきやすいので、取り扱いに注意して外しましょう。また、バネが挟まっている部分は、よく見ていないと組み立て直す時に戻せなくなりますので、必要に応じて写真などを撮っておくと良いでしょう。

外し方は非常に簡単で、上に引き抜くだけです。

Rボタン・Lボタンの拡大写真。バネを挟むプラスチック支柱の位置をしっかり記憶しておこう

続いて、無線モジュールですが、こちらは基盤にささっているだけなので、上に引き上げることで取り外すことができます。ただし、無線モジュールの裏側には両面テープが貼ってあり、少々、力が必要になるので、注意しながらやりましょう。

モジュール本体を外すことができたら、黒色の銅線を無線モジュールから取り外します。銅線はコネクターで接続されているだけなので、爪などを引っ掛ければ容易に外すことができます。同様に、白色の銅線を基盤から取り外します。こちらもコネクターで接続されているため、爪などを引っ掛けることで外すことができます。

なお、これら無線モジュール・黒色・白色の銅線はいずれもDSの起動に必要なパーツです。これらのうち1つでも断線・破損するとDSが起動しなくなる*14ため、丁寧に取り扱うようにしましょう。

また、DSカートリッジ用のスロット左下のプラスネジを外すのを忘れないように注意しましょう。

無線モジュール・黒色/白色の銅線は丁寧に取り外そう。無線モジュールは裏側の両面テープに注意!

黒色の銅線は、DSスロットの下側を通しておく。左下のプラスネジを外すのも忘れずに!

 

DS分解-手順3.基盤を「とにかくゆっくり」うらがえす

無線モジュール・黒色/白色の銅線・プラスネジを外すことで、下画面の基盤が持ち上げられるようになります。この時、基盤は下画面(タッチパネル)部分と接続されているので、これも一緒に裏返しましょう。

この手順は、とにかく、ゆっくり慎重に、行ってください

Nintendo DS Lite」は、上画面・下画面の2画面が特徴的なゲーム機ですが、その上画面と下画面を支えているのは片側のヒンジでしかなく、基盤同士の接続は「フラットケーブル」しかありません。とにかく、これらの配線類に負担がかからないように細心の注意を払って基盤をうらがえすようにしましょう。

とにかく、上画面との配線類(フラットケーブル)に負荷がかからないように注意しよう

DSの分解が完了。ここからは、このDS基盤にはんだ付けをしていく

以上で、第1関門「DSの分解」が終わりました。お疲れ様でした。

ここまででかなりの気苦労があったかもしれませんが、次は「手先の器用さ・繊細さ」が求められるはんだ付けの作業です。頑張りましょう。

 

3-2.はんだ付け(配線)

ここからは、第2段階「はんだ付け」です。

もちろん「はんだ付けはできる!DSの回路も知っている!」という方は「3-3.プログラム(Arduino配線)」まで読み飛ばしOK。

 

電子工作の経験がある方にとっては、あまり抵抗が無いかもしれませんが、私のような「ハンダゴテ」未経験者にはかなりハードルが高いパートでした。

余談ですが、私が色々と調べながら作業を進める上で何が難しかったか、一言で表すと「前提知識の違い」でした。例えば、はんだごてを使った電子工作一般では、常識として「予備ハンダ」という手順があります。このように、多くのWebサイトにも語られずとも作業の前提となる部分があり、こういった、初心者として「つまづいた」ポイントは徹底的にフォローアップしています。

(注意:筆者は、完全に独学です。鵜呑みにせずにしっかり調べてください)

 

なお、はんだ付けをする際、「はんだごて」は非常に高温になります。作業場所はしっかりと広い場所を確保し、どっしりと安定した「コテ台」を使うようにしましょう。

もし、重心位置が高かったり、本体が軽すぎて「安定しない」コテ台を、やむなく使う場合には、セロハンテープなどでしっかりと固定して、多少引っ掛かかっても倒れないようにしてから使うことを推奨します。

安物で「軽い」コテ台は非常に危険なので、セロハンテープなどでしっかりと固定して使う

 

はんだ付け-手順1.「銅線」の準備(一定の長さにカット&被覆を剥いて予備ハンダ)

まずは、電子工作で回路を形成する大事な要素「銅線」の準備です。

ホビー用銅線(目安:0.12mmΦ×10芯コード)を、一定の長さにカットします。1本あたり、大体30センチあれば十分です。なお、今回の自動化では「A」「B」「X」「Y」「上」「下」「左」「右」の8キーを代替操作するので、30cm×8=2.4mは必要になります(他にもGNDの配線や、ミスした時のリカバリーのためにも銅線は利用するので、とりあえず全体で5mくらいあれば足りると思います)。

まずは銅線を適度な長さ(30cmくらい)にカットしよう。10本くらい作っておくと安心だ。

そして、銅線を適度な長さにカットしたら、両端の被覆(ビニール部分)をハサミなどで剥いていきます。コツとしては、ハサミで切り込みを入れてから、ビニール部分をねじりながら引っ張る、という感じでしょうか。

カットした銅線の両端の被覆(ビニール)部分を、ひたすら剥いていく
銅線の両端は被覆を剥いて「ねじった状態(右写真)」にするのが重要だ
(左写真のようにバラけてしまうと、はんだがうまく乗らなかったり強度が出なかったりする)

続いて、銅線への「予備ハンダ」をしていきます。「予備ハンダ」とは、はんだで基盤や銅線などを固定する前に、それぞれのパーツにはんだを馴染ませておく作業のことを言います。この作業をすることで、いわゆる「はんだ付け」が楽になったり、強度が出たりするそうです。

銅線への予備ハンダは、熱に強くて剛性のある物体(金属製の小物入れなど)に、マスキングテープなどで銅線を垂らすように固定して、被覆を剥いた部分にはんだとハンダゴテを押し当てて行います。この時、重力に沿って「上から下」にはんだ付けしていくのがポイントです*15

 

銅線への予備ハンダ。台の上から銅線を垂らして固定し、上から下にはんだをつけていく

 

はんだ付け-手順2.「DS基盤」に予備ハンダ

銅線に予備ハンダをしたら、続いて、基板側にも予備ハンダをしていきます。

手順としては、いきなりはんだをつけるのではなく、先に基盤にはんだごてのコテ先を軽く当てて基盤を温めてから、はんだを微量くっつけます(はんだごてを押し付けないように注意&周りの部品を焼かないように注意)。イメージとしては、はんだを吸い付かせるような感じです。

 

 

肝心のはんだ付けする場所ですが、各ボタンの接点は下記の通りです(計9箇所)。

  • A・B・X・Yボタンはそれぞれ、4つある接点のうち「右上」または「左下」
  • 上ボタン・下ボタンはそれぞれ、2つある接点のうち「左側」
  • 左ボタン「上側」
  • 右ボタン「下側」

また、これとは別に「GND」と呼ばれる部分にも、どこでも良いので1箇所はんだ付けが必要です。場所としては、各ボタンの接点ではない方です。本記事では、GNDとして右ボタンの上側接点に仮はんだをしています。

DS Liteの基盤で、はんだを乗せる9箇所。8ボタンそれぞれの接点とGNDの9箇所だ

 

GNDが1箇所で良い理由については、余談がてら、キー入力の仕組みを交えて軽く説明します。

各ボタンの接点とGNDが導通(電気が通る)ことで「押された」と判定されます*16

GNDはすべて共通*17しており、各ボタンのGNDではなく、どこか1箇所で良い、という理屈になります。

DSのボタン接点の動作原理(回路イメージ)。起電箇所とGNDがショートすることでボタンが押下される

 

はんだ付け-手順3.「DS基盤」と「銅線」をはんだ付け

さて、おまたせしました。いよいよDS基盤に銅線をはんだ付けして行きます。

とはいっても、銅線と基盤すでに予備はんだを済ませているため、語弊を恐れずに言えば、はんだごてのコテ先でこれらを温めて接続するだけ、です*18。手順としては「はんだごてを軽く当てて」銅線と基盤をくっつける、という表現が妥当かと思います。

なお、銅線の被覆を剥いた部分が長すぎると思わぬ断線リスクや、隣り合う銅線が接触して短絡してしまったり、DSの蓋を閉じたときに上画面と干渉したりしてしまうため、適度な長さにカットしておくと良いと思われます。経験則では、1~2mmくらいが適当かと思います。

また、GNDについては銅線の色を変えておくと、今後の作業が非常にやりやすくなります。私は、GNDの銅線を青色、それ以外を黄色にしてはんだ付けをしました。

なお、注意すべき(コツ)は「無闇矢鱈にコテ先の温度を上げすぎない」ことです。

温度を上げすぎると、「くっついたように見えるのに何故か銅線が抜け落ちる」「コテ先が酸化してはんだを溶かさなくなってしまう」などの弊害が出てくるためです。もちろん、電子部品への負担もかかるので「手早く済ませたい」という気持ちも分からなくもないのですが、これは悪手です*19

基盤と銅線にそれぞれ予備ハンダをしているので、はんだごてを軽く当てればくっつく

 

はんだ付け-手順4.DSを組み立て直す

はんだ付け、お疲れ様でした!

あとは、A, B, X, Yボタンおよび十字キーのゴムシート・ボタンを外してシェル(カバー)を組み立て直すだけです。

組み立ての手順は「分解の手順の真逆」になるので、特に説明はいらないと思いますが、はんだ付けした銅線を誤って断線させないように、注意しながら慎重に行いましょう。

なお、最も注意すべきは、フラットケーブル(上画面とくっついている、平べったい茶色のケーブル)です。これだけは何が何でも死守してください。銅線は外れても再度はんだ付けすれば済みますが、DSの部品の破損はどうにもなりません。すでに16年前のゲーム機です。換装用の上画面パーツの入手も困難を極めますので、くれぐれも気をつけて作業にあたってください。

 

 

はんだ付け-手順5.動作確認

組み立て終わったら、まずはその状態で正しく動作するかどうか検証を行います。

具体的にはDSを起動して、GNDと各ボタンの銅線を接触させるだけです。

なお、電池パックを抜いているので、DS Liteは初期化されています。電源を入れたら、動作確認がてら、諸設定を済ませておきましょう。

なお、この時、そもそもDS Liteが起動しなかったり、一瞬で電源が切れたりしてしまう際には、分解・再組み立ての手順のどこかで、DSの部品が破損または接触不良を起こしています。別のDSから不良の原因となっているパーツを交換するか、その本体の復旧は諦めて別のジャンクDSを買いに走ったほうが良いかもしれません。

 

手順通りにできていれば、ボタン部分から銅線が9本出ているオブジェのような状態だ

 

3-3.プログラム(Arduinoへの書き込みと配線)

ここまでの手順で、DSには各ボタンとGNDを合わせて9本の銅線が接続され、動作確認も済んだ状態かと思います。本当にお疲れ様でした

あとはラストスパートにしてメインディッシュ。Arduinoとの配線と、プログラムの書き込みです。

本当は、回路図の知識が求められるのですが、少なくとも「ダイオード*20』は片方にしか電流を通さない」という特性を理解しておくと、作業がスムーズかと思います。

ダイオード」は一方向にしか電流が流れない(整流)。どちらがプラス側かを確認しておこう
プログラム-手順1.DSとArduinoを配線する

まずは、DSとArduinoを配線していきます。とはいっても、手順はシンプルです。文字通り配線するだけ、です。

原則として「DS→ダイオードArduinoのデジタルピン」さえ守っておけば大丈夫ですので、よくわからなくなったら、DS側から1本ずつ接続すると良いかと思います。

【配線の手順】

  1. DS側のGNDを、ArduinoのGNDにつなぐ(GND同士を接続)
  2. DS側の銅線を1本ずつ、ダイオードの「プラス側*21につなぐ
  3. ダイオード「マイナス側*22を1本ずつ、Arduinoのデジタルピン*23の2番~13番につなぐ
  4. ArduinoとPCをUSBケーブルで接続する

DSとArduinoは「整流用ダイオード」を挟んで回路を接続する。
ダイオードの向きを間違えないように注意しよう!(GNDはそのままつないでOK)

この時、デジタルピンを使用する場合、0番ピン・1番ピンを「避けて」配線することが重要です。

下記は一例ですが、方向キーとボタンは、下記の通り配線してみてください

DSとArduinoの配線イメージ。ケーブルの色を変えておくと分かりやすいぞ

ArduinoDS Liteの配線イメージ図。0番・1番ピンを「使わない」のがポイントだ

 

プログラム-手順2.Arduinoに制御用プログラムを書き込む(ソースコード

ArduinoとDSの配線、お疲れ様でした。電子回路初心者の方には、整流用ダイオードという慣れないパーツに驚いたかもしれませんが、ここまでできてしまえば、あとはArduinoにプログラムを書き込むだけです。

 

いつも通り「Arduino IDE」を立ち上げて、下記プログラムをご自身のArduinoに書き込んでください。ただし、冒頭の8行(Ap・Bpなど)は、ご使用のピン番号にそろえて書き換えてください0番・1番への配線は避けてください)。

const int Ap = 2;
const int Bp = 3;
const int Xp = 4;
const int Yp = 5;
const int Rp = 8;
const int Dp = 9;
const int Up = 10;
const int Lp = 11;

 

Arduino Leonardoユーザー向けの注意事項】

本ブログでは、Leonardo向けのソースコードを扱うことが大半ですが、本ソースコードArduino UNO」前提でコーディングしています。PCからのコマンド受け付けにシリアル通信を利用している所以で、そのままではArduino Leonardo」で動かないかもしれませんArduino Leonardoユーザーの方で、下記プログラムで「動作しなかった」という方は、プログラム中の「Serial」を「Serial1」に置換してください

具体的には「Serial.begin(9600);」と「input = Serial.read();」の2箇所が書き換えポイントになると思います(私が持っているArduino Leonardoは2台ともPoke-Controller用のコントローラーにしておりまして、未検証なのです)。

 

DS制御用のソースコードArduino UNO用 ※Leonardo未検証

/* 
 * ■DS Liteをシリアルモニター経由で操作するための単純なプログラム。
 * Arduino IDEのシリアルモニター(Ctrl+Shift+M)で、指定コマンドを
 * 1文字ずつEbterで送信することで、DSを操作できます。
 * 
 * 有効なキーボード入力と、対応するDSのボタン:
 * 「A」:Aボタン
 * 「B」:Bボタン
 * 「X」:Xボタン
 * 「Y」:Yボタン
 * 「U」:上キー
 * 「D」:下キー
 * 「R」:右キー
 * 「L」:左キー
 * 「1」:森に入り、ミュウを追いかけてエンカウントするまでを自動化
 * 「2」:ミュウから「にげる」を押して森の外に出るまでを自動化
 * 「3」:ミュウから「にげる」を押して、もう一度ミュウと戦闘をするまで自動化
 * 「T」:森に入り、ミュウを追いかけて森から出るまでの1ループ。
 *     ※色違いが出た場合、操作がズレて「にげる」を選択しないので安心
 * 
 * ■説明書
 * Arduinoとの配線を予め済ませた上で、プログラム中のピン番号を
 * 適宜書き換えてプログラムをマイコンに書き込んでおいてください。
 * また、環境によっては移動歩数がずれることがあります。
 * ソース冒頭の「DELAYTIME」「WAITTIME」「OFFSETTIME」などを修正してください。
 * 
 * ■使い方
 * あとは、シリアルモニターを開いて、押したいキーを記入してEnterで送信してください。
 * A, B, X, Yおよび方向キーの8入力のみ対応しています。
 * (Start・Select・R・Lには対応していません。)
 * 
 * なお、シリアルモニターで、数字の1, 2, 3および「T」は、
 * エメラルド版「さいはてのことう」色ミュウ厳選プログラムになります。
 * 
 * エメラルド版(ふるびたかいず)でさいはてのことうに上陸し、
 * 森の入り口の「右側」のマスで予めセーブしてからお使いください。
 * 設定から「せんとうエフェクト(せんとうアニメ)」は「みない」にしてください。
 * 
 * 1~3は手動厳選用です。基本的には「1」でミュウとエンカウントしてから、
 * 色違いが出るまで手動で「3」を押して、再戦を繰り返します。
 * 
 * Tは自動厳選のループ検証用です。
 * Tを押すと、森に入ってミュウと戦闘、色違いじゃなければ逃げて森の外に出るまでを自動化します。
 * 色違いが出た場合は、手持ちポケモンの「いれかえる」の状態で止まります。
 * 
 * ■配線方法
 * Arduino Digitalピン←整流ダイオード←DSの各ボタンの接点
 * Arduino GNDピン―DSのGND
 * 
 * ※使用するピン番号は、プログラム冒頭に記載の通りですが、
 *  お使いの環境に合わせて編集の上、ご利用ください。
 * 
 * デフォルト設定
 * A = 2番ピン
 * B = 3番ピン
 * X = 4番ピン
 * Y = 5番ピン
 * R = 8番ピン
 * D = 9番ピン
 * U = 10番ピン
 * L = 11番ピン
 * 
 * ※利用するArduinoボードは「Arduino UNO」を想定したプログラム・配線です。
 * 理由は、3.3Vで動作するかわからなかったからです。
 * 筆者は未検証ですが、たぶん、Arduino Leonardoでも動作すると思います。
 * 
 * ***************************************************************
 * 【!】万が一、DSやArduinoが破損したり、思わぬ動作を引き起こしたりしても
 *    当然のことながら筆者は一切、責任を取りません。
 *    ご自身の責任において実行してください。
 *    よくわからない人は、使用しないでください。
 * ***************************************************************
 * 
 *  (c) ますたーの忘備録 2022  
 *  https://tangential-star.hatenablog.jp/
*/
#define OFFSETTIME (0)  // ボタンの基本長押し秒数 ミリ秒
#define DELAYTIME (242) // 1歩あたりのボタン長押し係数 ミリ秒
#define WAITTIME (180)  // ボタン押下後、次のボタンを押すまでのインターバル ミリ秒

// ご使用のマイコンのピンに応じて変更してください。
// 0, 1はシリアル通信にも使うので不向きです。
// というか使わないでください。
// (コンパイル時にケーブルがささっているとうまく書き込めなくなります)
const int Ap = 2;
const int Bp = 3;
const int Xp = 4;
const int Yp = 5;
const int Rp = 8;
const int Dp = 9;
const int Up = 10;
const int Lp = 11;


void button(const int pin_no, int hosuu=1, long int waittime=WAITTIME, long int delaytime= DELAYTIME);
// 受け取ったpin番号にHIGH, LOWを切り替える
void inputKey(int keyname, int hosuu=1, long int waittime=WAITTIME, long int delaytime= DELAYTIME);
// A, B, X, Y, U, D, R, L をchar(内部的にはint)で受け取りpin番号に変換する(上記のwrap関数)


void encountMew(void){
  // さいはてのことう 奥地に入る
  inputKey('u', 2, 3600);

  // さいはてのことう ミュウのおいかけっこ
  inputKey('u', 5);
  inputKey('r', 3);
  inputKey('u', 6);
  inputKey('r', 2);
  inputKey('u', 1);

  // ミュウに話しかけて戦闘
  inputKey('A', 1, 9400); // ミュウに話しかける~戦闘開始
  
  inputKey('B', 1, 3850); // ミュウがあらわれた!~コマンド受け付け
  inputKey('B', 1, 200); // ダミー入力
  inputKey('B', 1, 200); // ダミー入力
  inputKey('B', 1, 200); // ダミー入力
  return;
}

void runMew(void){
  inputKey('B', 1, 200); // ダミー入力
  inputKey('B', 1, 200); // ダミー入力
  inputKey('B', 1, 200); // ダミー入力
  inputKey('r', 1); // →バッグ 
  inputKey('d', 1); // →にげる 
  inputKey('A', 1, 500); // クリック
  inputKey('B', 1, 4700); // うまくにげきれた ▼
  inputKey('B', 1, 450); // ミュウは どこかへ とびさっていった!

  // 帰る
  inputKey('l', 2);
  inputKey('d', 6);
  inputKey('l', 3);
  inputKey('d', 5);

  // 出る
  inputKey('d', 2, 3600);
}

void reEncountMew(void){
  runMew();
  encountMew();
  return;
}



void test(void){
  // ループ前提で組んでいます。色違いがでるまでひたすらミュウをおいかけて話しかけては逃げてを繰り返します。
  
  // さいはてのことう 奥地に入る
  inputKey('u', 2, 3600);

  // さいはてのことう ミュウのおいかけっこ
  inputKey('u', 5);
  inputKey('r', 3);
  inputKey('u', 6);
  inputKey('r', 2);
  inputKey('u', 1);

  // ループ破綻防止用(色違いとエンカウント中の場合、カーソルが →いれかえる )
  inputKey('B', 1, 300);

  // ミュウに話しかけて戦闘
  inputKey('A', 1, 7300); // ミュウに話しかける~戦闘開始<戦闘エフェクトあり=色違い>9400
  
  inputKey('B', 1, 3850); // ミュウがあらわれた!~コマンド受け付け
  inputKey('r', 1); // →バッグ(色違いのときは →たたかう のまま)
  inputKey('B', 1, 2500); // ダミー入力
  inputKey('B', 1, 200); // ダミー入力
  inputKey('B', 1, 200); // ダミー入力
  inputKey('B', 1, 200); // ダミー入力
  inputKey('d', 1); // →にげる (色違いのときは →ポケモン)
  inputKey('A', 1, 500); // クリック
  inputKey('B', 1, 4700); // うまくにげきれた ▼
  inputKey('B', 1, 450); // ミュウは どこかへ とびさっていった!

  // 帰る
  inputKey('l', 2);
  inputKey('d', 6);
  inputKey('l', 3);
  inputKey('d', 5);

  // 出る
  inputKey('d', 2, 3600);

  // ループ破綻防止用(色違いとエンカウント中の場合、カーソルが →ポケモン 状態なので入っておく)
  inputKey('A', 1, 1550); // 手持ち先頭にカーソルがある状態
  inputKey('A', 1, 300); // →いれかえる 状態
}


void setup() {
  pinMode(Ap, OUTPUT); 
  pinMode(Bp, OUTPUT); 
  pinMode(Xp, OUTPUT); 
  pinMode(Yp, OUTPUT); 
  pinMode(Rp, OUTPUT); 
  pinMode(Dp, OUTPUT); 
  pinMode(Up, OUTPUT); 
  pinMode(Lp, OUTPUT); 
  digitalWrite(Ap, HIGH);
  digitalWrite(Bp, HIGH);
  digitalWrite(Xp, HIGH);
  digitalWrite(Yp, HIGH);
  digitalWrite(Rp, HIGH);
  digitalWrite(Dp, HIGH);
  digitalWrite(Up, HIGH);
  digitalWrite(Lp, HIGH);

  Serial.begin(9600);
}

void loop() {
  int input;
  // シリアルポートより1文字読み込む
  input = Serial.read();
  
  if(input != -1 ){
    switch(input){
    case 'A':case 'a':
    case 'B':case 'b':
    case 'X':case 'x':
    case 'Y':case 'y':
    case 'U':case 'u':
    case 'D':case 'd':
    case 'R':case 'r':
    case 'L':case 'l':
      inputKey(input);    
      break;
    case 'T':case 't':
      test();
      break;
    case '1': // 森の外から入ってMewに会うまで 
      encountMew();
      break;
    case '2': // ミュウからにげて森を出るまで
      runMew();
      break;
    case '3':
      reEncountMew(); // ミュウから逃げてもう一度戦闘するまで。(基本的にこれだけ使うようになる。)
      break;
    default:
      break;
    }
  }
}

void inputKey(int keyname, int hosuu=1, long int waittime=WAITTIME, long int delaytime= DELAYTIME){
  
  switch(keyname){
  case 'A':case 'a':
    button(Ap, hosuu, waittime, delaytime);
    break;
  case 'B':case 'b':
    button(Bp, hosuu, waittime, delaytime);
    break;
  case 'X':case 'x':
    button(Xp, hosuu, waittime, delaytime);
    break;
  case 'Y':case 'y':
    button(Yp, hosuu, waittime, delaytime);
    break;
  case 'U':case 'u':
    button(Up, hosuu, waittime, delaytime);
    break;
  case 'D':case 'd':
    button(Dp, hosuu, waittime, delaytime);
    break;
  case 'R':case 'r':
    button(Rp, hosuu, waittime, delaytime);
    break;
  case 'L':case 'l':
    button(Lp, hosuu, waittime, delaytime);
    break;
  default:
    break;
  }
  return;
}

void button(const int pin_no, int hosuu=1, long int waittime=WAITTIME, long int delaytime= DELAYTIME){
  digitalWrite(pin_no, LOW);
  delay(hosuu*delaytime+OFFSETTIME);
  digitalWrite(pin_no, HIGH);
  delay(waittime);
  return;
}

 

プログラム-手順3.動作確認(シリアルモニタからDSを操作する)

Arduinoにプログラムが書き込めたら、いよいよ動作確認です。

DSの電源を入れて、Arduino IDEで「シリアルモニタ」を開いてください(ツール→シリアルモニタ)。デフォルトのショートカットキーでは「Ctrl+Shift+M」で開くことができると思います。なお、シリアルポートはArduinoがささっているポートを選んでください。

プログラムを書き込んだら、シリアルモニタを開こう(Ctrl+Shift+Mかツール→シリアルモニタで開ける)

シリアルポートを開いたら、入力したいキーを半角英数字で入力してEnterを押してください(ゲーム機のように押したらすぐに反応するものではありません*24)。

 

【プログラムで対応している入力】

  • 基本的な操作(8入力)
    • 「A」:Aボタン(デジタルピン2番)
    • 「B」:Bボタン(デジタルピン3番)
    • 「X」:Xボタン(デジタルピン4番)
    • 「Y」:Yボタン(デジタルピン5番)
    • 「R」:右キー(デジタルピン8番)
    • 「D」:下キー(デジタルピン9番)
    • 「U」:上キー(デジタルピン10番)
    • 「L」:左キー(デジタルピン11番)
  • その他(ポケモンエメラルド:「さいはてのことう」色ミュウ厳選用)
    • 「1」:森に入り、ミュウを追いかけてエンカウントするまでを自動化
    • 「2」:ミュウから「にげる」を押して森の外に出るまでを自動化
    • 「3」:ミュウから「にげる」を押して、もう一度ミュウと戦闘をするまで自動化
    • 「T」:森に入り、ミュウを追いかけて森から出るまでの1ループ。
       ※色違いが出た場合、操作がズレて「にげる」を選択しないので安心

なお、本プログラムで対応しているキーは、はんだ付けした8箇所(上下左右・A, B, X, Yの8入力)です。それ以外にはんだ付けしている人は、適当にカスタマイズしてください(たぶん、R, L, Start, Selectは6,7,12,13あたりでピッタリ収まると思います。ピンの数が0番・1番を除いても12本ピッタリって、Arduinoすげぇなぁ)

YouTube動画「パソコンとArduinoDS Liteを操作してみた【DS改造】」

 

シリアルモニタで「a」や「b」などを入力して、送信(Enter)を押すと、DSのボタンが入力される

ちなみに、上述の通り、ポケモンエメラルドでの「『さいはてのことう』の色ミュウ厳選用」の関数も入っています*25

使用用途自体はかなり限定的ですが、「自動操作」をプログラムで書く際のサンプルとして読んでいただければと思います。

 

4.エメラルド版「さいはてのことう」ミュウ色違い厳選プログラム

さて、ここまでお疲れ様でした。これで、無事に皆様のDS Liteは、A, B, X, Yおよび方向キーの8入力をArduinoで実装できるようになりました。お疲れ様でした。

ただし、ここまでは、シリアルモニタ経由でArduinoにキー入力操作を指示してDSを操作する方法について紹介していたので、いまいちピンと来ていない方もいらっしゃると思います。

構図として「DSを操作するためのArduinoをPCで操作する」という、ある種回りくどい方法だったといえますが、本質は「ArduinoDS Liteの操作をすることができた」という点に他なりません。これを実証したのが、本章で紹介する「エメラルド版『さいはてのことう』色ミュウ厳選プログラム」です

なお、エメラルド版をお持ちでない方は、5章まで読み飛ばすか、流し見していただくと、イメージが湧くと思います。

4-1.エメラルド色厳選プログラム(ソースコード

ソースコード一式は下記Boxからダウンロードしてください。

※ご使用の際は、readMe.txtも読んで下さいね(無保証です)。
Arduino Leonardoでは動かない「かも」しれませんが、修正案はreadMe.txtに載せてあります

app.box.com

 

4-2.エメラルド色厳選プログラムの使い方

詳細はreadMe.txtに記載しておりますが、エメラルドで「さいはてのことう」の奥の森入り口でセーブして使います。この状態でArduinoを挿せば、ミュウの色厳選が始まります(使うプログラムは「DS_Emerald_shiny_mew.ino」です)。

「森に入ってミュウと追いかけっこをして戦闘、色違いでなければ逃げて森から出る」という一連の流れを1ループとして、永遠にこれを繰り返してくれます。

「さいはてのことう」奥の森の入り口(2マス)の右側で予めセーブしておこう

下準備として【必ず】下記を確認してください。特に「せんとうエフェクト」の設定は、色違いの判定に必ず必要です*26

  • 主人公
    • 「さいはてのことう」奥の森の入り口右側のマス
    • 自転車からは降りておく
  •  設定
    • はなしのはやさ:「はやい」
    • せんとうエフェクト:「みない」
  • 手持ちの先頭
    • 発動する「とくせい」を持たない(いかく・にげあし・あめふらし等)
    • 発動する「どうぐ」を持たない(けむりだま等)
    • 確実に逃げられるように、十分な「すばやさ」を持っている(実数値82以上)
設定はきちんと確認しておこう。先頭ポケモンのすばやさも要確認だ

上記を満たしていれば、しっかりとループが回るはずです(筆者環境では連続90時間程度の連続稼働は確認できております)。また、色違いが出現した場合には、誤って「逃げる」を選択したり、不要な技を使ったり、ポケモンを入れ替えたりしないよう、調整を施してあります。一応、ループの様子は下記YouTubeにもアップしております。

 

【「さいはてのことう」色違いミュウ自動厳選の様子(ループ)】

 

【「さいはてのことう」色違いミュウ遭遇後の様子(ループ)】

 

なお、長期間放置する場合はDS Liteの充電が切れないように、充電器をつけることをお忘れなく。

また、Arduinoについては、PCからのUSB給電だと(当然のことながら)「PCの電源を切ることができない」という弊害も出てくるので、で9VのACアダプター(センタープラス/1Aのもの)があると、大変はかどります

筆者が実際に使っているものについては、5章の購入リンクにまとめていますので合わせて参考にしてください。

 

4-3.色違いミュウの捕獲(手動操作への切り替え)【YouTube動画あり】

さて、自動化プログラムを使って色違いのミュウに出会えたら、手動での操作に切り替える必要があります。しかし、肝心のDS Liteは分解されており、直接操作することはできません。そこで、途中でArduinoのプログラムを書き換えて、Arduino IDEのシリアルモニタ経由で操作を行います。書き換え先のプログラムは、先にDLいただいたZIPファイルの中にある「UNO_DS_control.ino」です。

なお、ACアダプターなどで給電方法を変えている場合には、画面が「→いれかえる」になっているタイミングでArduinoの給電を止めるようにしてください。また、PC給電の方で、そのままArduinoのプログラムを書き換えるタイミングについても、同様です。

言葉だと伝わりにくいので、手順を下記動画にもアップロードしています。

 

 

以上、GBAエメラルド版の色違いミュウ厳選のプログラムについて、利用方法の解説でした。

 

5.筆者が利用している機材一覧(購入リンク)

こういう解説系の記事では「利用機材の開示」と「再現性」が大事だと考えますので、Amazon実際に購入・利用した機材を紹介いたします。皆様のチャレンジの一助となれば幸いです。

ただし、機材や環境の問題、相性の問題を吸収・保証する意図ではありませんので、あくまでも参考程度にとどめていただき、自己責任にて購入・調達いただければと思います。

言わずもがな、下記とは別に「DS Lite」が必要です。壊す覚悟で、2~3個買っておくと良いかと思います。

 

【前提】Arduino Uno Rev3 ATmega328(マイコン

今回のDS Lite自動化「では」Arduino UNOを利用しました

私は普段「Arduino Leonardo」を利用しているので、間違えないようにしてください。

また、本記事から本ブログを知った方においては、本ブログの他の記事で紹介しているプログラムは、UNOは使えませんので、悪しからずご了承ください(このあたりについて詳しくは、自動化方法の調査記事をご参考ください)。見た目は似ていますが、UNOとLeonardoは全く異なるものです。間違えないように購入しましょう。

なお、Arduino UNO・Arduino Leonardoともに、様々な互換機・類似品が販売されていますが、私は互換機ではなく純正品を購入することを強くおすすめします。

(筆者購入日:2022/4/17;購入時の金額:3,182円)

 

【前提】USBケーブル(USB-Aオス・USB-Bオス)

いわゆる「プリンタケーブル」と言えば伝わるでしょうか。

Arduino UNOとの接続は「USB-B」なので、特にLeonardoユーザーの方は注意しましょう。「micro-B」でも「mini-B」でもなく、無印の「type-B」です。

調べたところ「長過ぎる」ケーブルは、電圧降下を引き起こして動作が不安定になる可能性があるそうなので、適度な長さのものを選択しましょう。今回、私は1.8mのものを利用しました。

ちなみに、格安のケーブルを使うことはオススメしません。安いケーブル類には、粗悪なものも多いため、不具合が発生した際に、原因の切り分けが難しくなる要因となります。可能な限り、マトモなメーカーで揃えることをオススメします

なお、「USB3.x」対応のUSB-Bケーブルも多く販売されていますが、今回は「USB2.0規格」のものを利用しています(安かったので)。

(筆者購入日:2022/4/17;購入時の金額:331円)

 

【あると便利】Arduino UNO用エンクロージャー(ケース)

Arduino UNO用の専用ケースです。基盤をベタベタ素手で触ることに抵抗がある方はぜひとも購入してみてください。

今回のDS自動化でArduino UNOを初めて触りましたが、このケースが本当にぴったりハマって、感動しました(普段は、このケースを使ってLeonardoを無理やり挟んで使っていますが、やっぱりUNO用のものはUNOで使うのが最適なのだな、と感じました)。

わずか400円足らずで3500円の基盤が保護できるなら、けして「悪く無い」値段相応な買い物だと考えます。

何より、基盤上の「触るべきではない部分・パーツ」を意識せずにArduinoを触れる、という点で、開発のストレスが減るのはプライスレスな価値だと感じています。

(筆者購入日:2022/4/16;購入時の金額:370円)

 

 

【あると便利】SUCCUL ACアダプター 9V 1A センタープラス 最大出力9W

Arduino UNO/Leonardo用の給電ケーブルです。

今回のDS自動化では、4日間の放置(もとい自動化)で連続稼働をしていたわけですが、その際の給電用コードとして購入しました。

Arduinoにプログラムを書き込むので、そのままそのケーブルでパソコンに電源供給を依存する、というのも悪くないのですが、その場合、様々な弊害・不便を感じることがあります。例えば、そっくりそのまま「PCのUSBポートを専有」したり、「コードの長さを上限にパソコンの周りに展開」せざるを得なかったり、「PCの電源を落とせな」かったり…。そんな課題を解消できるのが、ACアダプターです。

なお、ACアダプターには出力電圧やワット数・端子の形状の違いもありますが、間違えやすいのが「センタープラス」「センターマイナス」という部分ですArduino UNOはセンタープラスなので、これを間違えないように注意して購入しましょう。

(筆者購入日:2020/1/28;購入時の金額:880円)

 

 

【前提】1.5mm 2.0mm  Y字ドライバー2本セット(Switch Joy-Con用)

Nintendo SwitchJoy-Con解体用のドライバーセットです。

Nintendo DS Liteの分解には、1.5mmのY字ドライバーが必要なので、もしY字のドライバーを1本も持っていなければ購入してください。

Y字は、GBAのカートリッジの分解にも使うため、少なくとも1本は持っていても損はないものだと思います。と言うか本記事を読んでいる方は、持っていないと「困る」場面も多いのでは無いでしょうか。

試していませんが、Joy-Conも解体できるそうなので、もし、さらに15年後にSwitchのジャンクを触る機会があれば、そのときにも重宝しそうですね(笑)

(筆者購入日:2022/4/16;購入時の金額:500円)

 

 

【前提】Manelord はんだごてセット 温度調節可(200~450℃)

なんと、電子工作に必要な「はんだごて」「コテ台」「交換用コテ先」「はんだ」がセットで2000円前後で買えるというオトク?なセットです。その他、「ピンセット」や「ハンダ吸い取り器」も付いてきました。肝心のはんだごてですが、怪しげな中華メーカーのものにかかわらず、ちゃんと使えました(私自身が電子工作の知識・経験が0なので、正しく使えているのか分かりませんが…)。

なお、ON/OFF機能は無いので、コンセントに挿したら温まり始めます。気をつけましょう。また、温度調節機能は一見、重宝しそうですが、基本的には220℃程度でしか使わなかったので、あまり考えなくて良いと思います(むしろ、300℃を超えて設定すると、コテ先がすごい勢いで酸化してしまい、はんだが溶けなくなったので…)。

1点だけ、重要な欠点があります。それは「コテ台」が非常に不安定であることです。めちゃくちゃ危険なので、コテ台はしっかりと卓上にテープなどで固定して使うべきだと思います。あまりにもコテ台が不安だったので、後述するコテ台を別途購入しました。安全第一なので、このセットを購入される場合には、コテ台だけは別途購入することをオススメします。使用者のレビューとして口酸っぱく言っておきます。

(筆者購入日:2022/4/16;購入時の金額:2,199円)

 

【あると便利】白光(HAKKO) こて台 FX-600/FX-601/PRESTO/DASH用

上記のはんだごてセットを使ってみて、付属「コテ台」の不安定さをとにかく「危険」だと感じたので、急遽追加で購入しました。

ちょっと引っ掛けただけで倒れてしまうようなことも無く、まさに「ちょうどよい」重さを備えた、安心感のあるコテ台です

対応型番が書いてありますが、ひとまず上記の格安はんだごても、ちゃんと収まったので買ってよかったと思います。

なお、このコテ台には、コテ先クリーナーとして、タワシみたいな金属(はんだごて用クリーナー)も一緒に付いてきます。

はんだごてクリーナーとしては、濡れスポンジよりもコテ先の温度が下がりにくい特徴があり、金属製の方が良い(コテ先が傷みにくい)とされているため、上記セットのスポンジを使うよりは、こちらを使うほうが健全だと考えます。

(筆者購入日:2022/4/24;購入時の金額:1,664円)

 

 

【あると便利】白光(HAKKO) はんだ吸取線 ウィック ノークリーン 2.5mm×2m

基盤に誤ってはんだをつけてしまった際のリカバリーに使います。

DSの基盤の場合、ミスらないではんだ付けしていくことが求められますが、これを持っているだけで「ミスってもなんとかなるかも」という心の余裕ができるので、早めに買っておけば良かったです。

使い方は、誤ってはんだをおいた場所に、吸い取り線を上からかぶせて、その上からはんだごてを当てて吸わせます。この時、吸い取り線を素手で持つと、はんだごての熱が伝わってきてすごく熱くなるので、注意しましょう。

また、なかなかはんだを吸わないからといって、無闇矢鱈にはんだごての温度を上げないように注意しましょう。たぶん、それはコテ先が酸化していて、はんだに熱が伝わりにくい状態になっているだけです。

(筆者購入日:2022/5/2;購入時の金額:440円)

 

【前提】ELPA 10芯コード 5m 2本入

電子工作のお供その1。いわゆる銅線(ビニール線)です。

何もわからず購入しましたが、今回のDSのボタンとはんだ付けするには、ちょうど良い細さでした。なお、2個セットですが、色はランダムで選べません。私が買ったのは、黄色と青色の2色入りでした。

回路を配線するにあたって、GNDと起電側を常に区別する必要があるため、色を分けて一目で見分けられるようにすると、作業効率が跳ね上がります。

長さも十分で、今回はA, B, X, Y・十字キーの8コネクタ+GNDの計9本をDS Liteにはんだ付けしてArduinoと配線しましたが、1本あたり30cm換算でも「2.7m」必要なため、余剰も含め、5mあって良かったと思いました(3.0mだと足りなかったと思います)。単価が安かったので、2個買いました。

(筆者購入日:2022/4/24;購入時の金額:182円)

 

 

【前提】一般整流用ダイオード(10本セット)

電子工作のお供その2。回路に組み込むと、1方向にしか電流を通さなくする魔法のアイテムです。

少なくとも8本は使うので、単品ではなく、10本セットや20本セットなどまとまった数での販売品を購入すると良いかと思います。

今回はArduinoまたはDS Liteで電圧差が、最低でも3V程度はあるので、ダイオードの順電圧Vfが十分に下回っているもの(例えば、Vf=1,0Vのもの)を購入しましょう。DS LiteでボタンでのGNDとの電圧差が実測3.1Vだったので、Vf=1V程度であれば問題なく動作すると思います。このVfが3Vとかだと動かないと思います。

なお、当たり前ですが、つなぐ方向を間違えるとDSは動きません(そういう部品ですからね)。

専門用語で「カソード」と呼びますが、ダイオードの黒い部分には何かしらの印(銀色の塗装のようなもの等)がある方は、出力側=マイナス側です。すなわち、ダイオードにマークが付いている方の足をArduino側のデジタルピン側」「マークがない方をDSのボタン」に接続しますので、覚えておきましょう。

(筆者購入日:2022/4/18;購入時の金額:348円)

 

【前提】ELEGOO 120pcs多色デュポンワイヤー

電子工作のお供その3

Arduinoのデジタルピンに挿すための、いわゆる「ジャンパーケーブル」です。もう片方はブレッドボードに繋いで使います。

基本的にはオス-オスしか使いませんが、オス-メスを使えば延長にもなるので、使い勝手は良かったです(まさか本ブログでジャンパーケーブルを再び使うことになろうとは…)。

なお、Arduinoのデジタルピンに、DSにはんだ付けした「被覆を剥いたビニール線(銅線)」をそのままデジタルピンに挿すことは現実的では無いですし、素直にジャンパーケーブルもしくはジャンパーピンは購入しておきましょう。

ちなみに、ビニール部分がカラフルなアソートになっているので、キーを判別する時、一目でどのキーなのかがわかりやすくて助かりました。今回は高々9本しか配線しておりませんが、本格的な電子工作を楽しむ方は、ジャンパー線の外周ビニールの色も使い分けてみると良いかもしれませんね。

(筆者購入日:2022/4/18;購入時の金額:990円)

 

【前提】サンハヤト SAD-101 ニューブレッドボード

電子工作のお供その4

電子回路をつなぎ合わせて使うための、いわば土台です。

ジャンパーケーブルの接続はもちろんのこと、今回は「ダイオード」を回路中に安定して組み込むために使いました

なお、体感ですが、ブレッドボードは「粗悪品」が非多い印象です。今回のように、ある程度の信頼性(長時間の放置など)が求められる用途であれば、名の通ったメーカーのブレッドボードは1つは持っておくと安心だと思います。私が購入したのも、今回は完全手探りだったこともあり、「ブレッドボードを原因としたバグ」に悩みたくなかったというのが大きな理由です。

実は、過去に「ブレッドボード内で導通していない箇所」があり、それに気づかず、小一時間ほど、悩まされた苦い記憶もあったので、そういう意味でもワンコインで保険がかけられるなら安いものだと考えています。

(筆者購入日:2022/4/24;購入時の金額:528円)

 

【あると便利】ブレッドボードオスジャンパーワイヤー ワニ口クリップ ソフト

電子工作のお供その5

片方が「鰐口クリップ(洗濯バサミみたいなやつ)」、片方が「ジャンパーピン(オス)」になっているビニール線です。

DSから伸びている銅線を鰐口クリップではさみ、ジャンパーケーブルとしてブレッドボードに挿すために使用しました。10個入りだったので、ギリギリ足りました(9個つかいました)。

なお、普通の銅線をジャンパーピン(オス)に変換するには、こういう鰐口クリップの他にも、銅線に直接アタッチメントとして取り付ける「ケーブルハウジングピン」というものもあります。

今回の用途においては、DS側の銅線に負荷をかけたくなかったので、銅線を直接ブレッドボードに挿すのでは無く、挟んでケーブル自体はたわませることができるこちらを採用しました。単価にこだわるのであれば、「ケーブルハウジングピン」で検索してみてください。

(筆者購入日:2022/4/24;購入時の金額:999円)

 

 

【無くてもOK】精密ドライバーセット 特殊ドライバー 磁石付き

DSの分解にはY字のドライバーと、+のドライバーも必要です。

このドライバーセットには、Y字も+字も入っている上、マイナス・六角・星型ほか、様々なカタチ、サイズで入っているため、意外と便利でした。

当初は上述のY字ドライバーをメインで使っていましたが、ドライバーを1セットにまとめることができたので、現在はこちらをメインで使っています。

洒落っ気のないシンプルで落ち着いた色合いのケース、整列して並んだ差し替えドライバーの先端、そして、マグネット式でネジがきちんとくっつくため、まさに「機能美」として気に入っています。

(筆者購入日:2022/4/16;購入時の金額:1,099円)

 

今回のMVPスマホ 三脚 くねくね どこでも固定可能

スマホを挟んで固定するタイプの「卓上三脚」です。三脚の足が手で簡単に曲げられる機構が入っていて、任意の角度・高さに固定できる点が特徴です。また、意外としっかり固定できるため、抜群の使い勝手でした。

本ブログ記事で使っている動画・写真・GIFアニメは、ほぼすべてこの三脚を使って撮影しました

もともとはRazerの三脚付きLEDリングライト(13,000円)をメインで使っていたのですが、卓上の動画を撮りたい!となったときには小回りが効かず、こちらは、まさに補完的な役割を果たしてくれました。

上記諸々と一緒に購入しましたが、これらの中で最もこの記事に貢献したと言っても過言では無いと思います。文句なしのMVPです。

(筆者購入日:2022/4/24;購入時の金額:1,438円)

 

6.あとがき

今回は、私の念願の夢だった、GBAの自動操作を実現し、これまた念願だった「ダイブボール入り色違いミュウ」を捕まえることができました!水色のミュウが本当にかわいい。最高です!!

皆様も、色違いのミュウを手に入れたら、第4世代以降に送る「前」に、色々なポケモンに「へんしん」を使ってみてください。きっと、第3世代がもっと好きになると思いますよ!

筆者が実際に捕まえた、「さいはてのことう」産の色違いミュウ(2022/5/4)

ミュウは「へんしん」が得意だ。色違いのまま化けちゃうところがすごくかわいい。

 

このミュウは大切に育てていきます!

 

 

さて、非常に重厚な記事分量*27でお届けしましたが、いかがでしたでしょうか

読み疲れた方、手順の多さに驚かれた方、参考になった方、「これならチャレンジできるかも!」と思われた方、「これは良い記事だから拡散しなくちゃ」となった方など、色々な感想が渦巻いていることだろうと思います。

ですが、初心者なりに「初心者の観点」で、必要な情報を時系列かつ系統立てて、まとめてみましたので、心から、皆様の参考になることを願っております

 

1章でも触れましたが、少なくとも2022年3月まではポケムーバーほかが提供されることが公式に明言されているので、今のうちからGBAの自動化&自動厳選などにチャレンジする方が一人でも増えればと思います。

 

 

今回のブログ記事は、前回(Poke-Controllerの導入方法解説記事 )に引き続き、解説系の内容となりました。また、令和の時代に、まさか「16年も前」のハードウェアについてこれほど深掘りして解説記事を執筆するとは夢にも思いませんでした。

「DSの自動化」は、幼少期からの「あこがれ」だったこともあり、本当に興が乗って、楽しく執筆できました。もちろん、剣盾BDSPレジェンズアルセウスの自動化も、色々と進めていければと考えます。

 

ともかく、今後とも本ブログを温かい目でご覧いただければと思いますし、願わくば、本ブログをきっかけに、ポケモン界隈が更に盛り上がれば、と思います。

皆様におかれましても、本ブログを応援いただければ幸いですし、もし「参考になった」「これがきっかけで●●ができた!」などの報告もいただければ励みになります

 

 

引き続き本ブログをよろしくお願いいたします。

ではではc⌒っ.ω.)っ

 

--

本ブログについて:本ブログについて

 

導入記事:【Arduino自動化01】Arduino開発環境の導入

ポケモン剣盾の記事:ポケモン剣盾Arduino自動化 カテゴリーの記事一覧

ポケモンBDSPの記事:ダイパリメイクArduino自動化 カテゴリーの記事一覧

レジェンズアルセウスの記事:レジェンズアルセウスArduino自動化 カテゴリーの記事一覧

 

YouTubeチャンネル:ますたーの忘備録 - YouTube

※今回の「DS分解・電子工作」に冠する動画のプレイリストはこちらです:

youtube.com

---

*1:本ブログでは普段、メインでArduino「Leonardo」を使っています。混乱を招くかもしれませんが、本ブログ記事の内容はおそらくLeonardoでも動作する「はず」ですが、シリアル通信部分のソースコード書き換えが必要かもしれません。筆者が訳あってLeonardoでの検証ができない状況なのでご理解ください

*2:ポケットモンスターエメラルドでのみ上陸することができる島。2005年のポケモンフェスタでのみリアル配布されたアイテム「ふるびたかいず」が必要。近年、ザロクバグの登場でアイテムなしでも上陸できるようになった

*3:GBA SPでは充電中にはゲームが起動せず、遊べませんでした。現在では考えられませんね

*4:2022年現在ではリサイクルショップなどのジャンクコーナーにもそれなりに安価で(1500円前後)並んでいることが多い

*5:さらに、もう1台のDSがあれば、ポケシフターを経由してBW/BW2、3DSがあればポケムーバーを経由してXY・ORAS、さらにポケモンバンクを使うことでSM・USUMに移動させることができます

*6:無論、DLしたサービスとしての「ポケモンバンク」はサービス継続しているため、新規に3DSを調達した場合や、同ソフトを経由しないとDLできない「ポケムーバー」をダウンロードしていない場合には注意が必要です

*7:例えば、色違いのマナフィを厳選するためには、特別ミッションを達成したポケモンレンジャーのソフトを中古ROMガチャで入手した上で、HGSSまたはDPPtを2つ以上所持し、ひたすらROMリセ&通信交換・孵化を繰り返す作業が必要

*8:例えば、ポケモンRSでは「ROMの電池切れ」により初期SEED固定が起こり、ソフトリセットによる色厳選が成立しない場合がある

*9:ポケモン剣盾において「二つ名」が実装され、ますます過去作のリボンの重要度は増したと言えます。二つ名「えのモデルになった」などは過去作(RSE)限定。

*10:もちろん、操作プログラムは自分で考えて書く必要がありますが

*11:今回はDS Liteの分解を前提としています。初代DSまたはDS i・3DS3DS LLなどは未検証です

*12:本記事ではLeonardoでの動作検証はしておりません

*13:今回のDS自動化では、純粋なArduinoの機能しか使わないため、Arduino AVRやArduinoSTL、Swicth Controll Libraryなどの外部ライブラリのインストール作業や、boards.txtの書き換え作業は不要です

*14:無線モジュールは、DSの起動時にBIOSがチェックをかけるようになっているそうです

*15:はんだごてで温められた「はんだ」は液体のように、重力に沿って流れていきます。したがって、銅線などへの予備ハンダの際は、上から下に向かって「流す」ようにはんだをつけていくのが鉄則です

*16:より厳密には、各ボタンの接点は常に一定の電圧を出力しており、GNDと短絡してこの電圧が降下することで「ボタンが押された」と判定しています

*17:電子回路がわかる人には当たり前ですが、回路上のGNDは基準となる電圧を指しますので、同一回路上のGNDはすべて共通となります。例えば、XボタンのGND接点に、Yボタンの電極を短絡させても、Yボタンが入力されたことになります

*18:厳密には、はんだ付けは、接点(銅部分)とはんだ(金属)との間に合金を形成しています。この合金は適切な温度でないと形成されない特徴があります

*19:温度を上げすぎると、コテ先が酸化してはんだが乗らない(弾く)状態になり、正常なはんだ付けができなくなります

*20:電子工作をしたことがない人は「ダイオード」と聞くと、光る部品(いわゆるLED)を想像するかと思いますが、それは「発光」ダイオードと呼ばれ区別されています。発光機能が追加(Light-Emitting)された「ダイオード(Diode)」をLED(=Light-Emitting Diode)と呼んでいるだけなので、ダイオードの本質は「電気を片方にしか通さない」性質です

*21:ダイオードの正極側は、正しくは「アノード」と言います。一方向に流す入り口側です

*22:ダイオードの負極側は、正しくは「カソード」と言います。一方向に流す出口側です

*23:デジタルピンはアナログピンと比べ、矩形的な電圧制御が得意です。ただし、デジタルピンの0番・1番は今回の用途には不適です

*24:今回は、環境依存となる要素を極力へらす、という目的で、Arduino IDEに標準で付属しているシリアルモニタを利用する想定で作成・執筆しました。ところで、誰かこのDS Liteのキー入力操作を上手くWrapしてくれるソフトウェアやPythonプログラムあたりを公開してくれる御仁はいませんかね…。

*25:色ミュウ厳選用は、あくまでもオマケ、あるいは検証用としてご利用ください。この機能が不要な方は、プログラムの当該箇所(switch-case文の「case '1':」~「break;」など)を削除してお使いください

*26:エメラルド版ではせんとうエフェクトを「みる」にしていると、色違いのキラーンというエフェクトが鳴き声およびポケモンのモーションと一緒に再生されるため、操作時間のズレが発生しません

*27:ソースコードを含め、30,714文字にもなる分量は、本ブログ史上、最も長い記事です。ここまで読んでいただき、本当にありがとうございます!