산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

초음파 센서 HC-SR04 및 Arduino – 전체 가이드

<메인 클래스="사이트 메인" id="메인">

이 가이드에서는 HC-SR04 초음파 센서가 작동 및 Arduino와 함께 사용하는 방법 . 아두이노로 거리를 측정하고 장애물 회피 로봇을 만드는 데 가장 많이 사용되는 센서입니다.

저는 이미 몇 가지 멋진 Arduino 프로젝트를 구축하기 위해 HC-SR04 초음파 센서를 사용했으며 여기에서 확인할 수 있습니다.

다음 비디오를 보거나 아래에 작성된 튜토리얼을 읽을 수 있습니다. 사양, 핀 배치, 배선 다이어그램, 코드 등을 포함하여 센서에 대한 추가 정보와 예가 있습니다.

HC-SR04 하드웨어 개요

HC-SR04는 2cm ~ 400cm(약 1인치 ~ 13피트) 범위의 저렴하고 사용하기 쉬운 거리 측정 센서입니다.

센서는 두 개의 초음파 변환기로 구성됩니다. 하나는 초음파 펄스를 출력하는 송신기이고 다른 하나는 반사파를 수신하는 수신기입니다. 기본적으로 잠수함에서 수중 물체를 감지하는 데 사용되는 SONAR입니다.

주요 사양은 다음과 같습니다.

동작 전압 5V DC
현재 운영 중 15mA
작동 빈도 40KHz
최소 범위 2cm/1인치
최대 범위 400cm/13피트
정확도 3mm
각도 측정 <15°
차원 45 x 20 x 15mm

HC-SR04 초음파 센서 핀아웃

다음은 센서의 핀아웃입니다.

센서에는 4개의 핀이 있습니다. VCC GND 5V로 이동 GND Arduino의 핀과 Trig 에코 디지털 Arduino 핀으로 이동하십시오. 트리거 사용 핀을 통해 송신기에서 초음파를 보내고 에코 반사된 신호를 수신하는 핀입니다.

HC-SR04 초음파 거리 센서는 어떻게 작동합니까?

공기를 통해 이동하는 40,000Hz의 초음파를 방출하고 경로에 물체나 장애물이 있으면 모듈로 다시 반사됩니다. 이동 시간과 소리의 속도를 고려하여 거리를 계산할 수 있습니다.

초음파를 생성하려면 Trig 핀을 10μs 동안 High State로 설정해야 합니다. 그러면 음속으로 이동하는 8사이클 초음파 버스트가 전송됩니다. 에코 핀은 8사이클 초음파 버스트가 전송된 직후 하이가 되며, 수신을 시작하거나 해당 파동이 물체에서 반사되기를 기다립니다.

물체나 반사된 펄스가 없으면 Echo 핀은 38ms 후에 타임아웃되고 다시 낮은 상태로 돌아갑니다.

반사된 펄스를 수신하면 Echo 핀이 해당 38ms보다 빨리 내려갑니다. Echo 핀이 HIGH인 시간에 따라 음파가 이동한 거리, 즉 센서에서 물체까지의 거리를 결정할 수 있습니다.

이를 위해 우리는 거리 계산을 위해 다음과 같은 기본 공식을 사용하고 있습니다.

거리 =속도 x 시간

우리는 실제로 속도와 시간 값을 모두 알고 있습니다. 시간은 Echo 핀이 HIGH가 된 시간이고 속도는 340m/s의 음속입니다. 우리가 해야 할 한 가지 추가 단계가 있습니다. 그것은 최종 결과를 2로 나누는 것입니다. 그것은 음파가 물체로 이동하고 되돌아오는 데 필요한 시간을 측정하기 때문입니다.

Echo 핀이 2ms 동안 HIGH라고 가정해 보겠습니다. 거리 결과를 cm 단위로 얻으려면 음속 값을 340m/s에서 34cm/ms로 변환할 수 있습니다.

