본문 바로가기
아두이노/제품 검사 센서

#5 기획 및 검토 - 아두이노 Micro

by songbum 2023. 6. 3.

제품에 대한 추가 요구사항을 받는 바람에, 몇가지 기능을 업그레이하게 됐다.

 

레이저 각인 기계는 USB 로 연결된 제어용 PC 의 키보드 엔터키를 눌러서 각인 작업을 시작하게 된다.  내가 만드는 제품 검사 센서가 단순히 오류 여부만 알려주는게 아니라, 오류가 나면 키보드 엔터키를 눌러도 각인 작업이 시작되지 않게 해야 한다.  

 

아두이노 보드를 제어용 PC 와 USB 케이블로 연결해 놓고, 아두이노 쪽의 스위치를 누르면 USB 케이블을 통해 제어용 PC 에 엔터키 신호를 보내도록 하드웨어를 구성하면 될 거 같다.  그리고 포토 인터럽터 센서 두 곳에 모두 물체가 감지되는 "PASS" 상태에서만 신호를 보내게 하고, 그 외의 경우에는 스위치를 눌러도 엔터키 신호를 보내지 않도록 프로그램을 작성하려고 한다.

 

아두이노 보드를 "가상 키보드" 로 사용하는 것으로, 키보드 관련 기능은 Keyboard.h 라이브러리를 사용한다.  아두이노 IDE 에 이미 기본 설치돼 있기 때문에 추가로 라이브러리를 설치할 필요 없이 바로 코딩에 들어갔다.

#include <Keyboard.h>

void setup() {
  Serial.begin(9600);

  Keyboard.begin();

  Serial.println("START");

  Keyboard.println("Touch");
}

void loop() {
}

 

컴파일 과정에서 다음과 같은 오류가 나온다.

 

인터넷을 검색해보니 아두이노 Uno 나 Nano 보드는 키보드 신호를 출력할 수 없고, Micro 보드를 사용해야 한다고 한다.

Micro 보드는 Nano 보다 조금 더 작고, 컴퓨터와 연결하는 USB 포트가 C 타입이다.

 

아두이노 IDE 에서 보드 설정을 Micro 로 변경하여 아래의 프로그램을 업로드했는데, 오류가 나오고 Serial Monitor 에 결과 값이 아무 것도 나오지 않았다.

 

인터넷을 검색해보니 위 오류는 단순 경고 표시일 뿐이고, 프로그램은 정상 작동하고 있으므로 무시하면 된다고 한다.  Output 창에 붉은 색 메세지가 나오는게 거슬린다면 verbose 옵션을 끄는 방법이 있다고 하는데, 다른 중요한 오류 메세지를 못 보게 되니 추천할 방법은 아닌거 같다.  저 오류 메세지는 익숙해지고 무시하는 게 좋을 거 같다.

 

프로그램이 정상 작동중인데 왜 Serial Monitor 에 메세지가 안 나오는 것인가.  인터넷을 검색해보니 Micro 보드에서는 Serial 함수로 출력 시 다음과 같은 코드를 삽입해야 한다고 한다.  정확한 이유는 모르겠지만, 아마도 Micro 보드가 Serial 포트를 활성화 시키는데 시간이 필요해서 딜레이를 주는 것 같다.

#include <Keyboard.h>

void setup() {
  Serial.begin(9600);
  while(!Serial && millis()<5000) {
  }

  Keyboard.begin();
 
  Serial.println("START");

  Keyboard.println("Touch");
}

void loop() {
}

 

다시 프로그램을 업로드하니 Serial Monitor 에 값이 잘 출력된다.

엔터키 신호가 잘 들어오는지 확인하기 위해, 위 프로그램을 업로드한 직후 컴퓨터의 마우스를 메모장 위에 클릭해 커서를 옮겨 놓았다.  Serial Monitor 에 "START" 문자열이 출력됨과 동시에 커서가 올라가 있는 메모장에 "Touch" 라는 문자열이 출력되는 것을 확인할 수 있었다.