Android Things에서 적외선 민감 센서 (HC-SR501) 사용
인감 센서(HC-SR501)란?
영어로는 「PIR Motion Sensor」(PIR 모션 센서)
일본어에서는 「초전형 인감 센서 모듈」등이라고 불리고 있습니다.
적외선으로 사람이 통과, 이동하고 있는 것을 검지하는 센서입니다.
Amazon 등에서도 저렴하게 구입할 수 있습니다.
HC-SR501 데이터시트
h tp // w w. 다만 t. jp / 세아 rch. php? 수 rd = HC-SR501
이 근처에서 사양서를 다운로드할 수 있습니다.
회로도
Gradle 설정 파일에 추가
app/build.gradle의 dependencies 내에 다음을 추가
provided 'com.google.android.things:androidthings:0.1-devpreview'
AndroidManifest.xml에 추가
아래 아래에 추가
<uses-library android:name="com.google.android.things"/>
MainActivity에 필요한 설명을 추가
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.google.android.things.pio.Gpio;
import com.google.android.things.pio.GpioCallback;
import com.google.android.things.pio.PeripheralManagerService;
import java.io.IOException;
public class MainActivity extends Activity {
static final String TAG = MainActivity.class.getSimpleName();
// 上の配線でBCM18の位置に接続している為、BCM18を指定します。
String mPinName = "BCM18";
Gpio mGpio;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PeripheralManagerService service = new PeripheralManagerService();
try {
mGpio = service.openGpio(mPinName);
// ピンをインプットモードで動作させます
mGpio.setDirection(Gpio.DIRECTION_IN);
// センサーがHighを返した時にtrueを返すようにします
mGpio.setActiveType(Gpio.ACTIVE_HIGH);
// センサーがHigh,Lowどちらかに変更になった場合にコールバック関数を呼び出す
mGpio.setEdgeTriggerType(Gpio.EDGE_BOTH);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
}
GpioCallback mGpioCallback = new GpioCallback() {
@Override
public boolean onGpioEdge(Gpio gpio) {
try {
if (gpio.getValue()) {
// 人の動きを検知
Log.i(TAG, "GPIO High");
} else {
// 人が動かずに一定時間経過
Log.i(TAG, "GPIO Low");
}
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
@Override
public void onGpioError(Gpio gpio, int error) {
Log.w(TAG, gpio + ": Error event " + error);
}
};
@Override
protected void onStart() {
super.onStart();
if(mGpio != null) {
try {
// コールバックを登録
mGpio.registerGpioCallback(mGpioCallback);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
protected void onStop() {
super.onStop();
if(mGpio != null) {
// コールバックを解除
mGpio.unregisterGpioCallback(mGpioCallback);
}
}
}
실행 결과
사람의 움직임을 감지했다 01-05 20:24:49.800 13954 13954 I MainActivity: GPIO High
사람의 움직임을 일정 시간 감지하지 못함 01-05 20:24:51.590 13954 13954 I MainActivity: GPIO Low
Gpio#setDirection에 지정할 수 있는 값
핀 입출력 유형과 기본값을 지정할 수 있습니다.
값
의미
Gpio.DIRECTION_IN
입력 모드
Gpio.DIRECTION_OUT_INITIALLY_HIGH
출력 모드(초기값 HIGH)
Gpio.DIRECTION_OUT_INITIALLY_LOW
출력 모드(초기값 LOW)
Gpio#setActiveType에 지정할 수 있는 값
HIGH가 돌아올 때 반환할 값을 지정합니다.
값
의미
Gpio.ACTIVE_HIGH
HIGH가 반환되면 true를 반환합니다.
Gpio.ACTIVE_LOW
HIGH가 반환되면 false를 반환합니다.
Gpio#setEdgeTriggerType에 지정할 수 있는 값
무엇을 트리거에 값의 변화를 감지하는지 지정
값
의미
Gpio.EDGE_NONE
기본값(값 변경을 감지하지 않음)
Gpio.EDGE_BOTH
HIGH 또는 LOW로 값이 변경되었을 때
Gpio.EDGE_RISING
LOW에서 HIGH로 값이 변할 때
Gpio.EDGE_FALLING
HIGH에서 LOW로 값이 변경되면
Reference
이 문제에 관하여(Android Things에서 적외선 민감 센서 (HC-SR501) 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aoinakanishi/items/496d9987d2c4096deafb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
h tp // w w. 다만 t. jp / 세아 rch. php? 수 rd = HC-SR501
이 근처에서 사양서를 다운로드할 수 있습니다.
회로도
Gradle 설정 파일에 추가
app/build.gradle의 dependencies 내에 다음을 추가
provided 'com.google.android.things:androidthings:0.1-devpreview'
AndroidManifest.xml에 추가
아래 아래에 추가
<uses-library android:name="com.google.android.things"/>
MainActivity에 필요한 설명을 추가
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.google.android.things.pio.Gpio;
import com.google.android.things.pio.GpioCallback;
import com.google.android.things.pio.PeripheralManagerService;
import java.io.IOException;
public class MainActivity extends Activity {
static final String TAG = MainActivity.class.getSimpleName();
// 上の配線でBCM18の位置に接続している為、BCM18を指定します。
String mPinName = "BCM18";
Gpio mGpio;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PeripheralManagerService service = new PeripheralManagerService();
try {
mGpio = service.openGpio(mPinName);
// ピンをインプットモードで動作させます
mGpio.setDirection(Gpio.DIRECTION_IN);
// センサーがHighを返した時にtrueを返すようにします
mGpio.setActiveType(Gpio.ACTIVE_HIGH);
// センサーがHigh,Lowどちらかに変更になった場合にコールバック関数を呼び出す
mGpio.setEdgeTriggerType(Gpio.EDGE_BOTH);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
}
GpioCallback mGpioCallback = new GpioCallback() {
@Override
public boolean onGpioEdge(Gpio gpio) {
try {
if (gpio.getValue()) {
// 人の動きを検知
Log.i(TAG, "GPIO High");
} else {
// 人が動かずに一定時間経過
Log.i(TAG, "GPIO Low");
}
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
@Override
public void onGpioError(Gpio gpio, int error) {
Log.w(TAG, gpio + ": Error event " + error);
}
};
@Override
protected void onStart() {
super.onStart();
if(mGpio != null) {
try {
// コールバックを登録
mGpio.registerGpioCallback(mGpioCallback);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
protected void onStop() {
super.onStop();
if(mGpio != null) {
// コールバックを解除
mGpio.unregisterGpioCallback(mGpioCallback);
}
}
}
실행 결과
사람의 움직임을 감지했다 01-05 20:24:49.800 13954 13954 I MainActivity: GPIO High
사람의 움직임을 일정 시간 감지하지 못함 01-05 20:24:51.590 13954 13954 I MainActivity: GPIO Low
Gpio#setDirection에 지정할 수 있는 값
핀 입출력 유형과 기본값을 지정할 수 있습니다.
값
의미
Gpio.DIRECTION_IN
입력 모드
Gpio.DIRECTION_OUT_INITIALLY_HIGH
출력 모드(초기값 HIGH)
Gpio.DIRECTION_OUT_INITIALLY_LOW
출력 모드(초기값 LOW)
Gpio#setActiveType에 지정할 수 있는 값
HIGH가 돌아올 때 반환할 값을 지정합니다.
값
의미
Gpio.ACTIVE_HIGH
HIGH가 반환되면 true를 반환합니다.
Gpio.ACTIVE_LOW
HIGH가 반환되면 false를 반환합니다.
Gpio#setEdgeTriggerType에 지정할 수 있는 값
무엇을 트리거에 값의 변화를 감지하는지 지정
값
의미
Gpio.EDGE_NONE
기본값(값 변경을 감지하지 않음)
Gpio.EDGE_BOTH
HIGH 또는 LOW로 값이 변경되었을 때
Gpio.EDGE_RISING
LOW에서 HIGH로 값이 변할 때
Gpio.EDGE_FALLING
HIGH에서 LOW로 값이 변경되면
Reference
이 문제에 관하여(Android Things에서 적외선 민감 센서 (HC-SR501) 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aoinakanishi/items/496d9987d2c4096deafb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
app/build.gradle의 dependencies 내에 다음을 추가
provided 'com.google.android.things:androidthings:0.1-devpreview'
AndroidManifest.xml에 추가
아래 아래에 추가
<uses-library android:name="com.google.android.things"/>
MainActivity에 필요한 설명을 추가
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.google.android.things.pio.Gpio;
import com.google.android.things.pio.GpioCallback;
import com.google.android.things.pio.PeripheralManagerService;
import java.io.IOException;
public class MainActivity extends Activity {
static final String TAG = MainActivity.class.getSimpleName();
// 上の配線でBCM18の位置に接続している為、BCM18を指定します。
String mPinName = "BCM18";
Gpio mGpio;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PeripheralManagerService service = new PeripheralManagerService();
try {
mGpio = service.openGpio(mPinName);
// ピンをインプットモードで動作させます
mGpio.setDirection(Gpio.DIRECTION_IN);
// センサーがHighを返した時にtrueを返すようにします
mGpio.setActiveType(Gpio.ACTIVE_HIGH);
// センサーがHigh,Lowどちらかに変更になった場合にコールバック関数を呼び出す
mGpio.setEdgeTriggerType(Gpio.EDGE_BOTH);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
}
GpioCallback mGpioCallback = new GpioCallback() {
@Override
public boolean onGpioEdge(Gpio gpio) {
try {
if (gpio.getValue()) {
// 人の動きを検知
Log.i(TAG, "GPIO High");
} else {
// 人が動かずに一定時間経過
Log.i(TAG, "GPIO Low");
}
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
@Override
public void onGpioError(Gpio gpio, int error) {
Log.w(TAG, gpio + ": Error event " + error);
}
};
@Override
protected void onStart() {
super.onStart();
if(mGpio != null) {
try {
// コールバックを登録
mGpio.registerGpioCallback(mGpioCallback);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
protected void onStop() {
super.onStop();
if(mGpio != null) {
// コールバックを解除
mGpio.unregisterGpioCallback(mGpioCallback);
}
}
}
실행 결과
사람의 움직임을 감지했다 01-05 20:24:49.800 13954 13954 I MainActivity: GPIO High
사람의 움직임을 일정 시간 감지하지 못함 01-05 20:24:51.590 13954 13954 I MainActivity: GPIO Low
Gpio#setDirection에 지정할 수 있는 값
핀 입출력 유형과 기본값을 지정할 수 있습니다.
값
의미
Gpio.DIRECTION_IN
입력 모드
Gpio.DIRECTION_OUT_INITIALLY_HIGH
출력 모드(초기값 HIGH)
Gpio.DIRECTION_OUT_INITIALLY_LOW
출력 모드(초기값 LOW)
Gpio#setActiveType에 지정할 수 있는 값
HIGH가 돌아올 때 반환할 값을 지정합니다.
값
의미
Gpio.ACTIVE_HIGH
HIGH가 반환되면 true를 반환합니다.
Gpio.ACTIVE_LOW
HIGH가 반환되면 false를 반환합니다.
Gpio#setEdgeTriggerType에 지정할 수 있는 값
무엇을 트리거에 값의 변화를 감지하는지 지정
값
의미
Gpio.EDGE_NONE
기본값(값 변경을 감지하지 않음)
Gpio.EDGE_BOTH
HIGH 또는 LOW로 값이 변경되었을 때
Gpio.EDGE_RISING
LOW에서 HIGH로 값이 변할 때
Gpio.EDGE_FALLING
HIGH에서 LOW로 값이 변경되면
Reference
이 문제에 관하여(Android Things에서 적외선 민감 센서 (HC-SR501) 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aoinakanishi/items/496d9987d2c4096deafb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<uses-library android:name="com.google.android.things"/>
MainActivity에 필요한 설명을 추가
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.google.android.things.pio.Gpio;
import com.google.android.things.pio.GpioCallback;
import com.google.android.things.pio.PeripheralManagerService;
import java.io.IOException;
public class MainActivity extends Activity {
static final String TAG = MainActivity.class.getSimpleName();
// 上の配線でBCM18の位置に接続している為、BCM18を指定します。
String mPinName = "BCM18";
Gpio mGpio;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PeripheralManagerService service = new PeripheralManagerService();
try {
mGpio = service.openGpio(mPinName);
// ピンをインプットモードで動作させます
mGpio.setDirection(Gpio.DIRECTION_IN);
// センサーがHighを返した時にtrueを返すようにします
mGpio.setActiveType(Gpio.ACTIVE_HIGH);
// センサーがHigh,Lowどちらかに変更になった場合にコールバック関数を呼び出す
mGpio.setEdgeTriggerType(Gpio.EDGE_BOTH);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
}
GpioCallback mGpioCallback = new GpioCallback() {
@Override
public boolean onGpioEdge(Gpio gpio) {
try {
if (gpio.getValue()) {
// 人の動きを検知
Log.i(TAG, "GPIO High");
} else {
// 人が動かずに一定時間経過
Log.i(TAG, "GPIO Low");
}
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
@Override
public void onGpioError(Gpio gpio, int error) {
Log.w(TAG, gpio + ": Error event " + error);
}
};
@Override
protected void onStart() {
super.onStart();
if(mGpio != null) {
try {
// コールバックを登録
mGpio.registerGpioCallback(mGpioCallback);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
protected void onStop() {
super.onStop();
if(mGpio != null) {
// コールバックを解除
mGpio.unregisterGpioCallback(mGpioCallback);
}
}
}
실행 결과
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.google.android.things.pio.Gpio;
import com.google.android.things.pio.GpioCallback;
import com.google.android.things.pio.PeripheralManagerService;
import java.io.IOException;
public class MainActivity extends Activity {
static final String TAG = MainActivity.class.getSimpleName();
// 上の配線でBCM18の位置に接続している為、BCM18を指定します。
String mPinName = "BCM18";
Gpio mGpio;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PeripheralManagerService service = new PeripheralManagerService();
try {
mGpio = service.openGpio(mPinName);
// ピンをインプットモードで動作させます
mGpio.setDirection(Gpio.DIRECTION_IN);
// センサーがHighを返した時にtrueを返すようにします
mGpio.setActiveType(Gpio.ACTIVE_HIGH);
// センサーがHigh,Lowどちらかに変更になった場合にコールバック関数を呼び出す
mGpio.setEdgeTriggerType(Gpio.EDGE_BOTH);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
}
GpioCallback mGpioCallback = new GpioCallback() {
@Override
public boolean onGpioEdge(Gpio gpio) {
try {
if (gpio.getValue()) {
// 人の動きを検知
Log.i(TAG, "GPIO High");
} else {
// 人が動かずに一定時間経過
Log.i(TAG, "GPIO Low");
}
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
@Override
public void onGpioError(Gpio gpio, int error) {
Log.w(TAG, gpio + ": Error event " + error);
}
};
@Override
protected void onStart() {
super.onStart();
if(mGpio != null) {
try {
// コールバックを登録
mGpio.registerGpioCallback(mGpioCallback);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
protected void onStop() {
super.onStop();
if(mGpio != null) {
// コールバックを解除
mGpio.unregisterGpioCallback(mGpioCallback);
}
}
}
01-05 20:24:49.800 13954 13954 I MainActivity: GPIO High
01-05 20:24:51.590 13954 13954 I MainActivity: GPIO Low
Gpio#setDirection에 지정할 수 있는 값
핀 입출력 유형과 기본값을 지정할 수 있습니다.
값
의미
Gpio.DIRECTION_IN
입력 모드
Gpio.DIRECTION_OUT_INITIALLY_HIGH
출력 모드(초기값 HIGH)
Gpio.DIRECTION_OUT_INITIALLY_LOW
출력 모드(초기값 LOW)
Gpio#setActiveType에 지정할 수 있는 값
HIGH가 돌아올 때 반환할 값을 지정합니다.
값
의미
Gpio.ACTIVE_HIGH
HIGH가 반환되면 true를 반환합니다.
Gpio.ACTIVE_LOW
HIGH가 반환되면 false를 반환합니다.
Gpio#setEdgeTriggerType에 지정할 수 있는 값
무엇을 트리거에 값의 변화를 감지하는지 지정
값
의미
Gpio.EDGE_NONE
기본값(값 변경을 감지하지 않음)
Gpio.EDGE_BOTH
HIGH 또는 LOW로 값이 변경되었을 때
Gpio.EDGE_RISING
LOW에서 HIGH로 값이 변할 때
Gpio.EDGE_FALLING
HIGH에서 LOW로 값이 변경되면
HIGH가 돌아올 때 반환할 값을 지정합니다.
값
의미
Gpio.ACTIVE_HIGH
HIGH가 반환되면 true를 반환합니다.
Gpio.ACTIVE_LOW
HIGH가 반환되면 false를 반환합니다.
Gpio#setEdgeTriggerType에 지정할 수 있는 값
무엇을 트리거에 값의 변화를 감지하는지 지정
값
의미
Gpio.EDGE_NONE
기본값(값 변경을 감지하지 않음)
Gpio.EDGE_BOTH
HIGH 또는 LOW로 값이 변경되었을 때
Gpio.EDGE_RISING
LOW에서 HIGH로 값이 변할 때
Gpio.EDGE_FALLING
HIGH에서 LOW로 값이 변경되면
Reference
이 문제에 관하여(Android Things에서 적외선 민감 센서 (HC-SR501) 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aoinakanishi/items/496d9987d2c4096deafb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)