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

아두이노 초음파 거리 측정 프로젝트: HC-SR04 센서로 정밀 거리 감지하기

아두이노를 이용한 초음파 거리 측정 프로젝트

초음파 거리 측정은 최근 다양한 응용 분야에서 유용한 도구입니다. 위치 확인, 위치 파악, 치수 측정, 선택, 레벨 측정, 제어, 프로파일링 등 다양한 분야에 활용됩니다. 출력 값으로 수학적 계산을 수행하면 속도와 다양한 물리적 치수도 측정할 수 있습니다. 로봇공학 분야에서도 응용됩니다.

이러한 응용을 고려하여 초음파 센서는 물리적 접촉 없이 소거리를 측정하는 훌륭한 도구입니다. 에코(ECHO) 개념을 사용하여 거리를 측정합니다. 이 프로젝트에서는 HC-SR04 센서 모듈을 아두이노와 인터페이스하고 16×2 LCD에 거리를 표시하는 방법을 배웁니다.

거리 측정 프로젝트 회로도

아두이노 초음파 거리 측정 프로젝트: HC-SR04 센서로 정밀 거리 감지하기

인터페이스는 정말 간단합니다. 회로도만 따라하면 됩니다. 먼저 초음파 센서의 Trig와 Echo 핀을 아두이노 우노의 A4와 A5에 연결하고, VCC와 GND를 아두이노의 5V와 GND에 연결하세요.

이제 아두이노와 연결된 16×2 LCD에 거리를 표시합니다. LCD의 RS와 EN 핀을 아두이노의 디지털 핀 12와 11에 각각 연결하세요. 이제 LCD의 D4-D7을 아두이노의 디지털 핀 5-2에 연결하세요. 회로도에 표시된 대로 LCD 콘트라스트 제어용 10K 포텐셔미터도 연결했습니다.

필요한 구성 요소

초음파 센서 모듈

여기서 사용된 센서 모듈은 HC-SR04로, 비접촉 초음파 측정 장치입니다. 이 작은 모듈은 2cm~400cm 범위 내 거리를 측정할 수 있습니다. 매우 정확한 센서로 최대 3mm까지 측정 가능합니다.

센서는 초음파 송신기와 수신기로 구성됩니다. 작동 원리는 매우 간단합니다. 먼저 IO 트리거가 10μs 동안 하이 레벨 신호를 보냅니다. 그러면 센서 모듈이 40kHz 초음파 8사이클을 발사하고 펄스 신호가 수신되는지 감지합니다. 신호가 수신되면 하이 레벨을 통해 IO 트리거가 하이 상태를 유지한 시간 지속 시간이 신호 발사부터 수신까지의 시간이 됩니다.

거리 = (하이 레벨 시간 × 공기 중 음속(340m/s)) / 2

타이밍 다이어그램

위에서 논의한 대로 모듈은 소리의 에코(ECHO) 원리로 작동합니다. 모듈 트리거를 위해 약 10μs 동안 펄스를 보냅니다. 이 과정 후 모듈은 40kHz 초음파 8사이클을 발사하고 반사 여부를 확인합니다. 장애물이 있으면 신호가 장애물에 부딪혀 수신기로 돌아옵니다. 이제 위에서 논의한 간단한 공식으로 거리를 계산합니다. 이 시간은 장애물까지 도달하고 수신기로 돌아오는 총 시간이므로 장애물까지 도달하는 시간은 총 시간의 절반입니다. 그래서 2로 나눕니다. 이 센서의 타이밍 다이어그램은 아래와 같습니다:아두이노 초음파 거리 측정 프로젝트: HC-SR04 센서로 정밀 거리 감지하기

기술 사양
초음파 센서 HC-SR04 핀아웃

위에서 논의한 대로 모듈은 소리의 에코 원리로 작동합니다. 모듈을 마이크로컨트롤러와 연결하면 먼저 Trig 핀을 통해 모듈을 트리거하고 10μs 동안 하이 레벨 펄스를 보냅니다. 그런 다음 에코 수신을 기다립니다. 마이크로컨트롤러가 시간을 계산할 수 있습니다. 그리고 위에서 논의한 공식으로 거리를 계산합니다.

아두이노 우노

