Tanuki_Bayashin’s diary

電子工作を趣味としています。最近はラズベリーパイPicoというマイコンを使って楽しんでいます

サーボモータで倒立振子を作ってみた~ハード編

※なにか気になる点がありましたらコメント欄にご記入ください。また、工作や回路を製作する場合には、細かい作業などに対して、細心の注意を払われるようお願いいたします。

1.はじめに

倒立振子を作りたいという一心で、早1年半が経ちました。いろいろ取り組んでうまくいかず、ふとYoutubeで見かけたチャンネルで倒立振子を取り扱っていたので、マネをして組み立ててみました。ここではその取り組みについて記述していきます。

ふと見かけたチャンネルです。
www.youtube.com

写真1 製作した倒立振子

結論から言うと、カーペットの上ではバランスが取れました。(成功!!)しかし机の上では今一でした。今後、機会があれば再挑戦したいです。

わりと長い記事になるので、ハード編とコード編の2部構成にします。

ソフト編のリンク先:
サーボモータで倒立振子を作ってみた~ソフト編 - Tanuki_Bayashin’s diary

2.構成

全体の構成をながめてみたいと思います。

1つお断りしておきますと、参考とさせていただいたチャンネルの内容と違う点があります。加速度センサはMPU6050というものを使っています。
自分で持っていた加速度センサが、MPU6050という製品だったというのがその理由です。
しかし、MicroPythonでは対応するライブラリが見当たらなかったため、C/C++ SDKにてコードを書いていくことにしました。
(実際のコードはCのみで記述しています。今まで倒立振子に取り組んできた成果が助けとなりました)

2-1.部品表

部品表を示します。

表1 部品表

No. 商品名 主な取扱店 おおよその価格 数量
Raspberry Pi Pico(ラズベリーパイピコ) 秋月電子通商 770円(1個) 1個
FT231X USBシリアル変換モジュール 秋月電子通商 880円(1個) 1個
MPU6050モジュール Amazon 380円(1個) 1個
ベーシックモジュール用回転サーボモーターセット スイッチサイエンス 990円(1セット) 1セット
NJM7805FA(5V用電源IC) 秋月電子通商 60円(1個) 1個
積層セラミックコンデンサ(0.1μF) 秋月電子通商 100円(10個入) 4個
電解コンデンサ(100μF16Vなど) 秋月電子通商 20円(1個) 2個
電解コンデンサ(330μF25Vなど) 秋月電子通商 20円(1個) 2個
18650 充電式バッテリー電池3.7V Amazon 1399円(2本) 2本
10 18650用電池ボックス Amazon 887円(4個)など 2個
11 ブレッドボード BB-801 秋月電子通商 220円 1個
12 ミニブレッドボード BB-601 秋月電子通商 130円 1個
13 ブレッドボード・ジャンパーワイヤ 秋月電子通商 300円(1セット) 20本ほど
14 ブレッドボード・ジャンパーワイヤ(オス-オス)セット 秋月電子通商 220円(1セット)など 20本ほど
15 ピンヘッダ(1×40など) 秋月電子通商 35円(1個) うち4列と1個
16 熱収縮チューブΦ3mmなど 秋月電子通商 40円(1本) 約2cmを4つほど
17 バランスを取るための粘土 文具店、ダイソー 110円?(1個) 適量
18 ネジとナット(M3) ダイソーなど 110円?(1袋) 2個ずつ
19 タミヤ ユニバーサルプレート160mm×60mm 全国模型店(?) 660円(2枚セット) 1枚
20 両面テープ(強力タイプ) ダイソーなど 110円?(1個) 適量

1のPicoには15のピンヘッダをはんだ付けする必要があります。(1×20Pが2つ)ただし、Pico Hというはんだ付けした状態で売られているものもあります。
4は、1セットでサーボモータ(FS90R)2個とサーボ用ホイール2個、それと付属品からなります。
9の充電には専用の充電器が必要です。
15,16は10の電池ボックスに接続すると、ブレッドボードに挿すことができるようになります。
18は電池ボックスの固定用です。
20はサーボモータの固定用です。

