レッスン86:ポテンショメータを使用してサーボモーターの位置を制御する
#include <Servo.h>
Servo myservo; // サーボを制御するためのサーボオブジェクトを作成
int potpin = A0; // ポテンショメータを接続するアナログピン
int servoPin = 3; // サーボ用のデジタルピン(PWM対応)を定義。使用できるのはピン3、5、6、9、10、11のみ
int VCC2 = 8;// ポテンショメータ用の追加VCCを定義
int val; // アナログピンから値を読み取る変数setup()関数では、サーボを初期化し、追加の電源ピンを設定します。myservo.attach(servoPin)関数は、サーボの信号線がArduinoのどのピンに接続されているかを指定するため、不可欠です。
void setup() {
Serial.begin(9600); // シリアル通信を設定
myservo.attach(servoPin); // ピン3のサーボをサーボオブジェクトに接続
pinMode(VCC2, OUTPUT);// ピン8を出力として設定
digitalWrite(VCC2, HIGH);// ピン8をHIGHにして5Vピンとして機能させる
}
中核となるロジックはloop()関数にあります。ポテンショメータの値を読み取り、角度に変換して、サーボに動くよう指示します。ここで重要な2つの関数はanalogRead()とmap()です。(ビデオの04:27)
void loop() {
val = analogRead(potpin); // ポテンショメータの値を読み取る(0から1023の間の値)
val = map(val, 0, 1023, 0, 180); // サーボで使用できるようにスケール変換(0から180の間の値)
myservo.write(val); // スケール変換された値に応じてサーボの位置を設定
Serial.print(val);
Serial.println();
delay(50); // サーボがその位置に到達するのを待つ
}
仕組みは次のとおりです:
- analogRead(potpin):この関数はポテンショメータのワイパーから電圧を読み取り、0(0V)から1023(5V)の間の値を返します。
- map(val, 0, 1023, 0, 180):これはプロジェクト全体の鍵です。ポテンショメータからの生の値(0から1023)を、比例的にサーボ角度(0から180度)に変換します。例えば、ポテンショメータが511(約半分)を読み取った場合、
map()関数は90を返し、サーボを中央位置に動かします。 - myservo.write(val):この関数は計算された角度(現在
valに格納されている)を受け取り、サーボにその位置まで回転するよう指示します。 - delay(50):各ループの最後に小さな一時停止を追加します。更新レートを制御します。より大きな遅延(200msなど)はサーボを段階的に動かし、より小さな遅延(50msなど)は動きを非常に滑らかにします。応答性を変えるためにこれを調整できます。(ビデオの07:26)
ライブプロジェクトデモンストレーション
ビデオでは、プロジェクトが動作している様子を見ることができます。ポテンショメータのつまみを回すと、サーボモータのアームがその位置に比例して追従します。シリアルモニタには現在の角度が表示され、マッピングが正しく機能していることを確認できます。ポテンショメータが最小位置にあるとき、サーボは0度です。つまみを最大まで回すと、サーボは滑らかに180度まで回転します。(ビデオの06:33)
このリアルタイムのフィードバックループは、アナログセンサとデジタルアクチュエータのシームレスな統合を示し、応答性が高く直感的な制御システムを生み出しています。
チャプター
- [00:00] はじめにとプロジェクト概要
- [01:05] 回路図と配線図
- [02:07] 物理的な配線のデモンストレーション
- [03:00] コードの説明
- [06:33] ライブデモンストレーションとテスト
- [07:26] サーボ応答速度の調整
892-Lesson 86: Controlling a servo position using a potentiometer (variable resistor)
言語: C++
/*
* Lesson 88: Controlling Servo motor a with Potentiometer
* 📚⬇️ Download and resource page https://robojax.com/RJT763
watch full video tutroial: https://www.youtube.com/watch?v=ntRW77mNFFk
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
Update by Ahmad Shamshiri on Jan 01, 2019 in Ajax, Ontario, Canada
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int servoPin = 3; // define a digital pin (with PWM) for servo. Can use only pin 3, 5, 6,9, 10, 11
int VCC2 = 8;// define extra VCC for potentiometer
int val; // variable to read the value from the analog pin
void setup() {
//
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 3 to the servo object
pinMode(VCC2, OUTPUT);// set pin 8 as output
digitalWrite(VCC2, HIGH);// set pin 8 HIGH so it acts as 5V pin
}
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
Serial.print(val);
Serial.println();
delay(50); // waits for the servo to get there
}
必要かもしれないもの
-
アマゾン
-
アマゾン
-
イーベイ
-
アリエクスプレスAliExpressからSG90サーボモーター180または360を購入してください。s.click.aliexpress.com
リソースと参考文献
ファイル📁
他のファイル
-
SG90 Seroo モーターのデータシート
robojax-servo-SG90_datasheet.pdf0.12 MB