안녕하세요. 전자공이 입니다.
본문에서는 초음파 센서를 이용해 아두이노로 거리를 측정을 하고 LED를 이용해
거리가 얼마나 줄어들었는지 눈으로 볼 수 있도록 만들어 보려고 합니다.
-준비물-
아두이노
브레드 보드
HC-SR04 초음파 센서
330옴 또는 1k옴 고정 저항
LED
점퍼선
-----------------------------------------------------------------------------------------------------------------------------------
아두이노------------------<>------------------초음파 센서
pin2------------------<>------------------Trig
pin3------------------<>------------------Echo
VCC(5v)------------------<>------------------VCC
GND------------------<>------------------GND
아두이노------------------<>------------------LED
pin5------------------<>------------------LED+
pin6------------------<>------------------LED+
pin7------------------<>------------------LED+
pin8------------------<>------------------LED+
pin9------------------<>------------------LED+
-----------------------------------------------------------------------------------------------------------------
-코딩 및 설명-
-----------------------------------------------------------------------------------------------------------------
int echo = 2; // echo는 아두이노 2번 핀 설정
int trig = 3; // trig는 아두이노 3번 핀 설정
void setup() {
Serial.begin(9600); // 시리얼 9600바이트 속도 설정
pinMode(trig, OUTPUT); // trig OUTPUT설정
pinMode(echo, INPUT); // echo INPUT 설정
pinMode(5, OUTPUT); // 5번 핀을 OUTPUT으로 사용
pinMode(6, OUTPUT); // 5번핀을 OUTPUT으로 사용
pinMode(7, OUTPUT); // 5번핀을 OUTPUT으로 사용
pinMode(8, OUTPUT); // 5번핀을 OUTPUT으로 사용
pinMode(9, OUTPUT); // 5번핀을 OUTPUT으로 사용
}
void loop() {
digitalWrite(trig, LOW); //trig를 LOW로
digitalWrite(echo, LOW); //echo를 LOW로
delayMicroseconds(2); //딜레이를 마이크로초 단위로 설정
digitalWrite(trig, HIGH); //trig를 HIGH로
delayMicroseconds(10); //딜레이를 마이크로초 단위로 설정
digitalWrite(trig, LOW); //trig를 LOW로
unsigned long duration = pulseIn(echo, HIGH); //echo를 HIGH로
float distance = ((float)(340 * duration) / 10000) / 2; // 값을 계산하여 cm로 산출하기 위한 식
Serial.print(distance); // 시리얼로 거리 값을 표시함
Serial.println("cm"); // cm단위로 표시
if(distance>80){ // level이 80 넘으면 LED를 한 개 켜겠다는 조건
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
}
else if (distance>60){ // level이 60 넘으면 LED를 두 개 켜겠다는 조건
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
}
else if (distance>40){ // level이 40 넘으면 LED를 세 개 켜겠다는 조건
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
}
else if (distance>20){ // level이 20 넘으면 LED를 네 개 켜겠다는 조건
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
}
else { // 위의 조건에 위배되지 않는 조건이라면 모든 불을 켜겠다는 조건
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
}
delay(1000); // 시리얼에 값이 표시되는 딜레이 설정
}
-----------------------------------------------------------------------------------------------------------------
점점 초음 센서와 물체의 거리가 줄어들 수 록 불이 한 단계씩 켜져서 경고?를 한다는 의미에서
마지막(20cm보다 가까워졌을 때)에는 LED 5개의 빛이 모두 켜지게 되는 코드입니다.
아래의 두 게시글의 회로 구성과 코드를 블랜딩 한 방법으로 만들게 되었습니다.
위의 방식에 대해 이해가 어려운 부분이 있다면 아래 게시글을 참고하시면 도움이 될 거라 생각됩니다.
https://nova1004.tistory.com/48
https://nova1004.tistory.com/52
-아두이노 초음파 센서를 이용한 LED 거리 표시기 끝-
'코딩 > 아두이노' 카테고리의 다른 글
아두이노 CDS로 LED 제어 해보자(LED 미터기) (0) | 2019.11.13 |
---|---|
아두이노 온습도 센서 제어 해보자 (0) | 2019.11.11 |
아두이노 초음파 센서(HC-SR04) 로 거리 측정을 해보자 (0) | 2019.11.09 |
아두이노로 광센서 값을 시리얼 모니터로 출력해보자 (0) | 2019.11.08 |
아두이노 시리얼 통신으로 LED를 제어 해보자 (0) | 2019.11.05 |
댓글