초음파 센서로 다음과 같이 작동하는 아두이노 프로그램을 작성해 보자.
❶ 장애물이 30cm 밖에 있다면 부저는 울리지 않는다.
❷ 30cm 이내 10cm 바깥에 있다면 0,5초 주기로 삑삑거린다.
❸ 10cm보다 안쪽에 있다면 연속적인 삐~ 신호를 울린다.
마치 자동차의 후방 경고음과 같이 동작하게끔 하는 것이다.
실험에서는 초음파 센서는 7번 핀에, 부저는 11번 핀에 달려있다고 가정한다. 다음 예제를 잘 분석해 보고 각자 응용해 보자.
#define ULTRA_SONIC_SENSOR 7#define BUZ 11void 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.31ffloat 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;elsereturn ulPulseTime / MS_PER_CM;} |
여기서 measureDist()함수는 이전 포스트에서 작성한 함수를 그대로 사용하였다.
'하드웨어 > 아두이노' 카테고리의 다른 글
아두이노 실습에 많이 사용되는 센서들 (0) | 2015.06.08 |
---|---|
아두이노 IDE 1.6.4에서 due 보드 추가하기 (0) | 2015.06.05 |
아두이노 TWI(I2C) 통신 클럭 주파수 변경하기 (0) | 2015.05.29 |
아두이노 TWI(I2C) 통신으로 멀티바이트 데이터 전송하기 (0) | 2015.05.29 |
아두이노 TWI 멀티바이트 전송 실험 (dc모터) (0) | 2015.05.29 |