레이블이 초음파센서인 게시물을 표시합니다. 모든 게시물 표시
레이블이 초음파센서인 게시물을 표시합니다. 모든 게시물 표시

2015년 6월 5일 금요일

아두이노를 이용한 초음파 센서로 장애물 경고하기 실험

 초음파 센서로 다음과 같이 작동하는 아두이노 프로그램을 작성해 보자.
    ❶ 장애물이 30cm 밖에 있다면 부저는 울리지 않는다.
    ❷ 30cm 이내 10cm 바깥에 있다면 0,5초 주기로 삑삑거린다.
    ❸ 10cm보다 안쪽에 있다면 연속적인 삐~ 신호를 울린다.
마치 자동차의 후방 경고음과 같이 동작하게끔 하는 것이다.

 실험에서는 초음파 센서는 7번 핀에, 부저는 11번 핀에 달려있다고 가정한다. 다음 예제를 잘 분석해 보고 각자 응용해 보자.

#define ULTRA_SONIC_SENSOR  7
#define BUZ 11
void setup() {
 Serial.begin(9600);
 pinMode(BUZ, OUTPUT);
}
void loop() {
 float fDist = measureDist();
 int iTmBuzOn = 0;
 int iTmBuzOff = 0;
        
 if (fDist > 30) {
   iTmBuzOn = -1;
 } else if (fDist > 10) {
   iTmBuzOn = 50;
   iTmBuzOff = 450;
 }  else {
   iTmBuzOn = 0;
 }
 
 if (iTmBuzOn == 0) {
   digitalWrite(BUZ, HIGH);
 } else if (iTmBuzOn > 0) {
   digitalWrite(BUZ, HIGH);
   delay(iTmBuzOn);
   digitalWrite(BUZ, LOW);
   delay(iTmBuzOff);
 } else {
   digitalWrite(BUZ, LOW);
 }
   Serial.print(fDist);
   Serial.println(" cm");
}
#define MS_PER_CM           58.31f
float measureDist() {
pinMode(ULTRA_SONIC_SENSOR, OUTPUT); //(1)단계
digitalWrite(ULTRA_SONIC_SENSOR, LOW); //(2)단계
delayMicroseconds(2);
digitalWrite(ULTRA_SONIC_SENSOR, HIGH); //(3)단계
delayMicroseconds(5);
digitalWrite(ULTRA_SONIC_SENSOR, LOW); //(4)단계
pinMode(ULTRA_SONIC_SENSOR, INPUT);
// (5) 단계
unsigned long ulPulseTime = pulseIn(ULTRA_SONIC_SENSOR, HIGH);
if (ulPulseTime == 0 )
  return -1.0f;
else
  return ulPulseTime / MS_PER_CM;
}

여기서 measureDist()함수는 이전 포스트에서 작성한 함수를 그대로 사용하였다.