자체 저비용 3D 제스처 컨트롤러 설계 시간 단축
DigiKey 북미 편집자 제공
2019-08-13
손잡이, 버튼, 레버 및 터치스크린은 기계 및 내장형 장치와 상호 작용하는 데 일반적으로 사용되는 방법입니다. 하지만 최근 센서 기술이 향상되면서 이제 개발자가 3D 제스처 제어를 제품에 추가할 수 있게 되었습니다.
사용되는 기술에 따라 제스처 컨트롤러를 구매하고 통합하는 데 많은 비용이 들 수 있습니다. 하지만 적외선 LED 및 광 다이오드를 사용하여 움직임을 감지하는 저렴한 센서부터 고가의 제스처 인식 카메라까지 다양한 제스처 센서 기술을 사용할 수 있습니다. 적외선 제스처 센서는 경제적이고, 디지털 인터페이스를 통해 저비용 마이크로 컨트롤러에 연결될 수 있으며, 몇 가지 간단한 소프트웨어만으로도 대부분의 응용 분야에 충분한 정확도를 제공할 수 있습니다.
이 기사에서는 거의 모든 내장형 시스템에 쉽게 통합될 수 있는 적외선(IR) 제스처 제어 센서인 Broadcom APDS-9960을 사용한 제스처 제어에 대해 살펴봅니다.
IR 기반 제스처 센서
IR 기반 제스처 센서의 배경 이론은 상대적으로 간단합니다. 손 제스처를 감지할 경우 개발자가 감지하기 원하는 몇 가지 제스처는 다음과 같습니다.
- 위로/아래로
- 왼쪽/오른쪽
- 앞으로/뒤로
각각의 경우에 센서는 이동 방향을 감지할 수 있어야 합니다. 이 작업은 센서의 두 기본 부품인 발광 다이오드(LED)와 다중 지향성 광 다이오드를 사용하여 수행됩니다. 지향성 광 다이오드의 경우 4개 이상의 광 다이오드가 IR LED로부터 미리 정의된 거리에 배치되어 있습니다. 예를 들어 Broadcom APDS-9960 주변광, 근접, 제스처 센서의 경우 광 다이오드가 다이아몬드 패턴으로 배치되어 있고 각 다이오드에 방향 지정자(예: 위로, 아래로, 왼쪽, 오른쪽)가 있습니다(그림 1).
그림 1: Broadcom APDS-9960에는 제스처 프로파일을 분석할 수 있는 반사된 IR 에너지를 감지하는 지향성 광 다이오드 4개와 통합된 IR LED 1개가 있습니다. (이미지 출처: Broadcom)
LED가 적외선 에너지를 전송할 때 손과 같이 반사되는 물체가 없을 경우 에너지는 빈 공간으로 방출됩니다. 반사되는 에너지는 물체의 위치에 따라 다른 강도로 광 다이오드에서 감지됩니다. 예를 들어 제스처의 전연을 따라 배치된 광 다이오드는 처음에 후연에 배치된 광 다이오드보다 적은 반사 에너지를 수신하므로 두 광 다이오드의 카운트 값이 다르게 표시됩니다. 제스처가 발생하면서 경과한 시간 동안 측정을 수행하면 광 다이오드에서 다이오드별로 다른 반사 강도를 감지하게 됩니다. 그러면 이 지향성 정보 스트림을 분석하여 제스처를 결정할 수 있습니다.
예를 들어 사용자가 센서의 위에서 아래로 손을 밀 경우 제스처를 시작할 때는 아래쪽 광 다이오드가 위쪽 광 다이오드보다 더 큰 반사 입사광을 감지합니다. 제스처가 발생할 때 손은 두 다이오드가 동일한 양의 에너지를 수신하는 위치로 이동합니다. 제스처가 끝나면 아래쪽 광 다이오드는 더 적은 반사광을 수신하고 위쪽 광 다이오드는 더 많은 반사광을 수신하여 광 다이오드의 위상과 곡선이 반전됩니다(그림 2).
그림 2: Broadcom APDS-9960을 가로지르는 아래쪽 제스처 동작은 학습 곡선이 제스처 방향을 나타내는 광 다이오드 곡선을 생성합니다. (이미지 출처: Broadcom)
제스처에 따라 데이터가 생성되는 방법을 이해했으므로 다음 단계에서는 APDS-9960에 연결하는 방법을 알아봅니다.
Broadcom APDS-9960 제스처 컨트롤러에 연결
APDS-9960은 최소 PC 기판 공간을 차지하는 8핀 표면 실장(SMD-8) 패키지로 제공됩니다(그림 3). 이 센서의 치수는 3.94mm × 2.36mm × 1.35mm에 불과합니다. 패키지에는 일반 전력 핀, 접지 핀, 마이크로 컨트롤러의 디지털 연결용 I2C 인터페이스, LED 구동 회로 맞춤화를 위한 핀이 포함되어 있습니다. 또한 처리할 수 있는 제스처 데이터가 있을 때 마이크로 컨트롤러에 알려주는 인터럽트 핀이 포함되어 있습니다.
그림 3: APDS-9960은 기판 공간을 최소화하는 콤팩트 표면 실장 SMD-8 패키지로 제공됩니다. (이미지 출처: Broadcom)
시제품을 제작하고 APDS-9960에 연결하는 데 사용할 수 있는 옵션은 다양합니다. 예를 들어 SparkFun의 APDS-9960 평가 기판은 LED 구동 회로를 포함하는 상대적으로 작은 브레이크아웃 기판을 제공하여 즉시 사용할 수 있습니다(그림 4). 개발자는 점퍼 전력과 접지에 헤더를 납땜하고, I2C 버스와 선택 사양 인터럽트 핀을 마이크로 컨트롤러로 구부려 올린 다음 내장형 소프트웨어 개발을 바로 시작할 수 있습니다. 또한 SparkFun 기판에는 실장 구멍이 포함되어 있습니다. 응용 분야에서 기존 기판을 사용해도 되는 경우 이 구멍을 설계에 활용할 수 있습니다.
그림 4: SparkFun APDS-9960 평가 기판에는 제스처 제어를 시작하는 데 필요한 모든 기판 실장 회로망이 있습니다. (이미지 출처: DigiKey)
또한 개발자는 일체형 솔루션인 Adafruit APDS-9960 브레이크아웃 기판을 사용할 수도 있습니다(그림 5). Adafruit 브레이크아웃 기판은 크기가 작을 뿐만 아니라, 전력 LED, 저전력 마이크로 컨트롤러 등과 같은 추가 회로망을 구동하는 데 사용할 수 있는 기판 실장 3V 조정기가 포함되어 있어 매우 흥미로운 제품입니다. 기판 외에도 Adafruit는 개발자를 위한 전체 Adafruit APDS9960 브레이크아웃 사용 안내서와 Python을 실행하는 Arduino 기판 또는 개발 기판에 연결하는 데 사용되는 다양한 소프트웨어 라이브러리를 제공합니다. 따라서 APDS-9960을 기본으로 유용하게 활용하여 개발자가 센서를 시작하는 데 필요한 시간을 획기적으로 단축할 수 있습니다.
그림 5: Adafruit APDS-9960 브레이크아웃 기판에는 APDS-9960, 기판 실장 3V 조정기, 3V 또는 5V 버스를 지원하는 I2C 전압 변환 회로가 포함되어 있습니다. (이미지 출처: DigiKey)
이러한 브레이크아웃 기판에 연결하는 가장 쉬운 방법은 Molex 22-28-4255 박리 헤더를 기판에 납땜하는 것입니다. 이때 헤더를 아래로 향하게 하는 것이 가장 좋으며 몇 가지 이점을 제공합니다. 첫째, 기판을 브레드 기판(예: Digilent 340-002-1 무납땜 브레드 기판 키트)에 연결할 수 있습니다(그림 6). 둘째, 기판의 위쪽 표면을 깨끗하게 유지하여 실수로 전선을 잡아 헤더를 떨어뜨리는 일 없이 손으로 제스처를 만들수 있는 충분한 공간이 마련됩니다.
그림 6: Digilent 무납땜 브레드 기판에 납땜하여 준비된 Adafruit APDS-9960 브레이크아웃 기판 (이미지 출처: Adafruit)
이 지점에서 전력과 접지를 연결하고, I2C 라인을 원하는 마이크로 컨트롤러 개발 기판에 연결해야 합니다. 마이크로 컨트롤러가 실장된 개발 기판을 사용할 수 있습니다. 하지만 STMicroelectronics’ B-L475E-IOT01A2 STM32L475 IoT 디스커버리 키트 IoT 노드를 선택하는 것이 좋습니다(그림 7). 이 개발 기판은 Arduino 헤더를 포함하며 MicroPython에서도 지원되므로, 최소의 노력으로 기판에 프로그래밍할 수 있습니다. 그런 다음 Python 스크립트를 사용하여 제스처 센서와 연결한 후 제스처를 손쉽게 제어할 수 있습니다.
그림 7: STM32L475 디스커버리 키트 IoT 노드에는 APDS-9960 브레이크아웃 기판에 쉽게 연결할 수 있는 Arduino 헤더가 포함되어 있습니다. (이미지 출처: STMicroelectronics)
Python을 사용하여 제스처 감지
APDS-9960에서 제스처 데이터를 가져오는 것은 복잡하지 않지만 개발자는 규격서를 주의 깊게 읽어 보아야 합니다. APDS-9960에는 다음과 같은 다양한 기능이 있습니다.
- 제스처 감지
- 주변광 감지
- RGB 색상 감지
- 근접도 감지
응용 분야에 대해 레지스터를 설정한 방법에 따라 실행되는 상태 머신을 통해 이러한 모든 기능을 제어합니다. 예를 들어 제스처 엔진이 상시 실행되지 않도록 차단하는 고급 기술에서는 근접도 감지 엔진을 사용하여 손이 나타나면 감지합니다. 반사된 IR 에너지가 사전 설정된 카운트에 도달하면 근접도 엔진 상태가 제스처 엔진으로 전환되고, 지향성 광 다이오드를 측정하고 측정된 값을 FIFO(First-In First-Out) 버퍼에 넣습니다. 이 기능을 활성화하려면 근접도를 활성화하도록 제어 레지스터를 설정하고 계수 임계값을 설정해야 합니다.
응용 분야에 필요한 제스처에 따라 개발자는 특정 제스처를 감지하는 알고리즘을 작성해야 할 수 있습니다. 하지만 위로/아래로, 왼쪽/오른쪽 등과 같은 일반 제스처의 경우 Adafruit APDS-9960 CircuitPython 라이브러리를 활용할 수 있습니다. 라이브러리를 Python 장치에 복사한 후 목록 1에 표시된 코드를 사용하여 가져올 수 있습니다. 다음 코드는 I2C 버스를 지원하는 여러 라이브러리와 함께 APDS-9960 라이브러리를 가져옵니다.
복사 import board import busio import adafruit_apds9960.apds9960 i2c = busio.I2C(board.SCL, board.SDA) sensor = adafruit_apds9960.apds9960.APDS9960(i2c)
목록 1: CircuitPython은 APDS-9960 제스처 컨트롤러에 연결하는 라이브러리 초기화 코드를 가져옵니다. (이미지 출처: Adafruit)
센서 개체는 APDS-9960 라이브러리의 인스턴스입니다. 사용하기 매우 쉽다는 사실을 바로 알게 될 것입니다. 제스처를 활성화하기 위해 개발자는 다음 코드를 사용하여 제스처 기능을 활성화하기만 하면 됩니다.
복사 sensor.enable_gesture = True The main program loop setup to read the gesture is itself just a few lines of code (Listing 2).
gesture = sensor.gesture() while gesture == 0: gesture = sensor.gesture() print('Saw gesture: {0}'.format(gesture))
목록 2: 제스처를 감지하는 것이 단일 라이브러리 메서드를 반복적으로 호출하는 것만큼 간단합니다. (이미지 출처: Adafruit)
이 코드를 보면 알 수 있듯이, 감지된 제스처는 화면에 인쇄됩니다(그림 8).
그림 8: Adafruit APDS-9960 CircuitPython 라이브러리의 예제 제스처 출력 결과 (이미지 출처: Adafruit)
제스처 출력은 숫자로 지정되며 다음 키를 사용하여 쉽게 변환할 수 있습니다.
0 = 감지된 제스처 없음
1 = 위로 제스처 감지됨
2 = 아래로 제스처 감지됨
3 = 왼쪽 제스처 감지됨
4 = 오른쪽 제스처 감지됨
그림과 같이 기존 라이브러리를 활용하면 단 몇 줄의 코드로 기본 제스처를 쉽게 인식할 수 있습니다. 더 복잡한 제스처를 인식하려면 원시 제스처 데이터를 분석하도록 라이브러리를 수정해야 합니다.
제스처 컨트롤러 구축을 위한 유용한 정보
제스처 제어 센서를 제작하여 제품에 통합하는 데 문제가 없는 것은 아닙니다. 다음은 적외선 기반 제스처 컨트롤러로 작업할 때 개발자가 고려해야 하는 “유용한 정보”입니다.
- 잘못된 제스처가 시작되는 것을 최소화하기 위해 제스처 센서의 내부 근접도 감지기를 사용하여 제스처 제어 엔진을 트리거합니다.
- 기존 제스처 라이브러리를 시작하고 이미 있는 기능 위에 추가 제스처를 작성합니다.
- 최종 제스처 응용 제품에 가장 적합한 값으로 광 다이오드의 이득을 조정합니다.
- 응용 제품에 가장 적합한 값으로 LED 출력 구동 강도를 조정합니다. 이렇게 하려면 반복 가능한 결과를 얻을 수 있도록 약간의 수정이 필요할 수 있습니다.
- 개발자는 센서를 이해하고 낮은 수준 코드로 이동할 때까지 높은 수준 소프트웨어 개발을 통해 제스처 응용 제품 개발을 시작해야 합니다.
이 팁에 따라 개발자는 IR 제스처 컨트롤러를 구동하여 실행하는 데 소요되는 시간을 최소화할 수 있습니다.
결론
더 자연스럽고 직관적인 방법으로 머신과의 상호 작용을 차근차근 시작할 수도 있고, 제스처 제어 기술을 사용하는 유용한 방법도 있습니다. 다양한 제스처 제어 기술이 있지만 가장 경제적이고 가장 간편한 방법은 적외선 기반 제스처 센서를 사용하는 것입니다. 그림과 같이 개발자가 기존 하드웨어 및 소프트웨어 기술을 활용한다면 제스처 센서를 마이크로 컨트롤러에 통합하는 데 시간이 오래 걸리지 않습니다.
면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.


