M5StickC Plus (ESP32)と3DプリンタとBlynkとLEGOでラジコン作った。


はじめに

3Dプリンタが復活したので、なにか作ろうと思って、最近遊んでるM5StickCとGeekServoとをつなぐマウントを作ってみた。いい感じにできて満足。やったことを整理しておく。

準備するもの

道具

3Dプリンタ

Creality Ender 3 V2ってのを使ってる。

参考:3Dプリンタを選んで買って組み立てて印刷した。 - Qiita

ノギス

デジタルすばらしい。

部品

合計4,000円くらい。あきたら他の用途に流用できるし、コスパ最強説。

フィラメント 少々

PLA使ってる

M5StickC Plus

M5StickCでもOK

M5StickC Plus - SWITCH-SCIENCE

GeekServo x2

このサーボが、LEGOコンパチブルで、360度回転するので、使いやすい。
GeekServo 9G 360° Motor-Orange - SWITCH-SCIENCE

参考:LEGOとM5StickCで動く車作った。 - Qiita

ジャンパーケーブル

ケーブル必要。電源とグランドを分岐する必要あったので、ピンにはんだ付けしてる。

LEGOのタイヤ x2

十字の穴があいてるやつ

レゴパーツのバラ売りはここが良さげ。
レゴパーツからミニフィグまで揃う通販専門のレゴショップ ブリッカーズ

LEGOの接続するやつ x4

LEGO TECHNICのLEGO買うとだいたい入ってる(たぶん)

LEGOのデコるやつ 好きなだけ

GeekServoに接続できるからデコれる。

3Dプリント作業

まず、3DプリンタでM5StickCとGeekServoをつなぐマウントを作成した。

スケッチ

シンプルかつ丈夫になるように考えてスケッチした。

測定

結構めんどい。
GeekServoとM5StickCのサイズをノギスで測った。

モデリング

Tinkercadってブラウザからできるやつを使った。シンプル。
Dashboard | Tinkercad

こんな感じになった。

データはここにおいた。
M5StickC Mounter for LEGO Compatible Motor by optimisuke - Thingiverse

3Dプリント

Curaってソフトを使ってもろもろ設定して3Dプリント用のデータに変換する。

できあがり

こんな感じ。それっぽい。

アセンブル

タイヤは直接サーボにつける。

サーボと3Dプリンタで作ったマウントをつなぐ。

M5StickCも接続してデコる。

プログラム

M5StickC Plus

M5StickC Plus側はこのときとまったく一緒。
LEGOとM5StickCとBlynkでラジコン作った。 - Qiita

#define BLYNK_PRINT Serial
#define BLYNK_USE_DIRECT_CONNECT

#include <BlynkSimpleEsp32_BLE.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include "esp32-hal-ledc.h"
#include <M5StickCPlus.h>

char auth[] = "YourAuthToken";

const int WIDTH_BIT = 10;
const int FREQ = 50;
const int SPEED_PIN = 26;
const int SPEED_CH = 2;
const int STEERING_PIN = 25;
const int STEERING_CH = 3;

void setup()
{
  Serial.begin(115200);
  Serial.println("Waiting for connections...");
  Blynk.setDeviceName("Blynk");
  Blynk.begin(auth);

  ledcSetup(SPEED_CH, FREQ, WIDTH_BIT);
  ledcAttachPin(SPEED_PIN, SPEED_CH);
  ledcSetup(STEERING_CH, FREQ, WIDTH_BIT);
  ledcAttachPin(STEERING_PIN, STEERING_CH);

  M5.begin();
  M5.Lcd.fillScreen(TFT_BLACK);
  M5.Lcd.setTextColor(TFT_WHITE);
  M5.Lcd.setCursor(20, 40, 2);
  M5.Lcd.print("SERVO");
}

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

BLYNK_WRITE(V1) {
  int16_t steering = param[0].asInt();
  int16_t speed = param[1].asInt();
  ledcWrite(SPEED_CH, speed);
  ledcWrite(STEERING_CH, steering);
  M5.Lcd.fillScreen(TFT_BLACK);
  M5.Lcd.setCursor(20, 80, 2);
  M5.Lcd.print(speed);
  M5.Lcd.setCursor(20, 120, 2);
  M5.Lcd.print(steering);
  Serial.println(speed);
  Serial.println(steering);
}

スマホ

Blynk使った。
このときとほぼほぼ一緒で、設定を少しかえた。
LEGOとM5StickCとBlynkでラジコン作った。 - Qiita

動作確認

いい感じに動いた。

改善

接続部分が微妙やったので、すこし調整してプリントしなおした。M5StickCの横のスリットにあうように、ボコっとなるようにしてる。いい感じ。

おわりに

いい感じに、3Dプリンタを活用できた。
息子くんもよろこんでくれて満足。