본문 바로가기

Unity

Unity로 아두이노 시리얼 통신하기 - Arduino에 코드 업로드하기

Unity로 UI를 만들어서 Arduino랑 시리얼 통신을 하여 서보모터를 가동시켜보려고 합니다.

본 시리즈는 5편으로 작성될 예정이며 아래 링크로 바로 찾아볼 수 있습니다.

1. Unity로 아두이노 시리얼 통신하기 - 에셋 설치하기

2. Unity로 아두이노 시리얼 통신하기 - UI 생성하기

3. Unity로 아두이노 시리얼 통신하기 - ArduinoSerial 사용 전 설정

4. Unity로 아두이노 시리얼 통신하기 - Arduino에 코드 업로드하기

5. Unity로 아두이노 시리얼 통신하기 - Unity UI에서 아두이노 시리얼통신


Unity에서 아두이노와 시리얼 통신을 하여 서보모터를 조절하기 위해선 우선 아두이노에게 시리얼통신이 가능하도록 코드를 설정하여 업로드 해주어야 합니다.

 

Arduino IDE 설치

아두이노에 코드를 업로드 하기 위해 Arduino IDE를 설치해야합니다. 아래 글을 참고하여 설치를 진행해주세요.

 

Arduino Uno와 연결하기

본 프로젝트는 Arduino Uno를 기본 조건으로 진행합니다.

Arduino IDE를 켜 놓은 채 Uno를 USB 케이블로 연결해주세요.

연결 한 후 상단의 Select Board를 클릭하면 보드와 연결된 포트가 같이 나오게 됩니다. 이를 클릭하여 보드 및 포트 설정을 진행해주세요.

※ 만일 감지되지 않는경우, Tools - Board - Arduino AVR Boards 에서 Arduino Uno를, Ports에서 연결된 포트를 선택해주세요.

 

Arduino IDE에 코드 작성하기

아래 코드를 복사해서 사용해봅시다.

#include <Servo.h>

const int servoPins[] = {9, 10, 11};  // 사용할 서보 핀 번호
const int servoCount = sizeof(servoPins) / sizeof(servoPins[0]);

Servo servos[servoCount];

void setup() {
  Serial.begin(9600);
  // 미리 attach
  for (int i = 0; i < servoCount; i++) {
    servos[i].attach(servoPins[i]);
  }
}

void loop() {
  if (Serial.available()) {
    String cmd = Serial.readStringUntil('\n');
    cmd.trim();
    if (cmd.startsWith("S:")) {
      int idx = cmd.indexOf(':', 2);
      int pin = cmd.substring(2, idx).toInt();
      float ang = cmd.substring(idx + 1).toFloat();
      // pin 배열에서 해당 인덱스 찾아서 write
      for (int i = 0; i < servoCount; i++) {
        if (servoPins[i] == pin) {
          servos[i].write(constrain(ang, 0, 180));
          break;
        }
      }
    }
  }
}

코드 수정하기

위의 코드는 연결한 모터에 따라 수정이 필요합니다.

const int servoPins[] = {9, 10, 11};

이 부분에서 실제로 연결된 서보모터의 핀 번호만을 사용합니다.

여기서는 9번 핀에 연결된 한 개의 모터만 가동시켜보기 위해 코드를 다음과 같이 수정하겠습니다.

const int servoPins[] = {9};

코드를 수정했으면 왼쪽 상단의 체크 버튼을 눌러 컴파일하여 오류가 있는지 확인해봅시다.

코드 업로드 후 시리얼 통신 테스트 해보기

오류가 없다면 왼쪽 상단의 화살표 버튼으로 코드를 업로드하여 아두이노에 넣어주세요.

이제 IDE에서 직접 시리얼 통신하여 9번 핀에 연결된 서보모터를 작동시켜 봅시다.

먼저 오른쪽 상단의 돋보기 버튼으로 시리얼 모니터를 열어주세요.

유니티에서 서보모터를 가동시키고자 UI를 조절하면 아두이노에 아래와 같은 형태의 문자열을 보내게 됩니다.

S:9:30

여기서 S는 서보모터, 9는 9번 핀, 30은 각도가 됩니다.

이러한 형식으로 시리얼 모니터에 입력해봅시다.

이러한 형식으로 기입 후 엔터를 누르면 9번 핀에 연결된 모터가 움직이게 됩니다.


이제 시리얼 통신 설정까지 마쳤습니다.

마지막으로 Unity에서 UI를 통해 서보모터를 시리얼통신으로 가동시켜 보겠습니다.