2-2 各部品の説明

 部品について説明していきます。

a. Raspberry Pi Pico

2年ほど前に発売された、マイコンボードです。さまざまな機能が備わっています。
「1.はじめに」の動画でも使用されています。
Raspberry Pi Pico Wという、Wi-FiBluetoothの機能も持ち備えたバージョンもあります。
(動作未確認です)

b. UART(FT231X)

C/C++ SDKでコードを書いていく場合、コードを実行可能にするためには、ubuntuというOSにてビルドをしていく必要があります。
すると、MicroPythonのようにThonnyが使えません。なので、Pico内部の変数の値を知るには、USBシリアル変換モジュールを使用して、Pico内部の変数の値をPC側に送る必要があります。そこで出てくるのがUARTの処理です。

UARTの処理ではRS232Cという規格の通信プロトコルを使用しますが、USBシリアル変換モジュールを使用することにより、実際の配線はUSBケーブルにて行うことになります。
このとき、PC側ではUSB TypeAにてケーブルと接続し、TeraTermなどの通信用のソフトにより、Picoからのデータを表示することができます。
今回は、受信したデータをグラフなどで表示することも考えて、PC側でPythonにて処理するコードを使いました。
(「1.はじめに」での完成品の写真では、異なるモジュールを使用しています。実験をしていたら、FT231Xは壊してしまいました。悪しからず)

c. MPU6050

加速度センサMPU6050の初期化や設定、データの読み取りを行う部分です。
その結果として、倒立振子の傾斜角とその時間微分である角速度を得ることができます。

d. サーボモータ

動力としてサーボモータを使いました。筆者の知っているサーボモータは、指令値をPicoからサーボモータに送ると、一定の角度回転して停止すると言った角度を制御するタイプのものです。
しかし、今回使用したサーボモータは指令値に対し、一定の回転数で回転するという角速度を指令値として与えることができるタイプのものでした。
でもこちらのサーボでないと、うまく制御できなかったかと思います。

e. 電源回路、電池

 電源はリチウムイオン電池と定電圧電源を使用しました。リチウムイオン電池は充電可能です。

定電圧電源は7805という定番のものを使用しました。回路図を示しますので、参考にして下さい。
1.5Aまで使用可能ですが、負荷が大きい場合、冷却フィンが必要になります。今回は試してみたところ、それほど電流は流れず、冷却フィンが必要なほどではありませんでした。

f. 本体(機械系)

 本体はタミヤ模型の工作シリーズのユニバーサルプレートを使いました。工作するのに何かと便利です。

3.回路図

 回路図を示します。(「付録 ダウンロード」参照)

図1 回路図

4.製作手順

 製作手順を示します。自分の場合です。(ご自身で、オリジナルの作品を作ってもいいと思います)

お断り:製作中に手順を示すための写真を撮っていなかったので、解説図はなしです。申し訳ありません。

① PicoとMPU6050にはピンヘッダをはんだ付けしておきます。

② 電池ボックス(1本用)のコード1本にピンヘッダを1個ずつはんだ付けします。熱収縮チューブで保護すると絶縁と補強になっていいと思います。(ヒートガンがあるといいですが、ない場合はドライヤーで加熱してもいいでしょう)
 電池ボックス2個に計4か所、加工します。

③ 電池ボックスをネジとナットでユニバーサルプレートに固定します。横方向には中央に、縦方向には両端ぐらいがいいでしょう。

④ ブレッドボード2種類、1枚ずつをユニバーサルプレートに固定します。(電池ボックスと反対側に取りつけます)小のほうは横向きに、大のほうは縦向きに取り付けるとよいようです。
裏のシールをはがすと、粘着テープで固定できます。回路も含めたプレートの重心の位置は、中央辺りがいいです。
張り直すのは面倒なので、覚悟を決めてください。(笑)

