子供達と作った工作いろいろ

2024/06/29

歩くロボットの工作キット

地元のお祭りで歩くロボットの工作屋さんをしました。この記事はその時に設計した歩くロボットの工作キットの構造とどんなことを考えて設計したかについての記録です。

お祭りに来るのは近くの小学校の子や未就学児がメインということで、今回は小学校低学年向けに作りやすい構造を考えます。工作屋さんに来てくれた子はまずロボットキットを買って、その場で組み立てて、完成品を持ち帰ります。外でやるため電源はないし、あまり複雑なことも出来ないのでネジを締めるだけで組み立てられる構造にすることにしました。制作時間は10分以下を目指します。

これまでこのブログで紹介してきたロボットは基本的に自分で組み立てるための設計でしたが、今回は以下の要素に気をつけて設計していきます。

  • -組み立てが簡単であること(子どもたちにやってもらう工程はネジを締めるだけ)
  • -部品点数が少ないこと
  • -部品の取り違えがないこと(似てるけどよく見ると違う部品、というのが無い)
  • -多少組み立てが甘くても動作すること

さらに、以下の要素もバランスを考慮しながら考えます。

  • -コスト
  • -部品の強度
  • -3Dプリントパーツの印刷時間
  • -一度に印刷できる部品のサイズ

何人くらい来てくれるか全然読めなかったため、20キット準備することにしました。


機構の選定

前回作ったパラレルクランクの歩くロボットも自分以外の人に作ってもらうことを意識して設計しましたが、実際に作ってみると角度の調整やネジの締め具合など実際に組み立ててみるとコツがいりました。また、歩いているうちにリンクが軸に対してずれて歩けなくなりやすいため、子どもたちが家に持って帰ったあとにずれてしまうと自力での修理(調整)は困難かもしれません。

それに対してスライドクランク機構は機構的に不具合を起こす可能性が低く歩行も一番安定性していました。というわけでスライドクランク機構をベースに設計をしていきます。

このオリジナルロボットはアイスの棒を材料に作ったので大量生産には向いていません、3Dプリンタの部品で置き換えていきます。

ギヤボックスとリンク軸

モーター+ギヤボックスはTTモーターを使います。本来一番お金がかかる部品なのに、Amazonで8個入りで買うと1200円くらいで手に入ります。単価150円程度という驚愕の価格、ありがたく使わせていただきます。
このギヤボックス自体をロボットのメインフレームとして使います。
スライドクランク機構なのでスライドする軸がメインフレームから生えていないといけません。この部分は3Dプリンタで出力したものをくっつけます。この際、TTモーター側にいい位置にネジ穴がないため両面テープでくっつけることを想定して設計します。
下の写真が色々試作で、右に行くほど新しいデザインです。最初は大きな板のようにして全面でTTモーターにつけて、その上に電池ボックスを乗せようとしましたが、3Dプリントするのに時間がかかるのと、「ギアボックス→リンク軸部品→電池ボックス」と両面テープを2回使う必要がありました。
そこでギアボックスと段差なく組み付けるよう小さな部品にして、ギアボックスとリンク軸部品の間には両面テープをいれず、電池ボックス側の両面テープで一緒に押さえてしまうことにしました。これなら両面テープを貼るのは1回で済みます。

ただ、作ってみるとリンク軸部品が若干ぐらつくことがわかりました。そこで、小さい突起をつけてみました(写真右側のパーツ)。

この突起がモーターをうまくホールドしてくれて、安定性が格段に上がりました


足の設計

足は床に対して垂直に立ち上がっているスライドリンクの部分と、床に踏ん張っている部分で構成されています。3Dプリンタでこれを印刷しようとすると非常に非効率!かといって部品を2つに分割したくはありません。

そこで平に印刷してあとから曲げることで立体にする方法を考えました。

ヒートガンで曲げたいところを炙って柔らかくしてから治具に固定してクイッと曲げます。こうすることで印刷のしやすさと構造を両立させることが出来ました。
3Dプリンタでの印刷もこの通りうまく詰め込んで一度に4体分の足を印刷できます。

