Robokit
ロボキットへようこそ!このドキュメントは東京工業大学 ロボット技術研究会 アクア研の2024年新歓活動で配布したロボキットに関する説明をまとめたものです。ロボキット購入費の支払い方法、アクア研の連絡先、ロボット技術研究会への入部方法もこのドキュメントを参照してください。
ロボキット購入費の支払い方法
金額は3,000円です。支払いの方法は次の2通りあります。
- 対面での受け渡し時に直接支払う
- 銀行口座への振り込みで支払う
それぞれの具体的な方法は次の通りです。
1: 対面での受け渡し時に直接支払う
対面での集金は希望する場合は 5/24,5/27 日のプールで行います。 もし都合がつかない場合はそれ以前の講習会での集金も可能です。 部員に声を掛けてください。
2: 銀行口座への振り込みで支払う
口座の情報は以下の通りです。
みずほ銀行 自由が丘支店 店番533 口座番号3064768 東工大ロボット技術研究会アクア研究
依頼人名は{新歓Discordの表示名} {ミョウジ} {ナマエ}
のようにしてください。例えば、新歓Discordの表示名が24-Aqua
で本名がアクア 太郎
の場合は24-Aqua アクア タロウ
となります。五月末までに振り込んでください。
連絡先等
ロボット技術研究会への連絡先は以下の通りです。
- Twitterアカウント: @titech_ssr
- メールアドレス:
info[ at ]rogiken.org
([ at ]
を@
に置き換えてください)
アクア研への連絡先は以下の通りです。
- Twitterアカウント: @rogy_aqua
- メールアドレス:
rogy.aqua[ at ]gmail.com
([ at ]
を@
に置き換えてください)
また、東京工業大学ロボット技術研究会2024年度新歓ページも参照してください。
ドキュメントの見方
以下のスクリーンショットはパソコンでこのドキュメントを開いた概観です。
画面を各部分に分解すると次のようになります。
それぞれの説明は以下の通りです。
- このドキュメントのページ一覧。現在見ているページは青色、それ以外は白色で表されています。
- ドキュメントのナビゲーションです。左のアイコンから順に、以下のことができます。
- ページ一覧とナビゲーションの表示/非表示を切り替える。
- テーマを変える。
- ドキュメント内で検索を行う。
- ドキュメント全体を印刷する。
- ドキュメントのソースコードが置かれているGitHubリポジトリを表示する。
- 左矢印で1つ前のページ、右矢印で1つ後のページに移動します。
- ページの本文です。
ドキュメントの見方に関するより詳細な解説はReading Books - mdBook Documentationを参照してください。
困ったら
まずはトラブルシューティングを参照してください。質問のやり方は質問・バグ報告についてを参照してください。
キットの内容物
分からないことがあったら遠慮なく聞いてください!!
パーツが破損するなど、予備が必要な場合も遠慮せずに申し出てください!!
機械部品
3Dプリンターパーツ
本キットは、3Dプリンターで制作したパーツが大部分を占めています。
3Dプリンターは、他の造形方法よりも自由な造形ができます。したがって、ロボットの中でも特に形状の制限が多い水中ロボットでは、大変重宝します。
内容物
パーツ名 | 個数 | 写真 |
---|---|---|
board1 | 2個 | |
board2 | 2個 | |
pillar1 | 2個 | |
pillar2 | 4個 | |
motorCover | 2個 | |
pulley1 | 2個 | |
pulley2 | 2個 | |
link | 2個 | |
propeller1~5 | 2×5個 | |
motorshaftStopper | 2個 | |
servoConnector | 2個 |
ネジ類
基本、長さの単位はすべてmm(ミリメートル)です。
内容物
ネジ
ナット/ワッシャー
種類 | サイズ3 | 個数 |
---|---|---|
ナット | M2 | 38個 |
ワッシャー | M2 | 82個 |
ワッシャー | M3 | 6個 |
スプリングワッシャー | M2 | 35個 |
アタマが丸い方がなべネジ、アタマが平らな方が皿ネジです。
ネジは、基本的に直径と長さによって区別され、
M{直径}×{長さ}
M{直径}x{長さ}
M{直径}*{長さ}
などと表記します。
例: M2*10
... 直径 2mm, 長さ 10mm
ナットやワッシャーは対応するネジの直径によって区別され、M{直径}
と表記します。
その他
内容物
種類 | サイズ4 | 個数 | 写真 |
---|---|---|---|
シャフト | φ2 | 2本 | |
シャフト | φ3 | 2本 | |
フランジブッシュ | 内径 2mm 高さ 2mm | 2個 | |
フランジブッシュ | 内径 3mm 高さ 2mm | 2個 | |
フランジブッシュ | 内径 3mm 高さ 6mm | 2個 | |
シリコンチューブ | 2本 | ||
スズメッキ線 | 長さ 約600mm | 1本 | |
紙やすり(100番台) | 1枚 | ||
紙やすり(150番台) | 1枚 | ||
紙やすり(240番台) | 1枚 |
シャフトなどの丸い棒は、その直径をφという記号を使ってφ{直径}
と表記します。
回路部品
抵抗器
コネクタ/ピン
部品名 | ピン本数 | 個数 | 写真 |
---|---|---|---|
XHコネクタ ポスト | 2ピン | 1個 | |
XHコネクタ ポスト | 3ピン | 6個 | |
XHコネクタ ポスト | 7ピン | 2個 | |
VHコネクタ ポスト | 2ピン | 4個 | |
ピンソケット | 最低38ピン | ||
ピンヘッダ |
その他
部品名 | 個数 | 写真 |
---|---|---|
積層セラミック コンデンサ 0.1μF | 2個 | |
電解 コンデンサ 100μF | 1個 | |
DCモータ | 2個 | |
サーボモータ(SG-90) | 2個 | |
LED | 6個 | |
可変抵抗器 | 1個 | |
ジョイスティック | 1個 | |
単3電池ボックス | 2個 | |
バッテリースナップ | 1個 | |
FET(2SK4017(Q)) (三本のピンが生えた黒い部品) | 2個 | |
mpu6050 (小さい青い基盤) | 1個 | |
F303K8 (白いマイコン基盤) | 1個 | |
導線 | 1セット |
回路の組み立て方
ロボキット 基板回路の作製
また下図バツ印のパーツは本キットでは使用しないため、はんだ付けは不要です。送付したパーツのみではんだ付けする場合、下記の不要箇所にはんだ付けすると他の必要箇所のパーツが足りなくなる恐れがあります。 必ず不要箇所意外を優先してはんだ付けをしてください。
作業の流れ
- 本体基板のはんだ付け
- はんだ付けについて
- 抵抗のはんだ付け
- コンデンサとLEDのはんだ付け
- コネクタとFETのはんだ付け
- ソケットのはんだ付け
- コントローラ基板のはんだ付け
- 抵抗のはんだ付け
- コネクタのはんだ付け
- 電池・ケーブルの接続
- DCモータとケーブルのはんだ付け
- 電源・ケーブルの接続
- F303K8マイコンの0Ω抵抗について
1. 本体基板のはんだ付け
1-1. はんだ付けについて
はんだ付けのコツ等については↓のサイトや動画を参照してください。
1-2. 抵抗のはんだ付け
まずは最も背が低い抵抗からはんだ付けをします。基板上の「R」から始まる13個のパーツが抵抗です。各番号で指定された抵抗値を持つ抵抗を、向きを気にせずはんだ付けします。
抵抗は流したい電流の大きさを調整するために使用します。例えば、3.3V電源で1kΩ抵抗を用いれば高校物理で習ったように、 $$ \begin{aligned} 電流 I &= \frac{3.3\mathrm{V}}{1\mathrm{k}Ω} \ &=3.3\mathrm{m(ミリ)A} \end{aligned} $$ の電流が流れます。キットに使うようなLEDを光らせるなら5mA未満で構いません。逆に抵抗値を小さくすると大きな電流が流れます。しかし電流が大きすぎるとパーツに大きな負荷や熱がかかり破損する可能性があります。抵抗はいたずらに電流を妨げるのではなく、適切な電流の大きさに制限する調整弁と言えます。
抵抗は100Ωや510k(510キロ=510000)Ω、2M(2メガ=2000000)Ωなどそれぞれ固有の抵抗値を持っていますが、この値を判断するのに使うのがカラーコードです。抵抗に彩色された4本(ないし5本)の赤や黄色、青の線はそれぞれある数を表しており、例えば茶は1、黒は0、橙は3です。また片方の端の色は金色か銀色です。この端の金銀は抵抗の品質誤差を表しており金色なら表示抵抗値の+-5%以内の誤差、銀色なら+-10%以内の誤差があることを示しています。
R2の場合、左から茶黒橙金と4本線を持っています。このうち3番目の橙は10の乗数を表しており、橙なら10の3乗を掛けることを意味します。この乗数を用いることで何十万といった大きな数もカラーコードで表記できます。そのためR2の茶黒橙金は、 $$ \begin{aligned} 茶黒橙金 &= 1 \quad 0 \quad 3 \quad \pm5 \ &=10 \times 10^3 \pm5 %\ &=10\mathrm{k} (Ω) \pm5 % \ \end{aligned} $$ を意味します。このようにして次の表の通りに他の抵抗もはんだづけします。なお、基板上で値が「led」となっている抵抗はLEDライトに流れる電流を決定します。今回は明るすぎず見やすい1kΩとします。
下記表の番号にて不要と記載されている箇所へのはんだ付けは必要ありません。発送したパーツによってはこの箇所へはんだ付けすると他の必要な箇所で使うパーツが足りなくなるため、必ずR1~R10を優先してください。
番号 | カラーコード | 抵抗値(Ω) |
---|---|---|
R1 | 黄紫茶金 | $$47\times10^1=470$$ |
R2 | 茶黒橙金 | $$10\times10^3=10\mathrm{k}$$ |
R3 | 黄紫茶金 | $$47\times10^1=470$$ |
R4 | 茶黒橙金 | $$10\times10^3=10\mathrm{k}$$ |
R5 | 茶黒赤金 | $$10\times10^2=1\mathrm{k}$$ |
R6 | 茶黒赤金 | $$10\times10^2=1\mathrm{k}$$ |
R7 | 茶黒赤金 | $$10\times10^2=1\mathrm{k}$$ |
R8 | 茶黒赤金 | $$10\times10^2=1\mathrm{k}$$ |
R10 | 茶黒赤金 | $$10\times10^2=1\mathrm{k}$$ |
R11 | 赤赤茶金 | $$22\times10^1=220$$ |
R12 | 茶黒橙金 | $$10\times10^3=10\mathrm{k}$$ |
R13 | 赤赤茶金 | $$22\times10^1=220$$ |
R14 | 茶黒橙金 | $$10\times10^3=10\mathrm{k}$$ |
この時上の写真だとR2とR8では抵抗の大きさが異なります(注: 実際に送付した抵抗とは大きさが異なる場合があります)。R2は大きく、R8は小さいです。これは流してもいい最大の電流量である「定格」が異なるからです。 大きいR2は1/2W抵抗といい、抵抗値 \(\mathrm{R}\) \(\times\) 電流 \(\mathrm{I}\) \(^2\) = 電力 が0.5W(ワット)まで耐えられます。一方小さいR8は1/6W抵抗といい、0.167Wまでしか耐えられません。この定格を超えると抵抗に流れる電流によるジュール熱が限界を超え、抵抗が焼損してしまいます。発熱により文字通り焼けてしまい回路が壊れ発火の危険もあります。高校物理などでの電気回路の問題では無限に電流が流せたりと仮定しますが、実際にはその発熱などを考慮する必要があります。モータなど大電流が流れる回路を作る際は、最大どの程度電圧がかかり電流が流れるのかを事前に確認し、定格の範囲内で安全に使用する必要があります。
1-3. コンデンサとLEDのはんだ付け
続いてコンデンサとLEDをはんだ付けします。ここで注意しなくてはならないのは抵抗と違い「向き」があることです。 LEDは発光「ダイオード」と言うように、ダイオードとして電流が流れる向きがあります。この向きに注意しないと電流が流れずライトが光りません。LEDの場合2つの金属線(リード)が生えていますが、長いリードの方を電圧が高いプラス側に接続し、短いリードの方を電圧が低いマイナス側に接続します。
この基板では5つのLEDは全て基板上側(穴に+の印がある方)がプラスです。こちら上側にLEDの長い線の方を挿し込み、下側に短い方を挿し込みます。LED1,LED2,LED3はプログラムから自由に点滅させることができます。対してLED4,LED6は電源が接続されている時は点きっぱなしの電源接続確認用のLEDです。LED4はモータ側の電源(単三乾電池)を、LED6はマイコン側の電源(9V電池)の有無を反映します。
番号 | 色(任意で可) |
---|---|
LED1 | 緑 |
LED2 | 黄 |
LED3 | 赤 |
LED4 | 青 |
LED6 | 青 |
同じく接続する向きが存在するコンデンサをはんだづけします。今回は青い米粒状のものと黒い筒状のものの2種類のコンデンサを使用します。 青い米粒は積層セラミックコンデンサと言い、こちらは向きの区別なく使用できます。小さく向きの区別が無いため使いやすいですが、大きな容量のものは少ないです。他方の黒い筒は電解コンデンサと言い、リード線が長い方をプラス側に挿す必要があります。大型で向きに注意する必要がありますが、大容量のものが多いです。 表面に104と書かれた青い積層セラミックコンデンサをC1にはんだ付けします。黒い筒の電解コンデンサも向きに注意してC2にはんだ付けしますが、この時「横倒しにする」ことに注意してください。 横倒しにしないとコンデンサとマイコン(F303K8)が干渉してしまいます。一度はんだ付けすると動かしにくいです。はんだ付け前に横倒しになっていることを確認しながら接続します。
番号 | パーツ名 | 向き |
---|---|---|
C1 | 積層セラミックコンデンサ 0.1u(マイクロ)F | 無し |
C2 | 電解コンデンサ 100uF | 有り |
このコンデンサの使用理由としては「ノイズの低減」のためです。IMUやマイコンなどのデジタルICが動作すると0(0V)と1(3.3V)が高速で入れ替わります。これにより逆起電力が発生しGNDやつながった配線に予期せぬ電流、ノイズが発生します。このノイズがそのまま周囲の機器に伝搬されてしまうと、機器の誤作動につながってしまいます。
ノイズが発生しうる機器(上図だとIMU)のノイズが別の機器(F303マイコン)に流入しないようにするためには、その間にセラミックコンデンサを挟むことでノイズの衝撃を緩和され、ノイズを抑えることができます。一般にこのようなノイズは正電源と負電源(GND)に乗っかるため、このノイズ低減の役割でICの電源-GNDをつなぐように配置されたコンデンサをパスコンと言います。今回のキットのセラミックコンデンサもそのパスコンです。多くの場合0.1uF程度が使われます(高周波ノイズには比較的低容量のコンデンサの方が反応しやすいため)。 またF303マイコンの9V正電源、GND間にも大容量の100uF電解コンデンサがつながれています。こちらはノイズ対策に加え予備電源のような役割もします。9V電源はDCモータにも使われており、モータが瞬間的に大電流を持ち去ってしまう場合があります。これではマイコン側まで電流が届かず不安定なため、100uFコンデンサを置いて電気を蓄えておくことで安定して電源を供給し続けられるように配慮します。
1-4. コネクタとFETのはんだ付け
サーボモータやコントローラのケーブルを接続するコネクタをはんだ付けします。写真の白い7つの長方形がそれぞれ基板とケーブルの信号を伝達するコネクタです。今回は「XH」という規格のコネクタを使います。このXHコネクタも向きに決まりがあるので注意が必要です。
上の図の様にXHコネクタには切れ込みがあります。これが基板の左か下を向くように配置してはんだ付けします。 向きが反対だと接続するケーブルが逆向きになり、本来とは別の線同士がつながってしまうので注意してください。
番号 | ピン数 |
---|---|
X5 | 3 |
X8 | 3 |
X9 | 7 |
基板左中央の2つの黒いFETも接続します。FETはICがモータを操作するのに使用し、信号に応じてモータを動かしたり止めたりします。FETには3本のピンがありますが、そのうち左の1本に門(ゲート)の開閉信号を送ることで残り2ピンで大電流を通す/止めることができます。FETを使うことで小さなICの微小な開閉信号でモータに流す大電流を操作することが可能になります。
このFETには上記のようにピンごとの役割が別れているため、正しい向きがあります。型番が記載された黒い面を下側に、金属板が貼られた銀色の面を上側に向けてはんだ付けします。この時FETのピン同士の幅が狭いため、誤ってはんだでつながってしまわないよう注意してください。
番号 | パーツ名 |
---|---|
FET_DC1 | 2SK4017(Q) |
FET_DC2 | 2SK4017(Q) |
1-5. ソケットのはんだ付け
メイン基板の最後はソケットのはんだ付けです。カラーコード読みや向きはありませんが、今度は「綺麗さ」が重要です。
写真のピンクのソケットをはんだ付けします(色はキットと異なります)。右2列が15ピンずつ、左の短いのが8ピンです。これをピンソケットを分割して作ります。最終的には分割したソケットを1ピンずつはんだ付けしますが、まずはそのうち1ピンだけはんだ付けします。1箇所だけ固定することでソケットを基板に仮留めして、ソケットが基板に垂直になるよう調整します。
両側ともソケットを垂直に立てることでマイコンを正しく差し込むことができます。一方ソケットが傾いてはんだ付けされているとマイコンが上手く挿し込めません。 またIMUの方のソケットもはんだ付けしますが、ここも垂直にしないとIMUが傾いてしまいます。傾くと重力加速度や回転角の検出時に誤差が生じてしまうため、必ず仮留めして水平に搭載できるよう角度を確かめてから他のピンもはんだ付けします。
番号 | パーツ名 | ピン数 |
---|---|---|
A1 | ピンソケット | 15ピン x 2 |
ITG/MPU | ピンソケット | 8ピン |
基板左側のXHコネクタもはんだ付けします。こちらも1ピンだけ仮留めを行い、金属端子が基板に平行になるように調整してから他方のピンもはんだ付けします。 金属端子が下を向いてしまうとコネクタが上手く挿せないため注意してください。 これにて本体基板のはんだ付けは終了です! 次はコントローラ基板のはんだ付けに移ります。
2. コントローラ基板のはんだ付け
コントローラでも背の低いパーツからはんだ付けするという原則は変わりません。まずは抵抗から始めます。
2-1. 抵抗のはんだ付け
基板中央部の抵抗、コンデンサ、LEDをはんだ付けします。コンデンサは青い米粒型の積層セラミックコンデンサを使うので向きはありません。一方LEDは向きが有り基板上側がプラス、下(ロゴ絵)側がマイナスです。上側に長い方のリード線を挿し込みます。
番号 | パーツ名 |
---|---|
R1 | 抵抗 10kΩ |
R7 | 抵抗 1kΩ |
C1 | 積層セラミックコンデンサ 0.1uF |
LED1 | 3mm LED青色(色任意) |
2-2. コネクタのはんだ付け
続いてXHコネクタとジョイスティックを接続するピンヘッダをはんだ付けします。 まず2つのXHコネクタを取り付けます。7ピン、2ピンのものがありますが、どちらも基板上側に切れ込みがある方が来るようにします。
番号 | パーツ名 | 切れ込み |
---|---|---|
X1 | XHコネクタ 2ピン | 上側 |
X2 | XHコネクタ 7ピン | 上側 |
そして左側のピンヘッダです。これは写真ではジョイスティックを取り付けた後なので分かりにくいですが(適当な写真が無くてすみません)、まずは5ピンのピンヘッダをはんだ付けします。 このピンヘッダに直交するようにジョイスティックをはんだ付けします。写真ではジョイスティックのピンにソケットを被せ、ソケットをはんだ付けすることでジョイスティックが取り外せるようにしています。今回のキットではジョイスティックを外すことはないので、ジョイスティックを直接ピンヘッダにはんだ付けして固定してしまっても構いません。 最後に基板右側に空いた穴にあたる回転ボリュームを取り付けます。このツマミを調整することで機体を回転させます。
回転ボリュームはまず穴の上側に空いた3つの穴にボリュームの3つのピンを挿し込みます。その後台座を穴に押し込みます。この時少し力が要ります。 これで回路製作は全て終了です!あとはケーブルと電池をつなげば完成です。
3. 電池・ケーブルの接続
3-1 DCモータとケーブルのはんだ付け
DCモータに電流を流すケーブルをはんだ付けします。2つのDCモータの一方に赤いリード線を、他方に黒いリード線をはんだ付けします。2つとも同じ端子には同じ色のリード線を使ってください。 キットでは既にリード線の端にXHコネクタのソケットが付いていますが、上記のようにモータ端子のリード線の色を2つともそろえると基板のコネクタに対し赤黒の線が逆向きに差さります。この状態だと、写真左のDC1には黒から赤へ、右のDC2には赤から黒へ電流が流れます。これによりモータは逆向きに回転するようになります。キットの構造・制御上、FETから来る電流に対し逆向きに回転する必要があります。
3-2. 電源・ケーブルの接続
最後に電池とケーブルを接続します。
まず本体基板左下の2つのXHコネクタにはそれぞれDCモータを接続します。続いて写真右上の本体基板中央の縦置きされた下2つの3ピンXHコネクタにサーボモータを接続します。その後ピンクのソケットの8ピンの方にIMUを、15ピンx2の方にF303K8マイコンを挿します。この時マイコンのUSB端子を基板上側にします。
XH7ピン1.5mケーブルで本体基板とコントローラ基板を接続します。コントローラ基板のXH2ピンには9V電池用のリード線を接続します。
全て接続されたら電源となる電池を接続します。本体基板左上の2つのXHコネクタにはそれぞれ単三電池3本の4.5V電池ボックスを接続します。ここで注意が必要なのは、この時使用する計6本の電池は必ず新品のものを使用してください。回路の構成上、モータ用の電流をまかなうため2つの4.5V電源が並列接続されています。このため2つの電源に電位差があると(例えば3.0Vと4.5Vが並列接続になると)電源が不安定になります。新品の電池を使用して同じように使用することで、どちらの電池ボックスも同じ電圧で使用されていくようにしてください。
最後にコントローラ基板のリード線を9V電池に接続して完成です!ここからはプログラムを作製し、実際にLEDやモータをうごかします。
3-3. F303K8マイコンの0Ω抵抗について
個々からは製作に関係ないコラム的な話ですが、今回予めF303K8にはんだ付けされていた0Ωのチップ抵抗を外しました。この理由についてお話します。
僕らが試作している時、ジョイスティックとIMUを併用するとジョイスティックの傾きの読み取り値がおかしくなるという問題がありました。しかし一方だけの使用の時は問題ありませんでした。
この問題を調べてみたところ、ジョイスティックに使っているピンのA4・A5と、IMUとの通信に使うD4・D5が何故か回路的に元からつながっているせいであることが分かりました。 このためIMUの信号がそのままジョイスティックの値読み取りピンまで上乗せされてしまい、ジョイスティックの値がおかしくなっていました。
この問題を解決するためにはもちろん使うピンを変えればよいのですが、そのために基板を再度発注する時間がありませんでした(なんで自分はもっと早くに気づかなかったんだっ)。そのため今ある基板を使い、この事態を回避する最後の手段として抵抗をはがしてマイコンを改造する荒療治となりました。これによりピンのつながりを物理的に切断しました。 今のところこの改造で新たな問題は発生していないですが、もしかしたら何か不測の事態が起こるかもしれません(その時はごめんなさい...orz)
別の有名どころのマイコンであるArduinoに合わせるためとの説もありますが、なぜピン同士がつながっているのか、全くの謎です...
付属資料
回路図
本体基板(1)
本体基板(2)
コントローラ基板
オムニボートの機体組み立て方法
分からないことがあったら遠慮なく聞いてください!!
パーツが破損するなど、予備が必要な場合も遠慮せずに申し出てください!!
注意点
パーツは優しく扱おう
3Dプリンターで出力したパーツは一般にプロトタイピング用のパーツとして扱われており、その分他の造形方法に比べて脆いです。やさしく扱ってください。
パーツ紛失に注意
小さいパーツが多いのでとても無くしやすいです(体験談)。片付いた部屋や机の上で作業することを勧めます。
水没厳禁
今回のキットの機械(モーター周りや端子)、回路は防水性能を持ちません。水上で想定されるちょっとした水しぶきを防ぐ程度の防御性能はありますが、DCモーターやサーボモーターが水没すると壊れます。そのため水上実験の際はboard2より上は水に付けないようにしましょう。
安全対策
モーターが高速で回転するため、回転中にパーツが外れると非常に危険です。空中で回転実験する際はプロペラ部分をのぞきこまないようにしてください。もしのぞき込む場合は防護眼鏡などを着用してください。
用意するもの
組み立てには次の道具が必要です。工具は一般のご家庭にあるもので問題ありません。そこまで高品質なものでなくとも十分なので100均やホームセンターで売っているものでも大丈夫です。
- プラスドライバー
- キットに含まれるM2ネジをなめずに回せる様な小さいもの。ドライバーのサイズ規格の目安は#0 or #1
- ニッパー
- ラジオペンチ×2
- ハンマー、かなづち、木づちなど
- 雑巾やタオルのような厚手の布
- ハンマーを使う際の捨て板とする適度に硬い板
- 木の板などで十分。ただしハンマーでへこんでしまっても良いもの。
- セロハンテープ
- 輪ゴム×4
- 16号(一般的なサイズ)
組み立て手順
パーツのバリ取り
3Dプリンターの仕組み上、パーツにサポート材と呼ばれる印刷の際の支えが残ってしまう。パーツの滑らかでない面は付属のやすりで丁寧に削る。この精度が後の組み立ての正確性に影響する。
DCモーターの回転方向の確認
回路説明書に基づいてはんだ付けされたDCモーターは、回路につないだ時互いに反対に回転するようになっているため、回転方向を特定する必要がある。
それぞれのモーターに旗のようにテープを巻き付け、回路につないでモーターを回転させて回転方向を見る。図の方向(軸からモーターを見る方向)から見て時計回りに軸が回転していればCW(clockwise)、反時計回りに回転していればCCW(counter clockwise)とテープなどで目印をつけておく。この後の組み立ては回転方向によって手順が異なる部分があるため、区別しておく必要がある。
サーボホーンの取り付け(2つ作る)
可動域-90°~+90°を持つSG90にPWM Period 20ms, Palse Width 1.45msのPWMを出力しするとサーボモーターが0°を向く。この状態で、下図のようにサーボホーンが本体と垂直になるようにサーボホーンを取り付け、サーボホーン同梱のネジ(一番小さなものが好ましい)でねじ止めする。次に右図のようにサーボホーン両端の外側から2番目の穴にスズメッキ線を通し、servoConnectorの両端の穴にも通してぐるぐる巻きにすることでこれらを固定する。上からのぞいた時に中心の穴を通してサーボホーン取り付けネジが見えていることを確認する。
この部分を間違えるとプロペラの推進方向の可動域が変わるので要注意。取り付け後にもう一度PWM Period 20ms, Palse Width 1.45msのPWM信号を流して、サーボホーンが下図のようにサーボモーターと直角の向きになればうまくできている。
※ PWM信号を流す具体的な方法はサーボの原点合わせについてを参照してください。
サーボモーターとDCモーターの取り付け(2つ作る)
サーボモーターの軸がDCモーター側に来るようにboard2に取り付ける。図のようにサーボホーンをM2×10ネジとナットで固定し、DCモーターをはめ込む。DCモーターは特にネジなどで固定しない。モーターに張っておいたCW,CCWを区別するテープは見やすい位置に張り替えておくとよい。
motorCoverをかぶせる(2つ作る)
motorCoverの横穴にモーター、サーボモーターの配線を内から通し、motorCoverをかぶせる。motorCoverの大きな配線用横穴がDCモーター側に来るように組み立てる。
pillar1、pillar2を取り付ける(2つ作る)
board2とmotorCoverのDCモーター側のはじに空いている2mm穴にワッシャーを先に通したM2×15ネジを入れる。左図のようにpillar2(又はM2ナット)を先に通し、あとからpillar1を取り付ける。pillar2は方向が正しければboard2やpillar1の溝にぴったりはまるようになっている。pillar1の穴にはネジ切り加工がされているため、ネジを締めることで固定できる。なお、このpillar2は船体取り付け用の取っ手であるが、M2ナットに置き換えて組み立てることが可能になっている。そのため作る船体の形状にから見てpillar2が邪魔になる場合はこれをM2ナットに置き換えてもよい。
board1を取り付ける(2つ作る)
同じ要領でboard2、motorCoverのサーボモーター側の2mm穴にワッシャーを通したM2×15ネジを通し、board1の柱の部分の穴にねじ止めする。この穴もpillar1同様にネジ切り加工がされている。
board1とpillar1,2をねじ止めする(2つ作る)
pillar1,2をつけた時と同じ要領でboard1とpillar1の間にもう一つのpillar2(又はM2ナット)を挟んで、先にワッシャーを通したM2×15ネジでねじ止めする。なお、このpillar2は船体取り付け用の取っ手であるが、M2ナットに置き換えて組み立てることが可能になっている。そのため作る船体の形状にから見てpillar2が邪魔になる場合はこれをM2ナットに置き換えてもよい。
board1にフランジブッシュを取り付ける(2つ作る)
フランジブッシュは3種類同梱されている。そのうち内径が小さいもの(内径2mm)をboard1の小さい穴にはめる。内径が大きいもの(内径3mm,袋に入っている)は2種類あるが、長さが短いもの(長さ3mm)の物をboard1の大きいほうの穴にはめる。はめた後は図のようになる。 はめる向きを間違えるとプロペラが上手く回らない恐れがあるので注意する。
シリコンチューブカップリングを作る(2つ作る)
同梱されている2種類のシリコンチューブ(細く長いもの×2と太く短いもの×4)を用意する。太いチューブを細いチューブの両端にはめ込み、図のようなカップリングを作る。
Φ2真鍮シャフトをpulley1に圧入する(2つつくる)
図のように下のテーブルなどが傷つかないように捨て板を用意して、そのうえで作業することを勧める。ハンマーを短く持ってΦ2の真鍮製シャフトがゆがまないように気を付けながらpulley1の穴に奥まで打ち込んで圧入する。木づちやゴム製のハンマーの場合は雑巾などを挟むとハンマーが傷つきにくい。
motorshaftStopperにネジをつける(2つ作る)
M2×10ネジを図のようにmotorshaftStopperに2つ通し、ナットで締める。ここでは切り込みが入ったほうのナットは緩めておく。切り込みがないほうのネジとナットは、このパーツの重心が中心からずれることによって生じる振動の対策なので、回転対称になるようにねじをつけるとよい。
pulley1のシャフトをDCモーターにつなげる(2つつくる)
左図のようにboard1のDCモーターと同軸上のフランジブッシュに真鍮シャフトのついたpulley1を通し、そこにM2ワッシャー2つとmotorshaftStopperを通す。つぎに右図のように先に作ったカップリングでDCモーターのシャフトと真鍮シャフトをつなぎ、motorshaftStopperをboard1の近くに動かして切り込みのほうのネジを締めることで軸に固定する。固定できたらpulley1を回してみて特に引っ掛かりがなく回ることを確認する。 ここまでの段階で同じものが二つできているはずである。
pulley2の下準備(2つ作る)
pulley2の各2mm穴に皿ねじ用の面取りがされている方からM2×40の皿ねじを通し、反対からM2ワッシャー、M2スプリングワッシャー、M2ナットの順で通し、ナットを締める。これを5つの穴すべてに行う。続いてネジが出ている方と同じ方向に面が出るように内径3mm、長さ6mmのフランジブッシュを中心の穴に取り付ける。
linkの圧入とネジ固定(2つ作る)
linkの面取りがされていない、内径3mmの非貫通穴にpulley1と同じ要領でΦ3メカニカルシャフト(銀色のシャフト)を奥まで圧入する。次に、Φ3シャフトとは反対方向にネジが出るようにM2×35(又はM2×30)の皿ねじをもう一方のネジ切りされた穴にねじを回して通す。ネジが入り切ったらM2ワッシャー、M2スプリングワッシャー、M2ナットとネジに通していき、ナットをラジオペンチで回してしっかり固定する。それができたらΦ3シャフトを右図のようにpulley2に通す。
左図のようにリンクのΦ3シャフトとネジが平行になっていることを確認する。少し曲がっている場合は予備のlinkに入れ替えて試してみる。平行でないと後の引っかかりの原因となる。
[重要]プロペラを通す(CW,CCWで違うので注意)
プロペラを仕上げる(10個すべてのプロペラに行う)
プロペラは2つの袋に梱包されており、それぞれにpropeller1~5が入っている。混同しないように袋ごとに作業することを勧める。
プロペラはこのキットの中で最も繊細な部分であり、ここに引っかかりがあるとモーターが上手く回らない。郵送されたそのままの状態ではバリがあるので、まずニッパーで大まかなバリを落とした後、付属の紙やすりの目の粗いものから細かいものへとバリの部分にやすりがけをしていく。続いて、リンク溝や羽に空いた2mm穴の部分にM2×35皿ねじの余りを通してみて、スムーズに通るか確かめる。もし引っ掛かりがあるようなら、そのままねじをギコギコとこすって削る。この作業をすべてのpropellerに行う。
CW版
まずは最上図のように羽の丸いほうを左に向けた状態で左上から左下に階段状にリンク溝部分が出るように並べる。この状態で左から順にpropeller1,2,3,4,5である。
CW版では、propeller1から順に先のように並べた状態の上側からpulley2のねじとlinkのねじに通していく。 propeller1を通す前にpulley2のねじにM2ワッシャーを通し、linkのねじ(以降リンク軸と呼ぶ)にもM2ワッシャーを通す。その上からpropeller1を羽の短い方向から通す。propeller1を通した後は下図のようになる。
propellerを一つ通すごとに、pulley2を抑えてΦ3シャフトを引きながらまわして引っ掛かりがないか確かめる。propellerがしっぽを振るような動きをするはずである。これが手で十分回るなら問題ない。もし引っ掛かりがあるようなら新たにはめたpropellerが原因の可能性が高いので、疑わしいpropellerに対して再びpropellerのやすり掛けの工程を行う。
続いて、propeller2を通す。以後、propellerはpropeller1を通したところから星を描くように順番に入れていく。これは羽の不均一をなるべくなくすためである。
propeller2を通す前にそれを通すpulley2のねじとリンク軸にM2ワッシャーを通す。以降propeller3~5も同様である。五つ通した状態が次の図である。
最後にリンク軸にM2ナット、M2スプリングワッシャー、M2ナットの順に通す。このようにナットを2つ使って閉めることをダブルナットという。
このダブルナットはpropellerに近すぎると摩擦が生じて引っ掛かり、逆に遠すぎるとがたつきが生じて引っかかりやすくなることがある。そのため、下図のように少し遊びを持たせて締める。この際、linkとpulley2のフランジブッシュのつばが密着した状態で締める。締め方は、1つのラジオペンチで奥側のナットを持ち、手前のナットをもう一つのラジオペンチで回すことでしっかり締めることができる。間に挟んだスプリングワッシャーがしっかりと圧縮されていることを確認しよう。(下図は説明と異なりダブルナットに普通のワッシャーを挟んでいるが、スプリングワッシャーを挟むのが正しい。)
下記ののURLの動画くらいに滑らかに回転していれば十分である。
CCW版
基本的にはCW版と同じであるが、羽を入れる順番が異なる。CW版ではpropeller1から順に上側から通したが、CCW版ではpropeller5から降順に、下側からpulley2のねじとリンク軸に通していく。
その他の手順は同様で、propellerを通す前にワッシャーを通しておくことを忘れないように気を付ける。すべてとおしたらCWと同様にダブルナットを締め、滑らかに回転することを確かめる。下記のURLの動画くらいに滑らかに回転していれば十分である。(動画はCW版のものと同じで、回っているのはCW版)
正しくできていればCW版とプロペラの向きが異なるものになる。
プロペラの軸をサーボモーターにつなげる
続いてサーボモーターの回転軸と同軸上のフランジブッシュにプロペラのΦ3シャフトを通し、先端にセロハンテープを2-3周巻く。この軸をservoConnectorに下図のように通す。
ワッシャーを先に通したM2×15ねじをservoConnectorの横穴に上図のように通し、反対からM2ワッシャー、スプリングワッシャー、ナットの順に通して緩く締める。この段階ではきつく締めない。
次に、サーボモーターが0°(-90°~+90°の可動域としたとき)になるようにPWM信号を入力する。サーボホーン取り付け時の過程で間違いがなければサーボホーンは真横を向くはずである。
サーボが0°の状態で下図の方向から見て真右側にリンク軸が出ている状態にしておく。下記の図は左がCW版、右がCCW版である。どちらも図の見方でリンク軸が右に偏心している状態が正しい。こうすることで、CW版は図の下側に水をふき、CCW版は図の上側に水をふくようになる。そのためCW版が船体の前方、CCW版が後方となる(サンプルプログラムを使用した場合)。
Φ3シャフトをラジオペンチなどで持ってサーボホーン側になるべく入れ込んでおく。この際あまり奥に入れ込みすぎると摩擦が大きくなるので、下図のようにboard1のフランジブッシュのつばとpulley2の間に0.5mm~1mm程度の遊びがあると滑らかにまわってくれる。この状態でサーボを0°にするようにPWMを流し、上図のようにリンク軸の方向が真右になっていることを再び確認してからナットを占めてΦ3シャフトを固定する。
Φ3シャフトを固定したらpulley2を回してみて滑らかに回ることを確かめる。下記の動画くらいの滑らかさが目標となる。
輪ゴムをかけて完成!!
pulley1とpulley2の間に輪ゴムを2つかけて完成!(下図はCW版) 回路につないで動作チェックしよう! この機械のプロペラ部分は壊れやすいので、保管する際はプロペラ部に力がかかりすぎないように注意する。
船体作成のヒント
オムニボートの動力となる部分は完成しましたが、このままでは沈んでしまうため浮力を備えた船体部分を作る必要があります。次のヒントを元に、自分で作ってみましょう。
注意:このキットの電子部品、回路は防水ではありません。水の飛沫が少し飛ぶ程度なら問題ありませんが、水にモーターを付けると死にます。回路が壊れる可能性もありますので、DCモーターやサーボモーター、回路、ケーブルの金属がむき出しになっているところは絶対に水に付けないでください。
プロペラどうしをつなぐ「骨」を作るのがおすすめ
プロペラモジュールだけでは当然沈んでしまうため、発泡スチロールなどの浮力材をつけなくてはいけません。しかし発泡スチロールは脆いので、直接発泡スチロールにプロペラモジュールをつけると壊れやすいです。そのため、先にプロペラモジュールどうしをつなぐ”骨”を作っていおいて、その骨に浮力材で肉付けしていくのがおすすめです。
回路を保護する
回路と電池ボックスが入るような市販のタッパーのような容器(100均で十分)でこれらを水しぶきから保護しましょう。
(作例)
100均のタッパーを用いて回路を保護しています。完全な防水性能はないですが、水しぶきを防ぐには十分です。万が一の回路の短絡を防ぐために、基板の背面には絶縁体(養生テープ)を貼っています。
船体のバランスを考える
基本的に水上(水中)ロボットは重心が下で浮心が上になるように設計します。ですが、今回のモーターモジュールの設計では水に付けてはいけないモーターが上の方に来ており、回路も水につけてはいけないため上の方に置くことが想定されます。つまり、今回のキットで船を作ると重心のほうが浮心より上に来てしまう可能性が高いです。特に工夫なくモーターモジュールに発泡スチロールなどの浮力を付けただけでは転覆し、回路が水没してしまう恐れがあります。もし、一度作った船を手で支えたまま水につけてみて、横転するようなトルクを感じる場合は船体の両サイドにペットボトルや発泡スチロールで作った浮きをつけてみてください。こうすることで、機体を転覆させるようなトルクがかかったとしても両端の浮力が外側でそれを打ち消すように働き、船体の姿勢を安定化してくれます。
(作例)
アクリル板で骨組みを作りシュナイダープロペラユニットを固定しています。100均の発泡スチロールを浮力材とし、その上に電池や回路が入った100均のタッパーを配置しています。
(作例の設計の問題点)
浮力材である発泡スチロールはただ四角く切り出しただけであり、水の抵抗が大きい形状です。この形を工夫することで、目的の方向への直進性を高めることができると考えられます。形を工夫してみましょう!
プログラミング環境構築
ここではロボキットのプログラムを書き、そのプログラムでロボキットを動かすための環境構築を紹介します。概要は次の通りです。
ここではMac, Windowsでの環境構築について紹介します。環境構築でわからないところがある場合は質問・バグ報告についてを参照してください。
1: VSCodeをインストールする
VSCode(Visual Studio Code)とは、microsoftが無料で公開しているコードエディタです。プログラミングを行う際はこのエディタを使うことが多いです。
まずはインストールに必要なファイルをダウンロードします。次のURLを開いてください。
https://code.visualstudio.com/
VSCodeをインストールに適切なファイルをダウンロードするボタンがページの真ん中あたりに表示されています。Macの場合は以下のようなものです。
このようなボタンを押すとダウンロードが始まります。ダウンロード後の作業はOSごとに手順が違うので注意してください。
Windows
ダウンロードされたものはVSCodeのインストーラです。ファイルを開いて実行すると、VSCodeをインストールするためのウィンドウが開きます。 以降はウィンドウの指示に従って進めてください。
ダウンロード後のスクリーンショット付きの説明はVSCode | Visual Studio Codeのダウンロードとインストール #Visual Studio Codeをインストールするを参照してください。
オプションが何個かありますが、迷った場合/わからなかった場合はとりあえずチェックを入れておくのが吉です。
Mac
ダウンロードされたものはVSCodeアプリのzipファイルです。展開するとVisual Studio Code.app
という名前のファイルができます。このファイルを「アプリケーション」フォルダに移動させてから開いてください。
開く際に警告が出る可能性がありますが、構わず進めてください。
ダウンロード後のスクリーンショット付きの説明はMacOSでVisual Studio Codeをインストールする手順 - Qiita #3. ダウンロードしたファイルを開く(解凍する)を参照してください。
2: VSCodeを開く
インストールが完了したらVSCodeを起動します。最初に表示されるウィンドウは↓のようになっているはずです。
画面右下にある「インストールして再起動」のボタンを押してください。VSCodeが再起動後、日本語化されます。
3: プログラムを開く
まずはロボキットを動かすプログラムをダウンロードします。
↑のバッジを押すとzipファイルのダウンロードが始まります。展開して得られるフォルダの中にプログラムが入っています。(zipファイルは削除しても構いません。)
zipファイル展開の流れ(わかる人はとばして大丈夫です。)
Windows
zipファイルをダウンロードすると右上に表示されるのでダウンロードが終わってから
omniboat_robokit_main.zip
のzipファイルににポインタを当ててファイルマークをクリックしてください。 (またはエクスプローラーのダウンロードフォルダからzipファイルを探してください。)ファイルを選択して右クリックし、「すべて展開」を選択してください。
「参照」を選択して展開先をドキュメントに変更し、右下の「展開」をクリックしてください。(別の場所にしたい人は別のフォルダを選んでください。)
Mac
- Finderを開き、zipファイルをダウンロードフォルダからドキュメントフォルダに移動させてください。
- zipファイルをダブルクリックしてください。展開が完了します。
続いて、展開したフォルダをVSCodeで開きます。Windowsの方はウィンドウ左上のメニュー、Macの方は画面左上のメニューから ファイル>フォルダーを開く を選択してください。フォルダを選ぶためのウィンドウが出てくるので、先程zipファイルを展開して得たフォルダを選択して開いてください。
4: 必要な拡張機能をインストールする
フォルダをVSCodeで開くと、以下のようなウィンドウが表示されるはずです。
画面右下の「インストール」ボタンを押して、プログラムを実行するのに必要なVSCodeの拡張機能をインストールします。
VSCodeでは拡張機能と呼ばれるものをインストールしてVSCodeをより多機能にすることができます。ここでインストールしているのはPlatformIO IDEという拡張機能です。
インストール後、必要に応じてVSCodeの再起動などを行なってください。VSCodeのウィンドウ左側にのアイコンが表示されていれば環境構築は完了です。
参考
- VSCode | Visual Studio Codeのダウンロードとインストール
- MacOSでVisual Studio Codeをインストールする手順 - Qiita
- Setting up Visual Studio Code
- Running Visual Studio Code on Linux
- Running Visual Studio Code on macOS
- Running Visual Studio Code on Windows
- visual-studio-code — Homebrew Formulae
- PlatformIO IDE for VSCode — PlatformIO stable documentation #Installation
コンパイル
このページでは、「コンパイル」とは何か、またその方法について説明します。
コンパイルとは何か
私たちがコンピュータ上で計算を実行したいとき、まずはプログラミング言語と呼ばれる言語を用いてプログラムを記述します。プログラミング言語は日本語、英語といった自然言語とは違い、コンピュータが行う計算内容を記述するための言語です。ちなみに、ロボキットを動かすために使われているプログラミング言語はC++というものです。プログラミング言語の文法はとても厳密に定義されているため、1文字でもミスがあればコンピュータは思い通りに動いてくれません。(書いた通りに動く、とも言えます)
また、私たちが書いたプログラムはコンピュータにそのまま解釈されるわけではなく、一度機械語という別の言語に翻訳されます。この機械語は1000110111011001...
といった0
と1
の列で表され、これを人間が記述するのは困難です。そのため、プログラミング言語で記述されたものを機械語に翻訳します。この翻訳をコンパイルといいます。
コンパイルによって生成された0
と1
の列(これをバイナリと呼ぶことがあります)は最終的に一つのファイルにまとめられます。
このようにしてできたファイルは、その内容をテキストとして認識することができません。このようなファイルをバイナリファイルといいます。それに対して、テキストとして認識することができるファイルをテキストファイルといいます。例えば、プログラムが記述されているファイルはテキストファイルの一種です。
コンパイルを行うには、コンパイラというソフトウェアを使用します。私たちは前ページの環境構築で必要なコンパイラをすでに入手しています。
より詳しい説明はコンパイラは翻訳ソフト - 苦しんで覚えるC言語を参照してください。
コンパイルのやり方
ここで紹介するのはコンパイル方法のあくまで1種です。動かしたいコンピューターの種類、扱っているプログラミング言語の種類などによってコンパイル方法は変わってきます。
まずはsrc
フォルダ内にあるmain.cpp
を開いてみてください。このようなウィンドウ表示になるはずです。
右上、または下のバー(ステータスバーといいます)にあるチェックマークを押すとコンパイルが始まります。SUCCESS
と緑色の文字で表示されたらコンパイル成功です。
アップロード
アップロードとは何か
コンパイルで生成されたバイナリファイルをコンピュータに与えることで、記述したプログラム(をコンパイルしたもの)を実行することができます。与える方法は環境によって異なりますが、ロボキットに載せられているコンピュータにプログラムを与えるためには成果物のアップロード(書き込み)を行う必要があります。
ロボキットに載っているのはNucleo-F303K8という種類のコンピュータで、これはマイコンと呼ばれるコンピュータの一種です。マイコンには他にArduinoなどがあります。マイコンでコンパイル済みのプログラムを実行するには書き込みを行う必要があります。
書き込みでは、マイコンのメモリにバイナリファイルがそのまま配置されます。そのため、書き込みが完了した後にマイコンに電源を入れると即座にプログラムの実行が始まります。
アップロードの方法
コンパイルの方法で載せた、プログラムをVSCodeで開いた場合の画面を再掲します。
右上のチェックマークの横にあるv
のようなボタンを押してUpload
選択する、またはステータスバーにある→
を押すとアップロードが始まります。こちらもコンパイルと同様、SUCCESS
と緑色の文字で表示されたら成功です。
参考文献
サーボの原点合わせについて
ここでは機体組み立て方法 #サーボホーンの取り付けで言及したサーボの調整について説明します。
PWM信号とサーボモーターの関係
オムニボートの頭脳となるマイコンは、繋がっている導線に電圧を与えることで各部品を動かしています。この電圧は0Vか3.3Vの2値(オン/オフ)しか選択できないため、例えば1Vの電圧などは出力できません。そこで扱われるのがPWM(Pulse Width Modulation)という技術です。
PWMでは、特定の周期でオンとオフを切り替えることによって擬似的に電圧を制御します。例えば、オンで3.3Vが出力される状況で、3.3s中1.0sだけオンにすると平均で1.0Vが得られます。このような、オンオフを切り替える1サイクルの間隔をピリオド(Period)、オンとなっている時間をパルス幅(Pulse Width)と呼ぶことがあります。先ほどの例ではピリオドが3.3s, パルス幅が1.0sです。
サーボモーターは今紹介したPWM信号を用いて向きを制御するモーターです。今回用いるSG90というサーボモーターでは、ピリオドは20msで固定、パルス幅を変化させることでモーターの向きを変更します。パルス幅は1450usでモーターの向きが0°になります。
参考:
サーボリセット用のプログラム
ここからはプログラミング環境構築を既に済ませていることが前提となります。3: プログラムを開くで展開したzipファイルの中に、examples
という名前のフォルダがあります。そのフォルダの中にあるreset-servo
という名前のフォルダをVSCodeで開いてください。
コンパイルおよびアップロードの手順に従ってプログラムのコンパイル、アップロードをすると適切なプログラムがマイコンに書き込まれます。このプログラムではPB_4
のピンにサーボモーターの向きを0°にするPWM信号を送ります。
配線
ここでは簡単のため、ブレッドボードを使用してマイコンとサーボを繋げる方法を紹介します。ブレッドボードとは、以下の引用に示されるようなものです。
ブレッドボードとはソケット(穴)に部品を差し込むだけで電子回路の試作・実験ができるたいへん便利なものです。 写真を見ただけでは使い方が解りづらいかもしれませんが、各ソケットは図の薄いオレンジ色の帯びで記してあるように内部でつながっています。 これを頭に入れて回路を組みます。
このブレッドボードを用いて、以下のように配線を行います。
この状態でプログラムをアップロードしたマイコンに電源を入れるとサーボの角度がリセットされます。
質問・バグ報告について
ここではロボキット等に関する質問の仕方、プログラムにバグが見つかった際のバグ報告について説明します。どんな些細な内容でも積極的に聞いていきましょう!
Discord
ロ技研の新歓用Discordサーバーの招待リンクは↓です。(※スパム防止のため、参加した際には自己紹介をお願いします)
このサーバー内の、水上ロボット体験会2024
というチャンネルで質問等お願いします。ロボキットに直接関係がないようなものであれば雑談
など他のチャンネルを使用してください。このチャンネルでの会話は他の新入生にも見えているため、こちらが何度も同じ質問等に答える必要がなくなります。まずはDiscordでの会話を検討してください。
Twitter/メール
他の新入生等に知られたくない場合はTwitterのDMやメールでお願いします。TwitterのIDやメールアドレスは連絡先等を参照してください。
GitHub
注意 この節ではGitHubアカウントをすでに持っていることを前提としています。
このドキュメントおよびプログラムはrogy-AquaLab/omniboat_robokitで開発しています。issueを作成してバグ報告等お願いします。
入部方法について
4/26(水)前なら
1. 新歓用discord(招待リンク)に参加しましょう
discordに参加したら、スパム防止のために最初に自己紹介をしましょう。 権限が渡されたら、さまざまなチャンネルにのぞけるようになるので、いろんな研究室の定例会とかのぞいてみましょう。 気になる研究室が見つかって、仮入部的に活動したかったら、各研究室の先輩にDMしてみましょう!
2. disocrdで通知される情報を確認しましょう(4月末に一斉登録予定)
部費の入金方法や部費の入金後のシステム登録方法などの情報が流れます。
3. 入部できたら活動しましょう
初めてロボット作るって人はSSR杯に参加するのもおすすめです!また、どこかの研究室に所属しておくのもおすすめです! もし、工作機械等を使いたいときは先輩に講習をお願いしましょう。
困ったら
Discordの@21-const
または連絡先にあるアクア研まで
トラブルシューティング
主にプログラミング関連のトラブルシューティングです。
ld returned 1 exit status
でコンパイルができない
考えられる原因
(Windowsを前提としています)
パス(ファイルの場所を示す文字列)に日本語が含まれている可能性があります。例えばOneDriveのドキュメント
フォルダーの中にPlatformIOのプロジェクトを置いた場合、パスはC:\\Users\[username]\OneDrive\ドキュメント\omniboat_robokit\...
のようになります。
解決方法
C:\\Users\[username]\Documents\omniboat_robokit
など、パスに日本語が含まれない場所に置いてください。
ロボットが上手く動かない
- はんだ付けはできているか
- 足りないパーツはないか
- サーボの原点合わせを忘れていないか
まずはこういった、機械・回路の原因を検討してみてください。それでも解決しない場合は、以下の方法をお試しください。
コンパイル済みのバイナリを書き込みます。こちらのリンクから書き込むバイナリをダウンロードしてください。マイコンをパソコンに差し直すとマイコンがUSBデバイスとして認識されるので、ダウンロードしたファイルをその中にコピーしてください。コピーが完了したら自動的にプログラムが起動します。
OpenOCDのエラーが出る
Windowsでマイコンへのアップロードを行っている時に発生するエラーです。ST-Linkのドライバがインストールされていない可能性があります。以下の手順を試してみてください。
- ドライバのダウンロードページ を開く
Get Software
を押して、ドライバのインストーラをダウンロードする- アカウント登録を求められます、新規登録をお願いします🙏
- zipファイルがダウンロードされるので展開する
- 展開されたものの中に
dpinst_amd64
というファイルがあるのでこれを開く- これは64ビットのWindowsでの手順です
- 32ビットの場合は
dpinst_x86
というファイルを開いてください
- インストーラが起動してドライバがインストールされる
パソコンを再起動した後に再度アップロードを試してみてください。それでもアップロードができない場合は、接続したデバイスに対してドライバが正しく割り当てられているかを確かめる必要があります。確認手順は以下の通りです。
- デバイスマネージャーを開く
- キーボードのWinボタンを押す
device manager
で検索
- マイコンに対応するデバイスを探す
- 下のスクリーンショットを参考にしてください(ドライバが正しく割り当てられている場合のものです)
- ドライバーを更新する
- デバイスを選択
ドライバーを自動的に検索
を実行
回路
内容物リスト (1キットあたり)
抵抗
部品 | 個数 | 販売会社 | rogy備品 | URL |
---|---|---|---|---|
220 Ω | 2 | 秋月 | O | https://akizukidenshi.com/catalog/g/g107808/ |
470 Ω | 2 | 秋月 | O | https://akizukidenshi.com/catalog/g/g107814/ |
1 kΩ | 6 | 秋月 | O | https://akizukidenshi.com/catalog/g/g107820/ |
10 kΩ | 6 | 秋月 | O | https://akizukidenshi.com/catalog/g/g107838/ |
コンデンサ
部品 | 個数 | 販売会社 | rogy備品 | URL |
---|---|---|---|---|
電解 0.1 μF | 2 | 秋月 | O | https://akizukidenshi.com/catalog/g/g117877 |
セラミック 100 μF | 1 | 秋月 | O | https://akizukidenshi.com/catalog/g/g113582/ |
LED
部品 | 個数 | 販売会社 | rogy備品 | URL |
---|---|---|---|---|
3mm 赤 | 2 | 秋月 | O | https://akizukidenshi.com/catalog/g/g111577/ |
3mm 緑 | 2 | 秋月 | O | https://akizukidenshi.com/catalog/g/g111635/ |
3mm 青 | 2 | 秋月 | O | https://akizukidenshi.com/catalog/g/g111578/ |
3mm 黄 | 2 | 秋月 | O | https://akizukidenshi.com/catalog/g/g111639/ |
汎用コネクタ
部品 | 個数 | 販売会社 | rogy備品 | URL |
---|---|---|---|---|
XH 2p ベース | 1 | 秋月 | O | https://akizukidenshi.com/catalog/g/g112247/ |
XH 3p ベース | 6 | 秋月 | O | https://akizukidenshi.com/catalog/g/g112248/ |
XH 7p ベース | 2 | 秋月 | O | https://akizukidenshi.com/catalog/g/g112252/ |
XH 2p ハウジング | 1 | 秋月 | O | https://akizukidenshi.com/catalog/g/g112255/ |
XH 3p ハウジング | 2 | 秋月 | O | https://akizukidenshi.com/catalog/g/g112248/ |
XH 7p ハウジング | 2 | 秋月 | O | https://akizukidenshi.com/catalog/g/g112260/ |
XH コンタクト | 30 | 秋月 | O | https://akizukidenshi.com/catalog/g/g112265/ |
VH 2p ベース | 4 | 共立エレショップ | O | https://eleshop.jp/shop/g/g61J14M/ |
VH 2p ハウジング | 4 | 秋月 | O | https://akizukidenshi.com/catalog/g/g112811/ |
VH コンタクト | 10 | 秋月 | O | https://akizukidenshi.com/catalog/g/g112838/ |
ピンヘッダ 1x40 | 1 | 秋月 | O | https://akizukidenshi.com/catalog/g/g100167/ |
ピンソケット 1x42 | 1 | 秋月 | O | https://akizukidenshi.com/catalog/g/g105779/ |
備考
XH 3p ベース
のうち4つは使われないピンに繋がっているので、ハウジングは2つで良い。VH 2p ベース
はL字のものを買おうとすると秋月にない。秋月の直立タイプを使う場合は以下のURLから。- https://akizukidenshi.com/catalog/g/g112815
ケーブル
太さ | 芯数 | 長さ | 販売会社 | rogy備品 | URL |
---|---|---|---|---|---|
AWG24 | 8 | 0.8m | 千石 | △ | https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=85VJ-A4JW |
AWG20 | 1 (赤) | 適当 | 千石 | △ | https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5G84 |
AWG20 | 1 (黒) | 適当 | 千石 | △ | https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5G84 |
その他
部品 | 個数 | 販売会社 | rogy備品 | URL |
---|---|---|---|---|
電池ボックス (単三3本直列) | 2 | 秋月 | X | https://akizukidenshi.com/catalog/g/g102666/ |
電池スナップ | 2 | 秋月 | O | https://akizukidenshi.com/catalog/g/g100207/ |
ジョイスティック (5p) | 1 | Amazon | X | https://amzn.asia/d/djAPbrx |
可変抵抗器 | 1 | Amazon | X | https://amzn.asia/d/1BCF9bV |
ジャイロ・加速度センサ MPU-6050 | 1 | Amazon | X | https://amzn.asia/d/e9eGHTj |
マイコンボード NUCLEO F303K8 | 1 | 秋月 | X | https://akizukidenshi.com/catalog/g/g110172/ |
MOSFET 2SK4017(Q) | 2 | 秋月 | O | https://akizukidenshi.com/catalog/g/g107597/ |
DCモータ FA-130RA-2270 | 2 | 秋月 | X | https://akizukidenshi.com/catalog/g/g106437/ |
サーボモータ SG-90 | 2 | 秋月 | X | https://akizukidenshi.com/catalog/g/g108761/ |
メイン回路基板 | 1 | X | ||
コントローラ回路基板 | 1 | X |
圧着時のハウジングの向き 一覧
部品 | ハウジングのツメを上向きにして、付け根側から見た向きで、左から順に見た線の色の順番 |
---|---|
サーボモータ | 黄 > 赤 > 茶 |
DCモータ | 赤 > 黒 と 黒 > 赤 を1つずつ |
電池ボックス | 赤 > 黒 |
電池電池スナップ | 赤 > 黒 |
ハウジングのツメ ≠ コンタクトのツメ
はんだ付け
- DCモータ
- 向きがそろっていればなんでもよい。
NUCLEO F303K8の0Ω抵抗を外す
一部のピンが0Ω抵抗で短絡されているので、これを外す必要がある。
その他
対面制作会で使うもの
- はんだごて
- こて台
- スポンジ
- はんだ
- はんだ吸い取り線
- ニッパ
- ラジオペンチ
- マスキングテープ
- 適当な紙 (下敷き)
トラブルシューティング
制御
基本的な開発フロー
GiHubフローを前提とします。
プログラム開発
配布するプログラムはPlatformIOを利用して開発されています。特にmbedフレームワークを利用し、フォーマッターにclang-format, リンターにclang-tidyを使用しています。
リンターは将来変わる可能性があります。(#122)
使用するエディターはVSCodeを想定していますが、CLionなどPlatformIOが適切に動作する環境であれば特に問いません。
ドキュメント開発
このドキュメントはmdBookを利用してGitHub Pagesの内容が生成されています。mdBookの詳細な使用方法に関しては、mdBook Documentationを参照してください。
画像の使用に関して
ドキュメント内では画像を使用することができます。docs/assets
フォルダー内に使用したい画像ファイルを置き、ドキュメントのMarkdownファイルからその画像ファイルへの相対パスを用いて参照することができます。コミットb66c64a
などを記述例として参照してください。
SNS等に画像をアップロードする場合とは異なり、gitリポジトリでは Exif情報がそのままになっています。 exiftoolやImageMagickなどを用いて適切な処理を施したものを使用してください。
参照: exif情報をコマンド一発で削除する #exif - Qiita, ImageMagickでメタデータから不要な情報を削除する|e
Google Driveの画像を使用する場合
Google Driveに保存されている画像ファイルはGoogle Driveの画像をMarkdownで直接表示したい時に読む記事などで示される方法に従って参照することができます。しかしこの方法ではGitHub Pages上で画像が表示されない(#99)ため、一工夫加える必要があります。具体的には、以下の手順に従ってください。
1: 使用したい画像のリンクと名前を控える
ここでは画像のリンクをhttps://drive.google.com/uc?export=view&id=xxx
, Google Driveに保存してある画像の名前をxxx.jpeg
とします。
2: 控えた情報をスクリプトに追記する
docs/scripts/fetch-gdrive-assets.bash
のimage_table='
とある行の次などに以下の内容を追記します。
image_magic='
...
https://drive.google.com/uc?export=view&id=xxx xxx.jpeg
...
'
適当な場所に追記してください。
3: Markdownで画像を参照する
先ほどbashファイルに追記したことで、mdBookのビルド時に目的の画像がdocs/gdrive/xxx.jpeg
に配置されるようになります。Markdownファイルでは相対パスで、以下のように記述することで画像を参照可能です。
![](./gdrive/xxx.jpeg)
こちらもSNS等とは異なり、Google DriveはExif情報を編集しません。
GitHub Actions
GitHub Actionsを用いて自動的にプログラムのチェックなどが入るようになっています。GitHub ActionsについてはGitHub Docsを参照してください。
プライベートリポジトリではGitHub Actionsを使いすぎると課金が発生します。詳しくはGitHub Actions の支払いを管理する - GitHub Docs
GitHub Actionsの設定は.github/workflows
以下に保存されています。
main.yml
このワークフローファイル内のジョブは以下のタイミングで実行されます。
main
ブランチへのPull Request作成・更新時main
ブランチの更新時
どちらの場合も、以下の内容が確認されます。
- PlatformIOのビルドが成功すること
- clang-formatによるプログラムのフォーマット確認 (format)
- clang-tidyによるプログラムの簡易なバグチェック (lint)
- mdBookのビルドが成功すること
特にPull Requestの場合は、変更内容に応じてそれぞれチェックが省略されます。詳しくはmain.ymlのchanges
ジョブ、およびdorny/paths-filterを確認してください。逆に、変更に対して入ってほしいチェックが行われない場合はここを見てください。
release.yml
TODO (#76)
リリース
TODO (#76)
依存関係管理
プログラムを開発する上で様々なツール、ライブラリが必要になります。一般的にそれらは「依存関係」と呼ばれます。ここではこのリポジトリを管理する上で使用されている依存関係について説明し、それらの更新方法について説明します。
GitHub Actions
GitHub Actionsの依存関係はDependabotで管理されています。依存関係何か更新があればDependabotが自動でPRを作成してくれます。Dependabotの設定は.github/dependabot.ymlに書いてあります。
Dependabotについてより詳しくは、Dependabot を使う - GitHub Docsを参照してください。
mdBook
GitHub Actions内で使用されるmdBookのバージョンは自動で更新されません。main.ymlおよびrelease.ymlにMDBOOK_VERSION: vX.Y.Z
のような記述があります。mdBookのバージョン一覧はReleases · rust-lang/mdBookにリストされているので、そこを見つつバージョンを更新してください。バージョンの更新は1年に1度ほどで問題ないです。
PlatformIO
PlatformIOに関連する依存関係は2種類あります: PlatformIOそれ自身と、PlatformIO内で使用するツール群です。
PlatformIO自身
特に明記せず、最新版のPlatformIOを前提とします。GitHub Actions内でも最新版のPlatformIOを使用するように設定されています。PlatformIO関連で何か不具合があればバージョンの問題を考慮してみてください。
PlatformIO内の依存関係
これらはPlatformIOの設定ファイルplatformio.ini
に記述されています。具体的な記述については以下を参照してください。
- "platformio.ini" (Project Configuration File) — PlatformIO latest documentation
- platform_packages — PlatformIO latest documentation
- lib_deps — PlatformIO latest documentation
特にGCCコンパイラのバージョンはplatformio/toolchain-gccarmnoneeabiで明記されているため、定期的(こちらも1年おきが目安)に更新する必要があります。
Nix, direnv
略