この投稿では、ジョイスティックとArduinoを使用してサーボモーターを制御する方法を学習します。ジョイスティック、そのピン、その構造と動作についての概要を見ていきます。サーボモータ制御のベースとなるジョイスティックから有用なデータを抽出します。
前書き
この記事のモットーは サーボモーターを制御する しかし、使用方法を学ぶために 制御するためのジョイスティック 他の多くの周辺機器。
それでは、ジョイスティックを見てみましょう。
ジョイスティックは、X軸とY軸で複数の方向に移動できるレバーで構成される入力デバイスです。レバーの動きは、モーターや周辺機器の電子機器を制御するために使用されます。
ジョイスティックは、RCおもちゃからボーイング飛行機まで使用され、同様の機能を実行します。さらに、ゲームや小さなジョイスティックには、Z軸にプッシュボタンがあり、多くの便利なアクションを実行するようにプログラムできます。
“12VACから5VDC ”
ジョイスティックのイラスト:
ジョイスティックは一般的に電子機器であるため、電力を供給する必要があります。レバーを動かすと、出力ピンに電圧差が生じます。電圧レベルは、モーターなどの出力デバイスを制御するためにマイクロコントローラーによって処理されます。
図のジョイスティックは、PlayStationおよびXboxコントローラーにある同様のジョイスティックです。これらのコントローラーを壊して救助する必要はありません。これらのモジュールは、地元の電気店やEコマースサイトですぐに入手できます。
それでは、このジョイスティックの構造を見てみましょう。
それは2つの10キロオームを持っています ポテンショメータ X軸とY軸にバネで配置されているため、ユーザーがレバーから力を離すと元の位置に戻ります。 Z軸にプッシュオンボタンがあります。
5つのピン、5ボルトのVcc、GND、変数X、変数Y、およびSW(Z軸スイッチ)があります。電圧を印加し、ジョイスティックを元のレバー位置のままにしたとき。 XピンとYピンは印加電圧の半分を生成します。
レバーを動かすと、X出力ピンとY出力ピンの電圧が変化します。それでは、ジョイスティックを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を使用する