レッスン92:ポテンショメーターで制御される複数のサーボ| Arduinoステップバイステップコース
このプロジェクトでは、Arduino Unoと2つのポテンショメーターを使用して、独立したマルチチャネルサーボコントローラーを構築する方法を学びます。1つのノブに従う単一のサーボの代わりに、このガイドでは各サーボに専用のアナログ入力を与える方法を示します。これにより、2つから最大6つのサーボモーターを独立して同時に制御できるようになります。これは、複数の可動部品を正確に手動で制御する必要があるプロジェクトにとって基本的なビルディングブロックです。

このセットアップは非常に多用途です。ここでは、いくつかの実用的な使い方を紹介します:
- ロボティクス:カメラジンバルのパンとティルト、または小型ロボットのベースとアーム関節を制御すること。
- アニマトロニクス:人形やアニメトロニックキャラクターの頭と目を独立して制御することによって、リアルな動きを作る。
- モデル制御:RC車両や模型航空機のためにカスタムコントローラーを構築し、フラップやエルロンを正確に調整します。
- 自動化:太陽追尾装置または多軸位置決め治具の手動オーバーライドステーションを作成する。
必要なハードウェア
- Arduino Uno(または互換性のあるボード)
- 2つのサーボモーター(ここでは標準的な180度サーボが使用されています)
- 2つのポテンショメータ(10kΩは一般的な選択肢です)
- ブレッドボードとジャンパーワイヤー
- 外部5V電源(複数のサーボに推奨)
配線ガイド
このプロジェクトは、複数のコンポーネントに電力とグランドを分配する必要があるため、単一サーボのセットアップよりも配線がやや多くなります。重要なのは、ブレッドボードのパワーレールを使用して共通の5VおよびGNDバスを作成することです。このビルドには配線図が必須です。

接続を分解しましょう。動画(02:23の部分)で説明されているように。まず、電源レールを設定します。Arduinoの接続を行います。5Vブレッドボードの正のレールにピンを接続し、GND負のレールにピンを接続します。これにより、すべてのコンポーネントに電力を簡単に供給できます。
ポテンショメータ各ポテンショメータはボルテージディバイダとして作用します。各ポットの右側の端子を接続します。5Vレールと左のピンをGNDレール。中央のピンは「ワイパー」で、可変電圧を提供します。最初のポテンショメーターの中央のピンをアナログ入力に接続します。A0, そして二番目の中間ピンはA1(ビデオの03:22で)
サーボモーター:各サーボには3本のワイヤーがあります。濃い色のワイヤー(通常は黒または茶色)を接続してください。GNDレール。中央のワイヤー(通常は赤)を接続します。5Vレール。最後に、信号線(通常はオレンジまたは黄色)をArduinoのPWM対応ピンに接続します。最初のサーボの信号線はピンに接続されます。3、そして二番目のサーボの信号線はピンに接続されます。5(ビデオの04:01で)サーボ制御にはPWM対応ピン(Unoの波線“~”でマークされています)を使用する必要があることを忘れないでください。
コードの説明
このコードはArduino IDEの標準的な「ノブ」例に基づいていますが、2つのサーボモーターを操作するように修正されています。ロジックは簡単です:ポテンショメーターからアナログ値を読み取り、それを角度にマップし、サーボをその角度に移動させるように指示します。コードの最上部にある設定セクションで、すべての調整を行います。
ここに、ピンを定義し、サーボオブジェクトを作成するユーザー設定可能なセクションがあります:
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin = A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin = A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
これは設定の核心です。三つ目のサーボを追加するには、「サーボ2設定」ブロックをコピーし、すべての「2」を「3」に変更し、新しいアナログピン(例:A2) と新しいPWMピン(例:9). TheServoこのクラスはArduino IDEに組み込まれているため、追加のライブラリは必要ありません。
在中のsetup()機能、theservo.attach(pin)コマンドは、Arduinoが各サーボの信号線に接続されているピンを指定します。使用している各サーボについて1行が必要です。
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
抱歉ですが、そのテキストは完全ではないため、翻訳できません。loop()コードはポテンショメータの値を読み取り、それを0から180度の範囲にマッピングし、その角度をサーボに書き込みます。delay(5)最後にあるのは調整パラメータです。動画で示されているように、この値を15ミリ秒から5ミリ秒に減らすことで、サーボの動きがずっと滑らかになり、振動がなくなります(動画の12:00で)。
ライブプロジェクトデモンストレーション
回路を配線し、コードをアップロードすると、デモは即座に行われます。Arduinoの電源を入れると、各サーボはそれぞれのポテンショメータの現在の設定によって決定された位置に移動します。つまみを回すと、そのサーボは動きを滑らかに追従します。ビデオでは、2つのサーボが完全に独立して動作し、複雑で同時の動きを可能にすることが示されています。ジッタや振動に気付いた場合は、調整してください。delay()ループ内の値は、最初に試すべきことです。
章
- [00:00] はじめにとプロジェクトの概要
- [00:56] サーボモーターの理解
- [02:23] 二つのサーボとポテンショメータの配線図
- [04:15] 詳細な配線説明
- [06:49] コード説明:構成とセットアップ
- [09:15] コードの説明:制御ロジックとマッピング
- [11:15] ライブデモンストレーションと調整
/*
* Control two or more servo motors
* using potentiometers.
* Modified by Ahmad Shamshiri on Oct 17, 2019 at 20:13
* in Ajax, Ontario, Canada . www.Robojax.com
* This code on robojax https://robojax.com/RJT766
*
* Original code from Arduino IDE: File->Examples->Servo->knob
*
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
* Get this code and other Arduino codes from Robojax.com
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin =A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin =A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
void loop() {
//Robojax.com multiple servo
servo1Value = analogRead(servo1PotPin);
servo1Value = map(servo1Value, 0, 1023, 0, 180);
servo1.write(servo1Value);
servo2Value = analogRead(servo2PotPin);
servo2Value = map(servo2Value, 0, 1023, 0, 180);
servo2.write(servo2Value);
delay(5);
//Robojax.com multiple servo
}// loop end
必要かもしれないもの
-
アマゾン
-
アマゾン
-
イーベイ
-
アリエクスプレスAliExpressからSG90サーボモーター180または360を購入してください。s.click.aliexpress.com
リソースと参考文献
まだリソースはありません。
ファイル📁
他のファイル
-
SG90 Seroo モーターのデータシート
robojax-servo-SG90_datasheet.pdf0.12 MB