[아두이노 강좌] 초음파 센서를 이용하여 LED 카운터 만들기

Edgar 2016-03-24 (목) 18:43 8년전 10866  

 

안녕하세요 Edgar입니다.

 

80bcc70414bac651cb0b6cfcb103a15c_1458812
 

 

이번에는 초음파 센서를 이용하여 1, 2, 3을 세는 LED 카운터를 만들어 보겠습니다.

 

 80bcc70414bac651cb0b6cfcb103a15c_145881280bcc70414bac651cb0b6cfcb103a15c_145881280bcc70414bac651cb0b6cfcb103a15c_1458812
80bcc70414bac651cb0b6cfcb103a15c_145881280bcc70414bac651cb0b6cfcb103a15c_1458812 

 

준비물은 초음파 센서1개, 220옴 저항 3개, LED 3개, 아두이노 보드 1개, 점퍼선들이 되겠습니다.

 

 

 

회로도입니다.

 

80bcc70414bac651cb0b6cfcb103a15c_1458812
 

 

 

LED는 저항을 통해 11 10 9 번 핀에, 초음파 센서는 13 12번 핀에 연결하여 주시면 됩니다.

 

80bcc70414bac651cb0b6cfcb103a15c_1458812
 

회로도대로 연결을 하여 주셨으면, 소스코드를 입력하여 줍니다.

 

int trigPin = 13;

int echoPin = 12;

 

int led1 = 11;

int led2 = 10;

int led3 = 9;

 

unsigned long Time;

 

//mills를 사용하기 위해 시간변수를 줍니다

 

int enable = 1;

int i = 0;

 

void setup()

{

  Serial.begin(9600);

  pinMode(trigPin, OUTPUT);

  pinMode(echoPin, INPUT);

 

//트리거 핀과 에코핀을 각각 발신과 수신으로 설정합니다.

 

  pinMode(led1, OUTPUT);

  pinMode(led2, OUTPUT);

  pinMode(led3, OUTPUT);

 

//LED 핀들을 전부 출력 핀으로 설정합니다.

 

  Time = millis();

 

}

 

int state = 0;

 

void loop()

{

  long duration, distance;

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);

  distance = duration / 1600;

 

//초음파 센서로 거리를 재는 코드입니다. distance = duration /1600;에서 굳이 1600이 아니더라도 적당한 거리를 재신 후 나누었을때 결과 값이 가능한 한 1자리수로 나올 수 있도록 설정하여 주세요

 

  if (distance >= 1)

  {

    distance = 1;

  }

  Serial.println(distance);

  delay (50);

 

//duration 을 1600으로 나누었으나 0과 1 뿐만이 아닌 그 이상의 값이 나왔을 때를 대비하기 위해 distance가 1 이상이면 distance는 1이 되도록 설정하였습니다.

 

  if (!distance) {

    if (state == 0)

    {

      state = 1;

    }

 

  }

 

//만약 distance의 값이 반전되었을때 state의 값이 0이라면 state의 값을 1로 만들어 주는 함수입니다.

//눌렀다가 떼면 반응하는 스위치를 만들때 자주 사용합니다.

 

  else

  {

    if (state == 1)

    {

      i += 1;

      i = (i > 3 ? 0 : i);

    }

    state = 0;

  }

  Serial.println(i);

 

//또는 만약 state의 값이 1이라면 숫자를 1씩 더해주도록 합니다. 삼항 연산자를 사용하여 i가 3보다 커지면 0이 되도록 하였습니다.

 

  if (i == 0)

  {

    digitalWrite(led1, LOW);

    digitalWrite(led2, LOW);

    digitalWrite(led3, LOW);

  }

 

//i가 0일때 LED를 전부 끕니다.

 

  else if (i == 1)

  {

    digitalWrite(led1, HIGH);

    digitalWrite(led2, LOW);

    digitalWrite(led3, LOW);

  }

 

//i가 1일때 LED를 하나 켭니다.


  else  if (i == 2)

  {

    digitalWrite(led1, HIGH);

    digitalWrite(led2, HIGH);

    digitalWrite(led3, LOW);

 

//i가 2일때 LED를 둘 켭니다.

 

  }

  else if (i == 3)

  {

    digitalWrite(led1, HIGH);

    digitalWrite(led2, HIGH);

    digitalWrite(led3, HIGH);

 

//i가 3일때 LED를 셋 켭니다.


  }

}

 

 

 

업로드 하신 후 동작을 확인하여 보면,

 

초음파 센서 위로 가렸다가 뗄 때 LED의 갯수가 1 2 3씩 점점 증가하는 것을 볼 수 있습니다.

 

그리고 3이 넘어가면 LED가 전부 꺼지게 되죠.

 

state가 0과 1로 반전 될 때마다 i의 값이 1씩 증가하도록 하였고, i의 값에 따라 LED가 켜지는 갯수를 조정하였기 때문입니다.

 

 

 

마지막으로 동작영상입니다.

 

감사합니다!
메카리워즈 Image Map


모바일 버전으로 보기