ちょっとTea Time!? 6本脚ロボットにチャレンジしてみよう! 2025.2.12

ことのはじめ
 テニスマシンを作成&改造したときに、ボールの移動やローラの角度変更などにラジコン用のサーボモータをつかいました。
そのとき感激したのが、サーボモータの値段です。トルクが150kgfcmとなると、3000円くらいしますが(それでも3000円!)
20kgfcm程度のものなら800円前後、普通の12kgfcm程度のものなら500円以下で買えてしまいます。
 中学生の頃に初めてラジコン(車)を始めたときは、サーボモータなんか非力なものでも4000〜5000円くらいしたから、
隔世の感があります。ちなみに、最初に買ったサーボモータはFUTABAのモノでしたが、トルクは2〜3kgfcm程度だっと
思います。なぜ、最近のサーボは廉価品でもトルクがでているかといえば、モータが進歩したというのもあるでしょうが、
駆動回路の進歩が大きいでしょう。なんせ50年近く前のサーボの電子部品なんか、勿論IC化されているとは思えませんし、
モータの駆動回路も内部抵抗の大きなバイポーラトランジスタでやっていたと思います。それに対して、今のサーボは
低ON抵抗のMOSFETが使われたワンチップICです。性能もコストも雲泥の差になるのでしょう。

 そういうこともあり、なぜか安そうなサーボをみかけては、ちょこちょこと買ってしまっていました。
