このチュートリアルはの一部です: サーボモーター
サーボモーターに関連するすべてのビデオをここに掲載しています。他のビデオへのリンクはこの記事の下にあります。
ポテンショメーターを使用したArduinoサーボモーター制御
このチュートリアルでは、Arduinoを使用してポテンショメーターでサーボモーターを制御する方法を探ります。目標は、ポテンショメーターの回転に基づいてサーボの位置を調整するシンプルな回路を作成することです。このプロジェクトの終わりまでには、ポテンショメーターを回すことでサーボの角度を0度から180度までスムーズに変化させる動作モデルが完成します。これは、Arduinoにおけるアナログ入力とサーボ制御の基本を理解するための素晴らしい方法です。
これを達成するために、Arduinoボード、サーボモーター、ポテンショメーターを使用します。ポテンショメーターは可変抵抗器として機能し、Arduinoにアナログ入力を提供し、それに応じてサーボモーターの位置を決定します。このプロジェクトは楽しいだけでなく、電子工学やプログラミングの重要な概念を示す教育的なものでもあります。より詳細な説明については、ビデオ(ビデオの00:00に)をぜひご覧ください。
ハードウェアの解説
このプロジェクトでは、主なコンポーネントはArduinoボード、サーボモーター、ポテンショメーターです。Arduinoは操作の頭脳であり、入力を処理し出力を制御します。サーボモーターは、Arduinoから受け取ったコマンドに基づいて物理的に動くものです。ポテンショメーターは1kオームから1Mオームまであり、ユーザーがサーボの動きに変換される可変入力を提供できるようにします。
サーボモーターは、希望する位置を示すPWM(パルス幅変調)信号を受信することによって動作します。ポテンショメーターは回転すると抵抗が変化し、Arduinoによってアナログ電圧として読み取られます。サーボモーターは5Vで動作します。3.3Vでは動作しません。この電圧はサーボモーターの可動範囲にマッピングされ、0度から180度までの滑らかな動きを可能にします。
SG90サーボモーターのデータシート詳細
| 製造業者 | パララックス |
|---|---|
| 部品番号 | SG90 |
| ロジック/IO電圧 | 5 V |
| 供給電圧 | 4.8-6 V |
| 出力電流(チャネルごと) | 約500 mA |
| ピーク電流(チャネルごと) | 1 A |
| PWM周波数ガイダンス | 50ヘルツ |
| 入力ロジック閾値 | 0.5 V(低)、2.5 V(高) |
| 電圧降下 / RDS(on)/ 飽和度 | 0.5 Vで500 mA |
| 熱的限界 | 0°Cから60°C |
| パッケージ | スタンダード9gサーボ |
| ノート / バリアント | RCアプリケーションで一般的に使用される |
- サーボが最大電流定格を超えないようにしてください。
- サーボが高負荷で連続して動作する場合は、ヒートシンクを使用してください。
- ポテンショメーターをアナログピンに接続して、正確な読み取りを行います。
- サーボ制御のためのPWM信号のタイミングに注意してください。
- サーボの可動範囲を確認して、物理的な障害物を避けてください。
配線指示


このセットアップでは、コンポーネントを次のように接続する必要があります:
ポテンショメーターの中央ピン(ワイパー)をArduinoのアナログピンに接続します。A0ポテンショメーターの他の2つのピンは接続されるべきです。5VとGNDArduinoに。サーボモーターの場合、赤いワイヤーを接続します。5V、黒いワイヤーをGND、黄色または白のワイヤーをデジタルピンに接続します。9Arduino上のこの配置により、ポテンショメーターがArduinoにアナログ入力を提供し、その入力に基づいてサーボモーターの位置を制御します。
すべての接続を確認し、サーボが動作範囲内で妨げられていないことを確認してください。異なるArduinoモデルを使用する場合は、アナログ入力とサーボ出力のピン割り当てが互換性があることを確認してください。
コード例とウォークスルー
以下は、サーボを初期化し、ポテンショメータの値を読み取るコードの抜粋です:
#include
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
このコードでは、Servoライブラリを含め、サーボオブジェクトを作成します。myservoサーボはピンに取り付けられています。9このピンを使って制御できるようにします。
void loop() {
int sensorValue = analogRead(A0); // read the potentiometer
pos = map(sensorValue, 0, 1023, 0, 180); // map to servo position
myservo.write(pos); // move servo to position
delay(15); // waits 15ms for the servo to reach the position
}
ループ関数では、ピンからポテンショメーターの値を読み取ります。A0その範囲(0-1023)からサーボの範囲(0-180度)にマッピングします。myservo.write(pos)コマンドは、ポテンショメーターの回転に基づいてサーボを所望の位置に移動させます。
デモンストレーション / 期待すること
このプログラムを実行すると、ポテンショメーターを回すとサーボモーターが0度から180度までスムーズに動くのが見えるはずです。サーボが期待通りに動かない場合は、配線を確認し、ポテンショメーターが正しく機能していることを確認してください。さらに、Arduinoが適切に電源供給されていることと、コードがエラーなしでアップロードされていることを確認してください。サーボがポテンショメーターの位置をリアルタイムで反映するのを見ることができるでしょう(動画の02:00で)。
ビデオのタイムスタンプ
- 00:00- プロジェクトの紹介
- 01:30- ハードウェアセットアップの説明
- 03:45- 配線指示
- 05:00- コードウォークスルー
- 07:30- 完成したプロジェクトのデモンストレーション
このチュートリアルはの一部です: サーボモーター
- Arduinoを使ってプッシュボタンでサーボを制御する
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Arduinoを使ってポテンショメータでサーボを制御する
- Arduinoを使ってポテンショメータとLCD1602でサーボを制御する
- Arduinoを使った赤外線リモコンによるサーボモーターの制御
- Arduino用の手のジェスチャーによるサーボ位置の制御
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- PCA9685 16チャンネル 12ビット サーボコントローラ V1 用の Arduino コードとビデオ
- Build an Arduino Servo Toggle Switch with a Push Button
/*
* オリジナルソース: Arduino IDE
* Arduinoプロジェクト: サーボ位置の制御
* このコードはRobojax.comのビデオチュートリアルと共に使用されます
* 2017年4月24日、カナダのオントリオ州アジャックスで公開。
* 著者/編集者: アハマド・シャムシリ
* YouTubeでビデオを見る: https://youtu.be/kZ9b31gVemc
* このコードのチュートリアルページビュー https://robojax.com/RJT8
* ポテンショメーター(可変抵抗器)を使用したサーボ位置の制御
*/
#include <Servo.h>
Servo myservo; // サーボを制御するためのサーボオブジェクトを作成する
// ほとんどのボードで12個のサーボオブジェクトを作成できます。
int pos = 0; // サーボ位置を格納する変数
void setup() {
myservo.attach(9); // ピン9にサーボをサーボオブジェクトに接続します。
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // 0度から180度へ移動します。
// 1度刻みで
myservo.write(pos); // サーボに変数 'pos' の位置に移動するように指示する。
delay(15); // サーボが位置に到達するまで15ms待ちます。
}
for (pos = 180; pos >= 0; pos -= 1) { // 180度から0度に移行します。
myservo.write(pos); // サーボに変数 'pos' の位置に移動するように指示する。
delay(15); // サーボが位置に到達するまで15ms待ちます。
}
}
リソースと参考文献
まだリソースはありません。
ファイル📁
ファイルは利用できません。