【 아두이노 센서#21】 HC-SR04 초음파 센서 다루기 #2
이번 시간은 초음파 센서 다루기 두 번째 시간으로, 초음파 경보회로를 만들어보려한다. 지난시간 초음파 센서를 이용해서 거리값을 계산해 낼 수 있었다. 이번시간은 이 거리값을 이용해서 특정 거리 영역으로 인지되면 경보음을 울리는 회로를 구성해보려 한다. 그리고 마치 자동차 범퍼에 달려 있는 접근 경보 센서 회로 처럼, 가까이 근접할 수록 신호음과 불 빛을 더 빨리 울리도록 해볼 것이다.
▶ 선수 학습 :
1. 초음파 센서 다루기 #1 강좌보기클릭☜
▶ 실습에 사용되는 부품 자료 ( HC-SR04 )
▶ 실습 목표 :
1. 초음파 신호의 반사된 시간을 이용해서 물체까지의 거리값을 계산할 수 있다.
2. 물체가 일정거리(40cm) 이하로 감지가 되면 경보음과 함께 LED가 깜빡이게 하고, 가까울 수록 점점 더 빠르게 반응 하도록 프로그래밍 한다.
3. 실습1은 스피커와 LED를 같이 묶어 포트 하나로 간단히 제어 해 볼 것이고, 실습2는 포트 두 개를 사용하여 각각 제어 해 볼 것이다(출력 공급이 조금 더 좋아짐)
▶ 실습 회로도면 :
(이미지 클릭하면 확대 가능)
※ 아두이노 포트의 작은 출력으로 소리와 함께 LED를 작동 시키기 때문에, 기본적으로 소리가 작게 날 수 있으며, 스피커는 와트(w) 수가 작은 것을 사용해야 들을 수 있다. 또한 진동판을 전류로 울려서 소리를 내는 방식의 스피커 보다는 피에조 타입의(압전) 스피커를 사용하는 것이 좋다.
※ 본 실습 처럼 단순한 음을 듣기 위한 회로에서는 스피커의 극성 구분은 크게 의미가 없다.
▶ 프로그램 코드 및 설명 :
/* 초음파 센서(HC-SR04 모듈)로 물체와의 거리측정하기 */
int distance;
int triggerPin = 7;
int echoPin = 6;
int alertPin=3; // 스피커 & LED 연결 핀 설정
void setup( ) {
Serial.begin(9600);
pinMode(triggerPin, OUTPUT); // 트리거 핀을 출력으로 설정
pinMode(echoPin, INPUT); // 에코 핀을 입력으로 설정
}
void loop( ) {
digitalWrite(triggerPin, LOW); // 트리거 핀 초기화
digitalWrite(echoPin, LOW); // 에코 핀 초기화
delayMicroseconds(2);
// 트리거 핀으로 10 us의 펄스를 발생
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
// 에코 핀 입력으로부터 거리 값을 cm 단위로 계산
distance = pulseIn(echoPin, HIGH) / 58;
Serial.println("Distance(cm) = " + String(distance));
delay(1000);
distance = distance>100? 100:distance;//100이상의 값은 모두100
if (distance < 40) { // 40 이하의 값부터 경보 시작
digitalWrite(alertPin,HIGH);
delay(10);
digitalWrite(alertPin,LOW);
delay(distance); // 거리가 가까울수록 음이 빨라지도록 딜레이값을 조정
}
}
▶ 실습 1 실행영상:
(전체화면 보기로 보세요)
▶ 아두이노 파일(다운) :
▶ 프로그램 코드 및 설명 :
int distance;
int alertLED=9; // LED 연결 포트
int alertBuzz=8; // Buzzer 연결 포트
int triggerPin = 7;
int echoPin = 6;
void setup() {
Serial.begin(9600);
pinMode(alertLED, OUTPUT); // 경보용 LED포트를 출력으로 설정
pinMode(alertBuzz, OUTPUT); // 경보용 Buzzer를 출력으로 설정
pinMode(triggerPin, OUTPUT); // 트리거 핀을 출력으로 설정
pinMode(echoPin, INPUT); // 에코 핀을 입력으로 설정
}
void loop() {
digitalWrite(triggerPin, LOW); // 트리거 핀 초기화
digitalWrite(echoPin, LOW); // 에코 핀 초기화
delayMicroseconds(2);
// ----- 트리거 핀으로 10us의 펄스를 발생 -----
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
//---------------------------------------
distance = pulseIn(echoPin, HIGH) / 58; // 거리값
distance = distance>100? 100:distance;//100이상의 값은 모두100
if (distance < 40) { // 40cm 미만 값 부터 경고음(Led) 시작
digitalWrite(alertLED,HIGH);
digitalWrite(alertBuzz,HIGH);
delay(10);
digitalWrite(alertLED,LOW);
digitalWrite(alertBuzz,LOW);
delay(distance);
}
Serial.println(String(distance)+"(cm)");
delay(10);
}
▶ 실습 2 실행영상:
(전체화면 보기로 보세요)
▶ 아두이노 파일(다운) :
'아두이노 > 2. 아두이노센서' 카테고리의 다른 글
【 아두이노 센서#23】 HC-SR04 초음파 센서 경보회로2 with i2c LCD (9) | 2019.01.21 |
---|---|
【 아두이노 센서#22】 HC-SR04 초음파 센서 경보회로 with LCD (0) | 2019.01.18 |
【 아두이노 센서#20】 HC-SR04 초음파 센서 다루기 #1 (0) | 2019.01.15 |
【 아두이노 센서#19】 DHT22 온·습도 센서 다루기 with LCD#3 (0) | 2019.01.02 |
【 아두이노 센서#18】 DHT11 온·습도 센서 다루기 #2 (6) | 2018.12.31 |