今回は、M5StickCを使って、ロボットカーを少しだけ制御します。ロボットカーと言っても本格的なものではなく、とてもシンプルなものです。
左右の2つのモーターを制御して走らせるだけという、本当に簡単なものです。このロボットカーの名称はBeetleCで、スイッチサイエンスから購入することができます。
・BeetleC
https://www.switch-science.com/catalog/5773/
このBeetleCは、M5StickCは付属していないので別途用意する必要があります。
・M5StickC
https://www.switch-science.com/catalog/5517/
BeetleCは完成形で出荷されますので、特に工作する必要はありません。ハンダごてはもちろんドライバーも不要です。M5StickCをBeetleCに差し込むだけです。ピン部分のみ差し込めばよく、USB TypeC電源のところに何か差し込んだりする必要はありません。
準備ができたら、UIFlowを使って制御してみます。BeetleCはUIFlow1.4以降で正式に対応しています。(2019/11/19時点ではバージョン1.4.2)
まず、最初にHatの追加を行います。BeetleCはM5StickC専用なので、UnitではなくHatのカテゴリになります。UIFlow画面の左中央にあるUnits HatのHatの文字をクリックしてから「+」ボタンをクリックします。
すると追加できるHatの一覧がアイコンで表示されます。その中から、BeetleCにチェックマークを入れてから、OKボタンを押します。なお、HatはUnitsと違いひとつしか追加できません。
複数のHatアイコンにチェックを入れてOKボタンを押してしまうと、警告のダイアログが表示されます。この場合、何も追加されません。
無事にHatが追加されると、カテゴリのHAT内にBeetleCのカテゴリが現れます。以下の3つのブロックが表示されます。
Set BeetleC [left] wheel speed 1
Set BeetleC index [0] RGB color [■]
Set BeetleC all RGB color [■]
最初のブロックは、車輪を回転する速度を指定します。正数なら前進、負数なら後退になります。床との摩擦にもよりますが、30〜60くらいにしておけば、だいたい走行できるようです。なお、値が大きいほど速度は速くなります。
車輪の制御は左右別々に行うことができます。右側の車輪を前進に、左側の車輪を後退するようにすれば、BeetleCは円を描くような動きになります。
残りの2つのブロックは、LED制御を行います。BeetleCには下部にフルカラーLEDが7個ついています。このLEDを制御することができます。
indexで指定できる数値は0〜6までになります。この0〜6までの値とBeetleCのLEDの場所は、以下のようになっています。なお、これはBeetleCを上から見た場合の位置になります。
0:右上
1:右
2:右下
3:下
4:左下
5:左
6:左上
とりあえず、BeetleCを前進させてみましょう。[Set BeetleC [left] wheel speed 1]ブロックを[Setup]ブロックの下につなげます。値を1から30に変更します。
次に、同じブロックを配置しつなげます。制御する車輪をleftからrightに変更します。値は30にします。これでBeetleCの車輪を動かすことができます。
UIFlow右上にある実行ボタンを押して、動作させてみてください。なお、車輪が回転しない場合は、BeetleCの電源が入っていない可能性があります。スイッチを上から見て、左にスライドさせると電源ONになります。
ごくまれに、BeetleCからM5StickC抜けてしまうと、M5StickCの電源が入らなくなってしまうことがあります。この場合は、M5StickCのG0と3V3の端子をジャンパーワイヤーなど(抵抗でもいい)で接続してください。接続後にUSB TypeCケーブルに接続すれば電源が入るはずです。電源が入れば以後はジャンパーワイヤーを外しても問題ありません。
床を走行しない場合は、30でなく60など大きい値にしてください。電力や床との摩擦の関係もあるのかもしれませんが、期待通りに走行しないこともあります。手でも持つと動くので、なかなか微妙な感じです。
ちなみにPythonコードの場合は以下のようになります。
────────────────
from m5stack import *
from m5ui import *
from uiflow import *
import hat
setScreenColor(0x111111)
hat_BeetleC0 = hat.get(hat.BEETLEC)
hat_BeetleC0.SetPulse(0, 30)
hat_BeetleC0.SetPulse(1, 30)
────────────────
UIFlow 1.4.0からは、HTTPリクエストも出してデータを受け取ることができるので、ブラウザからも制御することができるでしょう(未確認ですが公式ページのは、httpのプロトコル出してるので、そんな雰囲気)。
まあ、ブラウザから制御したいのであれば、M5StickC+obnizOSという方法もあります(obnizは、2019/11/18にライセンス体系が、また変わったので要確認ですが)。
M5StickC+BeetleCを土台にして、スマホから制御して紙相撲でもやれば面白いかもしれません。ちなみにBeetleCをスマホから制御するプログラムは、公式ページに用意されています(Windowsからのみ焼き込めます)。
https://docs.m5stack.com/#/en/hat/hat-beetlec
【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/
M5StaickCだとHatが1つしか取り付けられないのですが、複数使えるともう少し用途が広がる感じも。
そうなるとBeetelC+ENV Hat(温度測定等)なら、走行させて一定時間そこで温度を計測して、しばらくしたら戻って来るというような使い方もできそうです。水中とかも行けるHatがあれば、これまた遊べそうですが多分出ない...。出ればリアル潜水艦ゲームができそうなんですが。
・みんなのobniz入門
https://www.amazon.co.jp/dp/4865942165/
・InDesign自動化サンプルプログラム逆引きリファレンス上/下
https://www.amazon.co.jp/dp/4844396846/
https://www.amazon.co.jp/dp/4844396854/
・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram
・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936
[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/
・After Effects自動化サンプルプログラム 上巻、下巻
https://www.amazon.co.jp/dp/4844397591
https://www.amazon.co.jp/dp/4844397605
・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP
http://digiconcart.com/dccartstore/cart/info/2561/218591
・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/
・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/
・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/
・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/
・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/