본문 바로가기

아두이노우노 R4

아두이노 우노 R4 키보드로 컴퓨터 업무 자동화

반응형

 

 

안녕하세요.

 

아두이노 우노 R4로 키보드로 업무를 자동화 할 수 있도록 만들었습니다. 쉽게 말해서 하드웨어 매크로 기능입니다. 아직은 키보드만 구현하고 있는데 나중에는 마우스 움직임도 자동으로 하도록 개발중입니다.

 

응용 분야

 

- 장애인 컴터 업무 이용 지원 - 발이나 기타 도구를 사용해 버튼을 누르면 자동화 이용

- 소프트웨어 이용을 단계별로 나누어 처리하고 사용자가 간섭하는 부분을 최소화

- 소프트웨어로 구현하는 매크로 키보드는 감지가 가능한데 하드웨어 키보드는 감지가 불가능하므로 게임 사이트 작동 지원 ㅎㅎㅎ

 

아래 내용을 잘 보시고 제품 보드를 무료로 받으실 분 있으면 신청해 주세요. 8분 신청하시면 마감 예정입니다.

 

1. 배송은 minima 보드 구매 후 조립하면 12월 20일 정도 예상합니다.

2. 조건은 사용하실 때 키보드, 마우스 이용 코드를 이곳에 올려주시면 됩니다. 사소한 기능 부터 아주 많은 작업들을 실행하는 코드도 올려주시면 됩니다.

3. 사용하시면서 프로그램 코드 공유하시고 마우스 이용 예제등을 제안해 주시면 됩니다.

 

아두이노 Minima 6버튼 키보드 회로와 거버파일

 

아두이노의 최신 버전 Arduino R4 Minima 보드는 HID를 지원합니다. HID(Human Interface Device) 지원 기능이 내장되어 있어 USB Data C-type 케이블을 통해 컴퓨터에 연결하면 마우스나 키보드처럼 동작하는 제품을 개발할 수 있습니다. 이 편리한 기능을 사용하면 키 입력과 마우스 움직임을 컴퓨터로 쉽게 보낼 수 있어 반복작업, 버튼이나 스위치 입력, 마우스 이동이나 드래그와 같은 기능을 쉽게 구현할 수 있습니다.

 

보드의 장점:

 

1. 버튼 6개로 각 버튼의 자동화 코드 실행

2. 리셋 버튼으로 동작 이상시 리셋 실행

3. 키보드 동작시 슬라이드 스위치 ON 상태로 수행

4. 키보드 동작 이상할 경우 OFF 상태로 실행 OFF 기능

 

회로도 - 수정이 필요합니다. Reset 버튼은 Low Enable, 13번 핀이 LED 에 연결되어 있어 11번 핀으로 연결해야 합니다. - 보드에사 제가 수정했습니다. 나중에 PCB 제작시 반영 예정입니다.

 

 

거버 파일은 다운로드 - https://fishpoint.tistory.com/9814

 

 

오늘은 키보드로 두 가지 기능을 구현했습니다.

 

1. 크롬 브라우저에서 이미지를 저장하기 위해서는 "마우스 오른쪽 키를 누르고, 다른 이름으로 저장을 선택한 후에 폴더를 지정하고, 저장 버튼을 클릭하면" 저장합니다. 이 기능을 키보드 하나로 구현합니다.

 

키보드 노랑 버튼

 

 

2. 한글에서 중간에 반복되는 문장을 지우고 나오는 문장을 개요 1번으로 바꾸는 과정을 키보드 하나로 구현 키보드 파랑버튼

 

아래 이미지를

 

 

아래처럼 바꿉니다. 마우스 드래그 한 부분을 지우고 아래 줄을 개요 1번으로 바꿉니다. 만약 개요 1번 줄이 넘어가면 그린 버튼을 한 번 눌러 수정합니다. 코드 참고하세요.

 

 

3. 키보드 문서 작업, 반복 코딩 작업을 키 매핑을 통해 자동화 할 수 있습니다.

 

위 제목이 길어지면 칸을 넘어가는 데 그것을 지우기 위해 그린 버튼 이용

 

보드 사진입니다.

 

시간 내 읽어주셔서 감사합니다.

 

 

예제 코드는 아래와 같습니다. 현재 노랑, 파랑, 그린, 빨강 버튼 누르면 실행하는 코드입니다. 

 

#include "Keyboard.h"
#include "Mouse.h"

// set pin numbers for the five buttons:
// https://fishpoint.tistory.com/9357
// https://creatorjoseph.com/268
// https://docs.arduino.cc/language-reference/en/functions/usb/Keyboard/keyboardModifiers/

