본문 바로가기

아두이노(arduino)

아두이노 초음파센서 사용법 / 예제코드 / 활용아이디어

초음파센서란?

 

초음파 센서는 초음파 즉, 소리를 이용하여 거리를 측정하는 센서입니다. 초음파란 인간이 들을 수 없는 고주파음으로, 일반적으로 20kHz 이상의 주파수를 가집니다. 초음파 센서는 초음파 발생기와 초음파 수신기로 이루어져 있습니다. 초음파 발생기는 일반적으로 파이조너(Piezoelectric) 소자를 사용하여 초음파를 생성하며, 초음파 수신기는 초음파가 반사되어 돌아오는 시간을 측정하여 거리를 계산합니다.

 

파이조너(Piezoelectric) : 압력이나 충격이 가해지면  전기적 신호가 만들어짐

 


아두이노와 같은 마이크로컨트롤러를 이용하여 초음파 센서를 제어할 수 있으며, 거리 측정 데이터를 이용하여 로봇의 움직임 제어, 장애물 회피 등의 작업을 수행할 수 있습니다. 초음파 센서는 적외선 센서와는 달리, 물체의 색이나 형태에 영향을 받지 않으므로, 다양한 환경에서 사용이 가능합니다.

 

<요약>
초음파 센서는 고주파 음파(소리)를 방출하고 물체에 부딪힌 후 파동이 되돌아 오는 데 걸리는 시간을 측정하는 장치입니다.

 

 

 


 

 

초음파센서를 이용한 아이디어

 

 

보안 시스템

초음파 센서는 보안 시스템에서 침입자를 감지하는 데 사용할 수 있습니다. 누군가가 제한 구역에 들어가면 센서에서 방출되는 음파가 침입자에게서 반사되어 수신기로 돌아와 경보를 울립니다.

 

 

자율주행차

초음파 센서는 자율주행차의 핵심 부품입니다. 이 센서는 장애물을 감지하고 차량이 주변을 안전하게 탐색할 수 있도록 도와줍니다. 초음파 센서는 카메라와 레이더 센서가 효과적이지 않을 수 있는 주차와 같은 저속 상황에서 특히 유용합니다.

 

 

스마트 조명

초음파 센서는 실내에 사람이 있는지 감지하고 그에 따라 조명을 조정하기 위해 스마트 조명 시스템에 사용할 수 있습니다. 이 기술은 에너지를 절약하고 건물 거주자에게 보다 편안한 환경을 조성합니다.

 

 

근접 감지

초음파 센서는 터치리스 스위치 및 자동문과 같은 애플리케이션에서 근접 감지에 사용할 수 있습니다. 이 센서는 물리적 접촉 없이 물체의 존재를 감지할 수 있으므로 위생이 중요한 환경에 이상적입니다.

 

 

초음파 세척

초음파 센서는 표면에서 먼지와 이물질을 제거하기 위해 청소 응용 분야에 사용할 수 있습니다. 이 기술은 보석 세척, 산업용 부품 세척 및 의료 기기 살균에 일반적으로 사용됩니다.

 

 

 


 

 회로도

 

 

경우에 따라 핀의 갯수나 방법이 조금씩 다를 수 있습니다. 

 

 

 

 

영상에서 확인할 수 있듯이 동그란 점을 가지고 움직이니 우측 하단 시리얼 모니터에 거리가 바뀌는 것을 확인할 수 있습니다. 연두색 범위내에서는 정상적으로 거리가 측정되는 것을 확인할 수 있으나 그렇지 않은 곳에 물체가 감지되면 빨간색으로 변하는 것을 볼 수 있는데 이것은 정상적으로 거리가 측정되지 않을 수 있다는 것을 표현해줍니다.  (최소, 최대 거리 및  좌우 각도 확인 필요)

 

아두이노에서 사용된 일반적인 초음파 센서의 최대 거리는 보통 3m 사이이며, 최소 거리는 일반적으로 3cm 사이입니다.

하지만, 실제 사용되는 초음파 센서의 최대 최소 거리는 센서 모델에 따라 다를 수 있습니다. 따라서 센서 제조사의 제품 정보를 확인하거나, 센서에서 제공되는 샘플 코드나 데이터 시트를 참조하여 최대 최소 거리를 확인하는 것이 좋습니다.

 

 

 예제코드

int trigPin = 12;    // 트리거 핀
int echoPin = 11;    // 에코 핀
long duration, cm, inches;  // 변수 선언
 
void setup() 
{
  Serial.begin(9600);   // 시리얼 통신 시작
  pinMode(trigPin, OUTPUT);   // 트리거 핀 출력 모드 설정
  pinMode(echoPin, INPUT);    // 에코 핀 입력 모드 설정
}
 
void ultra ()
{
  digitalWrite(trigPin, LOW);   // 트리거 핀에 LOW 신호 전달
  delayMicroseconds(5);         // 5 마이크로초 대기
  digitalWrite(trigPin, HIGH);  // 트리거 핀에 HIGH 신호 전달
  delayMicroseconds(10);        // 10 마이크로초 대기
  digitalWrite(trigPin, LOW);   // 트리거 핀에 LOW 신호 전달
 
  // 초음파 신호를 보낸 후, 센서가 되돌려주는 에코 신호를 읽음
  pinMode(echoPin, INPUT);      // 에코 핀 입력 모드 설정
  duration = pulseIn(echoPin, HIGH);  // 에코 핀에서 HIGH 신호를 읽음
 
  // 시간을 거리로 변환
  cm = (duration/2) / 29.1;     // 시간을 거리로 변환 (29.1로 나누기)
}

void loop() 
{
  ultra();    // 초음파 센서를 사용하여 거리 측정
  Serial.print(cm);  // 거리 값을 시리얼 모니터에 출력
  Serial.println();  // 새로운 줄로 이동하여 출력
  delay (1000);       // 1초 동안 대기
}

 

코드가 꽤 길죠??

 

이런 방법으로도 시도해볼 수 있습니다.

 

 

// 초음파 센서를 사용하기 위한 라이브러리를 추가합니다.
#include <NewPing.h>

// 초음파 센서의 핀 번호를 설정합니다.
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200

// NewPing 라이브러리를 사용하여 새로운 객체를 만듭니다.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
  // 시리얼 통신을 시작합니다.
  Serial.begin(9600);
}

void loop() {
  // 초음파 센서를 사용하여 거리를 측정합니다.
  unsigned int distance = sonar.ping_cm();

  // 거리를 시리얼 모니터에 출력합니다.
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  // 일정 시간을 기다립니다.
  delay(500);
}

 

위 코드와 조금 다르죠?  수학처럼 1+1은 2이면 좋겠지만 코딩은 작성하는 사람에 따라 조금씩 다를 수 있으며 누구는 100줄로만 모든 코드를 작성하는 반면에 또 누군가는 1000줄을 이용해 하는 사람도 있습니다.

 

아래 코드는 NewPing 이라는 라이브러리를 사용해 초음파센서의 계산을 도와줍니다.

즉, 계산법이 이렇다 저렇다 생각할 필요가 없다는 것이죠.

 

라이브러리 : 재사용 가능한 코드의 집합으로, 다른 프로그램에서도 사용할 수 있는 일련의 함수, 클래스, 변수 등을 제공하는 것입니다.