プログラミング素人のはてなブログ

技術屋の末端。プログラミングも電気回路も専門外です。 コードに間違いなど見つけられたら、気軽にコメントください。 VC#、python3、ラズパイ始めました。

サーボモーターを使う

今日はサーボモータを使ってみます。

サーボモーターとは、角度を指定して回転するモータです。

0~180度(deg)の範囲で動きます。

 

回路はこのようになります。

 

 

今回使ったサーボモータはSG92Rです。

 

マイクロサーボ SG92R (1個)

マイクロサーボ SG92R (1個)

 

  

サーボモータは電源を供給するためのVcc端子とGND、と制御線が出ています。

Vccに+電圧を入力し、GNDはArduinoのGNDにつなぎます。

仕様はHP等で確認できます。

 

今回もタクトスイッチをおすとサーボモータが動作するようにしてみました。

 

 

これで、なんらかの信号を受けてサーボモータを動作させるロジックは出来上がりました。

 

ところで、プログラム的に停止しているときにサーボモータから「ジジジ…」という音がしました。

最小単位の動作量に満たないような、電圧がかかっているイメージです。

 

ロジック的には間違ってないように見えるので悩みましたが、ぐぐってみると安物ではありうることのようです。

常に、制御線からの信号で制御しているだけであって、サーボモータには5Vが常に入力されているので起きているのでしょうか?

 

トルク:2.5kgf・cmというのが、どれくらいなのか想像がつかなかったのですが結構強力でした。

軸から1cmの場所で2.5kgの力が出ます。

ちょっとした工作には十分そうです。

 

マイクロサーボ SG92R (1個)

マイクロサーボ SG92R (1個)

 

  

■ソース

==================

#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 {

}
}

=================