LoginSignup
8
3

More than 3 years have passed since last update.

Nintendo LaboをハックしてESP-32 Laboにした話

Last updated at Posted at 2018-11-30

こんにちは。
IoTLT Advent Calendar 2018 Mitz(三つ目)のトップバッターを飾らせていただきます。
こう見えて、実はアドベントカレンダーを書くのもQiitaで記事を書くのも初めてだったりします。よろしくお願いします。

この記事は今年の5月に開催された『第5回秋葉原IoTツアーズ』というハッカソンイベントで発表した内容のデジタルリマスター版再編集です。

きっかけはヒカキンさん

さて、うちには娘が二人いるのですが、小学校低学年の上の娘が最近Youtubeでヒカキンさんのヒカキンゲームズをよく見ています。そこで、2018/4/20に発売したNintendo Laboを遊んでいる映像を見て「これ楽しそう!やりたい!」と言っていたのです。

しかし、うちにはNintendo Switchはありません。
Switchはおろか、ゲーム機と呼ばれるものは一切ありません。
娘が小さいころに某住宅展示場のイベントでNintendo64が当選したことがあるのですが、即ヤフ○クに行ってしまったという経緯まであったりします。

そんな家に産まれた娘には、LaboはSwitchで遊ぶものという認識がないので、「これ、いくらするの?」と聞かれて「うーん、ちょっとまってね。(カチャカチャ)…7-8,000円くらいみたいだね」と答えてしまったら、当然の様に「パパこれ買って!!!」

いやいやいやいやいやいやいやい。。。ちょっと待てい!
その数千円の段ボールキットとソフトを買うだけで遊ぶことができるモノではなく、ソフトを動かす「ハード」をが必要で、それが3万円以上するんだよ。お年玉より高いんだよ。と説明しました。
('ε'*)「ふーん・・・そうなんだ」

まぁ、そうなるよね!
しかし、そこでへこたれる娘を放置するパパではない!
「わかった!パパに任せろー!(バリバリ)」(心の声)
丁度、リモコンカーというのがあるのを知って、自分も気になっていたので、何とか作ってやろうと思ったのでした。

皆さんもまだクリスマスに間に合うのでLet's Try!!!

とりあえず材料集めから

なんと、Nintendo Laboはホームページから型紙がPDFでダウンロードできるんですね。材質が段ボールなため、破損した時の補修用として顧客サービスなのでしょうか。よし、悪用しよう!
それに、会社のフロアの端に段ボールが無造作に積んであるのはきっと神様からの啓示に違いない!

他にもいろいろと都合の良いものが揃っていて、手元にあったのは以下の通り。

なぜか手元にあった材料

以前使ったことがあるBlynkアプリケーション
 →詳しくはここを参照。

会社のプリンタで印刷したNintendoLABOの「リモコンカー」型紙
 →ここにあります。

会社のレイアウト変更で使用した廃棄予定の段ボール
 →厚さ2.5~2.0mm程度の薄いものがおススメ

目的もなく買ったESP-32マイコン
ESP-32-300x300.jpg
技適がついてるESP-32に、更に電源も搭載できる、非常に便利なマイコンボードです。

目的もなく買った2chモータードライバー
MOTOR-300x219.jpg
とりあえずモーターをドライブしたくて買ってあったみたいです。
サンライトイエローオーバードライブ!!!

懐中電灯用に本数買い過ぎた18650電池
18650-300x285.jpg
…まぁありますよね。こういうもの。

目的もなくまとめ買いしたサーボモーター
Servo-300x300.jpg
これも安い買ったからつい買ってしまったモノ。

いつ買ったかも覚えていないJUNKのガラケー用バイブレーションモーター
IMG_0625.JPG
詳細不明です。記憶が不鮮明ですが、たぶん「現品.com」で購入したモノだと思います。
吉野電装さんが運営されていた独特な注文方法のJUNK品ばかりを扱っている通販サイトです。最盛期は2003~2004年頃だったでしょうか。某巨大掲示板でも常に話題になるほどで、私も当時はだいぶお世話になりました。

