중급⏱ 예상 시간: 45분📝 4단계

조이스틱 서보 제어기

조이스틱으로 2개의 서보모터를 X, Y축으로 제어하는 팬-틸트 장치를 만듭니다.

🧩 필요한 모듈

Arduino Uno
브레드보드
조이스틱 모듈
점퍼 와이어
서보모터 (SG90)

📖 단계별 설명서

📝

1단계준비물 확인

다음 부품들을 준비해주세요:

  • Arduino Uno 1개
  • 브레드보드 1개
  • 점퍼 와이어 10개
  • 조이스틱 모듈 1개
  • 서보모터 (SG90) 2개

💡 팁: 서보모터 2개가 서로 직각으로 움직이도록 부착하면 팬-틸트 마운트가 됩니다.

📝

2단계회로 연결하기

  1. 조이스틱의 VRx를 A0, VRy를 A1에 연결합니다.
  2. 조이스틱의 SW(버튼)를 D7에 연결합니다.
  3. 조이스틱의 +5V와 GND를 연결합니다.
  4. 서보모터 1번(수평)의 신호선을 D9에 연결합니다.
  5. 서보모터 2번(수직)의 신호선을 D10에 연결합니다.
  6. 두 서보모터의 전원을 5V와 GND에 연결합니다.

📐 회로도

회로도 이미지

/images/projects/joystick-servo-circuit.png

📝

3단계코드 작성하기

조이스틱의 아날로그 값을 서보모터 각도로 변환합니다. 버튼을 누르면 중앙으로 복귀합니다.

code.ino
#include <Servo.h>

Servo servoX;
Servo servoY;

const int JOY_X = A0;
const int JOY_Y = A1;
const int JOY_BTN = 7;

int angleX = 90;
int angleY = 90;

void setup() {
  servoX.attach(9);
  servoY.attach(10);
  pinMode(JOY_BTN, INPUT_PULLUP);
  servoX.write(angleX);
  servoY.write(angleY);
  Serial.begin(9600);
  Serial.println("조이스틱 서보 제어 시작!");
}

void loop() {
  int xVal = analogRead(JOY_X);
  int yVal = analogRead(JOY_Y);
  
  // 조이스틱 값을 각도로 변환
  angleX = map(xVal, 0, 1023, 0, 180);
  angleY = map(yVal, 0, 1023, 0, 180);
  
  // 버튼 누르면 중앙으로
  if (digitalRead(JOY_BTN) == LOW) {
    angleX = 90;
    angleY = 90;
    tone(8, 1000, 100);
  }
  
  servoX.write(angleX);
  servoY.write(angleY);
  
  Serial.print("X: "); Serial.print(angleX);
  Serial.print(" Y: "); Serial.println(angleY);
  
  delay(15);
}
+27 줄 더 보기

💡 팁: map() 함수로 입력 범위를 출력 범위로 쉽게 변환할 수 있습니다.

📝

4단계업로드 및 테스트

  1. 코드를 업로드합니다.
  2. 조이스틱을 상하좌우로 움직여보세요.
  3. 서보모터가 조이스틱 방향을 따라 움직입니다!
  4. 조이스틱 버튼을 누르면 90도(중앙)로 복귀합니다.

💡 팁: 스마트폰 거치대를 서보모터에 붙이면 조이스틱으로 카메라 방향을 조절할 수 있어요.

🎉

축하합니다!

"조이스틱 서보 제어기" 프로젝트를 완성했습니다!