注意:すべてのOSOYOO ARDUINO用製品はサードパーティー製品であり、ARDUINOと完全に互換性があります

認可されたオンライン小売業者:

AMAZON
amzuk

内容

  1. 紹介
  2. 準備
  3. Servoについて

紹介

サーボモーターは、指定した位置まで回転できる優れた装置です。通常は、180度回転できるサーボアームを持っています。Arduinを使えば、サーボに指定した位置に行くように指示すれば、その位置に行くようになります。というような単純なものです!

サーボモーターが最初に使われたのは、ラジコンカーのステアリングやラジコンプレーンのフラップを制御するためでした。その後、ロボット工学やオートメーション、そしてもちろんArduinの世界でも使用されるようになりました。

このレッスンでは、Arduinを使用してサーボモータを制御する方法を学びます。

まず、サーボが自動的に前後にスイープするようにし、次にポットを追加してサーボの位置を制御するようにします。

準備するもの

ハードウエア

ソフトウエア

サーボについて

サーボは、シェル、回路基板、ノンコアモータ、ギア、位置検出から構成されています。サーボモータには3本のリード線があります。リード線の色はサーボモーターによって異なりますが、赤のリード線は常に5Vで、GNDは黒か茶になります。もう1本のリードはコントロールリードで、これは通常オレンジか黄色です。このコントロールリードは、デジタルピン9に接続されています。

どのように機能するのか?

サーボは賢いデバイスです。入力ピンは1つだけで、Arduinから位置を受け取り、そこに向かって進みます。内部にはモータードライバとフィードバック回路があり、サーボアームが目的の位置に到達するようにします。しかし、入力端子にはどのような信号が送られてくるのでしょうか。

PWMのような矩形波です。信号の各サイクルは20ミリ秒続き、ほとんどの時間、値はLOWである。各サイクルの開始時に、信号は1~2ミリ秒の間、HIGHになります。1ミリ秒で0度を表し、2ミリ秒で180度を表します。その間に、0~180の値を表します。これは非常に優れた、信頼性の高い方法です。図にすると少しわかりやすくなりますね。

注意することは?

Arduinを特定のUSBポートに接続したときだけ、サーボが不安定な動作をすることがあります。これは、サーボが多くの電力を消費するためで、特にモーターが始動するときに、この急激な高需要がボードの電圧を低下させ、サーボがリセットされることがあります。
このような場合は、ブレッドボードのGNDと5Vの間に大容量のコンデンサ(470uF以上)を追加することで、通常は解決することができます。

ライブラリ「servo.h」についてもっと知る

このライブラリは、RC(ホビー)サーボモーターを制御するためのボードです。サーボは、ギアとシャフトを内蔵しており、精密に制御することができます。標準的なサーボでは、シャフトを様々な角度、通常は0度から180度の間に配置することができます。連続回転サーボは、シャフトの回転をさまざまな速度に設定することができます。

サーボライブラリは、ほとんどのボードで最大12個のモーターを、Arduin Megaでは48個のモーターをサポートしています。Mega以外のボードでは、ライブラリを使用すると、これらのピンにサーボがあるかどうかにかかわらず、9ピンと10ピンのanalogWrite()(PWM)機能が無効になります。Megaでは、PWM機能を妨げることなく12個のサーボを使用できます。12~23個のモーターを使用すると、ピン11と12のPWMが無効になります。

回路図

サーボモーターには、電源、アース、信号の3本の線があります。電源線は通常赤色で、基板上の5Vピンに接続する必要があります。アース線は通常、黒または茶色で、基板上のアースピンに接続する必要があります。信号ピンは、通常、黄色、オレンジ色、白色で、基板上のデジタルピンに接続する必要があります。サーボはかなりの電力を消費しますので、1~2個以上駆動する場合は、別の電源(Arduinの+5Vピンなど)から電源を供給する必要があります。Arduinと外部電源のグランドは必ず一緒に接続してください。

サーボスウィープ

