no-image

[追記]Splatoon2で自動ドット打ち

ドット打ち

このポストから投稿できる。

が、正直なところえむいーさんには絵心がないので書くのがめんどくさい。マウスとかでかければよいのだが、これはコントローラにしか対応していないのだ…うーん。

たまにめっちゃ上手い人がいる

うまうまのウマーでびっくりです。

自動化

結局、絵というのは点の集合なので自動化してドット打ちが可能なはずだ。

イラストは白と黒の二色しかないのでデータさえ与えれば簡単にできるはず…

つまり、ドット打ちのの自動化とは…

  1. 二値画像データを作成
  2. 二値画像データからプログラムを作成
  3. プログラムを実行

という流れになるわけである。問題はニンテンドースイッチ側でプログラムを実行させることができないというところ。RCMモードを使ってHBからゴニョゴニョすれば可能だろうが、それは任天堂のライセンスに反する。万が一本体BANされても文句が言えない。そんなリスキーなことはできない。

となると、PCとニンテンドースイッチを連携して、PC側からペン先をどのように動かすかの命令を送れればよいのだが、ニンテンドースイッチはコントローラの入力しか受け付けてくれない。

つまりPCにコントローラをエミュレートさせればよいのだが、そんなツールはなかった(これがあれば一番便利だった)

Switch-FightStick

ところが、そのような動作をマイコン(マイクロコンピュータ)上で実行できるプログラムがあった。

その名もSwitch-FightStickであり、ポッ拳で使うポッ拳コントローラのエミュレートができるのだという。ポッ拳がなんだか知らないのだが、ポケモンの格ゲーみたいなものじゃないのかと勝手に予想している。

そして、ニンテンドースイッチはシステムソフトウェア3.0.0から(現在は5.0.2が最新)このポッ拳コントローラ(GCコントローラなども)をサポートするようになったのだ。

この超絶便利なSwitch-FightStickが動作するマイコンはArduino UNOTeensy2.0++のどちらかである。

※Teensyは3.0以降はLUFAをサポートしていないので動作しない。間違えて購入しないように。

どちらでもオススメなのだが、個人的にはいろいろ便利なArduino UNOをオススメしたい。

[amazonjs asin=”B0044X2E5S” locale=”JP” title=”【永久保証付き】Arduino Uno”]

Arduinoには様々な互換機が存在するが、ブートロムがちゃんと書き込まれていなかったりでちゃんと動作しないものがある。実際、手元にある互換機では最終的にプログラムを書き込むことができなかった。

互換品より倍以上高いのだが、ここはしっかりと正規品を購入したい。

Windows + WSL

さて、基本的には全ての作業をWindows上で実行したいと考えているユーザが多いと思う。その方が便利だし、なによりハードルが低い。

ドット打ちを自動化するに当たって、

  1. 画像データをソースコードに変換
  2. ソースコードをプログラムに変換
  3. プログラムを書き込む

という三つの作業が必要になってくる。

このうち、3はWindows側で問題なく行えるが、1と2はそのままではいろいろと難しい。そこで今回はWSLというWindows10から実装された機能を使ってこれらを簡単に行うこととする。

WSLの環境構築

まずはコントロールパネルを開く。

この中で、左下に「プログラム」という項目があるのでそれを開く。

このような画面が出るはずなので、「Windowsの機能の有効化または無効化」をクリックする。

Windows Subsystem for Linux」という項目があるのでこれにチェックを入れる。するとWSLのインストールが始まり、10分ほどで完了する。

Ubuntuのインストール

ぶっちゃけるとLinuxであれば何でも良いのだが、一番メジャーなのはUbuntuなのでインストールする。

このリンクをクリックすると自動的にUbuntuのインストール手前の画面まで飛ぶので、そこからインストールすれば良い。

途中でユーザ名やパスワードの入力を求められるので各自自由に入力しよう。

プログラムをダウンロードする

Ubuntuのインストールが完了したら、デスクトップに日本語が入っていないフォルダを適当に作成する。ここでは仮にsplatoon2というフォルダを作成したとする。

splatoon2フォルダをクリックして、中に入る。当然中は空っぽであるのだが、ここでアドレスバー(画像で青くなっているところ)をクリックして「bash」と入力してエンターキーを押すとそのフォルダ内でUbuntuが起動する。

Ubuntuを起動させた画面がこちら。

ここで、

sudo apt update
sudo apt install git gcc-avr avr-libc python-pil

ここで先にsudo apt updateをしないとgcc-avrがいつまでも見つからないことにさっき気が付きました…

と入力して、今後必要になる全てのアプリケーションをインストールします。何のことかよくわからなくても大丈夫です。

インストールが完了したら、プログラムを作成するためのツールをダウンロードします。ツールといってもGUIがあるわけじゃないのでみんなが普段使っているようなツールとは全く別物なので注意。

git clone https://github.com/EsProgram/Switch-Fightstick.git

