์ด์ํ ์ผ์ : HC-SR04
HC-SR04๋ ์ฝ 40KHz ์ ๋์ ์ฃผํ์๋ฅผ ์์ฑํ๋ฉฐ, ์ต๋ 4~5m์ ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ ์ ์์ต๋๋ค.
Vcc, Trigger, Echo ๋ฐ GND๋ฅผ ์ํ 4๊ฐ์ ํ์ด ์์ต๋๋ค.
ํธ๋ฆฌ๊ฑฐ๋ ์ด์ํ ์ ํธ๋ฅผ ๋ณด๋ด๊ณ Echo๋ ๋์์จ ํ ํด๋น ์ ํธ๋ฅผ ์์
์ด์ํ ์ผ์ ๋์์๋ฆฌ
๊ฑฐ๋ฆฌ์ธก์ ์ ์ํด ์ก์ ๋ถ(ํธ๋ฆฌ๊ฑฐ)์์ ์ผ์ ํ ์๊ฐ์ ๊ฐ๊ฒฉ์ ๋ ์งง์, ์ด์ํ ํ์ค๋ฅผ ๋ฐฉ์ถํ๊ณ , ๋์๋ฌผ์ ๋ถ๋ชํ ๋์์จ ์ ํธ๋ฅผ ์์ ๋ถ(์์ฝ)์์ ๋ฐ์, ์ด์ ๋ํ ์๊ฐ์ฐจ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฑฐ๋ฆฌ๋ฅผ ์ฐ์ถํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฅ์ ๋ฌผ์ ์ ๋ฌด, ๋ฌผ์ฒด์ ๊ฑฐ๋ฆฌ ๋๋ ์๋ ๋ฑ์ ์ธก์ ํ ์ ์์ต๋๋ค.
์ด์ํ์ ์๋๋ ์ผ๋ฐ ๊ณต๊ธฐ์ค์์ ์ฝ 340m/s ์ ๋๋ค.
์ด์ํ ์ผ์๋ฅผ ์ด์ฉํ ๊ฑฐ๋ฆฌ ๊ณ์ฐํ๊ธฐ
์ด์ํ์๋: 340 m/s
์๋ณต์์์๊ฐ: duration (µs)
๊ฐ๊ฒฉ์ด ์ ๋ ดํ๊ณ ํ์ฉ๋๊ฐ ๋์
์ผ์ LED๋ ์ด์ฉ(RGB)
์๋์ด๋ ธ ํ๋ก : ์ฌ๋ฐ๋ฅธ ์ ์๊น์ ์ฌ์ฉํ๋ ์๋ น ํฐ๋ํ๊ธฐ.
์ถํ, ๋ฌผ๋ฆฌ์ ์ธ ๊ณํจ์ ์ฐพ๊ธฐ๊ฐ ์ฌ์์ง๋ค.
์์ค ์ฝ๋:
2๋ฒ์์ trigger์ Ultra Sonic ์ ์ธ์ ์ ์๊ณ , 3๋ฒ echo์์ ์ ํธ๋ฅผ ๋ฐ๋๋ค.
์ค์ ๋ฒ 1๋ฒ:
์ค์ ๋ฒ 2๋ฒ:
์ด์ํ ์ผ์ ์ข ๋ฅ์ ๋ฐ๋ผ์, pulseIn์ ๊ฐ๋ค์ ํน์ฑ์น๊ฐ ๋ฌ๋ผ์ง๋ฉด์ cm๋ก ํ์ฐํ๋ ์์๊ฐ์ด ๋ฌ๋ผ์ง๋ค.
์ฌ๊ธฐ์๋ 58.2
if(distance < 10){
}else if(){
}else if(){
}
์ค์ฒฉํด์ ์ธ ์ ์์.
ํผ์์กฐ ์คํผ์ปค๊น์ง ์ฐ๋ํด์ ์ฐ๋ ์ฝ๋๋?
์๋์ฐจ ํ์ง ๊ฐ์ง๊ธฐ/ ๋ฌธ์์ ์ค์น
echoPin ์ด HIGH๋ฅผ ์ ์งํ ์๊ฐ ์ฆ, ์ด์ํ๊ฐ ๋ณด๋๋ค๊ฐ ๋ค์ ๋ค์ด์จ ์๊ฐ
HIGH ์์ ๋ ์๊ฐ์ ๊ฐ์ง๊ณ ๋ฌผ์ฒด์์ ๊ฑฐ๋ฆฌ(distance)๋ฅผ ๊ณ์ฐ ํ๋ค.
// ์ด์ํ(์๋ฆฌ)์ ์๋: 340m/s //
์ด(second)์ ๋ฏธํฐ(m)๋ฅผ ๋ง์ดํฌ๋ก ์ด์ cm๋ก ๋ณํํ๊ธฐ ์ํด์ 10000์ผ๋ก ๋๋ ์ค๋ค //
์๋ณต๊ฑฐ๋ฆฌ์ด๋ฏ๋ก 2๋ก ๋๋ ์ค๋ค float distance = ((float)(340 * duration) / 10000) / 2; //
๋๋ distance = duration / 58.8
์ด์ํ๋ฅผ ๋ณด๋ด๋ฉฐ, ๋ค ๋ณด๋ด๋ฉด echo๊ฐ HIGH(์ ํธ๋ฐ๊ธฐ) ์ํ๋ก ๋๊ธฐ digitalWrite(trigPin, HIGH); delay(10); digitalWrite(trigPin, LOW);
pulseIn(ํ์ค์ธ) ํจ์
pulseIn ํจ์๋ ์๋์ด๋ ธ๋ก ๋ค์ด์ค๋ ํน์ ์ ํธ์ ๊ธธ์ด๋ฅผ ์ฝ์ด ๋ค์ด๋ ํจ์์ ๋๋ค. ์๋ฅผ ๋ค์ด์ ๋ค์ ์ฌ์ง๊ณผ ๊ฐ์ ์ ํธ๊ฐ ๋ค์ด์ค๊ณ ์๊ณ ๊ฐ ์ ํธ์์ HIGH ๊ฐ์ด ๋ช ๋ง์ดํฌ๋ก ์ด ๋์ ๋ค์ด์๋์ง ์ฝ์ ์ ์์ต๋๋ค.
pulseIn(pin, value);
pulseIn(pin, value, timeout);
pin : ํ์ค ์ ํธ๋ฅผ ๋ฐ์๋ค์ด๋ ํ ๋ฒํธ
value : ์ธก์ ํ๋ ค๋ ํ์ค์ ํํ(HIGH ๋๋ LOW)
timeout : ํ์ค ์ ํธ๋ฅผ ์ฝ๋๋ฐ ์ ํ์๊ฐ์ ์ด๊ณผํ๋ฉด 0์ ์ถ๋ ฅ
๊ฒฐ๊ณผ๊ฐ : ํ์ค์ ๊ธธ์ด๋ฅผ unsigned long ํ์ ๋ง์ดํฌ๋ก์ด[us] ๋จ์๋ก ๋ฐํํ๋ค. timeout์ ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก 1์ด๊ฐ ์ค์ ๋๋ค.
pulseIn(10, HIGH)
ํด๋น ํ์ ์ ๋ ฅ์ด LOW์์ HIGH๋ก ๋ณํ๋ ์๊ฐ๋ถํฐ ์๊ฐ์ ์ธก์ ํ์ฌ ๋ค์ LOW๋ก ๋ฐ๋๋ ์์ ๊น์ง์ ์๊ฐ์ ๋ง์ดํฌ๋ก์ด[us] ๋จ์๋ก ๋ฐํํฉ๋๋ค.
delay()
๋งค๊ฐ๋ณ์์ ์ ํ ์๊ฐ(๋ฐ๋ฆฌ ์ด) ๋์ ํ๋ก๊ทธ๋จ ๋ฉ์ถค. (1์ด๋ 1000 ๋ฐ๋ฆฌ ์ด)
ms: ๋ฉ์ถ ๋ฐ๋ฆฌ ์ด (unsigned long)
ex) delay(1000); // 1์ด ๊ธฐ๋ค๋ฆผ
โ
โ delayMicroseconds()
๋งค๊ฐ๋ณ์์ ์ง์ ๋ ์๊ฐ(๋ง์ดํฌ๋ก ์ด)๋์ ํ๋ก๊ทธ๋จ์ ๋ฉ์ถ๋ค.
1๋ฐ๋ฆฌ์ด๋ 1000 ๋ง์ดํฌ๋ก ์ด, 1์ด๋ 100๋ง ๋ง์ดํฌ๋ก ์ด
์ด ํจ์๋ 3 ๋ง์ดํฌ๋ก ์ด ์ด์ ๋ฒ์์์ ๋งค์ฐ ์ ํํ๊ฒ ๋์๊ฐ๋ค.
ex) delayMicroseconds(1000); // 1ms (= 0.001์ด) ๊ธฐ๋ค๋ฆผ
๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ์, LED ์ ๋ถ์ ๋ด๋ ๋ฐฉ๋ฒ 1
๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ์ ์๋ฆฌ ์ฃผ๊ธฐ๊ฐ ์๋ ์ ๋์ด๊ฐ ๋ฐ๋๋๋ก ์ค์ ํ๋๊ฒ๋ ํด๋ณผ๋งํ๋ค.
tone ํจ์ ํน์ง:
tone(11, 500); delay(1000); noTone(11); tone(12, 500); delay(1000); noTone(12); |
์ด๋ ๊ฒ๋ ๊ฐ๋ฅํ์ง๋ง,
tone(11, 500); tone(12, 500); delay(1000); noTone(11); noTone(12); |
์ด๋ ๊ฒ๋ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์๋์ด๋ ธ ํํ์ด์ง์ tone()์ ๋ํ ์ค๋ช ์ ๋ณด๋ฉด ์ฌ๋ฌ ๊ฐ์ ํ์ผ๋ก tone() ํจ์๋ฅผ ์ด์ฉํด ํํ์ ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด, ์ถ๋ ฅ๋๋ ํ์ noTone() ํจ์๋ก ์ถ๋ ฅ์ ๋ฉ์ถ ํ ๋ค์ ํ์ผ๋ก ํํ์ ์ถ๋ ฅํ ์ ์๋ค๊ณ ๋์ด ์๋ค.
๋ง์ผ ์ ๊ฒฝ์ฐ์ฒ๋ผ noTone() ํจ์๋ก ์ถ๋ ฅ์ ์ค๋จํ์ง ์๊ณ ๋ค์ tone() ํจ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ๋์ค์ ์ฌ์ฉ๋ tone() ํจ์๋ ๋ฌด์๋๋ค. ์ฆ, 11๋ฒ ํ์ผ๋ก๋ฐ์ ํํ์ด ์ถ๋ ฅ๋์ง ์๋๋ค๋ ๋ง.
๋ ์๋์ด๋ ธ ๋ฉ๊ฐ(Mega 2560/ADK) ์ด ์ธ์ ๋ณด๋์์๋ tone() ํจ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ 3๋ฒ ํ๊ณผ 11๋ฒ ํ์ analogWrite() ํจ์์ ์ฌ์ฉํ ์ ์๋ค. tone() ํจ์๋ ํ์ด๋จธ๋ฅผ ์ด์ฉํด ํํ์ ์ถ๋ ฅํ๋๋ฐ, ์ฐ๋ ธ(Uno) ๋ฑ ๋๋ถ๋ถ์ ์๋์ด๋ ธ ๋ณด๋์์๋ 3๋ฒ๊ณผ 11๋ฒ ํ์ผ๋ก PWM์ ์ถ๋ ฅํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ์ด๋จธ์ tone() ํจ์์์ ์ฌ์ฉํ๋ ํ์ด๋จธ๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ. ๋ฉ๊ฐ๋ ํ์ด๋จธ๊ฐ ๋ง์์ ์๋ก ๋ฐฉํดํ์ง ์๋๋ค.
tone() ํจ์์๋ ์๋์ด๋ ธ์ ๋ชจ๋ ํ์ ์ฌ์ฉํ ์ ์๋ค. frequency ๊ฐ์ 31 ์ดํ๋ก๋ ์ค์ ํ ์ ์๊ณ , frequency ๋ณ์์ ํ์ ์ด unsigned int ํ์ด๋ผ ์ต๋ 65535Hz๊น์ง๋ฐ์ ์ค์ ํ ์ ์๋ค
์ข์ ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค.
์ถ์ฒ : m.blog.naver.com/yuyyulee/220311663655
'๐ฅ๊ณต๋์ด๊ฑฐ์ ๊ฒ(๋งํ๊ธฐ) > ๐บ๋ง์ดํฌ๋กํ๋ก์ธ์์ค์ต' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ค์ต ๋ฐ ๊ณผ์ 1 (0) | 2020.09.26 |
---|---|
์๋์ด๋ ธ ๋ณด๋ ํ ์ค๋ช (0) | 2020.09.25 |
LCDํจ๋ (0) | 2020.09.19 |