거리 =(속도 x 시간) / 2 =(34cm/ms x 1.5ms) / 2 =25.5cm.

따라서 Echo 핀이 2ms 동안 HIGH인 경우(pulseIn()을 사용하여 측정합니다. 기능), 센서에서 물체까지의 거리는 34cm입니다.

HC-SR04 초음파 센서를 Arduino에 연결하는 방법

HC-SR04 센서를 Arduino 보드에 연결하는 방법은 다음과 같습니다.

모듈의 접지 및 VCC 핀은 각각 Arduino 보드의 접지 및 5볼트 핀에 연결해야 하며 삼각 및 에코 핀은 Arduino 보드의 모든 디지털 I/O 핀에 연결해야 합니다.

이 튜토리얼에 필요한 구성요소는 아래 사이트에서 얻을 수 있습니다.

  • 초음파 센서 HC-SR04 ..................... 
  • 아두이노 보드 ...........................................................
  • 브레드보드 및 점프 와이어 ..... 

HC-SR04 초음파 센서 Arduino 코드

HC-SR04 초음파센서와 아두이노를 이용하여 거리를 측정하는 코드입니다.



/*
  Ultrasonic Sensor HC-SR04 and Arduino Tutorial

  by Dejan Nedelkovski,
  www.HowToMechatronics.com

*/
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;
void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600); // Starts the serial communication
}
void loop() {
  // Clears the trigPin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Reads the echoPin, returns the sound wave travel time in microseconds
  duration = pulseIn(echoPin, HIGH);
  // Calculating the distance
  distance = duration * 0.034 / 2;
  // Prints the distance on the Serial Monitor
  Serial.print("Distance: ");
  Serial.println(distance);
}Code language: Arduino (arduino)

코드 설명

먼저 Trig 및 Echo 핀을 정의해야 합니다. 이 경우 Arduino 보드의 핀 번호 9와 10이며 이름은 trigPin 및 echoPin입니다. 그런 다음 센서에서 가져올 이동 시간에 대해 'duration'이라는 이름의 Long 변수와 거리에 대한 정수 변수가 필요합니다.

// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;

// defines variables
long duration;
int distance;Code language: Arduino (arduino)

설정에서 trigPin을 출력으로 정의하고 echoPin을 입력으로 정의하고 직렬 모니터에 결과를 표시하기 위해 직렬 통신도 시작해야 합니다.

void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600); // Starts the serial communication
}Code language: Arduino (arduino)

루프에서 먼저 trigPin이 명확한지 확인해야 하므로 해당 핀을 2µs 동안 LOW 상태로 설정해야 합니다. 이제 Ultra sound wave를 생성하기 위해 trigPin을 HIGH State에서 10µs로 설정해야 합니다.

// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);Code language: Arduino (arduino)

pulseIn() 사용 함수에서 이동 시간을 읽고 그 값을 "duration" 변수에 넣습니다. 이 기능에는 2개의 매개변수가 있습니다. 첫 번째 매개변수는 Echo 핀의 이름이고 두 번째 매개변수는 우리가 읽고 있는 펄스의 상태(High 또는 Low)입니다.

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);Code language: Arduino (arduino)

이 경우 HC-SR04 센서가 송신기에서 8주기 초음파 버스트를 보낸 후 Echo 핀을 High로 설정하기 때문에 이것을 HIGH로 설정해야 합니다. 이것은 실제로 타이밍을 시작하고 반사된 음파를 수신하면 Echo 핀이 타이밍을 중지하는 Low로 이동합니다. 마지막에 함수는 펄스의 길이를 마이크로초 단위로 반환합니다.

거리를 구하려면 이 방정식을 이전에 설명한 대로 기간에 0.034를 곱하고 2로 나눕니다.

// Calculating the distance
distance= duration*0.034/2;

// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);Code language: Arduino (arduino)

마지막에 직렬 모니터에 거리 값을 인쇄합니다.

Arduino 초음파 센서 및 LCD 디스플레이 예

