Soraken’s Style

つれづれ

Trinketで模型用モータを回す(2)

以前模型用のマブチモータを簡単なドライバ回路を作成して動かしてみた事がありました。(Trinketで模型用モータを回す)あれはあれで面白いのですが、今回はラジコンなんかでよく使われるサーボモータを動かしてみたいと思います。

 

今回試したのはフタバのS3003というサーボモータです。いつ買ったかわからないんですが、これも我が家のジャンクの中にありました。そんな状態なので、当然、説明書とかもないので、まずは例によってグーグル先生に聞いてみました。

 - フタバ S3003

このデータシートによると、

f:id:soraken:20150512213848p:plain

まず、配線がわかります。次にデータ表から、

f:id:soraken:20150512214023p:plain

動作電圧は4.8〜6.0Vとあるので、赤い線に5V、黒い線はGNDに、そして白い線は制御信号としてTrinketに繋げば良さそうです。制御方式はPWMのようですが、よくわからないのは「1520usec Neutral」とあることですかね。動作の方向がCW(時計回り)に1520-1900usecって、どういう意味?動作角度は45度(一方向に400usecパルス移動)とあるので、±45度くらいは動くのかな?

よくわからないけど、とにかくPWMでパルスを与えてやると、ある特定の角度になるってことらしいです。

では、まずは回路から作って行きます。いつものように、Trinketをブレッドボードに挿しておいて、周りに回路を作って行きます。といっても、今回は、サーボモータをつなぐくらいしかありません。

本当は、サーボモータを動かす時は500mA以上電流が流れるのが普通だと思うのですが、今回は、サーボモータに負荷を付けないで、ただ回すだけということにして、(Trinketを含めて)全体で500mA以内に入る前提で、USBからもらった5Vで直接サーボモータを動かしてみます。

という訳で、下の図のように配線しました。

f:id:soraken:20150523205347p:plain

RC servoのところが今回接続するサーボモータです。1に白、2に赤、3に黒のケーブルを接続することになります。

 

次に、Trinketのソフトウェアです。TrinketはArduino IDEのスケッチサンプルにあるサーボ(とservoライブラリ)は使用できないようです。(参考:Trinket & Gemma Servo Control)その代わり、AdafruitさんがTrinket(とGemma)専用のサーボ用ライブラリを用意してくれていました。実際、Adafruitさんのページを見ればそのまんまなんですが、ここではS3003を動かすという事で、Adafruitさんのページの通りにやってみます。 

(ここでは、AdafruitさんのサイトからTrinket用のArduino IDE 1.6.4をダウンロードして、既にインストールしてあるところからスタートします)

f:id:soraken:20150522001210p:plain

まず、上記のAdafruitさんのページから、 「Download Adafruit_Servo library」を選択して、ライブラリをダウンロードします。

 次に、Arduino IDEがインストールしてあるところを探します。大抵は「アプリケーション」フォルダに入っていると思いますが、場合によっては違うところにインストールしているかもしれません。

 その「Arduino.app」というファイルを右クリックして、コンテキストメニューから「パッケージの内容を表示」を選択します。すると、今まで隠れていた「Arduino.app」以下のフォルダが表示されるようになりますので、表示されたフォルダ内の「Contents」→「Java」→「libraries」とたどって開いて行きます。この「libraries」フォルダがライブラリを格納しているところのようですので、ここに、先程ダウンロードした「Adafruit_SoftServo-master」をフォルダごと入れます。

 ここで、ちょっとしたトリックが必要です。「libraries」フォルダに入れておくライブラリには、名前に「-」が使えないらしいので、「Adafruit_SoftServo-master」という名前ではArduino IDEを起動した時に警告が表示されてしまいます。そこで、この名前の「-(ハイフン)」を「_(アンダースコア)」に変更しておきます。(フォルダの名前だけ)

 

この状態で、Adruino IDEを起動してみてください。警告等が表示されなければインストールが正常にできていると思います。また、Adruino IDEのメニューバーから「スケッチ」を選択して、プルダウンメニューの中から「Include Library」を選択してみましょう。ライブラリのリストが表示され、その中に「Adafruit SoftServo」とあれば、ライブラリのインストールは成功です。そのまま、「Adafruit SoftServo」を選択すると、作成しているスケッチにインクルードされます。

今回作成したスケッチはこんな感じです。

f:id:soraken:20150523215030p:plain

ソースコードを見てみましょう。

まず最初にあるのが、先程ダウンロードして組み込んだ、Adafruit_SoftServoをインクルードしている行です。

次にサーボ出力ピンを定義しています。

また、Adafruit_SoftServoクラスを持つmyServo1というオブジェクトを定義しています。(どうも、Arduinoでは、これでインスタンス化されているみたいです)

Setup()の中の最初の2行はAdafruit_SoftServoライブラリのオマジナイみたいなものだと思ってください。

その次に、myServoをまずattach(SERVOPIN1)で出力先を指定しています。

更に、myServo1をwrite(0)で原点へ移動させています。

 

loop()の方では、write(0)とwrite(180)で0度と90度に2秒間隔で移動させています。

ソースコードにも書いていますが、S3003は何故か90度動かすために180度を指定しないといけないようです。

 

最後のSIGNAL(TIMER0_COMPA_vect)関数は、Adafruit_SoftServo特有のもので、20msec毎にmyServo1の出力をリセットするためのものです。

 

このソースをコンパイルして、Trinketに書き込み、動作させたものが以下の動画です。

www.youtube.com

 見ての通り、いい加減にやってUSBからのバス供給電源でもS3003が動かせている事がわかると思います。(ただし、繰り返しますが、非常に軽い負荷の場合限定と考えた方がよいです)

 

まずは、動作確認用のプログラムという事で、非常に単純な動作になっていますが、これができれば、これからいろいろなことができるようになるはずです。

 

今回はここまで。