(;`・ω・)o━ヽ・_フ))作るよ!!

なんだ。材料ほとんど揃ってるじゃないか。神様が「今作れ」と言っているな!?
しかもちょうど今定時過ぎたし!

という訳で18時から工作を始めて3時間程度で一気にプロトタイプを作り終えました。

じゃーん!完成です!

リモコンカー!
IMG_0621.JPG
すごい!リモコンカー(↓本物)っぽい!!!
ちなみに、ゾウさんの様な顔を勝手ににつけてみましたが、ここにこのようにつけるモノなのかどうかはわかりません!
R-Car.JPG

中身はこんな感じです。う~ん、雑っ!
IMG_0622.JPG
顔はサーボで回ります。
IMG_0623.JPG
顔を取るとサーボが丸見えです。
IMG_0624.JPG

作り方(概要)

それでは、作り方の解説、行ってみましょう!
まずは順番に目次として紹介。
こんな内容で作成しました。

1.まず、服を脱ぎます!!!

・・・

嘘です。
いや、別に脱いでも良いです。寒いので適当にしましょう。

外装編

・段ボールに型紙を貼る

・適当に切る(カッターでは非常に切りづらいのでレーザーカッター欲しい!)

・切り出した段ボールを組み立てる

・サーボ・モーターを固定する穴を空ける

電子工作編

・回路を考える

・適宜配線する

・マイコン・モーター・サーボを固定する

プログラミング編

・コーディングする

・ArduinoIDEでマイコンにプログラムを書き込む

・完成~♪

作り方(詳細)

ここからは詳細を記します。

外装編

段ボールに型紙を貼る

 →ダウンロードした型紙PDFは、A3に印刷すると良い感じの大きさになります。ノリをかなりしっかり貼らないと、意外と簡単に剥がれてきますので頑張って!

適当に切る

 →きっと、レーザーカッターが欲しくなる呪いにかかります。

切り出した段ボールを組み立てる

 →この工程で結構大変な思いをするので、段ボールは割と薄いものがおススメです。私は厚さ3㎜程度のものを用いたのですが、もう少し薄い2.5~2.0の物の方が良さそうです。
もしくはおとなしくレーザーカッターを買いましょう!

サーボ・モーターを固定する穴を空ける

 →現物合わせになりますね。

童心を思い出して楽しみましょう!
しかし段ボールって本当に切りづらいです。
この後めちゃめちゃ・・・レーザーカッター欲しくなりました。(3回目)

電子工作編

回路を考える

以下の様にテキトーに配線しました。
とりあえず機能を満たすだけで、あまり何も考えていません。

モータードライバーの配線(ESP-32とモーターへ 一部サーボへ)

端子 接続先
PWMA ESP-32(4)
AIN2 ESP-32(2)
AIN1 ESP-32(0)
STBY ESP-32(15)
BIN1 ESP-32(25)
BIN2 ESP-32(26)
PWMB ESP-32(27)
GND ESP-32(GND)
VM VCCとServo(VIN)
VCC ESP-32(VCC)
GND -
A01 MotorA(1)
A02 MotorA(2)
B02 MotorB(2)
B01 MotorB(1)
GND -

サーボの配線(ESP-32 一部モータードライバーへ)

端子 接続先
橙(PWM信号) ESP-32(14)
赤(3.3V電源) モータードライバー(VM)
茶(GND) ESP-32(GND)

適宜配線する

上記の通り、配線します。
私の超テキトーで雑な空中配線写真を載せておきますねw
参考にしないでくださいね。
IMG_1134.JPG
IMG_1135.JPG
IMG_1136.JPG
IMG_1138.JPG
IMG_1139.JPG

マイコン・モーター・サーボを固定する

本体にしっかり固定します。
※モーターは特にこの固定が甘いとサッパリ進みませんので、キツ目に押し込むように固定しましょう

プログラミング編

コーディングする

今回はBlynkを使用するので小難しいコーディングはほとんどありません。BlynkをESP-32にインストールして、上記の各GPIOピンを定義するだけで終わります。
ソースコードは以下の通りです。

リモコンカー
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// BlynkとWifiの設定
char auth[] = "Your Blynk Auth code";
char ssid[] = "Your access point name";
char pass[] = "Your password";

void setup() // GPIOの設定
{
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
  // モーターAの設定
  pinMode(0,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(4,OUTPUT);
  // モーターBの設定
  pinMode(27,OUTPUT);
  pinMode(25,OUTPUT);
  pinMode(26,OUTPUT);
  // STB
  pinMode(9,OUTPUT);
  // ESP-32オンボードLEDの設定
  pinMode(16,OUTPUT);

  // モータードライバー初期設定(停止状態)
  digitalWrite(2,LOW);//A2
  digitalWrite(4,HIGH);//PWM A
  digitalWrite(26,LOW);//B2
  digitalWrite(27,HIGH);//PWM B
  digitalWrite(9,HIGH);//STB

  // サーボの設定
  ledcSetup(0, 50, 10);  // 0ch 50 Hz 10bit resolution
  ledcAttachPin(14, 0); // 14pin, 0ch
}

BLYNK_WRITE(V0){
  ledcWrite(0, param.asInt() );
}

void loop()
{
  Blynk.run();
}

以上です。
本当にGPIOの定義と初期設定のみでしょ?

ArduinoIDEでマイコンにプログラムを書き込む

USBケーブルで接続して書き込みましょう!

遊ぼう!!!

こんな感じで遊びましょう~!
楽しい!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

動作している動画

Labo_Movie.JPG

発表のスライド

Labo_SS.JPG

以上、最後まで見ていただいてありがとうございました!

Have a good Christmas!!!

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3