Arduino와 함께 초음파 센서를 사용하고 LCD에 결과를 표시하는 방법의 또 다른 예입니다.

초음파 센서와 LDC를 다음과 같이 연결할 수 있습니다.

거리를 측정하는 코드는 기본 예제와 거의 동일합니다. 여기서는 직렬 모니터에 결과를 인쇄하는 대신 LCD에 인쇄합니다. LCD를 Arduino와 사용하고 연결하는 방법에 대한 자세한 내용이 필요한 경우 내 특정 자습서에서 확인할 수 있습니다.

/*
  Ultrasonic Sensor HC-SR04 and Arduino Tutorial

  by Dejan Nedelkovski,
  www.HowToMechatronics.com

*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceCm, distanceInch;
void setup() {
  lcd.begin(16, 2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distanceCm = duration * 0.034 / 2;
  distanceInch = duration * 0.0133 / 2;
  lcd.setCursor(0, 0); // Sets the location at which subsequent text written to the LCD will be displayed
  lcd.print("Distance: "); // Prints string "Distance" on the LCD
  lcd.print(distanceCm); // Prints the distance value from the sensor
  lcd.print(" cm");
  delay(10);
  lcd.setCursor(0, 1);
  lcd.print("Distance: ");
  lcd.print(distanceInch);
  lcd.print(" inch");
  delay(10);
}Code language: Arduino (arduino)

NewPing 라이브러리를 사용한 예제 코드

실제로 HC-SR04 초음파 센서를 사용하여 거리를 측정하도록 Arduino를 프로그래밍하는 더 간단하고 더 나은 방법이 있습니다. 바로 NewPing 라이브러리를 사용하는 것입니다.

이전에 설명된 코드에서 수동으로 센서를 트리거하고 수신된 신호 펄스 지속 시간을 측정했습니다. 그런 다음 그 결과에 따라 거리를 계산했습니다. NewPing 라이브러리를 사용하면 단 한 줄의 코드로 거리를 얻을 수 있습니다.

다음은 예제 코드입니다:

#include <NewPing.h>

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 400 // Maximum distance we want to measure (in centimeters).


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(50);                    // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.

  int distance = sonar.ping_cm(); // Send ping, get distance in cm and print result (0 = outside set distance range)

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");
}Code language: Arduino (arduino)

이전 예제보다 훨씬 간단합니다. ping_cm() 호출만 사용합니다. NewPing 수중 음파 탐지기 개체에 대한 메서드를 사용하여 센티미터 단위로 거리를 얻습니다. 거리를 인치로 원하면 ping_in()을 사용할 수 있습니다. 대신.

라이브러리에는 다른 유용한 기능도 거의 없습니다. 예를 들어, ping_median(iterations [, max_cm_distance]) 방법을 사용하면 여러 측정에서 중앙값 또는 중간 값을 반환하므로 보다 정확한 결과를 얻을 수 있습니다. 반복 매개변수는 프로그램이 중간 값을 계산하기 위해 취할 샘플 수를 설정합니다. 기본값은 5회 반복입니다. ping_median() 수신된 펄스 지속 시간을 마이크로초 단위로 반환합니다.

그럼에도 불구하고 더 많은 정보와 세부 사항을 보려면 NewPing 위키 페이지를 확인하십시오.

DHT22 온도 센서로 HC-SR04 거리 센서 정확도 향상

HC-SR04 센서는 상당히 정확하지만 작동하는 것은 음속에 따라 달라지므로 보다 정확한 결과를 얻으려면 공기 온도도 고려해야 합니다. 음속은 공기 온도가 변하면 크게 변할 수 있습니다. 예를 들어, 20°C에서 음속은 약 340m/s이지만 -20°C에서 음속은 약 315m/s입니다. 상대 습도도 속도에 영향을 미칩니다.

따라서 이 센서를 사용하여 다양한 온도에서 거리를 측정하는 경우 온도 보상을 구현해야 하며 다음 공식으로 이를 수행할 수 있습니다.

속도 =331.4 + 0.6 x 온도 + 0.0124 x 상대 습도

다음은 예입니다:

HC-SR04 초음파 센서와 함께 DHT11 / DHT22 센서를 사용하여 환경의 온도와 습도를 측정하고 그에 따라 음속 값을 조정합니다.

Arduino 코드

/*
  Example made by Dejan, How To Mechatronics,
  https://howtomechatronics.com/

*/