オリジナルでは足とクランクの干渉を防ぐためにワッシャーを入れて距離を空けていましたが、今回は一体化させて部品点数を削減しました。3Dプリンタならではですね。

電池ボックス

前使っていたのと同じ電池ボックスを買おうとしたら、、、なんと一つ350円!ちょっと高すぎます。アリエクとかも探したのですがなかなかいいものがありません。そんな中、秋月電子のHPを眺めていたら電池ボックスの金具の部分がなんと20円!スイッチも30円で手に入る!これらを使って自分で電池ボックスを作ったほうが全然安いことがわかりました

というわけで金具を固定する基盤を設計します。KiCADという電子基板の設計ソフトと、web上にある先人たちのありがたい使用方法の解説を読んで頑張って作っていきました。
回路は上の図の通り。スイッチは2回路2接点ですが、繋げて1回路として使います。どっちかの接点が死んでも1つ繋がってれば大丈夫だろうという冗長設計。電池の抜き差しでハンダクラックが起きても良いように電池金具の半田も2箇所ともスイッチに繋げます。ついでにロゴも印刷しちゃおう!
こんな基盤を自作で作ると高くつきそうなのですが、ありがたいことに今は個人向けに基盤を安く作ってくれるサービスがあります。製造はJLCPCBという中国の会社にお願いしました。価格はなんと一枚30円弱!送料を発注枚数で割って入れると60円/枚くらい(送料のほうが高い)。納期も早くて発注から一週間ちょっとで届きました。

さて、出来上がった基盤に電池の金具を取り付けていきます。今回はこの基盤をギヤボックスに両面テープで貼り付けようと思っているので、裏面はなるべくフラットである必要があります。電池金具の足が裏に飛び出さないように、基盤の厚みくらいにカットします。
意外と固くてニッパーじゃ切れなかったのですが金切りバサミでなんとか切れました。
こうしてからはんだ付けすると、足が飛び出ず裏面がほぼフラットに仕上がります。(足を切るのが結構めんどくさかったので、次設計するときは足が裏に飛び出てても良い構造にしよう。)
スイッチは端っこにあってじゃまにならないので足は切らずにそのままはんだ付けします。今回使ったスイッチはボディからも固定用の足が出ています。この足も基板に半田付けできるのですが、その分基板の幅が広くなってしまうので写真のように足を曲げて収める事にしました
そんなこんなで電池ボックスが出来上がりました。良いね!電池もピッタリ。
ロボットの歩く方向を電池の入れる向きで決められるように、プラスマイナスどちらの向きにも電池を入れられます。モーターしか繋がらないからこそ許される設計。

リンク軸

リンクの回転部分は「締結はされているけどスムーズに回転する」ということが求められます。今までのロボットは軸のネジを最後まで締め切らない事によって可動を確保していました。この隙間が0.3mm程あればいい感じに回転するのですが、このテクニックを求めるのは現実的でないので他の方法を考えます。

ネジは締めてるけど回転しているもので身近に思いつくのはミニ四駆のローラーでした。ミニ四駆ではローラーに段付きネジを使っているのでネジを締め切ってもローラーは回転できます。これは使える!と思ったけど、あれ単体売りはしてないんですね。
大量に確保できない…
そこで、これまたミニ四駆からの発想でハトメを軸に被せてみました。部品の厚みをハトメよりも微妙に薄くする事によってネジを締め切っても可動性を確保します。ハトメは手芸屋さんで入手しようかと思っていまいしたが、電気ハトメというものがサイズも価格もいい感じだったのでこれを使うことにしました。
仮組みしてみるとスムーズに動いてくれました。

クランク