のコマンドをコピペして実行する。

Cloning into 'Switch-Fightstick'... 
remote: Counting objects: 717, done. 
remote: Total 717 (delta 0), reused 0 (delta 0), pack-reused 717 
Receiving objects: 100% (717/717), 1.92 MiB | 579.00 KiB/s, done.
Resolving deltas: 100% (331/331), done. 
Checking connectivity... done. 
Checking out files: 100% (525/525), done. 

こんな感じで表示されたら成功で、先程つくったSplatoon2フォルダ内に別のフォルダができていることがわかると思う。

cd Switch-Fightstick
vi makefile

としてテキストエディタを開き、キーボードから「i」を一度押す。

すると編集モードになるので普通のテキストエディタと同じように書き換えができる。

MCU = at90usb1286

となっているところを、

MCU = atmega16u2

と書き換える。

書き換えが終わったら「Esc」キーを押す。するとノーマルモードという編集ができない状態に戻るので、戻ったら「:wq」と入力してテキストエディタを終了する。

※このウィンドウは開いたままにしておいてください!

これらがめんどくさい場合は編集済みのSwitch-Fightstickがあるので、こっちを使ってください。

※makefileというファイルの編集はメモ帳でも可能です(オススメはTera Pad)。ここは各自ご自由にどうぞ。

画像の用意

画像は白黒の二色で、サイズが320×120である必要があります。

頑張ってちょうどいい大きさの画像を作りましょう。

画像の作り方についてはそのうち記事書くかもしれない。楽しみにしててね。

今回はこの画像を使ってみることにしました。後ろのおっさんかっこいいな。

マニューバはロマンです。

image.cの作成

Image2Hex.exeというファイルがあるのでそれをクリックします。

ここにファイルをドラッグアンドドロップするとimage.cが作成されます。恐らくこの状況だとfailed!と表示されてプログラムは作成されないのですが、それで問題ありません。

プログラムの作成

先程開きっぱなしにしておいたウィンドウで、

make

と入力してエンターキーを押します。

こんな感じでズラーっとログが流れます。

※画像の女の子はずら丸こと国木田花丸さんです。

するとさっきまでのフォルダにimage.cの他にJoystick.hexが作成されていると思います。これがマイコンに書き込むプログラムになります。

開きっぱなしだったウィンドウはもう閉じてしまっても構いません。

Arduino UNOをDFUモードにする

さて、いよいよ完成したプログラムをマイコンに書き込む作業なのですが、書き込むのが実はひと手間必要です。

これはTeensy2.0++だと不要な作業なので、めんどくさいのが嫌な人はTeensy2.0++を使ってください。

ドライバのインストール

下の方にDownloadsという箇所があるのでそこから「project files」をクリックすればダウンロードページに跳びます。

最新版は0.7.2なのですが、別にちょっとくらい古くても問題ないのでdfu-programmer-win-0.7.0.zipというやつなのでそれをダウンロードします。

ダウンロードしたらzipファイルを展開して、中にあるdfu-prog-usb-1.2.2のフォルダを開きます。

すると中身がこんな感じのはずなので、「atmel_usb_dfu.inf」上で右クリックをしてインストールを選択します。

インストール完了と出れば成功です。

DFUモードにする

RESET PINとGNDをジャンパケーブルで繋いでArduinoをDFUモードで起動します。

手順としては、

  1. Arduinoをパソコンと接続
  2. ジャンパケーブルを繋いで電源を切る(つないだ瞬間に勝手に電源が落ちます)
  3. 2秒ほどすると再起動するので、ジャンパケーブルを抜く
  4. パソコンで認識される

デバイスマネージャでATmega16U2と表示されていれば成功です。

プログラムを書き込む

dfu-programmer.exeというファイルをSwitch-Fi

この状態で、bashを起動したときと同じようにアドレスバーに「cmd」と入力してエンターキーを押します。bashのときと同じように黒い画面が出てきたら正解です。

dfu-programmer.exe atmega16u2 erase dfu-programmer.exe atmega16u2 flash Joystick.hex

このようにコマンドを入力して、

こんなログが表示されたら成功です。

dfu-programmer.exe atmega16u2 reset

と入力してエンターキーを押したら黒い画面を閉じましょう。もう二度と見ることはありません。

投稿画面までいく

この画面まできたらペン先を一番細いものにして、カーソルを右上に持ってきておきます。

この状態でArduinoをニンテンドースイッチに接続します。

直接差し込むためにはUSB-TypeCに変換するためのコネクタが必要ですが、ドックに挿してしまっても問題ありません。

実際に書いてみた

最新のやつは高速化されているのでめっちゃ書くのが速いです。

ドットは全部で320×120=38400もあるので、1秒に1個しか点が打てないと10時間もかかってしまうのですが、最新のやつは20個以上も点が打てるので30分くらいで完成します。

途中でコントローラを触ってしまうと全て台無しになるので絶対に触らないこと!!