Arduino에서 초음파 센서 HC-SR04 사용
초음파 센서란?
초음파를 발사하고 어떤 물체에 부딪쳐 튀어나온 반사파를 수신한다. 그리고 발사로부터 수신까지의 시간을 계측함으로써 센서와 물체의 거리를 측정할 수 있다.
(해저의 지도를 작성하거나, 어업시의 어군 탐지에도 사용된다고 한다)
소재
- 초음파 거리 센서 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 정도, 장애물 탐지에는 문제 없을 것 같다.
정확한 계측을 위해 온도 센서·적외선 센서도 향후 사용해 나가고 싶다.
Reference
이 문제에 관하여(Arduino에서 초음파 센서 HC-SR04 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/maominionbsk54/items/e5fbdc52f51b11abbea3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)