⑤ ブレッドボードの小のほうに、USBシリアル変換モジュールと7805を各1個ずつ、それにコンデンサ(330μF、0.1μF)各2個ずつを取り付けます。

⑥ ブレッドボードの大のほうに、PicoとMPU6050を適当な位置に取り付けます(電源ラインに100μF、0.1μFを、各2個ずつ付けるといいかも知れないです)。

⑦ 回路図をよく見て、配線通りにジャンパワイヤでピン同士をつなげていきます。配線はなるべく短い方がいいようです。(ショートしない様に、電池は抜いておいた方が良いです)
パーツの極性やボードの向きにはよく注意してください。

⑧ ここで電源、Pico、UARTや加速度センサの動作確認をしておいてもいいかも知れないです。(動作確認用のソースコードを作る必要がありますが・・)

⑨ 次にサーボモータの取り付けです。部品表のサーボモータのセットを使う場合、ホイールをサーボモータに取り付けます。ホイールの向きに気を付けてください。

⑩ サーボモータからのリード線にジャンパワイヤ(オス―オス)を取り付けます。すぐに抜けないように、マスキングテープなどで固定するとよいようです。

⑪ サーボモータをユニバーサルプレートに取り付けます。(電池ボックスが取り付けてある側に取り付けます)左右のサーボモータの軸の位置がなるべく一致したほうがいいようです。
軸は重心上に取り付けるのがベストですが、少しズレてもソフト側で調節できます。(平衡点の角度である、水平軸とのズレの角度が変わります)

⑫ サーボモータの配線を行い、ジャンプワイヤを束ねてまとめます。(動作確認などを行いたい場合は、束ねなくてもいいかも知れないです)

⑬ 回路が閉じない状態で電池を入れ(電気は流さない)、水平な台の上にホイールを置き、バランスの様子を見ます。傾きが大きい場合は、ユニバーサルプレートの端のほうに粘土などを張り付け、調整します。

⑭ ハード的には完成です。おめでとうございます!!


※動作させるときに、水平に置く台があるといいです。車輪が浮いて、電源を入れても空回りするのがいいです。適度な幅の縦長の箱みたいのでじゅうぶんです。


ハード編は以上です。この先が気になる方は、ソフト編でお会いしましょう。あでぃおす ( ˘ω˘)スヤァ

ソフト編のリンク先:
サーボモータで倒立振子を作ってみた~ソフト編 - Tanuki_Bayashin’s diary


お付き合いくださり、ありがとうございました。


付録 ダウンロード(クローン)

以下のようにgit bashなどからクローンすると、6つのファイルがダウンロードできます。

git clone git@github.com:Myuu1967/touritsu.git foldername

"foldername"を変えると、格納するフォルダ名を変更できます。
(”Myuu1967/touritsu.git”は、GitHub上での筆者のリポジトリです)

このうち、README.mdというファイルの中身を示します。6つのファイルの説明になっています。

初めに”DHA_Pendulum”というフォルダーを作って下さい。
$ mkdir DHA_Pendulum

CMakeLists.txt:CMake用のファイルです。(フォルダー”DHA_Pendulum”の中に移す)
DHA_Pendulum.c:この倒立振子用のCファイルです。(フォルダー”DHA_Pendulum”の中に移す)
DHA_Pendulum.pdf:この倒立振子の回路図です。
DHA_Pendulum.uf2:実行可能ファイルです。Pico内に転送して利用します。
_CMakeLists.txt:CMake用のファイルです。CMakeLists.txtをフォルダー”DHA_Pendulum”に移した後に、
                CMakeLists.txtとリネームする
README.md:このファイルです。

ビルドの仕方:
(1)フォルダーDHA_Pendulumの中で下のように打つ。(”$”は打たない)
$ mkdir build
$ cd build
(2)フォルダがbuildに移るので、次のように打つ。
$ cmake ../..
$ cd DHA_Pendulum
$ make -j4

以上です

(ビルドはPico SDK環境にて行ってください)

説明は以上です。