본문 바로가기

프로그래밍/아두이노03- 연습

아두이노 개발 연습 - 초음파센서와 LED를 사용한 거리측정기

이 페이지는 아두이노 개발 연습페이지입니다.


이 페이지에는 연습 및 여러 센서를 사용하여 응용하여 만들어보는 페이지로 사용해보겠습니다.


이번에는 많이 사용하는 초음파센서를 사용/응용한 아두이노를 만들어보았다.


기본적으로 초음파센서(hc-sr04)를 사용할것이며




<HC-SR04 모듈> - 최소 2cm - 최대 400cm까지 측정가능


거리에 따른 led켜짐을 응용하였다. 총 6개의 led를 사용하였으며 3개는 초록, 2개는 노랑, 1개는 빨강으로서


가까우면 초록1개 멀어질수록 led가 많이 켜지는 방식을 택하였다.



위와 같이 최종 회로가 구성되었다.


아두이노는 100%호환보드인 korduino를 사용하였으며(왼쪽 빨간색보드) 빵판에 엘이디 6개와 초음파센서를 간단히 달았다. 




이번 개발연습에서는 아두이노에 프로그램을 삽입한 뒤 실사용이 가능토록


중국산 짝퉁 SAMSUNG - 베터리 파워팩을 사용하였다.(output 5v/1a)


다소 아두이노의 전압/전류량이 작긴하지만 실제 작동하는데에는 문제가 없었다.




거리가 최대로 멀어졋을때는 위와 같이 모든 불이 다 켜진다.



최대로 가까이 했을때는 불이 모두 꺼지도록 하였다.



약 10cm이상 떨어졋을때 led1개가 켜진다.



40cm이상 떨어졌을때 led2개가 켜진다.


아래는 해당 코드.



#define tP 13

#define eP 12

#define led1 2

#define led2 3

#define led3 4

#define led4 5

#define led5 6

#define led6 7


void setup()

{

  Serial.begin(9600);

  pinMode(tP,OUTPUT);

  pinMode(eP,INPUT);

  pinMode(led1,OUTPUT);

  pinMode(led2,OUTPUT);

  pinMode(led3,OUTPUT);

  pinMode(led4,OUTPUT);

  pinMode(led5,OUTPUT);

  pinMode(led6,OUTPUT);

  

  digitalWrite(led1,LOW);

  digitalWrite(led2,LOW);

  digitalWrite(led3,LOW);

  digitalWrite(led4,LOW);

  digitalWrite(led5,LOW);

  digitalWrite(led6,LOW);

  

  

}


long microToCenti(long mic)

{

  return mic/29/2;

}

void loop(){


   long duration, cm;

   

   digitalWrite(tP,LOW);

   delayMicroseconds(2);

   

   digitalWrite(tP,HIGH);

   delayMicroseconds(10);


  digitalWrite(tP,LOW);

  

  duration=pulseIn(eP,HIGH);

  

  cm = microToCenti(duration);


  if(cm>10)

  {

    digitalWrite(led1,HIGH);

  }else{

    digitalWrite(led1,LOW);

  }

  

  if(cm>40)

  {

    digitalWrite(led2,HIGH);

  }else{

    digitalWrite(led2,LOW);

  }

  if(cm>80)

  {

    digitalWrite(led3,HIGH);

  }else{

    digitalWrite(led3,LOW);

  }

  if(cm>130)

  {

    digitalWrite(led4,HIGH);

  }else{

    digitalWrite(led4,LOW);

  }

  if(cm>160)

  {

    digitalWrite(led5,HIGH);

  }else{

    digitalWrite(led5,LOW);

  }

  if(cm>200)

  {

    digitalWrite(led6,HIGH);

  }else{

    digitalWrite(led6,LOW);

  }

  

  Serial.print(cm);

  Serial.println("cm");

  

  delay(100);

  


}



감사합니다.