AoiSayaのアイコン画像
AoiSaya 2021年02月27日作成 (2021年12月11日更新) © CERN-OHL-P 2
製作品 製作品 Lチカ Lチカ 閲覧数 1466
AoiSaya 2021年02月27日作成 (2021年12月11日更新) © CERN-OHL-P 2 製作品 製作品 Lチカ Lチカ 閲覧数 1466

そろばん珠で全方向に移動できるコースターロボットを作る

そろばん珠で全方向に移動できるコースターロボットを作る

そらまめ35号「Soloban-wheel coaster」

はじめに

FlashAirで全方向移動や回転運動が可能なロボットを作ってみました。
車輪は自作のオムニホイール+360度サーボ。
LEDはWS2812B x24。
ベースはコースター基板です。

コースターロボット

動作

コースター形状ですので、プリンなど軽いものを載せて運ぶことができます。
方向転換することなく全方向に自由に移動が可能です。
ソフトウェア次第で、FlashAirに内蔵されたマイコンによる自立走行や、スマホからのリモコン操作が可能です。
ライトアップ機能も搭載していますので、載せたものが一層映えるかもしれません。

設計情報

部品一覧

部品名 型番等 個数 備考
そろばん 13桁 36珠 ダイソーで購入
カードリング 30 または 35mm、Φ3mm 3個 ダイソーとユニディで購入
ポリウレタン線 0.26mm 1巻 手持ち
ローテーションサーボ SG90-HV 3個 360°連続回転サーボ
FlashAir W-04 16GB 1個 Wi-Fi内蔵SDカード型マイコン
コースター基板 円形、Φ86㎜ 1枚 MFTでのFlashAir購入特典
24連LEDリング WS2812B x24 1個 aliexpressで購入
昇圧DCDCコンバータ 3.3V出力 500mA 1個 aliexpressで購入
Dフリップフロップ TC7W74FU 1個 サトー電気で購入
電解コンデンサ 220uF 1個 aliexpressで購入
SDカードソケット 1個 aliexpressで購入
ユニバール基板 2.54mmピッチ 1個 aliexpressで購入
ピンヘッダ 2.54mmピッチ 適量 aliexpressで購入
電池ボックス 単3×2用 1個 秋月電子で購入
乾電池 単3 2個 eneloop pro
その他消耗品 適宜 適量 両面テープ、接着剤、はんだ等

車輪の作り方

足回りの部品はこちらになります。
車輪用の部品

1)そろばんを万能はさみとペンチで分解し、球を取り出します。
2)外したリングに珠を通します。
  カードリングの大きさで通せる数が来まります。このリングは35mmΦで12個通せました。
3)サーボについてきたプラ部品を加工して長さを調整します。
  自分は端を薄く削って差し込める様にしてますが、ここまでの加工はいらないと思います。

車輪1

4)ポリウレタン線でプラ部品をカードリングにしばりつけて固定します。
  同じものを3個作れば完成です。
キャプションを入力できます

30mmΦのカードリングで作った時の写真も紹介します。10珠なので少し小さい車輪になります。
十字に縛ることができないので、プラ部品を接着剤で補強しています。

キャプションを入力できます

マイコンモジュールの作り方

FlashAirは、PWM信号を5個出せるので、そのうち3個をサーボモータの端子につなげます。
また、端子切り替えでLEDの制御信号を出力することができます。
1)ユニバーサル基板にカードスロットとDCDCコンバータを固定します。
2)DCDCコンバータの入力に電解コンデンサをつけて電池ボックスの電源をつなぎます。
3)DCDCコンバータの出力をFlashAirにつなぎパスコンをつけます。
4)ピンヘッダを並べます。
5)3端子ごとにピンヘッダに電源とグランドと制御信号をつなぎ、サーボ3個のコネクタを直接刺せるようにします。
6)LEDリング用のピンヘッダにFlashAirのSPIデータ出力端子と電源を繋ぎます

マイコンモジュール1
マイコンモジュール2

LEDリングの点灯回路

FlashAirはそのままでは、LEDリングを制御できません。そこで簡単な信号変換回路を用意します。
回路図を示します。
この回路を使えばFlashAirの1.6MHzのSPIの信号をLEDリング用の信号に変換することができます。
この変換回路をLEDリングの表面の空き地に取り付けます。

キャプションを入力できます

組み立て

コースターロボットのベースには、MFT2015で配布されたおまけ基板コースターを利用しました。
とてもかわいい基板です。裏面の配線パターンは使いません。
基板表面
基板裏面

1)LEDリング上の変換回路とマイコンモジュール(上のFlashAirのSPI端子)を繋ぎます。
2)LEDリングをコースター基板の表に両面テープで貼りつけます。
3)電池ボックスとローテーションサーボをコースター基板の裏面に貼りつけます。
4)電池とサーボの配線をマイコンモジュ-ルにつなぎ、配線が絡まないように束ねます。
5)ローテーションサーボに車輪を取り付けます。
6)配線を見直し、FlashAirと電池を取り付けたら、ハードウェアは完成です。

キャプションを入力できます
キャプションを入力できます

ソフトウェア

8の字走行のソースコード例

----------------------------------------------- -- Soloban_corster for W4.00.03 -- Copyright (c) 2019-2021, AoiSaya -- All rights reserved. ----------------------------------------------- function chkBreak(n) -- for FTLE(FlashTools Lua Editor) BREAK sleep(n or 0) if fa.sharedmemory("read", 0x00, 0x01, "") == "!" then fa.pwm("stop",2) fa.pwm("stop",3) fa.pwm("stop",4) error("Break!",2) end end fa.sharedmemory("write", 0x00, 0x01, "-") local script_path = function() local str = debug.getinfo(2, "S").source:sub(2) return str:match("(.*/)") end function SG90(ch,degree) -- degree=-90..90 local interval, min, max = 20, 0.5, 2.5 -- [ms] local freq = 1000/interval -- [Hz] local duty = ((degree+90)/180*(max-min)+min)/interval*100 -- [%] fa.pwm("duty",ch,freq,duty) fa.pwm("start",ch) end -- main local myDir = script_path() local libDir = script_path().."lib/" led = require(libDir .. "SlibWS2812B") local rgb={} local num = 24 local bright = 8 local ctbl ={ 0xFF0000, 0xE02000, 0xC04000, 0xA06000, 0x808000, 0x60A000, 0x40C000, 0x20E000, 0x00FF00, 0x00E020, 0x00C040, 0x00A060, 0x008080, 0x0060A0, 0x0040C0, 0x0020E0, 0x0000FF, 0x2000E0, 0x4000C0, 0x6000A0, 0x800080, 0xA00060, 0xC00040, 0xE00020 } local r, g, b, c, k, p, v local be = bit32.extract local cos = math.cos local sin = math.sin local M_PI = math.pi local p2r = 2.0 * M_PI / 360.0 local M_2PI_3 = M_PI*2.0/3.0 k = 0 led:setup( num ) for i=1, num do c = ctbl[(k+i)% num+1] rgb[i] = {} rgb[i].r = be(c,16,8) rgb[i].g = be(c,8,8) rgb[i].b = be(c,0,8) end k = (k+1) % num -- led:light( rgb, bright ) chkBreak() fa.pwm("init",2,1) fa.pwm("init",3,1) fa.pwm("init",4,1) SG90(2,0) SG90(3,0) SG90(4,0) v = 100 s=10 w=20 while 1 do ---[[ for p = 0, 359, s do r = p * p2r fspeed = v * sin(r) rspeed = v * sin(r-M_2PI_3) lspeed = v * sin(r+M_2PI_3) SG90(4,fspeed);chkBreak(w);--fa.pwm("stop",4) SG90(3,lspeed);chkBreak(w);--fa.pwm("stop",3) SG90(2,rspeed);chkBreak(w);--fa.pwm("stop",2) -- collectgarbage() end --]] chkBreak(w) end return

おわりに

動作させたときの様子をいくつか紹介します。

8の字走行テスト

Twitterにつぶやいたときの動画を紹介します。
姿勢制御用の加速度センサーなどはついていませんが、同じ場所を8の字走行できていることがわかります。
全方向に移動できるオムニホイールとしての精度はそこそこ高そうです。
走行中にボディがふらつくのは制御値とサーボの回転数が比例していないためで、補正すれば改善できそうです。
https://twitter.com/La_zlo/status/1172561174937784320

LEDリングの点灯テスト

かぼちゃのおもちゃを載せてライトアップしてみました。
プログラム次第で載せたものを好きな色で演出することができます。

キャプションを入力できます

ライセンス等

Copyright 2021 AoiSaya
CERN-OHL-P2とします。
以下の場合を除き、個人、法人、商用、非商用問わず無料でご利用頂けます。
ご相談いただきたい事項
・この記事や設計データそのもの(軽微な改変を含む)を販売する場合
・この設計(軽微な改変を含む)そのままのガジェットもしくはキットを販売する場合

免責事項

本記事の正確性については努力しておりますが、当方は利用者が当記事の情報を用いて行う一切の行為について何ら責任を負うものではありません。本記事の情報の利用、内容によって、利用者にいかなる損害、被害が生じても、著者は一切の責任を負いません。ご自身の責任においてご利用いただきますようお願いいたします。

Author

GitHub/AoiSaya
Twitter ID @La_zlo

AoiSayaのアイコン画像
こころの赴くままに豆をまきます。投稿内容は趣味と煩悩に基づいており、無保証です。また、所属団体を代表するものではありません。
  • AoiSaya さんが 2021/02/27 に 編集 をしました。 (メッセージ: 初版)
  • AoiSaya さんが 2021/02/27 に 編集 をしました。
  • AoiSaya さんが 2021/12/11 に 編集 をしました。 (メッセージ: 分類およびライセンスを追加)
ログインしてコメントを投稿する