船、車、家、たまには旅行のこと等 備忘録も兼ねて気ままに書いています。

2024/02/04

マイコンのお勉強 サーボモーターが動きました

event_note2月 04, 2024 editBy Noriyuki Tomimatsu forumNo comments
RGB3色LEDの色切り替えが上手くいったところで今度は無いしてみようかと言うことで色変化に同期して学習キットに含まれているサーボモーターを動かしてみることにしました。
とりあえずR(赤色)の輝度変化と同期して輝度が増加するときには0→180度に、減少するときには180→0度に動かしてみます。

この小さなマイコン基板でもなかなか侮れず最大で12個のサーボモーターを制御できる仕様になっています。
またサーボを動かすための「Sarvo」というライブラリーも準備されていてプログラムに組み込めば簡単にサーボモーターを制御できるようになっています。
前回紹介したMStimer2もそうですがプログラムの先頭あたりに
  #include <MStimer2.h>
      #include <Servo.h>
と書くだけで使えてしまいます。
(私の場合は何やったかの紹介だけで細かいプログラムの紹介は割愛します。)

サーボモーターは電源のプラスとマイナスと制御用、合計3本の線が出ています。
プラスとマイナスは5VとGNDに接続、制御線は3番ピンに接続してプログラムを書いて動作を確認してみました。

動くには動くんですがサーボの動きが頭に描いていた動きとは異なります。
ゆっくり動くようにプログラムしたつもりですがビュッと言った感じで動いてしまいます。
おまけに3色LEDの色変化も今までのゆっくりした動きでは無くパッパッと短時間に切り替わってしまいます。 色変化のプログラムはいじってないんですけどね、「何で???」と???でいっぱいになってしまいました。

さて調査、Servoのライブラリーを入れたところからLEDの動きがおかしくなってしまったのでここに原因が有りそうです。
出力のピンを引っこ抜いてRGB単色の光り具合を見てみると9番10番に繋いだGBの色がゆっくりでは無く単純なON/OFFしかしていないこと判明。
Servoライブラリーの詳細を調べたらこのライブラリーを使うと9番10番のPWM機能が使えなくなることが判りました。
「あ、これだ」ということでLEDは3,5,6番に移し、サーボはA0ピン引っ越しです。

今度はどうでしょう?
サーボは意図したようにスムーズにゆっくりと動くようになりましたがLEDはまだ変化がぎこちない部分が有ります。
もう一度単色にして調べてみたら3番ピンに繋いだRのLEDが単純なON/OFFしかしていません。 これもServoライブラリーの影響? ということで一旦Servoライブラリーを殺してLEDだけ光らせてみましたがやはり動きは一緒。
ネットで調べてMStimer2を使うと11番ピンだけではなく3番ピンのPWM機能も使えなくなることが判りました。
ネットからの引用ですが、


今使っているマイコンボード「Arduino UNO」には 3,5,6,9,10,11ピンがPWM機能を持っていますが
MStimer2ライブラリーを使うと3,11ピンのPWMが使えなくなり、
Servoライブラリーを使うと9,10ピンのPWMがつかえなくなり、
結果的にPWMが使えるのは5,6ピンの2個だけとなってしまいます。
LEDは3色なのでPWM出力が足りなくなってしまいます、さてどうしたもんでしょう。

LEDの色の切り替えタイミングはMStimer2からの割り込みを使ったメトロノーム方式にしていましたが時計を見ながら切り替える方式に変更してMStimer2ライブラリーを使わない形にするのが手っ取り早い解決方法のようです。
他の処理をしながら戻って来たときに時計を見る形になるので多少時間的な誤差が出ますが色の切り替えでは問題になることは無いでしょう。
で、ちくちくとプログラムを書き直してやっと目指していた色の変化とサーボの動作が実現できました。

ちゃんと意図した動きになるまで首を捻っている時間がかなり長かったですが勉強開始後の早い段階で今からよく使うに違いないMStimer2、ServoのライブラリーとPWM出力の競合関係が理解できたのは或る意味ラッキーだったと考えて良さそうです。

勉強のための自己設定課題とは言えちゃんと動くようになるとそれなりの満足感があって嬉しいですね。 いくつになっても子供みたいなもんですからLEDの光とサーボモーターの動きを眺めながら1杯やってしまいました。






0 comments:

コメントを投稿