AoiSaya が 2021年12月11日01時48分53秒 に編集
分類およびライセンスを追加
記事種類の変更
製作品
Lチカの変更
ライセンスの変更
(CERN-OHL-P 2) CERN Open Hardware Licence Version 2 - Permissive
本文の変更
**そらまめ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)サーボについてきたプラ部品を加工して長さを調整します。 自分は端を薄く削って差し込める様にしてますが、ここまでの加工はいらないと思います。  4)ポリウレタン線でプラ部品をカードリングにしばりつけて固定します。 同じものを3個作れば完成です。  30mmΦのカードリングで作った時の写真も紹介します。10珠なので少し小さい車輪になります。 十字に縛ることができないので、プラ部品を接着剤で補強しています。  ## マイコンモジュールの作り方 FlashAirは、PWM信号を5個出せるので、そのうち3個をサーボモータの端子につなげます。 また、端子切り替えでLEDの制御信号を出力することができます。 1)ユニバーサル基板にカードスロットとDCDCコンバータを固定します。 2)DCDCコンバータの入力に電解コンデンサをつけて電池ボックスの電源をつなぎます。 3)DCDCコンバータの出力をFlashAirにつなぎパスコンをつけます。 4)ピンヘッダを並べます。 5)3端子ごとにピンヘッダに電源とグランドと制御信号をつなぎ、サーボ3個のコネクタを直接刺せるようにします。 6)LEDリング用のピンヘッダにFlashAirのSPIデータ出力端子と電源を繋ぎます   ## LEDリングの点灯回路 FlashAirはそのままでは、LEDリングを制御できません。そこで簡単な信号変換回路を用意します。 回路図を示します。 この回路を使えばFlashAirの1.6MHzのSPIの信号をLEDリング用の信号に変換することができます。 この変換回路をLEDリングの表面の空き地に取り付けます。  ## 組み立て コースターロボットのベースには、MFT2015で配布されたおまけ基板コースターを利用しました。 とてもかわいい基板です。裏面の配線パターンは使いません。   1)LEDリング上の変換回路とマイコンモジュール(上のFlashAirのSPI端子)を繋ぎます。 2)LEDリングをコースター基板の表に両面テープで貼りつけます。 3)電池ボックスとローテーションサーボをコースター基板の裏面に貼りつけます。 4)電池とサーボの配線をマイコンモジュ-ルにつなぎ、配線が絡まないように束ねます。 5)ローテーションサーボに車輪を取り付けます。 6)配線を見直し、FlashAirと電池を取り付けたら、ハードウェアは完成です。   ## ソフトウェア ``` Lua: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](https://github.com/AoiSaya) [Twitter ID @La_zlo](https://twitter.com/La_zlo)