ここでは、Osoyoo Unoを使って、servo motorのシャフトを180度前後にスイープする方法を紹介します。

接続方法

上図からわかるように、サーボモーターには電源、アース、信号の3本の線があります。電源線は通常赤色で、ArduinまたはGenuinoボードの5Vピンに接続する必要があります。アース線は通常、黒または茶色で、ボード上のアースピンに接続する必要があります。信号ピンは、通常、黄色、オレンジ色、または白色で、ボードの9ピンに接続する必要があります。

以下のように回路を構築してください:

スケッチをアップロードする

上記の操作が完了したら、USBケーブルでボードとコンピュータを接続します。緑色の電源LED(PWRと表示)が点灯しているはずです。以下のスケッチをボードに読み込ませてください。サーボが一方向に回転し、もう一方向に回転するのがわかると思います。

#include <Servo.h>
 Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
} void loop() {
for (pos = 0; pos <= 180; pos += 1) {
// goes from 0 degrees to 180 degrees // 
in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) {
// goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}

実行結果

アップロードが終了して数秒後、次のように表示されるはずです:

制御サーボモーターが回転する度

サーボとは、180度しか回転できないギヤードモーターの一種です。Osoyoo Unoボードから電気パルスを送信することで制御されます。このパルスは、サーボがどの位置に移動すべきかを伝えます。ここでは、サーボモーターを90度回転させるように制御します(15度に1回回転させます)、
そして、反対方向に回転させる。

スケッチをアップロードする

回路図は上記の例と同じなので、以下のスケッチをArduinに読み込ませるだけです:

#include <Servo.h>
Servo myservo;
//create servo object to control a servo
void setup() {
myservo.attach(9);//attachs the servo on pin 9 to servo object
myservo.write(0);//back to 0 degrees 
delay(1000);//wait for a second
}
void loop() {
myservo.write(15);//goes to 15 degrees 
delay(1000);//wait for a second
myservo.write(30);//goes to 30 degrees 
delay(1000);//wait for a second.33
myservo.write(45);//goes to 45 degrees 
delay(1000);//wait for a second.33
myservo.write(60);//goes to 60 degrees 
delay(1000);//wait for a second.33
myservo.write(75);//goes to 75 degrees 
delay(1000);//wait for a second.33
myservo.write(90);//goes to 90 degrees
delay(1000);//wait for a second
myservo.write(75);//back to 75 degrees 
delay(1000);//wait for a second.
myservo.write(60);//back to 60 degrees d
elay(1000);//wait for a second.
myservo.write(45);//back to 45 degrees
delay(1000);//wait for a second.
myservo.write(30);//back to 30 degrees
delay(1000);//wait for a second.
myservo.write(15);//back to 15 degrees 
delay(1000);//wait for a second
myservo.write(0);//back to 0 degrees 
delay(1000);//wait for a second
}

実行結果

アップロードが終了して数秒後、今度はサーボモーターが90度回転するのが見えるはずです(15度ごとに1回回転します)。その後、反対方向に回転します。

Servo Knob

このパートでは、Arduinとポテンショメータを使って、 RC(ホビー)サーボモータ の位置を制御する方法を紹介します。ポテンショメーターと、そのスライダーからArduinのA0までのリード線を追加するだけです。

接続方法

ポテンショメーターは、外側の2つのピンが電源(+5V)とグラウンドに接続され、真ん中のピンが基板のアナログ入力0に接続されるように配線する必要があります。そこで、以下のように回路を組みます:

Code for ‘Knob’

サーボをノブの位置に追従させるコードは、スイープさせるよりもシンプルにしました。

#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}

現在、「potPin」という2つ目の変数があります。

サーボの位置を設定するために、A0からアナログを読み取ります。これで、0から1023の間の値が得られます。サーボは180度しか回転しないので、これをスケールダウンする必要がある(0と180の間の値)。

実行結果

アップロードが終了して数秒後、以下の操作のようにポテンショメーターでサーボの位置をコントロールできるようになります: