2016년 8월 1일 월요일

가변 저항 제어

가변 저항은 포텐셔미터(Potentiometer)라고도 불리며 회전 정보를 Analog 입력으로 받을 수 있는 부품입니다.

아주 다양한 모양을 가지고 있으며, 가장 흔하게 사용되는 곳은 오디오 볼륨 조절입니다.

하지만, 가변 저항은 오디오 볼륨 뿐 아니라 서보 모터(회전각으로 제어되는 모터), 핸들 등 회전의 정도를 측정할 경우 손쉽게 정보를 얻을 수 있습니다.
가변 저항의 원리는 회전각에 따라 저항 값이 달라져서 측정되는 전압이 달라지는 것입니다.

이 원리를 이해하려면 전압 분배 회로(Voltage Divider)에 대해 알아야 합니다.

전자 회로의 기본은 옴(Ohm)의 법칙입니다. 옴의 법칙은 전압과 전류, 저항과의 관계를 식으로 만든 것으로 회로 해석에 있어서 가장 기본입니다.

이 법칙에 근거하여 전압 분배 회로의 저항 R1과 R2에는 서로 다른 전류가 흐르게되고, 이에 따라 전압도 다르게 인가됩니다. 가변 저항은 사실 저항 값이 달라지는 것이 아니라 R1과 R2의 크기가 달라지는 것으로 그림에서와 같이 R2의 전압을 측정하면 가변 저항 손잡이의 회전에 따라 달라지는 효과가 나타납니다.
아두이노의 ADC 핀에 의해 이 측정된 전압은 숫자로 표현되고, 이 숫자를 해석하여 회전 정도를 알아내는 것입니다.

가변 저항 회로는 다음과 같이 만들 수 있습니다.

이 회로를 아래와 같은 구성으로 스케치를 생성하고 유니티를 연결하면 AnalogInput의 값이 가변 저항의 손잡이를 돌리는 것에 따라 변경됩니다.

AnalogInput의 값은 0~1 사이의 값을 가지므로 가변 저항의 회전에 따라 다음과 같이 변경됩니다.
  • 0: 오른쪽(혹은 왼쪽) 끝으로 회전
  • 0.5: 중앙
  • 1: 왼쪽(혹은 오른쪽) 끝으로 회전


소리 볼륨 조절
AudioSourceReactor에 연결하면 가변 저항으로 소리 볼륨을 조절할 수 있습니다.


Light 밝기 조절
LightIntensityReactor에 연결하면 가변 저항으로 Light의 밝기를 조절할 수 있습니다.



GameObject 회전시키기
가변 저항의 회전과 GameObject의 회전을 일치시키면 아주 재미있는 효과를 표현할 수 있습니다.
이것을 하려면 값의 변환 문제를 해결해야 합니다.
  • AnalogInput: 0~1 범위의 값
  • Rotation Angle: -180~180 범위의 값
즉, AnalogInput의 값을 그대로 회전 각으로 사용할 수 없기때문에 뭔가 조치를 취해야 합니다.
이때 필요한 것이 MappingInput이란 Bridge입니다.


매핑(Mapping)이란 개념은 서로 다른 값 변화 체계를 변환시킨다는 의미입니다. 이를 위해 Mapping Curve를 만들어서 Input과 Output 사이의 관계를 정의해야 합니다.

MappingInput은 위의 정보를 넣을 수 있는 항목을 가지고 있습니다.
  • sourceName: 입력 항목의 이름
  • resultName: 출력 항목의 이름
  • mapCurve: 변환에 사용될 Mapping curve

MappingInput을 이용하면 손쉽게 0~1 범위 값을 -180 ~ 180 범위 값으로 변환시킬 수 있습니다.

이제 이 정보를 바탕으로 GameObject를 회전하는 것만 남았습니다.
RotationAxisReactor는 GameObject를 회전시킬 수 있는 기능을 제공합니다.


RotationAxisReactor는 X, Y, Z축 중 한개만 선택하여 회전시킬 수 있기 때문에, 이를 위한 설정이 필요합니다.
  • upAxis: 회전 중심축
  • forwardAxis: 회전 방향축
  • invert: 제어각에 대해 반대 회전 여부
  • use Gizmo: Gizmo 사용 여부
RotationAxisReactor의 Gizmo
GameObject 회전을 위해서는 2가지 정보가 필요한데, 회전 중심축과 방향축입니다. 이것을 각각 upAxis, forwardAxis라 부르고, Scene에 이 정보를 보여주는 것이 Gizmo입니다.

MappingInput의 결과 값을 RotationAxisReactor와 연결한다면 가변 저항의 회전에 따라 GameObject가 회전하는 효과를 확인할 수 있습니다.


지금까지의 응용을 영상으로 확인하시기 바랍니다.


댓글 2개:

  1. 졸업 프로젝트 진행에 큰 도움이 되고 있습니다 감사드려요~^~^

    답글삭제
    답글
    1. 도움이 되었다니 정말 다행입니다. ^^

      삭제