Securing Keys

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

IT/IoT

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

GRACE_MJ 2020. 6. 7. 21:12

 

초음파센서

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

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

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

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

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

 

 

준비물

 - Arduino UNO R3

 - 초음파센서 (HC-SRO4)

 - 점퍼선

 - 브레드보드 (빵판)

 - UNO 케이블

 - LED 3개

 - (권장) 220Ω 저항

 

 

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

 

 

 

 

 

 

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

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

초음파 센서의 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);
  }
}

 

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

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

 

 

 

 

결과물입니다.

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

Comments