足の動きの大きさを決めるのがクランクのサイズです。これが大きいと足が大きく動きます。どのくらいに設定したらいいかは実際に組んでみて決めました。最初は半径7mm(写真の中の灰色のやつ)で作ってみたところ、動きが大きすぎて歩き方がバタバタしてしまいました。
そこでクランク軸の距離を5.5mmまで短くして(写真の中の黒いやつ)みたところ安定して歩けるようになりました。一歩の距離は短くなりますが、左右の足が入れ替わる際の重心移動が少なくなります。


タッピングネジの穴の工夫

ロボットの組み立てには「タッピングネジ」というナットを使わないネジを使っています。部品点数の削減と小型化のためにこの方法にしましたが、このネジを真っ直ぐに締めていくのが結構難しいんです。最初に曲がっちゃうとそのまま曲がって入っていっちゃう。
そこで、ネジ穴の入り口を少しだけ緩くして、ネジのガイドになる様にしました。緩い部分でネジを真っ直ぐにして、その奥から締め始める構造にします。緩い部分は深さ1.5mm程度しかないけど、このおかげで真っ直ぐに入れるのがかなり楽になります。
(ネジは直径2mmです)

組み立て

さて、部品も出来てきたので組み立てていきます。今回は半田付けが必要な電池ボックスとモーターの接続はこっちでやっておいて、子供達にはネジ締めで部品を組み立てる部分をやってもらいます。
両面テープは3MのPKH-10という強力両面テープを使いました。厚みがあって柔らかいので多少凸凹した表面でも強力に接着してくれます。
さて、両面テープで電池ボックスをくっつけよう…と思ったらつかない!
粘着が全然効きません
今回買ったTTモーターのユニットはプラスチック成形時の剥離剤なのかギアのグリスなのかが外装表面に残っていたのが原因でテープの粘着剤が全然つきませんでした。慌ててパーツクリーナを買ってきて表面を洗浄したらなんとか接着成功!
パーツクリーナーはプラスチックの割れを防ぐために「プラスチックセーフ」という種類のものを使いました。

さあ、あとはひたすら量産です。
全部で20体、予備1体分を用意しました。

お祭り当日

お祭り当日はこんな感じでお店を作りました。娘たちは売り子に挑戦!
来てくれた子たちには以下の部品たちを箱の中に入れてキットにして渡します。
  • -モーターユニット
  • -クランク
  • -足
  • -ネジ
  • -ハトメ
  • -電池
  • -ドライバー
キットをもらった子どもたちはお店の裏側に敷いたレジャーシートエリアで各自組み立てて、出来たら持って帰ってもらうスタイルにしました。
ビラを配ったのはほんとに近くの小学校だけだったのに、お祭り開始1時間前からなんと長蛇の列!楽しみにしてきてくれた子が沢山で、お店を出したかいがありました。
結果、お祭りは4時間あるのにロボットは開始30分で売り切れてしまいました。
完売御礼!!
ありがとうございました!

2023/11/18

M1 MACでM5Stack ATOM S3 をUIFlowで使う試行錯誤

event_note11月 18, 2023 forumNo comments

 

M5Stack社のATOM S3を手に入れたので遊んでみたいと思います。M1 Macで設定をした際に色々と大変だったので備忘録です。これを書いている時の環境は2023年11月現在の最新のOSはSonoma 14.1.1、UIFlow関連のバージョンもこの時点での最新のものを使用しています。

ATOM S3は液晶画面がついた小さなマイコンボードです。ESP32-S3というコントローラを搭載していて、センサーを繋いだりモーター繋いだり、WiFiもついているので色々なことができそうです。バッテリーは積んでいないので、電源は外部から供給します。

https://www.switch-science.com/products/8670


このATOMS3にプログラムを書き込む方法はいくつかあるようなのですが、UIFlowというブラウザで動作する開発環境を使ってみます。この方法ではプログラムの書き込みの際にケーブルで繋げる必要はなく、WiFiを通じて無線で行うことができます。この無線でのプログラムの書き込みを可能にするために、ATOM S3のファームウェアを書き換えてあげなければ行けないそうです。

セットアップの流れについてはこちらの記事に色々と助けてもらいました。ありがとうございました。

