개발자/Arduino

Nano 33 IoT HC-SR04 거리 센서 코드

지구빵집 2021. 10. 9. 18:41
반응형

 

 

Nano 33 IoT HC-SR04 거리 센서 사용하기

 

HC-SR04 거리 센서는 2cm – 4m 범위에서 합리적으로 신뢰할 수 있는 거리 판독 값을 제공하는 저렴하고 유비쿼터스한 거리 센서입니다. 이 실습에서는 이 센서를 Arduino 마이크로컨트롤러와 함께 사용하는 방법을 배웁니다. 아래 그림은 초음파 거리센서 실습을 진행하기 위해 필요한 부품입니다.

 

마이크로컨트롤러.  여기에 표시된 것은 Arduino Nano 33 IoT이지만 Uno도 작동합니다.
점퍼 와이어.  미리 절단된 솔리드 코어 점퍼 와이어를 사용할 수도 있습니다.
무납땜 브레드보드
초음파 센서, 모델 HC-SR04.  센서에는 2개의 원통형 변환기와 보드 하단에 4개의 핀이 있으며 왼쪽에서 오른쪽으로 Vcc, Trig., Echo, Ground로 레이블이 지정되어 있습니다.

 

 

센서 작동 방식

 

HC-SR04 센서는 40KHz 초음파 신호를 보내고 대상에서 반사되어 센서로 돌아올 때까지 기다립니다. 공기 중 음속은 상당히 일정하므로 음이 되돌아오는 데 걸리는 시간을 읽으면 대상까지의 거리를 추정할 수 있습니다.

 

센서를 작동하려면 센서의 트리거 핀에 10마이크로초의 로우-하이 펄스를 보냅니다. 이것은 센서가 초음파 신호를 보내도록 합니다. 그런 다음 에코 핀의 펄스 길이를 측정하여 신호가 반환되는 데 걸린 시간을 알 수 있습니다. 

 

회로

 

이 센서는 5V에서 작동합니다. Uno의 경우 이것이 보드의 기본 공급 전압입니다. Nano 33 IoT와 같은 3.3V 보드를 사용하는 경우 5V로 전원을 공급하고 있는지 확인해야 합니다. USB 입력 또는 5V 소스를 사용하는 경우 외부 전압 입력에서 얻을 수 있습니다. 센서의 전압 입력을 USB에 연결할 때 5V를 출력해야 하는 VUSB 핀에 연결하거나 Nano 33 IoT에 5V로 전원을 공급하는 경우 Vin 핀에 연결해야 합니다.

 

아래 이미지는 Arduino Nano 33 IoT에 연결된 센서의 회로도와 브레드보드 레이아웃을 보여줍니다. 

 

 HC-SR04 초음파 센서에 연결된 Arduino Nano 33 IoT의 브레드보드 보기.  센서의 Trigger 핀은 Arduino의 디지털 핀 9에 연결되고 센서의 Echo 핀은 Arduino의 디지털 핀 10에 연결됩니다. 센서의 접지는 Arduino의 접지에 연결되고 Vcc는 Arduino의 Vin 핀(만약 Arduino는 USB 또는 기타 5V 소스) 또는 VUSB 핀(Arduino가 더 높은 전압 소스에 의해 전원이 공급되는 경우)으로 전원이 공급됩니다.

 

HC-SR04 초음파 센서에 연결된 Arduino Nano 33 IoT의 개략도.

 

아래 그림처럼 Arduino Uno에 부착된 센서의 개략도와 브레드보드 레이아웃을 보여줍니다. Uno는 5V에서 작동하므로 Uno의 +5V 출력 핀을 사용하여 센서에 전원을 공급할 수 있습니다. 

 

HC-SR04 초음파 센서에 연결된 Arduino Uno의 브레드보드 보기. 센서의 Trigger 핀은 Arduino의 디지털 핀 9에 연결되고 센서의 Echo 핀은 Arduino의 디지털 핀 10에 연결됩니다. 센서의 접지는 Arduino의 접지에 연결되고 Vcc는 Arduino의 +5V 출력 핀에 연결됩니다.

 

 HC-SR04 초음파 센서에 연결된 Arduino Uno의 개략도. 센서의 핀은 그림  7에 설명된 대로 마이크로컨트롤러에 연결됩니다 .

 

코드

 

센서를 읽기 위한 스케치는 위에 설명된 지침을 따릅니다. 먼저 트리거 핀을 낮추십시오. 그런 다음 트리거 펄스를 시작하기 위해 높은 값을 취한 다음 10 마이크로초를 기다립니다. 그런 다음 다시 낮추어 트리거 펄스를 종료합니다. 그런 다음 pulseIn() 명령을 사용하여 에코 핀의 펄스 길이를 측정합니다. 그런 다음 펄스 시간을 센티미터로 변환하는 수학을 하면 끝입니다. 

 

// set up pin numbers for echo pin and trigger pins:
const int trigPin = 9;
const int echoPin = 10;
 
void setup() {
  // set the modes for the trigger pin and echo pin:
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  // initialize serial communication:
  Serial.begin(9600);
 
}
 
void loop() {
  // take the trigger pin low to start a pulse:
  digitalWrite(trigPin, LOW);
  // delay 2 microseconds:
  delayMicroseconds(2);
  // take the trigger pin high:
  digitalWrite(trigPin, HIGH);
  // delay 10 microseconds:
  delayMicroseconds(10);
  // take the trigger pin low again to complete the pulse:
  digitalWrite(trigPin, LOW);
 
  // listen for a pulse on the echo pin:
  long duration = pulseIn(echoPin, HIGH);
  // calculate the distance in cm.
  //Sound travels approx.0.0343 microseconds per cm.,
  // and it's going to the target and back (hence the /2):
  int distance = (duration * 0.0343) / 2;
  Serial.print("Distance: ");
  Serial.println(distance);
  // a short delay between readings:
  delay(10);
}

 

감지 영역 지우기

 

모든 거리 센서는 신호를 보내고 특정 감지 시야에서 응답을 수신합니다. 그림 9는 거리 센서의 일반적인 시야를 보여줍니다. 필드는 원뿔 모양의 센서에서 이동합니다. 센서에 가장 가까이 있는 것은 작고, 센서로부터의 거리가 멀어질수록 넓어집니다. 시야에서 가장 가까운 물체가 감지된 물체입니다. 시야 밖에 서 있는 사람은 센서로 감지할 수 없습니다. 

 

위에서 본 거리 센서, 시야가 당겨진 상태. 시야 밖의 가까운 사람은 감지되지 않지만 시야 안에 있는 멀리 있는 사람은 감지됩니다.

 

마찬가지로 시야에 있는 물체는 의도 여부에 관계없이 감지될 수 있습니다. 그림 10은 테이블 위에 놓인 초음파 센서를 보여줍니다. 센서의 시야는 센서에서 확장되고 센서에서 몇 센티미터 떨어진 테이블과 교차합니다. 이렇게 하면 센서가 더 먼 대상을 포착하지 못합니다. 

 

테이블 위에 놓인 초음파 센서의 사진.  센서의 시야는 센서에서 몇 센티미터 떨어진 테이블에 의해 차단됩니다.

 

거리 센서에 대한 자세한 내용은 거리 센서: 기본 사항을 참조하세요 . 

 

 

참고

Lab: Ultrasonic Distance Sensor 

 

 

반응형