콘텐츠로 건너뛰기

아두이노 키보드 제어, 아두이노로 커스텀 키보드를 만들기 위한 기초

    들어가며

    이번엔 아두이노로 키보드 제어를 한번 해보려고 합니다. 아두이노를 가지고 키보드 제어를 하는건 간단한 편인데요. 주로 Arduino Leonardo, Arduino Micro, 또는 USB 호환 키보드 라이브러리를 사용할 수 있는 다른 보드를 사용합니다. 이러한 보드들은 USB HID기능을 지원하는 보드로 컴퓨터에 연결한 키보드로 동작을 수행할 수 있죠.

    오늘의 목표

    • 아두이노를 통해 컴퓨터에 키보드 입력 보내기
    • 키보드 라이브러리 기본 사용 방법 익히기

    아두이노 키보드 제어 방법을 익혀 사용한다면 컴퓨터 사용을 더욱 편리하게 만들 수 있습니다. 반복 적인 키 입력을 자동화 하거나, 복잡한 단축키를 버튼 하나로 입력 하는 등 다양한 곳에 활용할 수 있습니다. 아두이노를 통해 내가 원하는 커스텀 키보드를 만들어 낼수도 있죠.

    그럼 아두이노를 통해 키보드를 제어하고 반복 동작이나 단축키를 눌러주는 매크로를 작성하는 방법까지 간단하게 알아 볼게요.

    준비물

    • 아두이노 Leonardo 또는 아두이노 Pro Micro (USB HID를 지원하는 보드들)
    • 아두이노 IDE
    • 기본적인 아두이노 IDE사용방법과 프로그래밍 지식

    아두이노 설치와 IDE 사용 기초 알아보기

    키보드 제어와 매크로 작성을 하고싶은 분이라면 아래 페이지에 정리된 자료들이 도움이 될 수도 있겠습니다.

    아두이노 키보드 매크로를 만들기위한 자료들 모음

    필요 라이브러리

    ‘Keyboard.h’를 사용할 거에요. 이 라이브러리는 아두이노 IDE에 기본적으로 포함되어 있습니다. 따로 설치 할 필요는 없어요.

    기본 예제

    예제코드:

    #include <Keyboard.h>
    
    void setup() {
      Keyboard.begin();  // 키보드 라이브러리 초기화
    }
    
    void loop() {
      Keyboard.print("Hello");  // "Hello" 입력
      delay(1000);  // 1초 대기
    }

    코드 설명:

    • Setup 함수에서 키보드 기능을 초기화 해 줍니다.
    • 그 후 Loop함수에서 주기적으로 “Hello”문자열을 입력하는 코드를 작성했습니다.
    • 코드를 업로드 하면 컴퓨터에 매 1초마다 “Hello”라는 문자열이 입력되는걸 확인할 수 있습니다.
    • 업로드 USB를 통해 키보드 신호를 보냅니다. 제대로 작동하지 않는다면 USB연결 상태를 확인 해 주세요.

    아두이노 키보드 제어 활용하기

    키보드 제어를 하는방법을 알았으니 이제 활용하는 일만 남았습니다.

    특정 문자열만 입력하는 것이 아닌 여러 키 조합을 이용해 단축키 키보드를 만들어 활용하거나, 반복적으로 해야 하는 키보드 작업을 자동화할 수도 있을 것 같고요, 센서 등과 연동하면 특정 상황에 특정 키가 자동으로 입력되는 기능을 사용해 볼 수도 있겠죠.

    하지만 이러한 기능을 기본 예제만 배워 가지고 만들 수는 없습니다. 활용을 위한 예제도 한번 볼까요?

    매크로를 위한 응용 예제

    자주 사용하는 키 입력 함수들

    위에선 문자열 입력을 위해 키보드 프린트 함수를 사용해 문자열을 입력하는 방법에 대해 알아보았습니다.

    하지만, 실제 반복 작업을 구현해 내거나, 단축키 등을 입력하기 위해서는 위의 함수보단 단일키 입력을 사용하는 방법이 좋겠죠. 실제로 키보드 제어를 하며 주로 사용하는 함수들은 아래와 같습니다.

    • press: 특정 키를 누르고 있는 상태를 유지합니다.
    • release: 특정 키를 누르고 있는 상태에서 손을 떼는 것과 같은 효과를 줍니다.
    • write: 특정 키를 누르고 바로 손을 떼는 것과 같은 효과를 줍니다.

    좀 더 알고 싶으신 분들은 아두이노 공식 문서를 참고해 주세요

    예제 코드:

    #include <Keyboard.h>
    
    void setup() {
      Keyboard.begin();  // 키보드 라이브러리 초기화
    }
    
    void loop() {
      // 'Hello, World!' 문자열 입력
      Keyboard.print("Hello, World!");
      delay(2000);  // 2초 대기
    
      // 특정 키 입력 예제
      Keyboard.press(KEY_LEFT_CTRL);  // Ctrl 키 누르기
      delay(100);  // 0.1초 대기
      Keyboard.release(KEY_LEFT_CTRL);  // Ctrl 키 떼기
      delay(2000);  // 2초 대기
    
      // 'write' 함수 사용 예제 (문자 'A' 입력)
      Keyboard.write('A');
      delay(2000);  // 2초 대기
    }

    작업 관리자를 호출하는 단축키

    • Windows 작업 관리자 호출: Ctrl + Shift + Esc 키 조합을 사용합니다.

    예제 코드:

    #include <Keyboard.h>
    
    void setup() {
      Keyboard.begin();  // 키보드 라이브러리 초기화
    }
    
    void loop() {
      // Ctrl + Shift + Esc 키 조합으로 작업 관리자 호출
      delay(10000);  // 10초 대기 (작업 관리자가 열리는 것을 확인하기 위해)
      Keyboard.press(KEY_LEFT_CTRL);
      Keyboard.press(KEY_LEFT_SHIFT);
      Keyboard.press(KEY_ESC);
      delay(100);  // 키 입력이 인식되도록 잠시 대기
      Keyboard.releaseAll();  // 모든 키 떼기
    }

    저는 작업 관리자를 호출하는 코드를 작성 해 보았습니다. 여기에 버튼을 추가하고 버튼 입력 시 작업 관리자를 호출하도록 하면 단축키 키보드가 완성 되는거죠. 주로 사용하는 단축 키들을 모아 단축키 키보드를 만드는데 활용할 수 있을 거에요.

    주의점

    • 키보드 제어 기능은 USB HID 기능을 지원하는 아두이노 보드에서만 사용할 수 있어요.
    • 키보드 제어는 잘못 사용하면 컴퓨터에 예기치 않은 동작을 유발할 수 있으므로 주의해서 사용해야 합니다.
    • 오류 발생 시 아두이노 연결을 해제하면 대부분 상황은 종료 되겠지만, 안정적으로 사용하고 싶다면 항상 Keyboard.end() 함수를 사용하여 키보드 제어를 종료하는 코드를 포함하는 것이 좋아요.
    void loop() {
      buttonState = digitalRead(buttonPin);
    
      if (buttonState == HIGH) {
        Keyboard.print("Hello");
        delay(1000);
      }
    
      // 기타 조건에 따라 키보드 제어를 종료
      if (/* 특정 조건 */) {
        Keyboard.end();
      }
    }
    

    마무리

    아두이노를 사용하여 컴퓨터 키보드를 제어하는 방법을 배워 봤습니다. 주기적으로 키 입력을 자동화하는 기능을 구현함으로써 반복작업을 기계에게 맡기고 좀더 쾌적한 작업환경을 만들 수 있겠네요. 이제 여러 가지 응용 예제를 통해 더욱 복잡한 프로젝트로 발전시켜보세요. 여러분의 상상력이 더해진다면 무궁무진한 가능성이 열릴 것입니다! 행복한 코딩 되세요!