goo blog サービス終了のお知らせ 

あれやこれやの日々

幅広いエンジニアリング情報を掲載

Arduinoでサーボモータを動かしてみる!

2017年11月10日 | ブログ
Arduino Mega ADKでは、LCD、SDカードと言った
Peripheralデバイスを中心にヘビーに使ってみたが
手軽でなかなか良かった。

そこで今回は、格安でUnoをGetできたので
サーボモータをあれこれ動かしてみることにした。

概略は以下の通り。
1.Unoとサーボモータの接続
2.サーボモータの基本動作
3.サーボモータの速度制御
4.サーボモータの連続回転動作

詳細は以下の通り。

■使用機材一覧

PC OSWindows7 SP1
IDE環境Arduino Ver1.6.2
BoardArduino Uno R3
Servo MotorKONDO KRS786ICS
PC-Board I/FUSB 2.0


1.Unoとサーボモータの接続

a)PWM信号線の接続について
ArduinoのLibraryにあるServoモジュールでは,PWM出力ポートは9,10の2つ
に決まっているらしい。

そこで先ずは9番ピンを使用する。

b)サーボモータの電源供給について

今回使用するサーボモータはKONDO製 KRS786ICSと
ちと古いが、電源電圧は9-12Vと標準的なもの。

別電源を用意するのも面倒なので、取り合えずUnoの5Vを
使う
ことにした。

Unoとサーボモータの配線図は以下となる。


c)Unoへの電源供給について
今回はお試しなので、外部電源は用意せず、USB経由でPCから供給することにした。

2.サーボモータの基本動作

Arduinoでサーボモータの基本動作と言えば、LibraryのServoクラスを使っての
回転角度指定動作になるでろう。

ここで、模型用のサーボモータについて簡単に説明すると
・サーボモータには角度制限タイプと連続回転タイプの2種類がある。
・動作角度は180度、270度(±135度)、320度など機種により異なる。
・動作電圧も機種により様々。
・角度制限タイプは連続回転タイプに改造できる。
等々・・・

さて、プログラムの準備は以下の通り。
1)Unoとサーボモータを接続する。
2)UnoとPCをUSBケーブルで接続する。
3)IDE(Arduino.exe)を起動する。

4)スケッチを選択する。
 メインメニューのファイル -> スケッチの例 -> Servo -> Knob/Sweepの
 いづれかを選択する。
 ・Knobはアナログポートに接続したボリュームの回転に合わせて サーボモータが回転するプログラム。
 ・Sweepは0-180度の間を往復回転し続けるプログラム。無限ループなので少々面倒。
ここはKnobを選択した方が無難。

 このコードに基本動作のコーディングが全て含まれている。とてもシンプル・・・
 まとめると、
1)Servo.hをインクルードする。
2)Servoクラスのインスタンスを生成する。
3)Servoクラスのwriteメソッドで目標の角度を指定する。>>これで動作開始。

4)プログラムの書き込み
→ボタンをクリックすると、ビルドから書き込みまで自動で行ってくれる。
エラーが出たら修正。
5)実行
プログラムは書き込みが終わると自動的に実行が開始される。
キー入力待ちにした場合は、ツールのシリアルモニタを起動して入力する。

ServoクラスにはwriteMicroseconds()というメソッドがあるが、値の範囲が異なる以外には
write()と同じ動作となった。

3.サーボモータの速度制御

ここまでで十分な場合も多々あるかと思うが、速度指定もできないと何かと不便である。
そこで、簡単な解決策としてLibraryを導入してみたので、手順を以下にまとめた。

1)VarSpeedServoのインストール
ダウンロード先URL:https://github.com/netlabtoolkit/VarSpeedServo
画面中央緑色ボタン(Clone or download)をクリックしzipファイルをダウンロードする。

2)LibraryをIDEへインストール
トップメニューのスケッチ-> Include Library -> Add .ZIP Library...を選択し、
ダウンロードしたVarSpeedServo-master.zipを指定する。

3)ライブラリの確認
トップメニューのスケッチ-> Include Libraryで表示されるリストの最下行に
VarSpeedServo-masterがあることを確認。

4)ソースコード作成

新規で作成しても良いが、2の基本動作で読み込んだKnobをベースに改造してみる。
基本はServoクラスをVarSpeedServoクラスに置き換えるだけ。

#include

VarSpeedServo testservo;

void setup()
{
Serial.begin(9600);
testservo.attach(9);
}

void loop()
{
testservo.write(0, 30, true); // 原点復帰
delay(500);
testservo.write(180, 100, true); // 180度回転
delay(500);
testservo.write(0, 30, true); // 原点復帰
exit(0); // 終了
}


4.サーボモータの連続回転動作

サーボモーターはステッピングモーターとは違い、回転範囲に制限がある。
一般的なものは0-180度、特殊なものでも320度位までの様だ。
ロボットの関節動作ならそれでも良いが、やはり連続回転して欲しい事もある。

今回、実は角度指定付き連続回転動作が欲しいのだが、手持ちのアイテムで何処までできるか
トライしてみた。

恐らく、この手のニーズは多々あると思うので、詳細を別記事としてまとめたので参考にされたし!
>>記事はこちら!

以上・・・




最新の画像もっと見る

コメントを投稿