본문 바로가기
Arduino(아두이노) 활용 강좌

Arduino Uno 로 APDS-9960 제스쳐 센서를 사용해 제스쳐 감지시 출력값 확인해 보기

by 오마이엔지니어 2017. 7. 15.
반응형

Arduino Uno 로 APDS-9960 제스쳐 센서를 사용해 제스쳐 감지시 시리얼 모니터로 출력값을 확인해 보는 프로젝트 입니다

<제스쳐 센서 이미지>

제스쳐센서 소개
APDS-9930
APDS-9930 Datasheet.pdf APDS-9960 APDS-9960 Datasheet.pdf  기반의 비접촉 제스쳐 센서 모듈 (Non Contact Gesture Sensor Module) 입니다 (다양한 제조사의 제스쳐 센서가 판매되고 있습니다 본 테스트에서는 위의 두가지 제품을 사용하였습니다)
I2C 인터페이스 구성의 ALS(ambient light sensor) 와 적외선 IR LED 가 포함된 센서로 제스쳐 감지가 가능하며
또한 근접센서로도 사용할수 있습니다 (APDS-9930 은 근접센서 100mm , APDS-9960 은 100mm~200mm 거리까지 플러그 앤 플레이 감지 기능을 제공합니다)
APDS-9930은 제스쳐 센서로 활용이 가능하나 제스쳐 센서 라기보다는 주변 광 센서 또는 근접센서라고 볼수 있습니다
APDS-9960은 제스쳐 센서, RGB 컬리인식 센서, 주변 광 센서, 근접센서 로 사용 가능합니다
아두이노와 호환 가능하며 마이크로 컨트롤러, 로봇 제어, 동작감지 등 다양하게 활용 가능합니다

아래 이미지에서 확인할수 있듯이 다양한 제조사의 제스쳐 센서가 제작되고 판매되고 있습니다

 

 

 

 

<제스쳐 센서 배선도 및 회로도>

사용된 부품
APDS-9930 제스쳐 센서

APDS-9960 제스쳐 센서

Arduino Uno R3
미니 브래드 보드

점퍼케이블
LED (Blue)
막대저항 220 Ohm

구성배선도 (APDS-9960 제스쳐 감지시 시리얼 모니터로 출력값 확인해 보기)

 

구성배선도 (APDS-9960 주변 광 차단시 배선된 LED 점등시켜 보기)

 

사용된 라이브러리

APDS9960.zip
Sparkfun의 APDS9960 라이브러리를 첨부하였습니다
라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요


사용된 예제코드

apds9960_gesture.zip

Sparkfun 의 라이브러리를 사용하지 않는 제스쳐 예제입니다 (제스쳐 테스트는 이 예제로 테스트)

테스트 방법
첨부된 APDS9960 라이브러리를 추가해 준 후 위 사용된 예제코드에 첨부된 apds9960_gesture.ino 파일을 불러와서
스케치 컴파일 및 업로드를 해주고 시리얼 모니터를 실행시킵니다

 

시리얼 모니터를 실행 시키면 위와 같은 화면이 출력되는것을 확인할수 있습니다
주의해야 할것은 APDS-9960 initialization complete 메세지가 나와야 정상적으로 센서가 인식된 것입니다
에러 메세지가 나오면 센서에 문제가 있거나 예제나 라이브러리와 센서가 맞지 않는것 입니다

본 테스트에 사용한 제스쳐 센서는 첨부된 라이브러리(Sparkfun의 라이브러리 입니다)의 제스쳐 예제를 사용하면 컴파일 에러는 없으나 지속적으로 센서가 인식이 되질 않는 에러가 발생했습니다
때문에 꼭 사용된 예제코드에 첨부된 apds9960_gesture.ino 예제를 사용해서 테스트 하기를 바랍니다

 

센서위를 손으로 좌,우,위,아래로 움직여 보면 방향을 감지해서 시리얼 모니터로 출력해 주는것을 확인할 수 있습니다
드라이버나 철자 같은 금속성 또는 자성을 띄는 물체로 테스트 하면 더 정확하게 테스트 가능합니다

꼭 Sparkfun 예제로 제스쳐 테스트를 하고 싶다면?
위에 언급했듯이 위 제스쳐 모듈로 Sparkfun 예제를 사용해서 주변 광 센서나 근접센서 예제는 동작하지만
제스쳐 예제는 LED 출력값이 Sparkfun 제품과 틀려서 동작하지 않습니다
이 경우 라이브러리를 수정해 준 후 사용을 할 수 있습니다

