LEGOとM5StickCで動く車作った。

# はじめに
LEGOにハマってる息子（5才）の尊敬を得るために、LEGO+αで動く車を作った。

![IMG_20210213_195048.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184221/b99c27d8-21ba-7818-d004-ef7d0899485f.jpeg)


# 材料
実現手段が無数にあるので、作り方悩ましかったけども、LEGOとM5StickC PlusとサーボモータとLEGO互換のギアを使った。

結果的にシンプルでいい感じの構成になった。以前、micro:bitでやろうかと思ったけど、バッテリーとか考えると部品そろえるのと配線とか考えるのそこそこ大変なので実行にうつせてなかった。M5StickCとLEGOのエコシステムすばらしい。

具体的な部品はこんな感じ↓

## M5StickC Plus
¥2,200でマイコンもLCDもバッテリーもWi-FiもBluetoothもついてる。基板むき出しじゃないから、子供にもそこそこ安全。

[M5StickC Plus - SWITCH-SCIENCE](https://www.switch-science.com/catalog/6470/)

## ディファレンシャルギア
LEGOもどきなので、抜けやすかったり、精度がいまいちだけど、動きもわかっていい感じ。
¥1,360
[Amazon | MOC ブロック テクニック 互換 パーツ ディファレンシャルギア 差分ギア セット (ディファレンシャルギア) | ブロック | おもちゃ](https://www.amazon.co.jp/MOC-%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF-%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E3%83%87%E3%82%A3%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%AB%E3%82%AE%E3%82%A2-%E5%B7%AE%E5%88%86%E3%82%AE%E3%82%A2/dp/B07N65FR7D/ref=pd_sbs_2?pd_rd_w=oSeTo&pf_rd_p=98aa37b9-be8c-4afb-83e7-b68aef3d17b4&pf_rd_r=763N2XSR4FXBBQFTZASH&pd_rd_r=bb1068ec-05ee-4aca-82d5-756fe562c8ed&pd_rd_wg=2FGvg&pd_rd_i=B07N65FR7D&psc=1)

## GeekServo 9G 360° Motor-Orange
LEGOにつけられるモータさがしてて見つけた。モータドライバいらないから、すごくいい感じ。

¥550
[GeekServo 9G 360° Motor-Orange - SWITCH-SCIENCE](https://www.switch-science.com/catalog/6813/)

これみて、購入を決めた↓
[GeekservoでLEGOを自走させてみた - Androidのメモとか](https://relativelayout.hatenablog.com/entry/2020/01/03/124919)

## LEGO
LEGOクラシックの部品とかこの部品を使った。これ↓もう売ってないらしい。まじか。もう一つくらい買っといたらよかった。

プライスレス
[Amazon | Lego Crazy Contraptions: 6 Pack (Klutz) | Stillinger, Doug | Activity Books](https://www.amazon.co.jp/Lego-Crazy-Action-Contraptions-Klutz/dp/1591743397/ref=sr_1_24?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3Q7NFAS38CNPG&dchild=1&keywords=lego+contraptions&qid=1613215803&sprefix=lego+contra%2Caps%2C263&sr=8-24)

# 組み立て
![IMG_20210213_200118.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184221/74eb01b0-50ec-89d9-3588-bd35566b7b8b.jpeg)

すんなり接続できなかったので、穴の空いてるレゴをつかって長さがちょうどあう場所さがしてつけた。斜めってるけど、ギアがいい感じにうまいことしてくれる。

ディファレンシャルギア使ったから、モータ1つでいいし楽ちん。

M5StickC PlusはM5StickCについてたサポートみたいなんがLEGO互換やったので、それをつかって穴のあいてるLEGOにつけた。両面テープいらず。

M5StickC Plusから給電してるから、配線シンプルで楽ちん。ジャンパーワイヤでつないだのでハンダいらず。

# コード
Arduino環境で書き込んだ。
`Servo.h`とか`analogWrite()`でいけるかなーと思ったけど、M5StickCだと使えなかった。
検索すると、下記ページを見つけたので、`ledcWrite()`って関数使って制御した。
ただ、PWMで信号出し続けるだけのコード。

[M5-ProductExampleCodes/servo.ino at master · m5stack/M5-ProductExampleCodes · GitHub](https://github.com/m5stack/M5-ProductExampleCodes/blob/master/Hat/servo-hat/Arduino/SERVO/servo/servo.ino)


```cpp
#define TIMER_WIDTH 16
#include "esp32-hal-ledc.h"
#include <M5StickC.h>

void setup() {
  M5.begin();
  ledcSetup(1, 50, TIMER_WIDTH);
  ledcAttachPin(26, 1);
  M5.Lcd.setCursor(20, 80, 2);
  M5.Lcd.print("SERVO");

}

void loop() {
  ledcWrite(1, 2000);
}
```

# 完成
こんな感じ。
そのうち、もっとデコりたい。
LEGOで作ると見た目で遊べるからいい感じ。

![IMG_20210213_195048.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184221/220cf892-6dd6-9789-fd76-6fc532f73150.jpeg)

https://twitter.com/optimisuke/status/1360542912757395461?s=20

# おわりに
部品がそろってたので、息子くんとLEGOで遊ぶついでに作れた。
サーボ動かすのに戸惑ったけど、すんなり動いてよかった。
残念ながら、息子くんは目が肥えてきたのか、そこまで喜んでくれず。
尊敬を得るのには失敗した。
むしろ、作る過程で息子くんの作品を壊してしまい大泣きされた・・・。
Bluetoothでラジコン的なことしたら喜んでくれるかなぁー。