2016년 7월 1일 금요일

DigitalOutput 응용

DigitalOutput의 대표적 응용 사례는 바로 LED 제어입니다.

LED는 Digital상태의 0V, 5V로 On, Off 제어를 할 수 있습니다.
아두이노에서 LED회로를 꾸미는 방법은 구글 검색 등으로 쉽게 찾을 수 있고, ARDUnity 에셋내에도 Users Guide 문서에 회로도가 포함되어 있습니다.

위 회로는 아두이노 Digital 핀이 (+)극 역할을 합니다. Digital 핀을 0V, 5V상태로 바꾸는 것이 회로에 전압이 인가되느냐 되지 않느냐로 제어할 수 있기에 LED가 On되거나 Off되는 것입니다.
LED는 핀에 극성이 존재하므로 다리 길이가 긴 쪽이 (+)극이 되도록 연결해야 합니다.
한가지 궁금한 점은 바로 저항이라는 부품의 용도일 것입니다.
저항(Resistor)의 역할은 회로에 흐르는 전류의 크기를 조절하는 것입니다.

LED는 5V인가 시 전류는 약 20mA 이내로 흘러야 망가지지 않습니다. 이 전류 크기를 제어하기 위해 저항을 사용합니다.
저항 크기의 단위는 옴(Ω)이며, 색깔 띠로 그 크기를 표현합니다.
사실, 전자 회로에서 가장 기초적이면서 필수적인 공식은 바로 옴의 법칙입니다.

이 공식에 의해서 R = V / I = 5 / 0.02 = 250Ω 이 계산될 수 있습니다. 즉, LED는 250Ω 보다 큰 저항을 사용하면 된다는 것을 알 수 있습니다.
대부분의 아두이노 회로는 이미 전자 회로 전문가에 의해서 검증되었으므로 골치 아프게 위와 같은 계산을 하지 않아도 됩니다.
하지만, 자신만의 독창적인 회로를 꾸밀 경우 전자 회로 이론에 따른 검증이 필요합니다.

회로를 구현한 후, 아두니티 Wire Editor 작성을 하고 아두이노 스케치를 업로드한다면 유니티에서 LED를 제어할 수 있게 됩니다.
유니티에서 LED를 재미있게 제어할 수 있는 방법을 연구하는 것은 여러분의 몫입니다.
우선은 가장 간단하게 생각해볼 수 있는 방법들을 소개하겠습니다.

UI 버튼으로 LED 제어
ButtonReactor는 바로 이 아이디어를 프로그래밍없이 바로 적용해볼 수 있는 컴포넌트입니다.


ButtonReactor는 반드시 UI Button에만 추가될 수 있으니 먼저, Scene에 UI Button을 만들어야 합니다.
ButtonReactor는 Click뿐 아니라 Down 및 Up 이벤트까지 알아낼 수 있습니다.
ButtonReactor와 DigitalOutput을 다음과 같이 연결하면 UI 버튼이 눌릴때마다 LED가 제어됩니다.



Light Intensity로 LED 제어
Light 컴포넌트의 Intensity 값으로 LED를 제어하는 방법을 생각할 수 있습니다.
이와 같은 역할을 하는 것은 바로 LightIntensityReactor입니다.


LightIntensityReactor는 반드시 Light 컴포넌트가 있어야 추가됩니다. 이것의 기능은 Light의 Intensity값을 Controller에 전달하는 역할입니다. Digital/Analog 방식을 모두 지원하며 Digital 방식으로 사용할 때는 TRUE/FALSE의 기준이 되는 Cutoff 값을 정해줘야 합니다.

LightIntensityReactor를 DigitalOutput에 연결한다면 다음과 같이 됩니다.



Trigger 이벤트로 LED 제어
유니티의 Trigger 이벤트를 이용해서 LED를 제어한다면 더 재미있는 효과를 낼 수 있습니다.
우선, Scene에 RigidBody와 Collider를 이용해서 Trigger 이벤트를 발생시킬 수 있도록 준비합니다.
Trigger 이벤트에 따라 DigitalOutput을 제어할 수 있는 역할을 하는 것은 바로 ColliderReactor입니다.


ColliderReactor는 반드시 Collider가 있어야 추가됩니다.
이것의 기능은 Collider에서 발생하는 이벤트를 받아서 Controller에 전달하는 역할입니다. Trigger와 Collision 이벤트를 모두 받을 수 있습니다.
ColliderReactor와 DigitalOutput을 연결한다면 다음과 같습니다.


이 밖에도 응용 방법은 유니티에서 매우 많을 것이고, 하드웨어 또한 LED말고도 Digital로 제어할 수 있는 어떤 부품이라도 사용 가능합니다.



댓글 4개:

  1. 처음 포스팅부터 주욱 따라해봤습니다.^^
    좋은 강좌 잘 봤습니다.
    감사합니다.

    답글삭제
  2. 아두이노에서 각도를 조절하면 유니티에서도 적용되는 방법도 있나요?

    답글삭제
    답글
    1. 아마 IMU센서(기울기 센서)를 이용한 유니티 제어를 말씀하시는 것 같습니다.
      그것은 이미 구현되어있고, MPUSeries란 이름으로 ARDUnity Deluxe버전에 포함되어있습니다.
      제가 근래에 좀 바뻐서 포스트를 못 올리고 있는데, 빨리 작성하여 궁금해하시는 내용까지 진도를 나가겠습니다.^^

      삭제