Arduino에서 초음파 센서 HC-SR04 사용

10248 단어 전자 공작CArduino

초음파 센서란?



초음파를 발사하고 어떤 물체에 부딪쳐 튀어나온 반사파를 수신한다. 그리고 발사로부터 수신까지의 시간을 계측함으로써 센서와 물체의 거리를 측정할 수 있다.
(해저의 지도를 작성하거나, 어업시의 어군 탐지에도 사용된다고 한다)

소재



- 초음파 거리 센서 HC-SR04
기본 거리 측정을 처리하는 모듈. 필요한 것이 모두 막혀 있기 때문에, 브레드 보드에 직접 꽂아 사용할 수 있다고 하는 뛰어난 것.

- ArduinoUno
마이크로 컴퓨터 보드. 

- 점퍼 와이어

- 브레드보드

연결



· VCC 5V의 전력을 공급하는 전원
· Trig 트리거 입력 핀 (2)
· Echo 수신기 출력 핀 (3)
・GND 그랜드. 마이너스



프로그램



우선 핀을 정의・초기 설정


const int trigPin = 2;
const int echoPin = 3;

double duration = 0;
double distance = 0;

void setup() {
Serial.begin( 9600 );
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {

}

왕복하여 음파가 돌아올 때까지의 시간을 time, 거기에서 계산하는 물체와의 거리를 duration으로 둔다.
시리얼 모니터에 거리를 표시하고 싶기 때문에 Serial.begin

trigPin은 초음파를 발사하는 방아쇠와 같은 역할 => output
echoPin은 초음파를 수신하는 역할 => input

모듈 이동



여기서 사용하는 것이 pulseIn() 함수
펄스 (전류가 흐르는 간격)를 반환합니다.
예를 들면
pulseIn(2, HIGH);이면 2의 핀이 HIGH가 된 순간부터 LOW가 될 때까지의 시간을 돌려준다.
(공식 참조 pulseIn 함수)

이 함수를 사용하여 echoPin이 음파를 얻는 데 걸리는 시간을 측정 할 수 있습니다.
void loop() {
  digitalWrite(trigPin, LOW); #両方のピンをLOWに指定して初期化
  digitalWrite(echoPin, LOW);
  delayMicroseconds(1);
  digitalWrite(trigPin, HIGH); #超音波パルスを発射
  delayMicroseconds(10); #10us続ける(最低でも10usだそう)
  digitalWrite(trigPin, LOW); #発射停止
  duration = pulseIn(echoPin, HIGH); #超音波が跳ね返ってくるまでの時間
}

거리 계산



이대로라면 음파가 돌아올 때까지의 시간밖에 모르기 때문에, 알기 쉬운 단위, 길이(cm)로 변환하고 싶다.

Distance = (ECHO high level time X ultrasonic
velocity (Speed ​​of Sound in air 340m/sec)/2, you can calculate the distance to
the obstacle
HC-SR04 데이터시트에서 인용

echoPin이 HIGH가 되는 시간(duration) × 음파의 속도(음속의 340m/초) ÷ 2
이 방정식으로 거리를 측정 할 수 있습니다. 왜 2로 나누는가 하면, 음파를 발사해 돌아왔을 때, 음파는 물체간의 거리의 2배 움직이고 있기 때문.

!단위를 맞추자



duration의 값은 μs(μ는 10의 -6승, 0.000001)
1μs = 0.000001s
또한 단위는 cm로 하고 싶기 때문에 340m = 34000cm

식은 duration × 0.000001 × 34000 ÷ 2
void loop() {
///省略
  duration = duration * 0.000001 * 3400 / 2
  Serial.println(duration);
  Serial.println(" cmです");
}

코드 전부


const int trigPin = 2;
const int echoPin = 3;

double duration = 0;
double distance = 0;

void setup() {
  Serial.begin( 9600 );
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  digitalWrite(trigPin, LOW);
  digitalWrite(echoPin, LOW);
  delayMicroseconds(1);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);   
  duration = duration * 0.000001 * 34000 / 2;
  Serial.print("距離は");
  Serial.print(duration);
  Serial.println(" cmです");
}

동작 확인





물체 사이의 거리 10cm일 때 시리얼 모니터의 표시 ⇩ 피 c. 라고 r. 이 m / 또는 6cs26 그 y — choco#JC 프로그래머 (@choco_JC_prog)


오차는 2mm 정도, 장애물 탐지에는 문제 없을 것 같다.

정확한 계측을 위해 온도 센서·적외선 센서도 향후 사용해 나가고 싶다.


좋은 웹페이지 즐겨찾기