const int startlow = 12; 

const int yellow = 3; //SW1
const int blue = 4;    //SW2
const int green = 11;   //SW3
const int red = A3;   //SW1
const int black = A2;   //SW1
const int white = A1;   //SW1


void setup() {  // initialize the buttons' inputs:

  pinMode(startlow, INPUT); //when 12 num pin goes Low, Start!
  pinMode(yellow, INPUT);
  pinMode(blue, INPUT);
  pinMode(green, INPUT);
  pinMode(red, INPUT);
  pinMode(black, INPUT);
  pinMode(white, INPUT);

  Serial.begin(9600);
  
  // initialize mouse control:
  Mouse.begin();
  Keyboard.begin();

  while (digitalRead(startlow) == HIGH) {  // 12번 핀 LOW 입력받을때 시작 High면 정지상태 유지 - 꼭 필요함
    delay(100);
  }

  Serial.println("Auto Keyboard Start");
}

void loop() {
  
  while (digitalRead(startlow) == HIGH) {  // 12번 핀 GND 아니면 동작 안하도록, 반드시 추가
    delay(100);
  }

  //Serial.println("start low");

  if (digitalRead(yellow) == LOW){ //마우스 우클릭 이미지 다른 이름으로 저장 끝

    Serial.println("yellow Button");
    Mouse.click(MOUSE_RIGHT);
    delay(100);
    Keyboard.write('v');
    delay(600);
    Keyboard.press(KEY_LEFT_ALT); // 오른쪽 ALT키를 길게 누릅니다.
    delay(200);
    Keyboard.press('s'); // s 누르기
    //delay(200);
    Keyboard.releaseAll(); // 둘 다 놓기
    //delay(100);
    //Keyboard.releaseAll();
    Serial.println("operate yellow end");
  }

  if (digitalRead(blue) == LOW){ // 한글 드래그 한것 지우고 ctrl-enter, delete, 개요 1적용, 엔터 2번
    Serial.println("blue Button");
    Keyboard.press(KEY_LEFT_CTRL);  //왼쪽 컨트롤 키
    Keyboard.press(KEY_RETURN);
    delay(100);
    Keyboard.releaseAll();
    Keyboard.write(KEY_DELETE);
    //delay(500);
    Keyboard.press(KEY_LEFT_CTRL); //
    Keyboard.press(51);
    Keyboard.releaseAll();
    Keyboard.press(KEY_LEFT_CTRL); //
    Keyboard.press(51);
    Keyboard.releaseAll();
    delay(100);
    Keyboard.write(KEY_KP_1); //숫자 키패드 1 - END 줄 끝으로 간다
    Keyboard.write(KEY_RETURN);
    delay(200);
    Keyboard.write(KEY_RETURN);
    Keyboard.releaseAll();

    Serial.println("operate blue end");
  }
  if (digitalRead(green) == LOW)  // 백스페이스 지우기 세 번
  {  
    Serial.println("green Button");
    Keyboard.write(KEY_BACKSPACE);
    delay(200);
    Keyboard.write(KEY_BACKSPACE);
    delay(200);
    Keyboard.write(KEY_BACKSPACE);
    //delay(500);
    Serial.println("operate green end");
  }
  if (digitalRead(red) == LOW)  // 백스페이스 문자 하나를 지우고 클립보드 내용을 복사 - HTML 코드 수정에 이용
  {  
    Serial.println("red Button");
    Keyboard.write(KEY_BACKSPACE);
    delay(200);
    Keyboard.press(KEY_LEFT_CTRL); // ctrl-v 붙여넣기 과정
    Keyboard.write('v');    
    delay(200);
    Keyboard.releaseAll();
    Serial.println("operate red end");
  }
  if (digitalRead(black) == LOW)  // 한글에서 CTRL-F 찾기, ALT-F 다음 찾기(찾는 단어 변하지 않으니까 가능)
  {
    Serial.println("black Button");  
    Keyboard.press(KEY_LEFT_CTRL); // ctrl-f 찾기
    Keyboard.write('f');    
    delay(100);
    Keyboard.releaseAll();

    Keyboard.press(KEY_LEFT_ALT); // alt-f 다음 찾기
    Keyboard.write('f');
    delay(100);
    Keyboard.releaseAll();
    
    delay(500);
    Serial.println("operate black end");
  }
  if (digitalRead(white) == LOW)  // 구현 예정
  {  
    Serial.println("white Button");
    delay(500);
    Serial.println("operate white end");
  }

}

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^