아두이노 초음파센서 led - adu-ino cho-eumpasenseo led

Securing Keys

IT/IoT

[아두이노] 초음파센서 측정값을 바탕으로 LED 제어하기

GRACE_MJ 2020. 6. 7. 21:12

아두이노 초음파센서 led - adu-ino cho-eumpasenseo led

초음파센서

 - 초음파를 이용하여 사물이나 벽까지의 거리를 알려주는 센서

 - trig (발사하는 부분) + echo (받는 부분) 을 통해 초음파가 일정한 속도(340m/s)로 똑바로 날아감 (단, 경우에 따라 굴절 방향이 달라질 수 있음)

 - trig핀의 전압이 HIGH = 초음파 발사

 - echo핀의 전압이 HIGH = 초음파가 사물이나 벽을 맞고 돌아옴

 - 시간을 거리로 환산하는 방식으로 제어 가능

준비물

 - Arduino UNO R3

 - 초음파센서 (HC-SRO4)

 - 점퍼선

 - 브레드보드 (빵판)

 - UNO 케이블

 - LED 3개

 - (권장) 220Ω 저항

아두이노 초음파센서 led - adu-ino cho-eumpasenseo led

아두이노 GND는 브레드보드 - 라인, 아두이노 5V는 브레드보드 + 라인에 연결하여 아두이노의 전원과 브레드보드를 연결합니다

아두이노 초음파센서 led - adu-ino cho-eumpasenseo led

LED의 +극을 구부려 짧은 다리와 길이를 맞춰줍니다

아두이노 초음파센서 led - adu-ino cho-eumpasenseo led

LED를 브레드보드에 꽂아줍니다. 이때 저항이 있다면 저항도 +에 맞게 꽂아줍니다. 저는 급하게 저항이 없는 상황이라 그냥 진행했습니다.

아두이노 초음파센서 led - adu-ino cho-eumpasenseo led

보기 쉽게 색깔에 맞는 선을 점퍼선을 연결해주었습니다. 빨간 LED는 디지털 13번에, 노란 LED는 디지털 10번에, 초록 LED는 디지털 7번에 연결했습니다.

아두이노 초음파센서 led - adu-ino cho-eumpasenseo led

이제 초음파 센서를 연결하겠습니다. 초음파 센서 HC-SRO4는 vcc, trig, echo, gnd 이렇게 4개의 핀으로 이루어져 있습니다.

아두이노 초음파센서 led - adu-ino cho-eumpasenseo led

초음파 센서를 브레드보드에 핀이 서로 연결되지 않는 범위에서 꽂아주었습니다.

아두이노 초음파센서 led - adu-ino cho-eumpasenseo led

초음파 센서의 vcc를 아두이노 5V와 연결된 +라인에 꽂아주었습니다. 그리고 gnd는 아두이노 GND와 연결된 -라인에 꽂아주었습니다. 초음파를 발사하는 trig 핀은 아두이노 디지털 2번과 연결해주었습니다. 마지막으로 초음파를 받아주는 echo핀은 아두이노 디지털 3번과 연결해주었습니다. 

여기까지 했으면 초기 세팅은 끝입니다. 이제 코딩으로 넘어가면 됩니다.

int trig = 2, echo = 3;
int red = 13, yellow = 10, green = 7;

자신이 설정한 세팅에 맞게 위와 같이 변수를 저장해줍니다.

void setup() {

  Serial.begin(9600);
  // 핀모드 설정
  pinMode(trig, OUTPUT);  // 초음파 발사하는 trig 핀은 OUTPUT
  pinMode(echo, INPUT);   // 초음파 받아들이는 echo 핀은 INPUT
  pinMode(red, OUTPUT);   // 빨간 LED
  pinMode(yellow, OUTPUT);// 노란 LED
  pinMode(green, OUTPUT); // 초록 LED
}

초음파는 눈에 보이지 않기 때문에 시리얼 통신을 설정해주었습니다.

그리고 디지털 핀들을 위와 같이 핀모드로 초기설정 해줍니다. 

초음파를 발사하는 trig와 LED들은 OUTPUT, 초음파를 받아들이는 echo는 INPUT으로 설정해줍니다.

void loop() {
  float duration, distance; // 초음파 갔다가 돌아오는 시간과 거리 변수

  // 초음파 발사 
  digitalWrite(trig, HIGH); // 초음파 발사
  delay(1);   // 초음파 발사가 계속되지 않도록 제한
  digitalWrite(trig,LOW);

  // 초음파가 갔다가 돌아온 시간 저장
  duration = pulseIn(echo, HIGH); // trig 핀 HIGH ~ echo 핀 HIGH 사이의 시간 측정

  // 시간 → 거리(cm)로 환산
  distance = ((float)(duration * 340) / 10000) / 2;

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

  // 거리에 따라 LED 제어
  if (distance <= 10){  // 10cm 이내
    digitalWrite(green, LOW);
    digitalWrite(yellow, LOW);
    digitalWrite(red, HIGH);  // 빨간 LED on
  }else if(distance <= 20){ // 20cm 이내
    digitalWrite(green, LOW);
    digitalWrite(yellow, HIGH); // 노란 LED on
    digitalWrite(red, LOW);
  }else {
    digitalWrite(green, HIGH);  // 초록 LED on
    digitalWrite(yellow, LOW);
    digitalWrite(red, LOW);
  }
}

아두이노로 작성된 코드를 컴파일 해준 후, 오류를 수정해줍니다.

이제 아두이노로 코드를 업로드 해줍니다. (이때, 보드랑 포트 올바른지 확인 필수)

아두이노 초음파센서 led - adu-ino cho-eumpasenseo led

결과물입니다.

장애물이 가까이 접근할수록 빨간불이 들어오고, 멀수록 초록불이 들어오게끔 설정했습니다.