아두이노는 많은 소규모 및 대규모 임베디드 프로젝트에서 널리 사용되는 오픈 소스 마이크로컨트롤러입니다. 이 프로젝트에서 사용된 아두이노는 아두이노 우노입니다. 이 아두이노를 사용하는 이유는 저렴하고 인터페이스하기 쉽기 때문입니다. 보드는 14개의 디지털 I/O 핀과 6개의 아날로그 핀을 제공합니다. 마이크로컨트롤러는 오픈 소스이므로 사용자가 원하는 대로 보드와 소프트웨어를 수정할 수 있습니다.

16×2 LCD 모듈

이 모듈은 임베디드 프로젝트에서 흔히 사용되며, 저렴하고 마이크로컨트롤러와 인터페이스하기 쉽습니다. 계산기, 멀티미터 등에서 이런 유형의 디스플레이를 보셨을 것입니다. 여기서 사용된 LCD 모듈은 한 줄에 16문자를 표시할 수 있고 2줄이 있습니다. 즉, 기본적으로 16열 2행입니다. 표시되는 각 문자는 5×8 픽셀(픽셀 매트릭스)로 구성됩니다.

전체 LCD의 총 픽셀을 계산하면 5×8×16×2=1280 픽셀로 상당히 많은 수입니다. LCD에 무언가를 표시하려면 문자 위치도 지정해야 합니다. 이는 정말 어려운 일입니다. 이를 관리하기 위해 HD44780이라는 IC가 사용됩니다. 이 IC는 마이크로컨트롤러에서 데이터와 명령을 가져와 처리하여 원하는 출력을 LCD에 인쇄합니다. 이 IC 덕분에 LCD 인터페이싱이 매우 쉬워집니다. 우리는 센서나 다른 모듈에서 출력을 표시하기 위해 많은 프로젝트에서 LCD를 사용할 수 있습니다. LCD 모듈의 몇 가지 기술 사양을 살펴보겠습니다.

LCD 핀 구성을 살펴보겠습니다.

16×2 LCD 핀아웃 및 설명

핀 번호 이름 설명
1 VSS 그라운드, 회로의 그라운드에 연결
2 VDD LCD 전원 공급(4.7V~5.3V), 일반적으로 5V
3 VE LCD 콘트라스트 조절용. 포텐셔미터를 이 핀에 연결하여 노브 조절로 다양한 콘트라스트 레벨 얻기
4 RS 레지스터 선택. 명령 및 데이터 레지스터 전환용. 마이크로컨트롤러에 연결
5 RW 읽기/쓰기. LCD 읽기 또는 쓰기용. 일반적으로 데이터 쓰기를 위해 그라운드에 연결
6 EN 인에이블 핀. 마이크로컨트롤러에 연결되어 데이터 확인을 위해 1 또는 0 신호 부여
7 데이터 핀 (0-7) 마이크로컨트롤러에서 LCD로 8비트 데이터 전송용. 4비트 모드로도 사용 가능(데이터 핀 4개만 연결)
8 A 애노드. LCD 백라이트용 양극 핀. 선택 사항. 백라이트 필요 시 사용. 백라이트 미사용 시 전류 소비 매우 적음(기술 사양 참조)
9 K 캐소드. LCD 백라이트용 음극 핀

아두이노와 LCD 기본 인터페이싱을 살펴보겠습니다. 간단한 코드로 LCD에 텍스트를 출력해 보겠습니다. 먼저 RS와 EN 핀을 아두이노의 디지털 핀 12와 11에 연결하세요. 이제 LCD의 D4-D7 핀을 아두이노의 디지털 핀 5-2에 연결하세요. 이제 RW, VSS, K를 그라운드에, VDD와 A를 아두이노의 5V에 연결하세요. 회로도에 표시된 대로 VE에 포텐셔미터를 연결하여 LCD 콘트라스트를 제어하세요.

이제 코딩 부분으로 넘어갑니다. 먼저 LCD용 LiquidCrystal.h 헤더 파일을 포함합니다.

#include <LiquidCrystal.h>

다음 두 줄에서 LCD에 연결된 아두이노 데이터 핀 변수를 정의하고 lcd 함수에 인수로 전달하여 아두이노에서 LCD로 데이터를 보낼 수 있게 합니다.

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

Setup 함수에서 lcd.begin() 함수로 LCD를 초기화했습니다. LCD가 16열 2행이므로 16과 2를 전달했으며 전체 LCD를 사용합니다. LCD 일부만 필요하다면 인수를 적절히 조정하세요.

다음 줄에서 'Hello, World!'를 출력합니다. 원하는 맞춤 메시지를 출력할 수 있지만 디스플레이 크기를 초과하는 메시지는 다음 줄에 출력되니 메시지를 적절히 조정하세요.

