산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 조이스틱 제어 마우스: 정밀 커서 네비게이션

부품 및 소모품

부품수량
Arduino UNO1
듀얼 축 조이스틱1

앱 및 온라인 서비스

프로젝트 소개

마우스나 트랙패드 대신 조이스틱으로 컴퓨터 커서를 제어하는 프로젝트입니다. 조이스틱은 X, Y축으로 커서를 움직일 수 있으며, 내장된 스위치로 클릭 기능도 수행합니다.

기본 원리

조이스틱은 기본적으로 X, Y 방향으로 배치된 두 개의 가변저항(포텐쇼미터)으로 구성됩니다. 아두이노는 조이스틱에서 0~1023 범위의 아날로그 값을 읽습니다. 조이스틱이 중앙(기본 위치)에 있을 때 값은 512(0~1023 사이) 부근이 됩니다.

아두이노 스케치는 조이스틱이 중앙에서 벗어나면 -감도 ~ +감도 범위(기본값 10)의 값을 출력하도록 프로그래밍되어 있습니다. 극단으로 밀면 10, 반대쪽이면 -10이 출력됩니다.

X, Y 방향 값을 구분하기 위해 : 구분자를 사용합니다. 예: 5:-3:0 (X=5, Y=-3, 스위치=0). 조이스틱 버튼(SW) 상태(1/0)는 X, Y 값 뒤에 출력됩니다.

컴퓨터가 이 값을 인식하려면 Python의 mouse 모듈(구 pyautogui)이 필요합니다.

Python 프로그래밍

준비 사항: Python 3가 설치되어 있어야 합니다. 설치 후 Python 실행 파일 경로를 복사해 두세요.

명령 프롬프트에서 실행:

  1. cd <Python 파일 경로>
  2. py -m pip install --upgrade pip
  3. py -m pip install mouse
  4. py -m pip install pyserial

mouse 모듈은 마우스 동작을, pyserial은 아두이노와 시리얼 통신을 담당합니다.

Python 프로그램은 아두이노가 출력한 데이터를 읽어 X, Y 방향 값과 스위치 상태를 파싱합니다. 현재 커서 좌표는 mouse.get_position()으로 얻고, 조이스틱 이동량만큼 더해 mouse.move(X+x, Y+y)로 커서를 이동시킵니다. 스위치가 눌리면(z == 1) mouse.click(button="left")로 좌클릭을 수행합니다.

최종 실행

  1. 아두이노 스케치를 업로드하고 회로도대로 조이스틱을 연결합니다.
  2. Python 스케치를 메모장에 복사해 ArduinoSerial = serial.Serial('COM3', 9600) 부분의 COM 포트를 장치 관리자에서 확인한 아두이노 포트로 수정 후 .py로 저장합니다.
  3. IDLE(Python GUI)에서 파일을 열고 Run → Run Module(F5)을 실행합니다.
  4. 오류가 없으면 조이스틱을 움직여 커서가 따라오는지 확인합니다. 오류 시 IDLE 재시작 후 COM 포트 재확인하세요.

코드

아두이노 코드

//////////////////////////////////
// Joystick controlled mouse
// by Shubham Santosh
/////////////////////////////////
void setup() {
  Serial.begin(9600);
  pinMode(9, INPUT); // SW 핀
  digitalWrite(9, HIGH);
}
int prev_state = 0; // 스위치 이전 상태
void loop() {
  int z = 0, xpos = 0, ypos = 0;
  int x = analogRead(A0);
  int y = analogRead(A1);
  int sensitivity = 10; // 편의에 따라 조절
  if (x >= 550) xpos = map(x, 550, 1023, 0, sensitivity);      // 위
  if (x <= 450) xpos = map(x, 450, 0, 0, -sensitivity);        // 아래
  if (y >= 550) ypos = map(y, 550, 1023, 0, sensitivity);      // 오른쪽
  if (y <= 450) ypos = map(y, 450, 0, 0, -sensitivity);        // 왼쪽
  int curr_state = digitalRead(9);
  if (curr_state == 1 && prev_state == 0) z = 1; // 스위치 눌림 감지
  else z = 0;
  if (xpos != 0 || ypos != 0 || z == 1) {
    Serial.print(xpos); Serial.print(":");
    Serial.print(ypos); Serial.print(":");
    Serial.println(z);
  }
  prev_state = curr_state;
  delay(10);
}

Python 코드

# Joystick controlled mouse
# By Shubham Santosh
# last edited 12/11/2020
import mouse, sys, time, serial
mouse.FAILSAFE = False
ArduinoSerial = serial.Serial('COM3', 9600) # 올바른 COM 포트 지정
time.sleep(1)
while True:
    data = str(ArduinoSerial.readline().decode('ascii'))
    x, y, z = data.split(":")
    X, Y = mouse.get_position()
    x, y = int(x), int(y)
    mouse.move(X + x, Y - y) # Y축 반전 주의
    if '1' in z:
        mouse.click(button="left")

회로도

조이스틱 VCC → 5V, GND → GND, VRx → A0, VRy → A1, SW → D9 (풀업 저항 내부 사용)

제조공정

  1. 컴퓨터 마우스의 진화: 설계, 제조, 미래 트렌드
  2. 온도 제어 팬: 미디어 가구 냉각용 DIY 릴레이 시스템
  3. 라즈베리 파이 제어 아쿠아포닉스 시스템: 빌드 가이드 & 코드
  4. 라즈베리파이, PIR 센서, MQTT로 만드는 모션 제어 AWS IoT 버튼
  5. 블루투스 제어 라즈베리 파이 로봇 만들기 - 오디오 피드백 포함
  6. 파이썬으로 와이파이 제어 라즈베리파이 로봇 만들기 – 단계별 가이드
  7. 알렉사 제어 ARDrone 2.0 데모: 라즈베리파이 & 홀로그램 노바로 음성 제어 드론
  8. 낡은 RC카를 아두이노와 엑스박스 컨트롤러로 조종하는 차량으로 개조하기
  9. 아두이노 조이스틱 인터랙티브 게임 - LED 피드백으로 방향 감지
  10. FeNi42 합금: 정밀 씰용 저열팽창 소재