昔は手がでなかったけど、大人になって経済的に余裕もできて思わず大人買い〜ってやつですね(笑。


ラジコンサーボがゴロゴロ。

最初は買ったサーボの有効活用として、4本脚の犬型ロボットでも作ろうかと思っていました。
フレームはガラスエポキシ板(FR4)あたりをつかって、CNCで切り出そうと考えましたが、
FR4の材料って意外と高いです。5mm厚で300x300mmの板が3000円くらいします。
これを何枚か用意してとなると、かなりの出費になりそうです。


サーボモータでこんなロボットでもつくってみようかなあ〜。


材料として考えていたFR4って意外と高いなあ〜。

6本脚の市販ロボットキットにしよう!
 そのため,思わず日和ってしまって市販のロボットフレームを使うことにしました.,
ちょうど、6本脚ロボットのキットがあったので選択です。
 なせ4本脚ではなく6本脚にしたかといえば、6本脚の方がサーボを沢山消費できますし、
なにより動作が安定しますのでロボット初心者にはうってつけです。というのも、6本脚だと
3本の脚を交互につかって移動するので、脚をあげたときも他の3本脚で支えるので
転倒せずに済みます。

で、さっそく注文です。


これを買ってみることにしました.9000円弱でした.


組み立てるととこんな形になるようです。



注文していた部品が届きました。


中身はこれだけ。取説などは一切なしです。頼りは写真だけ。

組み立て開始!

組み立てるにしても、説明書などありませんから、完成写真が頼りです.

関節部分などをよくみて、組み立てていきましょう.


組み立て前に、採寸です。座標計算のためには各リンクの位置が正確にわからなければなりません。

組み立ては楽しい〜 2025.2.13

どんどん組み立てていきましょう。

まずはベースの板と脚の付け根の部分のサーボホルダーをとりつけです。


脚の根本はサーボホルダを2つを連結しますが、そのためのボルトとナットがキットに入っています。
でも、そのナットがちょっと厚いような〜。まあ、組んじゃえ!


ちょとナットが出っ張っているような気がするのだけどなあ〜。大丈夫かな?

不安は的中

サーボを入れてみましたが、はやりナットが僅かに厚いためにサーボに当たってしまいます。
そのため、サーボの固定用のネジ(M4)が入りません。面倒なので、M4ではなくてM3ネジで無理やり
留めてやるかなあ〜?キットの中にはすこし短めのネジも入っているのですが、そちらをつかうべきだったの
かな?でも、当たるのはナットなんだけどなあ〜。
 ひょっとして購入したサーボが少し大きいものだったのかしら?

ナットの厚みがあってサーボに当たっています。これではサーボの固定ネジははいりません。


長さの違うネジが入っています。左の短いものを使えということかな?
でも当たるのはナットなんだけどなあ〜。


たまたま
 そういえば、M3については間違えて3種のナットを買ったことがあることを思い出しました。
ネジを短いものにして、ナットもこれに変更しましょう。しかし、このナットが届いたときは、
「あ、間違えた」と思いましたが、こんなところで役に立つとはたまたまです。



左側が3種のナット。すこし厚みが薄いです。


これで、無事に脚の根本のサーボがとりつきました。

しかし、組みあがっていくと結構な重量があります。
足元は20kgfcmのトルクがあるサーボとはいえ、きびきびとうごくのかなあ?

この先に進むために、まずは

脚先や上蓋(?)を取りつける前に、まずやらないといけないことがあります。
それは、サーボをすべて中点位置にもどす必要があります。届いたサーボはすこし
動かしてみたりしたものがあり、中点位置がズレている可能性があります。それに、
新品のサーボも中点位置にあるかどうかも怪しいです。

ということで、簡単なパルス発生器をつくってサーボの位置を調整です。
20ms毎で1.5ms幅のパルスをつくるだけです。サーボモータはパルス幅で位置が変わります。
私が購入したのは180度の回転角度があるもので、パルス幅が0.5msのときに0度、2.5msの
ときに180度になります。あ、間違えて回転角度270度のものなんか買ってないだろうなあ〜?
この時にでも調べてみましょう。別に270度でも大丈夫だけど、それが混じるとあとあと制御が
面倒そうです。

サーボの中点確認 2025.2.14

PICに簡単なプログラムを書いて、サーボの中点確認を行いました。

簡単にサーボのチェックと中点の確認を行いました。

ちなみに、サーボの中身を見てみると

サーボを1個、ネジを外して中をみてみました。廉価な400円ちょっとのサーボです。


ネジ4本を緩めると、裏ブタがはずれてモータと基板が見えます。


基板の半田面の様子です。


奥には黄色のポテンショがみえます。これでサーボ軸の回転角度を調べています。

 
基板には3つの8pinの素子があるようです。おそらく2つがNMOSとPMOSが入ったドライバでのフルブリッジ構造、そして
残りの1つがマイコンでしょう。


ギアはプラ製ではなくて金属製でした。


残念ながら軸受けはベアリングではなく、プラスチックです。まあ400円ちょっとのサーボだから
仕方ありませ。


最後の組み立て

サーボの中点確認もできたことなので、最後の組み立てです。
組みあがったら結構大きいです。制御系はまだなので、とりあえず邪魔になるので、
脚を折りたたんで押し入れにでも突っ込んで沖おきましょう。


まずは”ふともも”を取り付けです。できるだけ水平になるように取り付けました。


次は上蓋を取り付けです。


最後に爪先をとりつけて組み立て終了です。結構おおきいです。こんなのがうにょうにょ動いたら気持ち悪そうです。


とりあえず小さくなるようにして、押し入れにでも入れておきましょう。

制御系はどうするか?

最終的な形としては、制御系にはRaspberry Pi PICOとラジコンの受信機を搭載して、
リモート操作できるようにと考えています。PICOはCONTROLLER UNIT基板にのせて
スイッチやグラフィックパネルも実装しておけば、色々と調整にも役立ちそうです。
で、そう考えた時に問題になるのがI/Oの数です。CONTROLLER UNIT基板では
自由に使えるI/Oは12本です。それに対して、制御すべきサーボは全部で18個。
どうやって少ないI/O数で18個のサーボを動かすかな。
 ここでの課題はサーボ軸はパルス幅で角度設定を行いますが、0.5〜2.5msでの
短い時間を少なくとも1000分割程度はできるようにしたいところです。1000も要らない?
という感もありますが、実際のサーボの動作範囲って±20度程度でしょうから、±90度
の時間範囲で1000分割できても、±20度なら分解能はおよそ200程度です。このくらいは
最低欲しい感じです。
 で、以下のような回路を考えてみました。これならI/O数3個で最大24個のサーボが
コントロールできます。


これなら少ないI/Oで多くのサーボが制御できますが−−.

0.5〜2.5msの間を1000分解するためには、上記の回路を2us毎に
データを入れ替えることができないといけません。PICOの動作が
125MHzですから、クロック数にして250クロックです。大丈夫だろうか?
実際にプログラムを組んで、どのくらいの速度がでるか試してみましょう。

だめだあ〜
18サーボを動かすとして、とても分解能1000には届かないようです。
分解能で600が限界です。となると常用域±20度程度だと、分解能は
133かあ〜。まあ、この程度あればいいかなあ〜、
と思わず妥協してしまいそうです。
 他にいい方法ないかなあ〜?

データラインを2系統にしたらどうだろう?
 これならギリギリ、分解能1000はいけそうです。でも、ロジックICの無駄が多くなるなあ〜。
2段目なんて1/8しか使わないものなあ〜。この構成で24サーボを動かした場合の分解能は、
ざっと750でした。

データを2系統に分けると早くないそうですが、無駄が多いです。

ついでならデータラインを3系統にしたらどうだろう?
 あ、2系統より  逆に悪くなりました。ギリギリ、分解能1000に足りません。分解能980です。
でも、これならまだ許せるかなあ〜。この場合PICOのI/O数は5本必要になります。
ちなみに、この構成で24サーボ動かす場合の分解能を調べてみると、ざっと770です。
まだ、許せるかなあ〜。

データを3系統にするのが、バランス的にいいかなあ〜。

さらに憂鬱

サーボの位置情報から1000分割したパルス幅情報に変換する時間を調べるために、
模擬的にプログラムを書いてみました。その結果、計算時間に約3.6msかかります。
サーボを動かすパルス幅が最大2.5msあることと合わせると、単にサーボを動かすだけで
6.1msかかります.これが50Hz毎、すなわち20ms毎に繰り替えられるわけですから、
ここだけでCPUの占有率は6.1/20=30%にもなります。結構、とられるなあ〜。
でも、70%は計算に使えるわけだし、まだましかなあ〜。
 世間一般ではどんな制御CPUをつかっているのだろう?

を!ちょっとした発見

色々とプログラムを弄っていて、わかったことですが、変数の置き場所によって
かなりアクセス時間がかわるようです。
先のプログラムで配列をサブルーチンの中で宣言、すなわちスタックエリアに
変数を配置した場合は実行時間は3.6ms、そして変数を外部宣言した場合は
実行時間が2.1msとかなり短くなりました。が、なんでも外部宣言したほうが早いかと
いうとそうではなく、小さい配列の場合はサブルーチン内の宣言の方が早くなり、
配列が1000にもなるような大きなものだと、外部宣言の方が早いようです。
このあたりは、トライアンドエラーになるかもだなあ〜。

とりあえず

データ3系統として制御回路を組んでいきましょう!この段階で、ラジコンの受信機との
連携も考えておきましょう!受信機からの信号は当然のことながらPWM信号ですが、
その信号を受けとってPICOに受け渡す方法ですが、下記の様な案です。
受信機からのPWM信号は一旦PICで受けて、サーボ軸回転角度の情報に変換。
その情報をシリアルSRAMに書き込んで、PICOに受け渡します。当然のことながら、
SRAMアクセスについてはPICOとの排他制御が必要になりますが、PICOからの
読み出しの間隔は一定時間以上という条件をつけておけば、PICOからの
アクセスがなくなった後に、PICで書き込めような順番を取り決めておけば、信号の
衝突はないでしょう。


制御系の全体ブロック図


SRAMはこれがいいでしょう。部品箱に1個ありました。


SPIモードで簡単につかります。


こんな回路で組んでいきましょう!

懐かしい〜! 2025.2.16

自立走行するにはバッテリーを内蔵させる必要があります。
そういえば、ラジコンをやっていたときのバッテリーがどこかにあるはずです。
で、捜索開始!
 バッテリーは見つかりませんでしたが、かなり古いサーボが見つかりました。
野外の保管箱に入っていましたが、箱の中だっだので結構綺麗な状態でした。
折角なので、中をバラシしてみてみました。


30年くらい前のサーボかなあ?


廉価版なのでギアはプラスチックです。


結構半田付けが多そうです。


結構な部品で構成されています。制御ICはM5179ってあったので三菱製だと思うけど、
データシートがみつかりませんでした。



ポテンショの足に絶縁チューブがあるのは高品質ですね。


結局のところバッテリーは見つからなかったので、新規に購入です。
サーボ用の6Vバッテリーと制御用の4.8Vのバッテリを入手です。
これらは小型なのでロボットの腹の中に格納することができます。


バッテリーを新規に購入です。

サーボのインターフェイス基板作成! 2025.2.18

夜の夜長に、作成開始です。IC類は10個もありませんが、蛇の目基板での作成は
久しぶりということもあって、結構時間がかかりました。
で、完成してから配線チェックをして、ICを挿そうとしたときに問題発覚!

14PinのDIPが挿入できない!

実装密度を上げるために、DIPのICのソケットは一部は隙間なく並べたのですが、
14PinDIPは出来ないのを忘れていました。端っこのモールドを削るかな?
削るのは大した手間ではありませんが、モールドの端からなにやら金属光沢が見えます。
おそらくICのリードの金型での打ち抜き後の連結部なので、削っても問題ないはずですが、
下手に応力をかけてモールドに隙間とかできるとあとあと面倒です。
ということで、ICに下駄をはかせることにしました。


ICを取り付けようとして、問題発覚!


14Pin-DIPはソケットを連結しちゃだめだったですね。
端を削ったら入るかな?



パッケージの端には金属部分が見えます。こりゃ、削っちゃだめかな?


真ん中のICは下駄をはかせて、ソケットに取り付けです。


とりあえず完成です。PICはまだ出番はないので未実装です。



久しぶりに、蛇の目基板で配線を行いました。

【備忘録】製作資料
あとあとのことを考えて備忘録を残しておきます。

回路図です。すこし変更しました。


ソフト作成に必要な、ピン接続表も整理しておきます。

PICO PIC SRAM LOGIC,etc
GPIO-11 74164-IC1(A,B)
GPIO-10 74164-IC2(A,B)
GPIO-9 74164-IC3(A,B)
GPIO-8 74164-CK
GPIO-7 74574-CK
GPIO-3 B0 #CS
GPIO-2 B3
GPIO-1 B1 SO
GPIO-0 B5 SCK
B2 SI
C7 SDA(OLED)
C6 SCL(SCL)
A0-A5 R/C RECEIVER


基板のコネクタやピン配置です。

まずはコントローラユニットと接続

コントローラにスイッチやTFTを搭載です。TFTは320x240のものを使います。
8x8ドットフォントだと40x30文字が表示できますので、18個のサーボ情報を表示するのに十分です。
ちょっと小さくて目に厳しいかなあ〜。そのときは16X16に切り替えましょう。そうすれば20X15になりますが、
横2列で表示すればいいでしょう。

連結にはバス接続用の基板を使いました。なにかと便利です。



CPUには秋月電子のRP2040を使いました。これも、何個か貯めこんでしまっているので、ここで消費です。

(つづく)