SparkFun_APDS-9960_Sensor_Arduino_Library-V_1.4.2.zip

https://github.com/sparkfun/SparkFun_APDS-9960_Sensor_Arduino_Library/tree/V_1.4.2

링크 또는 위에 첨부 된 1.4.2 버전 Sparkfun APDS-9960 제스쳐 센서 라이브러리를 다운로드 합니다
(포스팅 위쪽의 첨부 된 Sparkfun APDS-9960) 라이브러리 하고는 버전이 틀립니다)
압축을 풀고 src 폴더 안의 SparkFun_APDS9960.h 파일을 워드패드 등으로 열어서
#define DEFAULT_GGAIN  GGAIN_4X 이 부분을
#define DEFAULT_GGAIN  GGAIN_2X 또는 #define DEFAULT_GGAIN  GGAIN_1X
이렇게 수정해 주고 사용하면 됩니다
직접 테스트 해본 결과 #define DEFAULT_GGAIN from GGAIN_1X 로 수정 후 정상적으로 제스쳐 테스트 가능했습니다

위와 같이 수정했는데도 제스쳐 테스트가 불가능하다면 아래와 같은 추가로 수정이 필요합니다
src 폴더 안의 SparkFun_APDS9960.cpp 파일을 워드패드 등으로 열어서
if( !setLEDBoost(LED_BOOST_300) ) { 이 부분을
if( !setLEDBoost(LED_BOOST_100) ) { 이렇게 수정해 줍니다
src 폴더 안의 SparkFun_APDS9960.h 파일을 워드패드 등으로 열어서
#define DEFAULT_LDRIVE          LED_DRIVE_100MA 이 부분을
#define DEFAULT_LDRIVE          LED_DRIVE_50MA 이렇게 수정해 줍니다
수정 후 정상적으로 제스쳐 테스트 가능했습니다

위와 같은 H파일과 CPP파일 수정이 어렵다고 느껴지거나 힘들다면
아래 수정 된 라이브러리와 예제를 첨부하였으니 다운로드해서 테스트 하면 됩니다

GGAIN 수정 라이브러리.zip
0.03MB


APDS-9960 센서 생산 버전마다 캐패시터 등 용량이 틀려서 LED 출력값이 변해서 이런 현상이 발생하는것 같습니다



프로젝트 동영상 (APDS-9960 제스쳐 감지시 시리얼 모니터로 출력값 확인해 보기)



프로젝트 동영상 (APDS-9960 주변 광 차단시 배선된 LED 점등시켜 보기)


주변 광 차단시 배선된 LED가 점등되는 테스트는 위에 첨부된 APDS9960 라이브러리(
Sparkfun의 라이브러리 입니다)
AmbientLightInterrupt 예제를 불러와서 컴파일 및 업로드를 해주면 됩니다
센서를 손이나 물체로 가려서 주변 광을 차단해 주면 LED가 점등되는것을 확인할수 있습니다

APDS-9930은 위에도 언급했듯이 제스쳐 센서로 활용이 가능하나 제스쳐 센서 라기보다는
주변 광 센서 또는 근접센서라고 볼수 있습니다

구성배선도 (APDS-9930 주변 광 차단시 시리얼 모니터로 출력값 확인해 보기)

 


구성배선도 (APDS-9930 주변 광 차단시 LED 점등 시키고 시리얼 모니터로 출력값 확인해 보기)

 

사용된 라이브러리

APDS9930-master.zip


APDS-9930 라이브러리를 첨부하였습니다
라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요

테스트 방법
위에 첨부된 라이브러리를 추가해 준 후 AmbientLightSensor, AmbientLightInterrupt, AmbientLightLED
순으로 예제를 불러와서 컴파일 및 업로드 해주고 테스트를 진행하면 됩니다


프로젝트 동영상 (APDS-9930 주변 광 차단시 시리얼 모니터로 출력값 확인해 보기)


프로젝트 동영상 (APDS-9930 주변 광 차단시 LED 점등 시키고 시리얼 모니터로 출력값 확인해 보기)


프로젝트 동영상 (APDS-9930 주변 광 차단시 LED 밝기 조절해 보며 시리얼 모니터로 출력값 확인해 보기)

 

반응형

댓글