Splatoon2 イラスト投稿の自動ドット打ちをAruduino UNO R3 + macOS High Sierra環境でおこなう手順

目的

Splatoon2 のイラスト投稿の自動ドット打ちをAruduino UNO R3 + macOS High Sierra環境でおこなう際の手順メモです。特に Mac OSX での動作確認手順が見つからなかったため、メモとして残しておきます。

Splatoon2 のイラスト投稿とは

Splatoon2 のイラスト投稿とは、Splatoon2 内の赤いポストから投稿できる投稿済みのユーザーに他のユーザーが話しかけようとした際に表示されるドット絵のことです。

投稿済みのユーザーに話しかけた画面(吹き出しとフェスのタオルにドット絵):
DQp070gVAAAfFqp.jpg

赤いポスト前(Aボタン選択で投稿):
DQp1CaJVoAMvFZQ.jpg

参考

手順自体は下記3つの記事を参照しながら行いました。

結果

下記 JUSTICE のロゴ画像を自動ドット打ちさせてみました。

JUCTICE のロゴ(元画像):
JUSTICE_r2.png

自動ドット打ち画像:
tmpnqoed62e.png

自動ドット打ち途中の動画:
自動ドット打ち途中の動画

ハードウェア環境

準備したハードウェア環境は下記です。

ソフトウェア環境

準備したソフトウェア環境は下記です。ターミナルから下記コマンドでインストールしました。

  • Python 3.6.2
  • pillow @ Python:画像処理用のライブラリ
  • xcode-select @ macOS High Sierra:Xcodeのコマンドラインツール
  • crosspack-avr @ macOS High Sierra:Arduino書き込み用ファイルのビルドツール
  • dfu-programmer @ macOS High Sierra:Arduino書き込み用のコマンドラインツール
Terminal
brew install python3 # 入っていない場合のみ
pip install pillow
xcode-select --install # 入っていない場合のみ
brew cask install crosspack-avr
export PATH=$PATH:/usr/local/CrossPack-AVR/bin/ # crosspack-avr にパスを通す
brew install dfu-programmer

手順

1. ドット打ちさせたい画像の用意

320x120サイズpng画像 を作成or準備します。ここでは、上記結果に示した JUCTICE のロゴ画像("JUSTICE.png")を用意しました。

元々のロゴ画像は別にあったので、それを 任意のサイズに画像変換して書き出すWEBサービス を使いました。

2. 画像を自動ドット打ちさせる処理の書かれたCソースファイルへ変換する

Github の イカのドット打ち専用に改造されたリポジトリ(EsProgram/Switch-Fightstick) のサイトに行って変換ツールをダウンロードしてきます。

サイト画面(Download ZIPを押せばダウンロードできます):
スクリーンショット 2017-12-10 12.27.52.png

ダウンロードした zip を展開し、上記 "JUSTICE.png" を展開したフォルダに置き、ターミナル開いて展開したフォルダパスに移動して、次のコマンドでCソースファイルに変換します。

Terminal
python png2c.py JUSTICE.png

成功するとメッセージが出ます。

OK_Message
JUSTICE.png converted with original colormap and saved to image.c

png2c.py の中身1行が Python2 系の記載なので Python3 系で利用する場合、その点下記の修正が必要です。

png2c.py一行抜粋(変更前)
for i in range(0, 320*120) / 8):
png2c.py一行抜粋(変更後)
for i in range(0, 4800):

CソースをArduino UNO R3用にビルドするため、makefile を一部編集します。"atmega16u2"はArduino UNO R3を指し、デフォルトの"at90usb1286"はTeensy2.0++というボードを指します。

makefile(一部抜粋)
#MCU = at90usb1286 コメントアウトする
MCU = atmega16u2 #追加する

下記 makeコマンドでCソースをビルドします。うまくいくと "Joystick.hex" という Arduino 書き込み用データが作成されます。

Terminal
make
OK_Message(最後の1行のみ)
 [INFO]    : Finished building project "Joystick".

3. ArduinoをMacに接続する

Arduino の基盤書き換えのため下記ピンをジャンパワイヤ(メス-メス)で繋げた状態で Mac にUSBで接続します。

Arduino(赤で囲まれた2本のピン):
Arduino_Uno_004.jpg

ジャンパワイヤ(メス-メス):
31I-IXJcXoL.jpg

Arduino を Mac に接続後、ジャンパワイヤを Arduino からエイヤと抜き取ります。

4. Arduino へデータの書き込み

手順2. で作成した"Joystick.hex"というデータを下記コマンドでArduino に書き込みます。書き込み成功した場合は下記のようなメッセージが出力されます

Terminal
sudo dfu-programmer atmega16u2 erase
sudo dfu-programmer atmega16u2 flash Joystick.hex
sudo dfu-programmer atmega16u2 reset
OK_Message
Checking memory from 0x0 to 0x217F...  Empty.
0%                            100%  Programming 0x2180 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]  Success
0%                            100%  Reading 0x3000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]  Success
Validating...  Success
0x2180 bytes written into 0x3000 bytes memory (69.79%).

5. ArduinoをNintendo Switchドッグに接続し自動ドット打ち実行

Nintendo Switch をドッグに刺した状態で起動し、スプラトゥーン2にログインして先に紹介した赤いポストまで移動し投稿画面を開きます。ペン先を一番細いものに変更した後、ArduinoをSwitchドッグのUSBに刺すと勝手にカーソルが移動し左上から順次ドット打ちによる描画が開始されます。

投稿画面(ドット絵を描く画面):
DQqKEG5UMAA-41b.jpg

ArduinoをSwitchに接続する(と勝手に描画が開始される):
P_20171210_134548_2_2.jpg

注意点としては、Arduinoの描画途中に手動でコントローラを操作してはいけない ということです。描画タイミングがずれてドット画がぐちゃぐちゃになります。せっかく時間かけても途中で台無しです。

また、描画時間が1枚あたり30分程度かかるため、ゲームで遊ぼうと友人と約束している時には避けた方が良いと思います。

最後に

なぜこんな遅れたタイミングで自動ドット打ちをしようと思ったかというと、スプラトゥーンのイラスト投稿機能に昨日(2017/12/9 夕方ごろ)に気づいたからです(それまで赤いポストはただの無意味なオブジェクトだと思い素通りしてました)。

上記手順で今後は好きな絵や写真を描画させたり思いのままなので、もっと良さそうな絵や写真を見つけたらArduinoにドット打ちさせて投稿してみようと考えています。

皆様の楽しいイカライフに少しでもお役に立てばと思います。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.