Android Things에서 초음파 거리 센서(HC-SR04) 사용
초음파 거리 센서(HC-SR04)란?
영어로는 "Ultrasonic Module"(초음파 모듈), Distance Measuring Transducer Sensor, Ultrasonic Range Sensor,
일본어에서는 「측거 센서」 「거리 센서」등이라고 불리고 있습니다.
센서에서 초음파를 발생시켜 물체에 부딪쳐 반사되어 돌아올 때까지의 시간으로 거리를 측정하는 모듈입니다.
Amazon 등에서도 저렴하게 구입할 수 있습니다.
HC-SR04 데이터시트
h tp // w w. 다만 t. jp / 세아 rch. php? 수 rd = HC-SR04
이 근처에서 사양서를 다운로드할 수 있습니다.
회로도
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.PeripheralManagerService;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class MainActivity extends Activity {
static final String TAG = MainActivity.class.getSimpleName();
// 上の配線でBCM4の位置にトリガーピンを接続、BCM17にエコーピンしている為、以下のように指定します。
String mPinName_Trig = "BCM4";
String mPinName_Echo = "BCM17";
Gpio mGpioTrig, mGpioEcho;
private Thread mThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PeripheralManagerService service = new PeripheralManagerService();
try {
mGpioTrig = service.openGpio(mPinName_Trig);
mGpioEcho = service.openGpio(mPinName_Echo);
// トリガーピンをアウトプットモード(デフォルト値=LOW)で動作させます
mGpioTrig.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
// エコーピンを入力モードで動作させます
mGpioEcho.setDirection(Gpio.DIRECTION_IN);
// センサーがHighを返した時にtrueを返すようにします
mGpioEcho.setActiveType(Gpio.ACTIVE_HIGH);
// センサーがHigh,Lowどちらかに変更になった場合にコールバック関数を呼び出す
mGpioEcho.setEdgeTriggerType(Gpio.EDGE_BOTH);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
mThread = new Thread(mRunnable);
mThread.start();
}
Runnable mRunnable = new Runnable() {
public long mStartTime, mEndTime;
@Override
public void run() {
try {
mGpioTrig.setValue(true);
TimeUnit.MICROSECONDS.sleep(10);
mGpioTrig.setValue(false);
// trueが返る直前の時間を保持
while (mGpioEcho.getValue() == false) {
mStartTime = System.currentTimeMillis();
}
// falseが返る直前の時間を保持
while (mGpioEcho.getValue() == true) {
mEndTime = System.currentTimeMillis();
}
long timepassed = mEndTime - mStartTime;
Log.d(TAG, "経過時間(ミリ秒): " + timepassed);
long distance = timepassed * 17150 / 1000;
Log.d(TAG, "距離(cm): " + distance);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}
실행 결과
01-15 15:56:59.405 27868-27885/? D/MainActivity: 経過時間(ミリ秒): 2
01-15 15:56:59.405 27868-27885/? D/MainActivity: 距離(cm): 34
거리 계산식
음속 = 34300cm/s로 계산
거리 = 속도 * 시간/2
거리 = 속도 * 34300/2
거리 = 속도 * 17150
Reference
이 문제에 관하여(Android Things에서 초음파 거리 센서(HC-SR04) 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aoinakanishi/items/0dac519edcc7b0681b29
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
h tp // w w. 다만 t. jp / 세아 rch. php? 수 rd = HC-SR04
이 근처에서 사양서를 다운로드할 수 있습니다.
회로도
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.PeripheralManagerService;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class MainActivity extends Activity {
static final String TAG = MainActivity.class.getSimpleName();
// 上の配線でBCM4の位置にトリガーピンを接続、BCM17にエコーピンしている為、以下のように指定します。
String mPinName_Trig = "BCM4";
String mPinName_Echo = "BCM17";
Gpio mGpioTrig, mGpioEcho;
private Thread mThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PeripheralManagerService service = new PeripheralManagerService();
try {
mGpioTrig = service.openGpio(mPinName_Trig);
mGpioEcho = service.openGpio(mPinName_Echo);
// トリガーピンをアウトプットモード(デフォルト値=LOW)で動作させます
mGpioTrig.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
// エコーピンを入力モードで動作させます
mGpioEcho.setDirection(Gpio.DIRECTION_IN);
// センサーがHighを返した時にtrueを返すようにします
mGpioEcho.setActiveType(Gpio.ACTIVE_HIGH);
// センサーがHigh,Lowどちらかに変更になった場合にコールバック関数を呼び出す
mGpioEcho.setEdgeTriggerType(Gpio.EDGE_BOTH);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
mThread = new Thread(mRunnable);
mThread.start();
}
Runnable mRunnable = new Runnable() {
public long mStartTime, mEndTime;
@Override
public void run() {
try {
mGpioTrig.setValue(true);
TimeUnit.MICROSECONDS.sleep(10);
mGpioTrig.setValue(false);
// trueが返る直前の時間を保持
while (mGpioEcho.getValue() == false) {
mStartTime = System.currentTimeMillis();
}
// falseが返る直前の時間を保持
while (mGpioEcho.getValue() == true) {
mEndTime = System.currentTimeMillis();
}
long timepassed = mEndTime - mStartTime;
Log.d(TAG, "経過時間(ミリ秒): " + timepassed);
long distance = timepassed * 17150 / 1000;
Log.d(TAG, "距離(cm): " + distance);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}
실행 결과
01-15 15:56:59.405 27868-27885/? D/MainActivity: 経過時間(ミリ秒): 2
01-15 15:56:59.405 27868-27885/? D/MainActivity: 距離(cm): 34
거리 계산식
음속 = 34300cm/s로 계산
거리 = 속도 * 시간/2
거리 = 속도 * 34300/2
거리 = 속도 * 17150
Reference
이 문제에 관하여(Android Things에서 초음파 거리 센서(HC-SR04) 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aoinakanishi/items/0dac519edcc7b0681b29
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 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.PeripheralManagerService;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class MainActivity extends Activity {
static final String TAG = MainActivity.class.getSimpleName();
// 上の配線でBCM4の位置にトリガーピンを接続、BCM17にエコーピンしている為、以下のように指定します。
String mPinName_Trig = "BCM4";
String mPinName_Echo = "BCM17";
Gpio mGpioTrig, mGpioEcho;
private Thread mThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PeripheralManagerService service = new PeripheralManagerService();
try {
mGpioTrig = service.openGpio(mPinName_Trig);
mGpioEcho = service.openGpio(mPinName_Echo);
// トリガーピンをアウトプットモード(デフォルト値=LOW)で動作させます
mGpioTrig.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
// エコーピンを入力モードで動作させます
mGpioEcho.setDirection(Gpio.DIRECTION_IN);
// センサーがHighを返した時にtrueを返すようにします
mGpioEcho.setActiveType(Gpio.ACTIVE_HIGH);
// センサーがHigh,Lowどちらかに変更になった場合にコールバック関数を呼び出す
mGpioEcho.setEdgeTriggerType(Gpio.EDGE_BOTH);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
mThread = new Thread(mRunnable);
mThread.start();
}
Runnable mRunnable = new Runnable() {
public long mStartTime, mEndTime;
@Override
public void run() {
try {
mGpioTrig.setValue(true);
TimeUnit.MICROSECONDS.sleep(10);
mGpioTrig.setValue(false);
// trueが返る直前の時間を保持
while (mGpioEcho.getValue() == false) {
mStartTime = System.currentTimeMillis();
}
// falseが返る直前の時間を保持
while (mGpioEcho.getValue() == true) {
mEndTime = System.currentTimeMillis();
}
long timepassed = mEndTime - mStartTime;
Log.d(TAG, "経過時間(ミリ秒): " + timepassed);
long distance = timepassed * 17150 / 1000;
Log.d(TAG, "距離(cm): " + distance);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}
실행 결과
01-15 15:56:59.405 27868-27885/? D/MainActivity: 経過時間(ミリ秒): 2
01-15 15:56:59.405 27868-27885/? D/MainActivity: 距離(cm): 34
거리 계산식
음속 = 34300cm/s로 계산
거리 = 속도 * 시간/2
거리 = 속도 * 34300/2
거리 = 속도 * 17150
Reference
이 문제에 관하여(Android Things에서 초음파 거리 센서(HC-SR04) 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aoinakanishi/items/0dac519edcc7b0681b29
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 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.PeripheralManagerService;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class MainActivity extends Activity {
static final String TAG = MainActivity.class.getSimpleName();
// 上の配線でBCM4の位置にトリガーピンを接続、BCM17にエコーピンしている為、以下のように指定します。
String mPinName_Trig = "BCM4";
String mPinName_Echo = "BCM17";
Gpio mGpioTrig, mGpioEcho;
private Thread mThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PeripheralManagerService service = new PeripheralManagerService();
try {
mGpioTrig = service.openGpio(mPinName_Trig);
mGpioEcho = service.openGpio(mPinName_Echo);
// トリガーピンをアウトプットモード(デフォルト値=LOW)で動作させます
mGpioTrig.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
// エコーピンを入力モードで動作させます
mGpioEcho.setDirection(Gpio.DIRECTION_IN);
// センサーがHighを返した時にtrueを返すようにします
mGpioEcho.setActiveType(Gpio.ACTIVE_HIGH);
// センサーがHigh,Lowどちらかに変更になった場合にコールバック関数を呼び出す
mGpioEcho.setEdgeTriggerType(Gpio.EDGE_BOTH);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
mThread = new Thread(mRunnable);
mThread.start();
}
Runnable mRunnable = new Runnable() {
public long mStartTime, mEndTime;
@Override
public void run() {
try {
mGpioTrig.setValue(true);
TimeUnit.MICROSECONDS.sleep(10);
mGpioTrig.setValue(false);
// trueが返る直前の時間を保持
while (mGpioEcho.getValue() == false) {
mStartTime = System.currentTimeMillis();
}
// falseが返る直前の時間を保持
while (mGpioEcho.getValue() == true) {
mEndTime = System.currentTimeMillis();
}
long timepassed = mEndTime - mStartTime;
Log.d(TAG, "経過時間(ミリ秒): " + timepassed);
long distance = timepassed * 17150 / 1000;
Log.d(TAG, "距離(cm): " + distance);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}
실행 결과
01-15 15:56:59.405 27868-27885/? D/MainActivity: 経過時間(ミリ秒): 2
01-15 15:56:59.405 27868-27885/? D/MainActivity: 距離(cm): 34
거리 계산식
음속 = 34300cm/s로 계산
거리 = 속도 * 시간/2
거리 = 속도 * 34300/2
거리 = 속도 * 17150
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.PeripheralManagerService;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class MainActivity extends Activity {
static final String TAG = MainActivity.class.getSimpleName();
// 上の配線でBCM4の位置にトリガーピンを接続、BCM17にエコーピンしている為、以下のように指定します。
String mPinName_Trig = "BCM4";
String mPinName_Echo = "BCM17";
Gpio mGpioTrig, mGpioEcho;
private Thread mThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PeripheralManagerService service = new PeripheralManagerService();
try {
mGpioTrig = service.openGpio(mPinName_Trig);
mGpioEcho = service.openGpio(mPinName_Echo);
// トリガーピンをアウトプットモード(デフォルト値=LOW)で動作させます
mGpioTrig.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
// エコーピンを入力モードで動作させます
mGpioEcho.setDirection(Gpio.DIRECTION_IN);
// センサーがHighを返した時にtrueを返すようにします
mGpioEcho.setActiveType(Gpio.ACTIVE_HIGH);
// センサーがHigh,Lowどちらかに変更になった場合にコールバック関数を呼び出す
mGpioEcho.setEdgeTriggerType(Gpio.EDGE_BOTH);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
mThread = new Thread(mRunnable);
mThread.start();
}
Runnable mRunnable = new Runnable() {
public long mStartTime, mEndTime;
@Override
public void run() {
try {
mGpioTrig.setValue(true);
TimeUnit.MICROSECONDS.sleep(10);
mGpioTrig.setValue(false);
// trueが返る直前の時間を保持
while (mGpioEcho.getValue() == false) {
mStartTime = System.currentTimeMillis();
}
// falseが返る直前の時間を保持
while (mGpioEcho.getValue() == true) {
mEndTime = System.currentTimeMillis();
}
long timepassed = mEndTime - mStartTime;
Log.d(TAG, "経過時間(ミリ秒): " + timepassed);
long distance = timepassed * 17150 / 1000;
Log.d(TAG, "距離(cm): " + distance);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}
01-15 15:56:59.405 27868-27885/? D/MainActivity: 経過時間(ミリ秒): 2
01-15 15:56:59.405 27868-27885/? D/MainActivity: 距離(cm): 34
거리 계산식
음속 = 34300cm/s로 계산
거리 = 속도 * 시간/2
거리 = 속도 * 34300/2
거리 = 속도 * 17150
Reference
이 문제에 관하여(Android Things에서 초음파 거리 센서(HC-SR04) 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aoinakanishi/items/0dac519edcc7b0681b29텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)