https://qiita.com/youtoy/items/ecc61ae5eb1cb57cc64b


ファームウェア書き換え編

まずファームウェアを書き込むソフトをダウンロードします

ここからUIFLOW FIRMWARE BURNING TOOLをダウンロード

https://docs.m5stack.com/en/download

ダウンロードしたZipファイルを解凍して中にあるm5burner.app(Windowsの場合はm5burner.exe)を起動します。

すると早速エラーが出ました。とりあえず「キャンセル」で閉じます。
左上のリンゴマークを押して、システム設定の中のプライバシーとセキュリティの中をスクロールするとAppがブロックされた旨が書かれています。「このまま開く」を押します。プライバシーとセキュリティのポップアップが出るのでMacのパスワードを入れてください。
するとこんなポップアップが出てくるので「開く」で開きます。それでも開けないときはm5burner.appのファイルをアプリケーションフォルダに移動してから開いてみてください。
初期画面が開きました。起動したら自動で最新版にアップデートしたらしく、右下にrestartしますかとメッセージが出ています。restartを押すとm5burnerが再起動します。

パソコンとATOM S3をUSBケーブルで繋いでください。
再起動したら左のリストの中からATOM S3を選択します。この時点でのファームウェアの最新versionはAlpha-28でした。ダウンロードを押してm5burner内にこのファームウェアをダウンロードします。さあ、ここでBurnを押せばATOM S3にファームウェアが書き込まれ…
エラーが出ました。ログインしなければならないそうです。なんで?
しょうがないのでここからアカウントを作ります。
Resisterを押すとアカウント作成ページに飛ぶので、そこでアカウントを作成します。アカウントが作成できたらまたm5burnerに戻ってきてEmailとパスワードを入力してログイン。
無事ログインができたらBurnを押して書き込みのセッティングを行います。
さあ、Nextを押していよいよ書き込み…
エラー出ました…
--chip auto --port /dev/tty.usbmodem2201 --baud 1500000 --before default_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0x9000 /Applications/M5Burner.app/Contents/Resources/packages/tmp/uiflow2-cfg.bin
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

エラーの文章で検索すると以下の記事が出てきました。ありがたい。

記事に従ってXcode Command Line Toolをインストールします。画面右上の虫眼鏡マークをクリックするとSpotlight検索が出てくるのでそこにTerminalと打ち込んで「ターミナル.app」をクリックして立ち上げます。
立ち上がったらそのまま以下の文を打ち込み、returnを押してください。

xcode-select --install

するとこのようなポップアップが出るのでインストールをしてください。

Xcode Command Line Tool インストールが終わったら再度試してみます。
あ、書き込む前にATOM S3の側面ボタンを長押しして書き込みモードにします。ボタンの隙間からLEDが内部で光っているのが見えたら書き込みモードに入っています。
COMはATOM S3を繋いでいるUSBポートの番号を選びます。どれだかわからないときはこの画面のままATOM S3を外したり繋いだりしてください。増えたのがATOM S3が繋がっているポートです。
Startを押すとアカウントの紐づけに関するWarningが出てきます。これでこのATOM S3の個体がアカウントに紐づきます。YESを押して次へ。
Nameは好きに設定できるようです。どの個体か見分けるための用途です。
Nextを押すと元の画面に戻るのでまたStartを押すとWIFIの設定画面になります。WIFI SSIDとWIFI Passwordは自身のWiFiの情報を入力してください。プログラムをするPCと同じWiFiに繋がっている必要があります。また、ATOM S3は2.4GHz帯にしか対応していないので注意です。Timezoneは関係あるのかわかりませんが一応設定しておきます、日本はGMT+9です。その他の項目はデフォルトのままいじっていません。
NEXTを押して

