倒立振子ロボット製作記～ハードウェア編～

倒立振子ロボットを製作しました。
今回はハードウェア編です。
(2020.6.20)[ソフトウェア編](https://qiita.com/shi78ge/items/bac930e4f60eb95667a5)追加

##1.材料
[ラズパイタンク](https://qiita.com/shi78ge/items/e4d9dd90dc8274431e45)の材料に追加で購入したものです。

■機構部品
　↓タミヤ楽しい工作シリーズ
　・スポーツタイヤセット
　・ユニバーサルプレートセット
　・ユニバーサルアームセット
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/8a9667de-c2e9-1ff4-e675-79e22552944b.png)


　↓その他
　・六角オネジ・メネジ　ＭＢ２６－１１
　・M2.6のビス、ナット
　※M3でも問題なし？M3のほうが入手性がよいです。

■電装部品
　・BMX055使用9軸センサーモジュール
　・ユニバーサル基板Cタイプ
　・ピンヘッダ
　・ピンソケット

##2.ベースの作製
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/9fd077dd-89a6-8a7f-3487-64cd1dbfd3b7.png)

作ってる途中の写真を残してないのですが、だいたい上の写真でどうやっているかわかるんじゃないかと思います。
「ユニバーサルアームセット」のL字アームが重要部品です。
これによってプレートを直角に立てています。
タイヤとモーターをつけている土台のプレートは、適当な長さでカットして使っています。

ラズパイのタイプB基板には4つ穴が開いていて、そのうち二つはタミヤのユニバーサルプレートの穴といい感じであって、ビス止めできます。でも残り二つの穴が合いません。
なので、プレートの穴を連結させて長穴にしてビス止めしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/09ba8c82-1a6d-6c80-4b66-231afead1fd9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/640c2d30-df70-6c66-41e9-f51c50b01897.png)


##3.センサー基板の作製
9軸センサモジュールBMX055を実装する基板の製作です。
[Rasperry Pi 3で9軸センサ(BMX055)を使う](https://qiita.com/hiro-han/items/ca881a6c76559af9f57a)
こちらの記事にBMX055の使い方が簡潔にまとめられており、その通りにやっただけなんですが、失敗もありましたのでその辺を記載します。

まず最初に、完成したセンサー基板はこちらです↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/1597178a-3952-abcd-765e-ea3e2e38a380.png)
左側がBMX055、右側は温度センサのS-5851Aです。
S-5851Aは秋月電子で110円と安かったので買ってみました。

あとで気づいたのですが、BMX055には元から温度計測機能が入ってるようです(データシート参照)
なのでこのように温度センサを別でつける必要はありませんでした。
まだBMX055による温度計測は試していないので、またやってみようと思います。

さて先ほどのセンサー基板の写真で、BMX055モジュール基板が、表裏がひっくり返っています。
なぜこんなことになったかというと…
[こちら](http://akizukidenshi.com/catalog/g/gK-13010/)の秋月電子の取説にも書いてありますが、BMX055は電源電圧やI2Cアドレスの切り替えなどを、基板裏側のランドを半田でショートすることで設定します。
ラズパイのGPIO電圧3.3Vに合わせて、JP7だけショートする必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/9fb671eb-d7a9-5517-0d2a-686eea4318c9.png)
この作業を、私はモジュール基板にピンヘッダをつける前のほうがやりやすいと思って、先にショートさせたんですが、その時失敗してピンヘッダを刺すスルーホールを半田で埋めてしまいました。
そればかりか、JP7だけでなく隣のJP8とJP6もショートさせてしまい、復旧させるのに30分以上かかりました。熱加えすぎてICが死んでないか不安でしたが、あとで確認したら大丈夫でした。
サイズ感は下のような感じでまあまあ細かい作業になるので、先の細いコテ先を使ったほうが無難です。私は太いのでやってしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/ac58cd35-0173-cac3-897f-44fa75b89e58.png)
基板の表側のスルホールがまだなんとか使えそうだったので、そこに無理やりピンヘッダを立てて半田付けしました。

ユニバーサル基板上にSDA,SCL,電源,GNDの配線を引き回すための設計図も書いてたんですが、BMX055のモジュールが表裏反対になってしまったので、設計図も書き直す羽目になりましたが、なんとかセンサー基板が組めました。

##4.ハード設計のコンセプト
順番が変ですが、ここでハードのコンセプトです。
コンセプトというほど大したことではないですが、ソフトと同じく、なるべくハードも再利用性を持たせたいです。なので以下のような構成にしています（横向きにした図）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/a7294d82-3d8a-d741-2be3-2082159604ca.png)
まあ、なるべくコネクタ接続にしてつけ外しできるようにしたということです。
コネクタといってもピンヘッダとソケットを使った簡易コネクタです。
ということでセンサー基板をとりつけたところまでで下のようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/d34b64db-c312-5cd4-488b-a248bf10af19.png)

##5.全体調整、完成
センサーがむき出しだと転んだ時に壊れるかもしれないので、もう一枚のユニバーサル基板でガードしました。あとラズパイとセンサー基板を接続するケーブルの様子を示した写真です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/5f0a082f-9c5c-0451-a859-aea0529dd907.png)
もっと短いケーブルで繋ぐつもりでしたが、ラズパイ側のコネクタをつける位置を間違ってしまいました。まあ、ここは大した問題ではありませんでした。

電源は以下のようにモバイルバッテリを使っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/32e52600-6825-505c-d3b4-a76318c11e82.png)
手持ちのバッテリをいい感じで固定することができました。
ちなみにバッテリの型番はBSMPB04というやつですが、かなり古いものでもう販売していません。容量は5200mAhです。
type-AのUSBの口が二つあるので、一つはラズパイの電源、一つはモーターの電源という使い方ができて、ラズパイ工作には便利です。

最後に完成形の写真を何枚か載せておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/6f3e5385-e549-f14e-e736-0ad696942676.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/3d96aa57-e520-e0c0-4bda-54da75748704.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569342/2504f1ee-894b-e596-bc06-bd1088f40985.png)

バッテリを取り付けた時の重量のバランスはそれなりでした（特に計算とかしてませんが）
本当はモーターのトルクがどうとか、モーメントがどうとかあるのかもしれませんが、そういう難しいことは何も考えていません。
結果的に無事倒立させることができましたが、途中なかなかうまくいかなかった時は、重量バランスとか見直したほうがいいのかなと思いました。
ネットの製作例を見てると、ロボットの背を低く、重心を下げているほうが安定しているような気がします。
でも、自分で手でバランスをとろうとしたら、鉛筆よりほうきぐらいの長さがあるほうがバランスとりやすいので、その辺の理屈はどうなってるのかわかりません。

倒立させるための奮闘は、ソフトウェア編で書きたいと思います。