- 준비물
- 초음파 센서 1개
- 3색 LED 1개 - 코드
- 영상
- 알게된 점
- 초음파센서 거리 측정 과정
1) 초음파 센서의 trigger에서 초음파 발사
2) 발사된 초음파 사물에 반사
3) 반사되어 나온 초음파 echo에서 받아서 거리 측정
- echo의 기본값은 LOW, 초음파 받으면 HIGH로 변경(HIGH가 될 때까지 시간을 계산해 거리를 측정)
- trigger에서 초음파를 날린 후 짧은 시간(microSec) 안에 바로 꺼줘야 정확한 측정 가능
- pulseIn(p1, p2)
1) p1번호의 pin이 p2상태가 될 때까지의 시간을 구함
2) 기본적으로 최대 1초까지 대기하지만, 1초가 넘어가도 상태가 변하지 않는 경우 경우 0을 반환
3) pulseIn에서 구한 값을 29.1로 나누면 cm값을 구할 수 있음(초음파 센서는 왕복이므로 58.2를 나눔)
//초음파센서 trig, echo핀 설정 const int distTrigPin = 2; const int distEchoPin = 3; //3색 LED 핀 설정 const int ledRedPin = 11; const int ledGreenPin = 10; const int ledBluePin = 9; void setup() { pinMode(distTrigPin, OUTPUT); pinMode(distEchoPin, INPUT); } void loop() { analogWrite(ledRedPin, 0); analogWrite(ledGreenPin, 0); analogWrite(ledBluePin, 0); //거리 측정 digitalWrite(distTrigPin, HIGH); //스위치 온 // 1sec = 1000 ms, 1ms = 1000 microSec delayMicroseconds(10); digitalWrite(distTrigPin, LOW); //잠깐 쉬고 바로 꺼줌 //pulseIn: pin이 HIGH가 될 때까지의 시간을 구함 //최대 1초까지 대기, 대기 중 HIGH가 안된다면 0으로 반환 long duration = pulseIn(distEchoPin, HIGH); if(duration == 0) { return; } // 29.1를 나누면 cm단위, 왕복이기 때문에 58.2 long distance = duration / 58.2; if(distance < 10) { analogWrite(ledRedPin, 255); } else if(distance < 20) { analogWrite(ledGreenPin , 255); } else if(distance < 30) { analogWrite(ledBluePin , 255); } delay(100); }
'프로그래밍 > Arduino' 카테고리의 다른 글
주위 밝기 값을 LCD에 표시하기 (0) | 2017.04.17 |
---|---|
거리에 따른 piezo 스피커 출력시간 조절 (0) | 2017.04.14 |
주위 밝기에 따라 piezo 스피커 음 변경 (0) | 2017.04.13 |
주위 밝기에 따라 LED 빛 바꾸기 (0) | 2017.04.13 |
미니 디지털 피아노 (0) | 2017.04.12 |