아래의 HC-SR04는 초음파 거리 센서 중 하나로
초음파를 발사하여 반사되어 오는 반사 신호를 받을 때까지의 시간을 확인하여 거리를 측정하는 센서 입니다.
소리의 속도인 340m/s를 이용하여 거리를 측정합니다.
HC-SR04 제품 스펙
HC-SR04는 4개의 핀이 있습니다.
1) Vcc : 전원을 공급받습니다
2) Trig : 초음파를 발신합니다
3) Echo : 초음파를 수신합니다
4) Gnd : 접지의 역할을 합니다
초음파를 이용한 거리측정의 원리는 다음과 같습니다.
1) Trig에서 초음파를 만들어 발신을 합니다.
2) 어떠한 물체에 닿게 되었을때 초음파는 다시 팅겨서 돌아오고,
3) 그 초음파를 Echo에서 수신합니다.
4) 이 때의 걸린 시간을 이용하여 거리를 측정합니다.
거리 = 속력×시간 이라는 공식을 이용합니다.
그림으로 표현하면 다음과 같습니다.
1. 한 개의 초음파 거리센서 사용법
아두이노 소스코드
//초음파 센서의 핀번호를 설정한다. int echoPin = 12; int trigPin = 13; void setup() { Serial.begin(9600); // trig를 출력모드로 설정, echo를 입력모드로 설정 pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { // 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다. digitalWrite(trig, LOW); digitalWrite(echo, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); // echoPin 이 HIGH를 유지한 시간을 저장 한다. unsigned long duration = pulseIn(echoPin, HIGH); // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다. float distance = ((float)(340 * duration) / 10000) / 2; Serial.print(distance); Serial.println("cm"); // 수정한 값을 출력 delay(500); } |
2. 여러 개의 초음파 거리센서를 사용하는 법
한 개의 초음파 거리센서를 사용하는 방법과 마찬가지로, 여러 개로 확장할 수 있지만
문제는 Trig와 Echo 핀을 사용해야하기 때문에 디지털핀 2개씩 추가로 필요하다는 점입니다.
이러한 문제를 해결하기 위해서 NewPing이라는 라이브러리를 사용할 수 있고,
초음파 거리센서 하나당 하나씩 디지털핀을 사용할 수 있습니다.
라이브러리는 다음의 링크에서 다운로드 받을 수 있습니다.
http://mechasolution.com/shop/board/view.php?id=sourcecode&no=119
라이브러리를 다운로드 받은 후에,
아두이노에서 스케치-라이브러리 포함하기-.ZIP 라이브러리 추가를 이용하여 라이브러리를 추가합니다.
위와 같이 하드웨어 연결을 한 후에는 다음의 소스코드를 업로드해서 사용해봅니다.
아두이노 소스코드
#include <NewPing.h> // trigger and echo pins for each sensor #define SONAR1 2 #define SONAR2 3 #define SONAR3 4 #define MAX_DISTANCE 1000 // maximum distance for sensors #define NUM_SONAR 3 // number of sonar sensors NewPing sonar[NUM_SONAR] = { // array of sonar sensor objects NewPing(SONAR1, SONAR1, MAX_DISTANCE), NewPing(SONAR2, SONAR2, MAX_DISTANCE), NewPing(SONAR3, SONAR3, MAX_DISTANCE) }; int distance[NUM_SONAR]; // array stores distances for each // sensor in cm void setup() { Serial.begin(9600); } void loop() { delay(50); updateSonar(); // update the distance array // print all distances Serial.print("Sonar 1: "); Serial.print(distance[0]); Serial.print(" Sonar 2: "); Serial.print(distance[1]); Serial.print(" Sonar 3: "); Serial.println(distance[2]); } // takes a new reading from each sensor and updates the // distance array void updateSonar() { for (int i = 0; i < NUM_SONAR; i++) { distance[i] = sonar[i].ping_cm(); // update distance // sonar sensors return 0 if no obstacle is detected // change distance to max value if no obstacle is detected if (distance[i] == 0) distance[i] = MAX_DISTANCE; } } |
링크바로가기: https://smartstore.naver.com/mechasolution_com/products/2855891646