조이스틱을 사용하여 서보 모터를 제어하는 ​​방법

문제를 제거하기 위해 도구를 사용해보십시오





이 게시물에서는 조이스틱과 Arduino를 사용하여 서보 모터를 제어하는 ​​방법을 배웁니다. 조이스틱, 핀, 구조 및 작동에 대한 개요를 볼 것입니다. 서보 모터 제어의 기반이 될 조이스틱에서 유용한 데이터를 추출해 보겠습니다.

소개

이 기사의 모토는 서보 모터 제어 그러나 사용 방법을 배우려면 제어용 조이스틱 다른 많은 주변 장치.



이제 조이스틱을 살펴 보겠습니다.

조이스틱은 X 축과 Y 축에서 여러 방향으로 움직일 수있는 레버로 구성된 입력 장치입니다. 레버의 움직임은 모터 또는 주변 전자 장치를 제어하는 ​​데 사용됩니다.



조이스틱은 RC 장난감에서 Boing 비행기까지 사용되며 유사한 기능을 수행합니다. 또한 게임 및 작은 조이스틱에는 많은 유용한 작업을 수행하도록 프로그래밍 할 수있는 Z 축에 푸시 버튼이 있습니다.

조이스틱 그림 :

조이스틱 그림 :

조이스틱은 일반적으로 전자 장치이므로 전원을 공급해야합니다. 레버를 움직이면 출력 핀에서 전압 차이가 발생합니다. 전압 레벨은 마이크로 컨트롤러에 의해 처리되어 모터와 같은 출력 장치를 제어합니다.

그림에 나와있는 조이스틱은 PlayStation 및 Xbox 컨트롤러에서 찾을 수있는 유사한 조이스틱입니다. 하나를 구하기 위해이 컨트롤러를 부술 필요가 없습니다. 이러한 모듈은 지역 전자 상점 및 전자 상거래 사이트에서 쉽게 구할 수 있습니다.

이제이 조이스틱의 구조를 살펴 보겠습니다.

그것은 2 개의 10 Kilo ohm이 있습니다 전위차계 스프링이있는 X 및 Y 축에 위치하므로 사용자가 레버에서 힘을 놓으면 원래 위치로 돌아갑니다. Z 축에서 ON 버튼을 누릅니다.

5 핀, 5V 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의 정확한 절반이 아님을 알 수 있습니다.

지금 쯤이면 조이스틱에 대한 기술적 지식을 얻었을 것입니다.

이제 하나의 조이스틱을 사용하여 두 개의 서보 모터를 제어하는 ​​방법을 살펴 보겠습니다.

회로도 :

두 개의 서보 모터는 X 축을 따라 조이스틱을 움직일 때 하나의 조이스틱에 의해 제어됩니다. 핀 # 7에 연결된 서보는 레버 위치에 따라 시계 방향과 반 시계 방향으로 움직입니다.

특정 위치에서 조이스틱 수준을 유지하면 서보 액추에이터를 특정 위치에 유지할 수도 있습니다.

6 번 핀에 연결된 서보 모터와 마찬가지로 Y 축을 따라 레버를 움직일 수 있습니다.

Z 축을 따라 레버를 누르면 두 모터가 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 사용