ジョイスティックを使用してサーボモーターを制御する方法

問題を排除するために楽器を試してください





この投稿では、ジョイスティックとArduinoを使用してサーボモーターを制御する方法を学習します。ジョイスティック、そのピン、その構造と動作についての概要を見ていきます。サーボモータ制御のベースとなるジョイスティックから有用なデータを抽出します。

前書き

この記事のモットーは サーボモーターを制御する しかし、使用方法を学ぶために 制御するためのジョイスティック 他の多くの周辺機器。



それでは、ジョイスティックを見てみましょう。

ジョイスティックは、X軸とY軸で複数の方向に移動できるレバーで構成される入力デバイスです。レバーの動きは、モーターや周辺機器の電子機器を制御するために使用されます。



ジョイスティックは、RCおもちゃからボーイング飛行機まで使用され、同様の機能を実行します。さらに、ゲームや小さなジョイスティックには、Z軸にプッシュボタンがあり、多くの便利なアクションを実行するようにプログラムできます。

ジョイスティックのイラスト:

ジョイスティックのイラスト:

ジョイスティックは一般的に電子機器であるため、電力を供給する必要があります。レバーを動かすと、出力ピンに電圧差が生じます。電圧レベルは、モーターなどの出力デバイスを制御するためにマイクロコントローラーによって処理されます。

図のジョイスティックは、PlayStationおよびXboxコントローラーにある同様のジョイスティックです。これらのコントローラーを壊して救助する必要はありません。これらのモジュールは、地元の電気店やEコマースサイトですぐに入手できます。

それでは、このジョイスティックの構造を見てみましょう。

それは2つの10キロオームを持っています ポテンショメータ X軸とY軸にバネで配置されているため、ユーザーがレバーから力を離すと元の位置に戻ります。 Z軸にプッシュオンボタンがあります。

5つのピン、5ボルトのVcc、GND、変数X、変数Y、およびSW(Z軸スイッチ)があります。電圧を印加し、ジョイスティックを元のレバー位置のままにしたとき。 XピンとYピンは印加電圧の半分を生成します。

レバーを動かすと、X出力ピンとY出力ピンの電圧が変化します。それでは、ジョイスティックをArduinoに実際に接続してみましょう。

回路図:

ジョイスティックを使用したArduinoサーボモーター制御

ピン接続の詳細は、回路の横に記載されています。完了したハードウェアセットアップを接続し、コードをアップロードします。

プログラム:

//---------------Program Developed by R.Girish--------------//
int X_axis = A0
int Y_axis = A1
int Z_axis = 2
int x = 0
int y = 0
int z = 0
void setup()
{
Serial.begin(9600)
pinMode(X_axis, INPUT)
pinMode(Y_axis, INPUT)
pinMode(Z_axis, INPUT)
digitalWrite(Z_axis, HIGH)
}
void loop()
{
x = analogRead(X_axis)
y = analogRead(Y_axis)
z = digitalRead(Z_axis)
Serial.print('X axis = ')
Serial.println(x)
Serial.print('Y axis = ')
Serial.println(y)
Serial.print('Z axis = ')
if(z == HIGH)
{
Serial.println('Button not Pressed')
}
else
{
Serial.println('Button Pressed')
}
Serial.println('----------------------------')
delay(500)
}
//---------------Program Developed by R.Girish--------------//

シリアルモニターを開くと、X軸とY軸のピンの電圧レベルと、Z軸のステータス(下図のように押しボタン)が表示されます。

これらのX、Y、Z軸の値は、レバーの位置を解釈するために使用されます。ご覧のとおり、値は0〜1023です。

これは、Arduinoに電圧0V〜5Vを0〜1023の値に変換するADCコンバーターが組み込まれているためです。

シリアルモニターから、レバーに触れないでおくと、レバーがX軸とY軸の両方の中間位置に留まり、1023の半分の値を示すことがわかります。

また、これらのジョイスティックの製造が完璧ではなかったため、1023の正確な半分ではないこともわかります。

これまでに、ジョイスティックに関する技術的な知識が得られたはずです。

次に、1つのジョイスティックを使用して2つのサーボモーターを制御する方法を見てみましょう。

回路図:

2つのサーボモーターは、ジョイスティックをX軸に沿って動かすと、1つのジョイスティックによって制御されます。ピン#7に接続されたサーボは、レバーの位置に応じて時計回りと反時計回りに動きます。

ジョイスティックのレベルを特定の位置に保持すると、サーボアクチュエータを特定の位置に保持することもできます。

ピン#6に接続されているサーボモーターと同様に、Y軸に沿ってレバーを動かすことができます。

Z軸に沿ってレバーを押すと、2つのモーターが180度のスイープを実行します。

arduinoをに接続することができます 9V電池 またはコンピュータに。 Arduinoをコンピューターに接続すると、シリアルモニターを開いて、サーボアクチュエーターの角度と電圧レベルを確認できます。

サーボモーター制御のプログラム:

//---------------Program Developed by R.Girish--------------//
#include
Servo servo_X
Servo servo_Y
int X_angleValue = 0
int Y_angleValue = 0
int X_axis = A0
int Y_axis = A1
int Z_axis = 2
int x = 0
int y = 0
int z = 0
int pos = 0
int check1 = 0
int check2 = 0
int threshold = 10
void setup()
{
Serial.begin(9600)
servo_X.attach(7)
servo_Y.attach(6)
pinMode(X_axis, INPUT)
pinMode(Y_axis, INPUT)
pinMode(Z_axis, INPUT)
digitalWrite(Z_axis, HIGH)
}
void loop()
{
x = analogRead(X_axis)
y = analogRead(Y_axis)
z = digitalRead(Z_axis)
if(z == LOW)
{
Serial.print('Z axis status = ')
Serial.println('Button Pressed')
Serial.println('Sweeping servo actuators')
for (pos = 0 pos <= 180 pos += 1)
{
servo_X.write(pos)
delay(10)
}
for (pos = 180 pos >= 0 pos -= 1)
{
servo_X.write(pos)
delay(15)
}
for (pos = 0 pos <= 180 pos += 1)
{
servo_Y.write(pos)
delay(10)
}
for (pos = 180 pos >= 0 pos -= 1)
{
servo_Y.write(pos)
delay(15)
}
Serial.println('Done!!!')
}
if(x > check1 + threshold || x {
X_angleValue = map(x, 0, 1023, 0, 180)
servo_X.write(X_angleValue)
check1 = x
Serial.print('X axis voltage level = ')
Serial.println(x)
Serial.print('X axis servo motor angle = ')
Serial.print(X_angleValue)
Serial.println(' degree')
Serial.println('------------------------------------------')
}
if(y > check2 + threshold || y {
Y_angleValue = map(y, 0, 1023, 0, 180)
servo_Y.write(Y_angleValue)
check2 = y
Serial.print('Y axis voltage level = ')
Serial.println(y)
Serial.print('Y axis servo motor angle = ')
Serial.print(Y_angleValue)
Serial.println(' degree')
Serial.println('------------------------------------------')
}
}
//---------------Program Developed by R.Girish--------------//

このプロジェクトに関して具体的な質問がある場合は、コメントセクションで自由に表現してください。すぐに返信が届く場合があります。




前:Arduinoを使用したデジタル静電容量計回路 次へ:ArduinoでデジタルポテンショメータMCP41xxを使用する