lcd.begin(16, 2);

lcd.print("Hello, World!");

Loop 함수에서 lcd.setCursor() 함수로 커서를 위치 (0,1)로 설정했습니다. 이후 메시지가 출력된 시간을 출력합니다.

lcd.setCursor(0, 1);

lcd.print(millis() / 1000);

코드 작성 후 아두이노 보드에 업로드하면 디스플레이에 메시지가 출력됩니다. 포텐셔미터 노브를 돌려 콘트라스트를 조절할 수 있습니다.

초음파 센서 거리 측정용 아두이노 프로그래밍

이 프로젝트의 코딩 부분은 정말 매우 쉽습니다. LCD용 헤더 파일 포함으로 시작합니다.

#include <LiquidCrystal.h>

다음 두 줄에서 아두이노의 핀 A4(핀 18)와 A5(핀 19)에 대한 매크로를 정의하여 핀 번호 대신 이름을 사용할 수 있게 합니다.

#define trig 18
#define echo 19

다음 줄들에서 아두이노에 연결된 LCD의 다양한 핀 변수를 정의하고 lcd 함수에 전달하여 LCD를 초기화합니다.

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

이제 거리 변수 'd'와 시간 변수 't'를 정의하고 0으로 초기화합니다.

float t=0, d=0;

이제 setup 함수로 넘어갑니다. 첫 줄에서 lcd.begin() 함수로 LCD를 초기화하고, 다음 두 줄에서 트리거와 에코 핀의 핀 모드를 각각 출력과 입력으로 정의합니다.

void setup() {
  lcd.begin(16,2);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

이제 loop 함수로 넘어갑니다. 먼저 lcd.clear() 함수로 LCD를 클리어하여 루프 반복마다 이전 출력이 현재 출력에 영향을 주지 않게 합니다. 다음 여섯 줄에서 10μs 동안 하이 레벨 펄스를 보내 초음파 센서를 초기화합니다. 우리가 알다시피 이 후 센서는 자동으로 40kHz 초음파 8사이클을 발사하고 반사 여부를 확인합니다. 다음 줄에서 센서로부터 시간을 가져옵니다. 그런 다음 거리를 계산합니다. 속도가 m/s 단위이므로 센티미터로 변환하기 위해 10000으로 나눕니다.

void loop() {
  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  t = pulseIn(echo, HIGH);
  d = t * 0.0340 / 2;
  d = t * 0.01330 / 2;
  lcd.setCursor(0, 0);
  lcd.print("Distance: ");
  lcd.print(d);
  lcd.print(" cm");
  delay(1000);
}

거리 측정 회로 작동 원리

코드 작성 후 아두이노에 업로드하면 준비 완료입니다. 이제 센서 앞에 물체나 손을 대보세요. LCD의 거리를 확인하세요. 센서에서 물체 거리를 계속 변경하면 꽤 정확한 거리를 얻을 수 있습니다.

10μs 동안 하이 레벨 펄스를 보내 센서를 초기화하면 센서는 40kHz 초음파 8사이클을 발사합니다. 이 사이클이 장애물에 의해 반사되면 수신기로 다시 반사됩니다. 이제 센서는 송신기에서 장애물까지, 그리고 장애물에서 수신기까지 초음파 신호가 이동하는 데 걸린 시간을 제공합니다. 우리는 이 시간을 사용하여 센서와 장애물 사이의 거리를 계산합니다.

아두이노 초음파 거리 측정 프로젝트: HC-SR04 센서로 정밀 거리 감지하기

산업기술

  1. 거리 센서 작동 원리와 주요 응용 분야
  2. 아두이노 센서: 종류, 응용, 실전 프로젝트
  3. PIR 센서 회로 작동 원리: 설계, 동작 및 실세계 응용
  4. 라즈베리 파이와 파이썬으로 원격 온도 센서 만들기 – 단계별 가이드
  5. 아두이노로 초음파 부양 장치 만들기: 단계별 가이드
  6. 아두이노와 스마트폰으로 만드는 스마트 전압계 – 초간단 DIY 프로젝트
  7. 스마트 IoT 자 제작: ESP8266, 아두이노 & 초음파 센서로 실시간 모니터링
  8. 아두이노 우노로 정밀 주파수 & 듀티 사이클 측정기 만들기
  9. 아두이노 나노와 RDA8057M으로 소형 FM 라디오 만들기
  10. 컴팩트 아두이노 레이더 시스템: HC-SR04 초음파 센서 & 1.8인치 디스플레이