중급⏱ 예상 시간: 45분📝 4단계
조이스틱 서보 제어기
조이스틱으로 2개의 서보모터를 X, Y축으로 제어하는 팬-틸트 장치를 만듭니다.
🧩 필요한 모듈
Arduino Uno
브레드보드
조이스틱 모듈
점퍼 와이어
서보모터 (SG90)
📖 단계별 설명서
1단계준비물 확인
다음 부품들을 준비해주세요:
- Arduino Uno 1개
- 브레드보드 1개
- 점퍼 와이어 10개
- 조이스틱 모듈 1개
- 서보모터 (SG90) 2개
💡 팁: 서보모터 2개가 서로 직각으로 움직이도록 부착하면 팬-틸트 마운트가 됩니다.
2단계회로 연결하기
- 조이스틱의 VRx를 A0, VRy를 A1에 연결합니다.
- 조이스틱의 SW(버튼)를 D7에 연결합니다.
- 조이스틱의 +5V와 GND를 연결합니다.
- 서보모터 1번(수평)의 신호선을 D9에 연결합니다.
- 서보모터 2번(수직)의 신호선을 D10에 연결합니다.
- 두 서보모터의 전원을 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단계업로드 및 테스트
- 코드를 업로드합니다.
- 조이스틱을 상하좌우로 움직여보세요.
- 서보모터가 조이스틱 방향을 따라 움직입니다!
- 조이스틱 버튼을 누르면 90도(중앙)로 복귀합니다.
💡 팁: 스마트폰 거치대를 서보모터에 붙이면 조이스틱으로 카메라 방향을 조절할 수 있어요.