こんにちは。
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に、更に電源も搭載できる、非常に便利なマイコンボードです。
・目的もなく買った2chモータードライバー
とりあえずモーターをドライブしたくて買ってあったみたいです。
サンライトイエローオーバードライブ!!!
・懐中電灯用に本数買い過ぎた18650電池
…まぁありますよね。こういうもの。
・目的もなくまとめ買いしたサーボモーター
これも安い買ったからつい買ってしまったモノ。
・いつ買ったかも覚えていないJUNKのガラケー用バイブレーションモーター
詳細不明です。記憶が不鮮明ですが、たぶん「現品.com」で購入したモノだと思います。
吉野電装さんが運営されていた独特な注文方法のJUNK品ばかりを扱っている通販サイトです。最盛期は2003~2004年頃だったでしょうか。某巨大掲示板でも常に話題になるほどで、私も当時はだいぶお世話になりました。
##(;`・ω・)o━ヽ_。_・゚・_フ))作るよ!!
なんだ。材料ほとんど揃ってるじゃないか。神様が「今作れ」と言っているな!?
しかもちょうど今定時過ぎたし!
という訳で18時から工作を始めて3時間程度で一気にプロトタイプを作り終えました。
#じゃーん!完成です!
リモコンカー!
すごい!リモコンカー(↓本物)っぽい!!!
ちなみに、ゾウさんの様な顔を勝手ににつけてみましたが、ここにこのようにつけるモノなのかどうかはわかりません!
中身はこんな感じです。う~ん、雑っ!
顔はサーボで回ります。
顔を取るとサーボが丸見えです。
#作り方(概要)
それでは、作り方の解説、行ってみましょう!
まずは順番に目次として紹介。
こんな内容で作成しました。
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
参考にしないでくださいね。
###マイコン・モーター・サーボを固定する
本体にしっかり固定します。
※モーターは特にこの固定が甘いとサッパリ進みませんので、キツ目に押し込むように固定しましょう
##プログラミング編
###コーディングする
今回は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ケーブルで接続して書き込みましょう!
#遊ぼう!!!
こんな感じで遊びましょう~!
楽しい!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
##動作している動画
以上、最後まで見ていただいてありがとうございました!
Have a good Christmas!!!