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

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、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 {

}
}

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