今日はサーボモータを使ってみます。
サーボモーターとは、角度を指定して回転するモータです。
0~180度(deg)の範囲で動きます。
回路はこのようになります。
今回使ったサーボモータはSG92Rです。
サーボモータは電源を供給するためのVcc端子とGND、と制御線が出ています。
Vccに+電圧を入力し、GNDはArduinoのGNDにつなぎます。
仕様はHP等で確認できます。
今回もタクトスイッチをおすとサーボモータが動作するようにしてみました。
これで、なんらかの信号を受けてサーボモータを動作させるロジックは出来上がりました。
ところで、プログラム的に停止しているときにサーボモータから「ジジジ…」という音がしました。
最小単位の動作量に満たないような、電圧がかかっているイメージです。
ロジック的には間違ってないように見えるので悩みましたが、ぐぐってみると安物ではありうることのようです。
常に、制御線からの信号で制御しているだけであって、サーボモータには5Vが常に入力されているので起きているのでしょうか?
トルク:2.5kgf・cmというのが、どれくらいなのか想像がつかなかったのですが結構強力でした。
軸から1cmの場所で2.5kgの力が出ます。
ちょっとした工作には十分そうです。
■ソース
==================
#include <Servo.h> //サーボモーター用Arduino標準ライブラリを読み込む
Servo myservo; //サーボモータ用のオブジェクトを作成
int val; //サーボの角度を格納
int state = 0; //pinから取得したデータ格納
int pin7 = 7;
void setup()
{
Serial.begin(9600); //シリアルモニタを使う(カッコ内は通信速度)
myservo.attach(9); //デジタル9番ピンをサーボの角度命令出力ピンとして設定
pinMode(pin7, INPUT); //pin7を入力として使う
}
void loop()
{
Serial.println(state); //シリアルモニタにデータを出力
state = digitalRead(pin7); //データとしてpin7のdigital値を読み込む
if (state == 0) {
val = 0; //変数の初期化
delay(300);
myservo.write(val); //サーボを動かす(0度)
delay(2000);
val = 180;
myservo.write(val); //サーボを動かす(180度)
delay(500);
}
else {
}
}
=================