2024年5月22日(水曜日) 晴れ
サーボモーターの実験を始めてから3週間が過ぎました。
減速機の工作、減速機出力軸とポテンショメータ軸との
結合(カップリング)工作など、悪戦苦闘を繰り返して
やっと自作のサーボモーターが出来上がりました。
早速、テストをしてみました。
コントローラのボリュームを回すとサーボモーターのホーンが動き、
コントローラの動きを追いかけてきます。
何とかサーボモーターらしい動きをしてくれます。
しかし、ホーンはピクピクと細かく左右に振れて安定に静止しません。
何でだろう?
回路やロジックを確認してみました。
マイコンとモーターの接続図
制御ロジック
要はコントローラの出力電圧と、サーボモーターのポテンショメータ・出力を
比較してモーターを右回転させたり左回転させたりして両者の出力が同じ(==)に
なったら停止させる・・・ということです。
まぁ、コントローラの変化に追従してサーボモーターが追いかけくるから
基本的な動きはOKのはずです。
問題は比較するデーターの数値です。
コントローラもポテンショメータも普通の可変抵抗器(2KΩBタイプ)です。
抵抗体(カーボン被膜)の上をスライダー(バネ材で作られた摺動電極)が
移動して抵抗値を変化させるタイプですから安定した抵抗値変化は望めません。
コントローラとポテンショメータの出力が「イコール」のときに停止させる
のですがこの「イコール」が瞬間的にしか掴めないのではないでしょうか。
コントローラ、ポテンショメーターの電圧は「analogRead」という
コマンドで読み取っています。
この電圧値を確認してみると「0」から「3899」近くの数値になっています。
可変抵抗器(以下VR)のスライダーのわずかな動きで数値は変化するでしょう。
一方、マイコンのロジックでは数値が「1」でも変化すればそれは「変化」と
して判断されてしまうはずです。
そこでVRの出力が「0~99」までは「0」、「100~199」までは「1」、
「200~299」までは「2」、というように範囲ごとに数値を与えれば変化する速さが
鈍くなって安定に比較ができるのではないかと考えました。
こういうことを実行するのに、「map関数」という機能があります。
これを使って
「0~3750」 ➡ 「0~30」
に変換させました。
これで大体 入力が「125」増加するごとに出力は「1」ずつ加算されるはずです。
プログラムを改造して動作させてみました。
コントローのVRを変化させると、サーボホーンが追従してきます。
おぉー、今度は安定に「イコール」を検出してくれます。
コントローラの指針とサーボホーンの指針が同じ向きで停止しています。
両者のVR出力が一致(イコール)すると赤LEDと青LEDが同時に点灯します。
モーターへの電源がOFFになり電流が「0」になります。
map関数って便利ですね!!!
そんなテストの様子を動画でご覧ください。
サーボモーターの工作はモータや減速機などメカ的な工作があって
なかなか面白かったです。
工作実習生にはちょっと難しい工作でしたが何とか完結させることが
できました。
いろいろ応援をくださった皆様、ほんとうにありがとうございました。
これからもよろしくお願いいたします。
※コメント投稿者のブログIDはブログ作成者のみに通知されます