#include <NewPing.h>  // https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home
#include "dht.h"      // https://github.com/RobTillaart/DHTlib

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 400
#define dht22 5 // DHT22 temperature and humidity sensor

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
dht DHT; // Creats a DHT object

int readDHT, temp, hum;
float speedOfSound, distance, duration;

void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(100);

  // Read temperature and humidity from DHT22 sensor
  readDHT = DHT.read22(dht22); // Reads the data from the sensor
  temp = DHT.temperature; // Gets the values of the temperature
  hum = DHT.humidity; // Gets the values of the humidity


  speedOfSound = 331.4 + (0.6 * temp) + (0.0124 * hum); // Calculate speed of sound in m/s

  duration = sonar.ping_median(10); // 10 interations - returns duration in microseconds
  duration = duration/1000000; // Convert mircroseconds to seconds
  distance = (speedOfSound * duration)/2;
  distance = distance * 100; // meters to centimeters

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");

}Code language: Arduino (arduino)

따라서 먼저 DHT22 센서에서 온도 및 습도 값을 읽은 다음 해당 값을 사용하여 음속을 계산합니다. 그런 다음 음파가 이동하는 시간을 마이크로초 단위로 구하여 초 단위로 변환하고 센서에서 물체까지의 거리를 센티미터 단위로 계산합니다.

HC-SR04 치수 및 3D 모델

다음 프로젝트를 만들 때 필요할 경우를 대비하여 HC-SR04 초음파 센서의 3D 모델을 만들었습니다. 아래 링크에서 다운로드할 수 있습니다.

이 3D 모델은 Thangs에서 찾아 다운로드할 수 있습니다.

HC-SR04 센서의 치수는 다음과 같습니다.

제조사에 따라 조금씩 다를 수 있으니 참고해주세요.

결론

그래서 우리는 Arduino와 함께 HC-SR04 초음파 센서를 사용하는 것에 대해 알아야 할 거의 모든 것을 다루었습니다. 비접촉 거리 측정, 존재 또는 물체 감지, 레벨 또는 위치 지정 등이 필요한 많은 DIY 전자 프로젝트에 적합한 센서입니다.

나는 이미 포스트 시작 부분에서 이 센서로 만든 프로젝트를 언급했습니다. 다음은 HC-SR04 센서와 Arduino를 사용하는 몇 가지 멋진 프로젝트입니다.

  • 터치리스 자동 모션 센서 휴지통
  • 손 제스처 스마트 조명 제어
  • 미니 음향 부상
  • 장애물 회피 로봇

이 튜토리얼을 즐기고 새로운 것을 배웠기를 바랍니다. 아래 댓글 섹션에서 언제든지 질문을 하고 30개 이상의 Arduino 프로젝트 전체 컬렉션을 확인하는 것을 잊지 마세요.


제조공정

  1. HC-SR04 초음파 센서란? 작동 및 응용
  2. Arduino 센서 – 유형 및 애플리케이션
  3. 초음파 센서(HC-SR04) + 라즈베리파이
  4. 라즈베리 파이의 HC-SR04 초음파 범위 센서
  5. DHT11 센서(LED 및 피에조 스피커 포함)
  6. FlickMote
  7. IOT - ESP8266, Arduino 및 초음파 센서를 사용하는 스마트 항아리
  8. Arduino가 있는 미니 레이더
  9. Arduino를 사용한 초음파 거리 감지기
  10. 알람, LCD 및 온도가 있는 초음파 센서