개발자/Arduino

Adafruit APDS-9960 Proximity, Light, RGB, and Gesture Sensor

지구빵집 2021. 4. 8. 10:30
반응형

 

 

근접, 빛, RGB, 제스처 센서 Adafruit APDS-9960 Proximity, Light, RGB, and Gesture Sensor 

 

APDS9960 제품 설명

 

이 브레이크 아웃은 꽉 찬 센서입니다! Adafruit APDS9960 근접, 조명, RGB 및 제스처 센서를 사용하여 기본 제스처 감지, RGB 색상 감지, 근접 감지 또는 주변 광 감지를 프로젝트에 추가하십시오. 마이크로 컨트롤러 (라이브러리 코드 실행)에 연결하면 간단한 제스처 (왼쪽에서 오른쪽, 오른쪽에서 왼쪽, 위에서 아래, 아래에서 위로가 현재 지원됨)를 감지하고 빨간색, 파란색, 녹색 및 맑은 빛의 양을 반환할 수 있습니다. , 또는 물체가 센서 전면에 얼마나 가까이 있는지 반환합니다. 이 장치는 I2C 인터페이스를 사용하므로 배선 및 사용이 쉽습니다.

 

Avago Technologies의 APDS9960에는 IR LED 및 드라이버가 통합되어 있으며 LED에서 반사 된 IR 에너지를 감지하는 4 개의 방향성 포토 다이오드가 있습니다. 근접 감지 기능을 사용하면 8 비트 분해능으로 센서 전면에서 물체까지의 거리 (최대 몇 센티미터)를 측정할 수 있습니다.

 

4 개의 IR 센서가 있기 때문에 시간에 따른 각 기본 위치에서 빛 반사율의 변화를 측정하고 이러한 변화를 제스처로 바꿀 수 있습니다. 우리의 인터페이스 라이브러리는 방향 제스처 (왼쪽에서 오른쪽, 오른쪽에서 왼쪽, 위에서 아래, 아래에서 위로)를 감지 할 수 있지만 이론적으로는 지그재그, 시계 방향 또는 시계 반대 방향 원, 근거리에서 원거리 등과 같은 더 복잡한 제스처도 가능합니다. 추가 코드로 감지되었습니다.

 

APDS9960에는 특정 근접 임계 값이 깨졌을 때 또는 컬러 센서가 특정 임계 값을 넘어갈 때 발생하는 구성 가능한 인터럽트가 있습니다.

 

편의를 위해 3.3V 레귤레이터와 약간의 레벨 시프 팅이있는 PCB의 센서를 선택하여 배치하여 선호하는 3.3V 또는 5V 마이크로 컨트롤러와 함께 쉽게 사용할 수 있습니다.

 

또한 몇 줄의 코드만으로 Arduino IDE를 시작하고 실행할 수 있도록 가이드와 소프트웨어 라이브러리를 준비했습니다! 

 

제품 이미지

 

apds9960

 

 

제품사양

 

RGB 컬러, 제스처, 근접 센싱을 할 수 있는 APDS-9960 센서 모듈입니다. I2C 통신을 사용하며, µA 단위의 초저전력으로도 작동합니다. 아두이노 정품 개발 보드인 Arduino NANO 33 BLE Sense에 장착된 센서와 동일한 센서로, 작동 방식은 동일합니다. 

 

- 작동 전압: 3.3 V

- 작동 전류: 790µA(근접센싱), 790µA(제스처센싱), 38µA(대기)

- 통신 방법: I2C

- RGB 컬러 감지, 거리 감지, 제스처 감지 

 

샘플 코드 <라이브러리 추가> 라이브러리 매니저에서 "Arduino_APDS9960" 라이브러리를 추가해줍니다. 

 

RGB 컬러 인식 예제

#include <Arduino_APDS9960.h>
void setup() {
  Serial.begin(9600);
  while (!Serial); // 시리얼 모니터가 켜졌을때만 작동합니다.

  if (!APDS.begin()) { // APDS9960센서를 초기화합니다. 초기화중 문제가 발생하면 오류를 발생시킵니다.
    Serial.println("APDS9960센서 오류!");
    while (1);
  }
}

void loop() {
  if (APDS.colorAvailable()) { // 센서의 RGB색상 출력값이 존재할때만 작동합니다.
    int RGB[3] = {0}; // RGB색상 데이터를 저장할 변수입니다.
    APDS.readColor(RGB[0], RGB[1], RGB[2]); // RGB색상 데이터를 함수의 인자에 저장합니다. 저장되는 데이터는 각각 R, G, B 입니다.
    // 데이터를 전송합니다.
    Serial.print("R = ");
    Serial.println(RGB[0]);
    Serial.print("G = ");
    Serial.println(RGB[1]);
    Serial.print("B = ");
    Serial.println(RGB[2]);
    Serial.println();
    delay(1000);
  }
}

 

제스처 인식 예제

#include <Arduino_APDS9960.h>
void setup() {
  Serial.begin(9600);
  if (!APDS.begin()) { // 센서 초기화가 실패하면 오류를 발생시킵니다.
    Serial.println("APDS9960센서 오류!");
    while (1)
      ;
  }
  Serial.println("제스처 인식 시작!");
}
void loop() {
  if (APDS.gestureAvailable()) { // 제스처가 인식되면 true를 반환합니다.
    Serial.println("Gesture!");
    int gesture = APDS.readGesture(); // 인식된 제스처를 gesture 변수에 저장
    switch (gesture) { // 각 제스처에 맞는 항으로 이동
      case GESTURE_UP: // 상승 제스처
        Serial.println("윗쪽!");
        delay(1000);
        break;
      case GESTURE_DOWN: // 하강 제스처
        Serial.println("아랫쪽!");
        delay(1000);
        break;
      case GESTURE_LEFT: // 왼쪽 제스처
        Serial.println("왼쪽!");
        delay(1000);
        break;
      case GESTURE_RIGHT: // 오른쪽 제스처
        Serial.println("오른쪽!");
        delay(1000);
        break;
      default:
        break;
    }
  }
}

제스처 인식 Test 시리얼 모니터 화면

 

제스처 인식 Test 시리얼 모니터 화면

 

 

거리 측정 예제

 

#include <Arduino_APDS9960.h>
void setup() {
  Serial.begin(9600);
  while (!Serial); // 시리얼 모니터가 켜졌을때만 작동합니다.
  if (!APDS.begin()) { // 센서 초기화가 실패하면 오류를 발생시킵니다.
    Serial.println("APDS9960센서 오류!");
    while (1);
  }
}
void loop() {
  if (APDS.proximityAvailable()) { // 센서의 값이 읽혔을 때 작동합니다.
    // - 0   => close
    // - 255 => far
    // - -1  => 오류
    int proximity = APDS.readProximity(); // 센서의 값을 변수에 저장합니다.
    Serial.println(proximity);
  }
  delay(100);
}

 

 

Datasheet를 참고하세요

 

adafruit-apds9960-breakout.pdf
1.95MB

 

 

참고 문서

디바이스 마트 제품 설명

메카솔루션 오픈 랩 

Adafruit APDS9960 breakout

 

 

 

 

반응형