ついに書き込みに成功しました!USBを指し直すと、ATOM S3にもUIFLOW2と表示され、WiFiにも無事繋がっているようです
ここから先、ATOM S3とパソコンを直接USB-Cケーブルで繋ぐ必要はありません。ATOM S3へは電源供給だけのケーブルで大丈夫です。パソコンとATOM S3が設定した同じWiFiネットワークに繋がっていることだけ注意してください。

UIFlow編

UIFlow2.0にアクセスします
右上の人のマークをクリックして先程作ったアカウントでログインします。
ログインができたら画面下にある「Select Device」をクリック。すると先程UIFlow2をインストールした個体がありました。それをクリックしたら画面右下のConfirmをクリック。
これでプログラムの書き込み先が先程設定した個体になりました。試しに画面に"1"を表示して、画面の色を青くするプログラムを書いてみます。画面下のRunを押すと書き込まれます。
書き込み成功のメッセージが出るのですが、一瞬で消えるのでスクリーンショットを取り損ないました。なにはともあれATOM S3のスクリーンはこんな感じに青くなりました。
無事スクリーンは青くなりましたが、あれ?print "1"の部分が表示されていない…?
画面に文字を表示するやり方が違うようです。

labelという機能を使うようです。以下の画面から、ATOM S3の画面に何を表示させるかのレイアウトを編集できます。ここでLabelを画面上にマウスでドラッグして「label0」というものを作ります。
プログラムの方でこのlabel0に”Hello”という文字を代入してあげると…
あれ?変わらないじゃん!

どうやら背景色を設定するタイミングがいけなかったようです。Helloは書かれているけど、背景色が上書きされて見えなくなっているのかな。
Set screen background colorをLoopの中ではなくSetupの中に移動しました。
これでどうだ

Hello!!!
成功!

RUNとDownloadの違い

プログラムを実行するのにRunというボタンとDownloadというボタンの2つがあります。(現在のUIFlowの右側のボタンにはDownloadという文字は書いてありませんが、昔のバージョンのUIFlowにはDownloadと書いてあったようです)

RUN
1回だけ自分のプログラムを実行します。自分のプログラムが動くのはUIFlowとオンラインで繋いでいる間だけで、ATOM S3の電源を切って再度入れ直すとリセットされ、書き込んだ自分のプログラムは消えてます。

Download
ATOM S3に自分の作ったプログラムを書き込んで、電源が入ったときに最初に実行するプログラムにします。UIFlowとオンラインで繋いでなくてもATOM S3が単体で動作できるようになります。

公式の説明はこんな感じです。
原文:
https://docs.m5stack.com/en/quick_start/atoms3/uiflow
The Run/Download of the program:
1. The Run button (triangle) in the menu bar of UIFlow online version is the Single test operation, and the device will re-enter the online programming mode after reset.
2. The download button will download the current program to the device and configure it to start automatically. Note: If the downloaded program involves network communication, please add a WiFi connection program at the beginning of the program. If you need to re-enter the programming mode in offline operation mode, you can refer to the mode switching instructions at the bottom of this document.

Runで動かしているうちはATOM S3はonline programming modeとなっていて、新しいプログラムを受け付けるモードです、DownloadをするとATOM S3はApp modeになり、自分のプログラムを実行するモードになります。再びUIFlowと繋いで新しいプログラムを書き込むためにはonline programming modeにしなければなりません。このやり方がなぜかどこにもはっきりと書いてないのですが、ATOM S3の電源を切り、液晶画面スイッチを押しながら電源を入れるとonline programming modeに入れます。
m5burnerのConfigureからもできるらしいのですが、UIFlow使い始めている時点でm5burnerはもう起動してないし、m5burnerからまたログインしてからじゃないとConfigureに入れないし、入ってもどうすればonline programming modeにできるのかわからないし、ということで電源を切って入れ直す方が簡単かと思います。

なお、一度online programming modeに入り直すと、Appモードに単体では戻れません。電源をもう一度入れ直してもonline programming modeにしかならないので注意してください。Downloadで書き込んだプログラムは消えてはいないんだろうけど、UIFlowでまたプログラムを書き直さないとだめみたいです。。。