์ด๋ฒ์๊ฐ์ ์ด์ํ๋ ์ด๋๋ฅผ ๊ธฐ๋ณธ๋์ ์๋ฆฌ๋ฅผ ์คํํ๋ ์๊ฐ์ ๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ฐ์ฅ ๋ง์ด ๊ฒ์๋๋ ์ฃผ์ ์ด๊ธฐ๋ ํ์ฃ . ํ์ฌ ์ด์ํ์ผ์๊ฐ ์๋ ๊ด๊ณ๋ก ์ค์ ๊ตฌ๋ ์ฅ๋ฉด์ ์ถ๊ฐํ๊ณ ์ถ์๋๋ฐ ์์ฝ๊ฒ ๋ชป ๋ณด์ฌ ๋๋ฆฌ๋ค์. ๊ทธ๋๋ ๊ฐ์์๋ฌผ๋ ์ดํฐ์์ ์ถฉ๋ถํ ํํ์ด ๋๋๊น ์ค์ ๋ง๋๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์๊บผ์์. ๋ฌผ๋ก ๊ฑฐ๋ฆฌ๊ณ์ฐ์ ๋ฐ๋ฅธ ์ค์ฐจ์จ ๋ณด์ ์์ ์ด ํ์ํ์ง๋ง์. ์ค๋์ ์๋ณด๋ชจํฐ๋ฅผ ํ์ ์ํค๋ฉด์ ์ด์ํ์ผ์๋ก ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ๊ณ ๊ทธ ๊ฐ์ ์๋์ด๋ ธ IDE ์๋ฆฌ์ผ๋ชจ๋ํฐ๋ก ๊ฑฐ๋ฆฌ ๊ฐ์ด ๋์์ ์ถ๋ ฅ๋๊ฒ ํํ ํจ์ผ๋ก ์ด์ํ๋ ์ด๋์ ๊ธฐ๋ณธ ์๋ฆฌ๋ฅผ ๋ฐฐ์๋ณด๋๋ก ํ์ฃ .
์ ๋ธ๋ก๊ทธ์์ ์ ๋ฆฌํ ๋ ํจ์๋ก ํํํ์์ต๋๋ค. ์ด์ํ์ผ์๋ก ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ๋ ๋ก์ง์ ๋ฐ๋ก ์ธ๋ถํจ์๋ก ๋ง๋ ๊ฒ์ ๊ทธ๋๋ก ์ธ์ฉํด์ ์ ์ฉํ๊ฒ ์ต๋๋ค. int distance = duration / 57.5; ์ด๊ฒ์ ๊ฐ์์๋ฎฌ๋ ์ดํฐ์ ๋์ถฉ ๊ฑฐ๋ฆฌ๋ฅผ ๋ณด์ ํ ๊ฐ์ด๊ณ ์ค์ ๋ก๋ ๊ณต์์ ํด๋ณด๊ณ ๊ฑฐ๋ฆฌ๊ฐ์ ์ค์ฐจ๊ฐ ์์ผ๋ฉด ์ฝ๊ฐ์ฉ ๊ฐ์ ๋ฐ๊พธ๋ฉด์ ๊ฑฐ๋ฆฌ๊ฐ์ ๋ณด์ ํ์๋ฉด ๋ฉ๋๋ค.
int CalDistance (int Pin){ //์ด์ํ์ผ์(3ํ) ์์ ๋ฅผ ๊ทธ๋๋ก ์ธ๋ถํจ์๋ก ๋นผ๋
pinMode(Pin,OUTPUT); //์ถ๋ ฅ๋ชจ๋๋ก ์ฌ์ฉ
digitalWrite(Pin, LOW);
delayMicroseconds(2);
digitalWrite(Pin,HIGH);
delayMicroseconds(10);
digitalWrite(Pin,LOW);
pinMode(Pin,INPUT); //์
๋ ฅ๋ชจ๋๋ก ์ฌ์ฉ
int duration = pulseIn(Pin, HIGH);
int distance = duration / 57.5; //๊ฐ์์๋ฎฌ๋ ์ด์
์ ์ค์ฐจ์จ์ ์ค์ด๊ธฐ ์ํด ์ด๊ฑธ๋ก ํ
์คํธ ํจ.
return distance; //๊ฑฐ๋ฆฌ๊ฐ ๋ฆฌํด
}
์ด๋ ๊ฒ ํจ์๋ก ๋ง๋ค์ด ๋์ผ๋ฉด ๋์ค์ ์ด์ํ์ผ์๋ฅผ ์ฌ์ฉํ ๋ ์ด ํจ์๋ฅผ ๋ณต์ฌํ์๋ฉด ๋๊ฒ ์ฃ . ์ด๊ฑด 3ํ ์ด์ํ์ผ์์ฌ์ ์ฌ์ค 4ํ ์ด์ํ์ผ์์์๋ TRIG, ECHOํ์ด ๋ฐ๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ setup()ํจ์์์ ๊ฐ ํ์ ์ ์ธํด์ฃผ์๋ฉด ๋๊ธฐ ๋๋ฌธ์ CallDistance()ํจ์์์ ํ์ ์ถ๋ ฅ/์
๋ ฅ๋ชจ๋๋ฅผ ์ ์ธํ ํ์๊ฐ ์์ต๋๋ค. ๊ฐ์์๋ฎฌ๋ ์ดํฐ์์๋ 3ํ์ด์ฌ์ ์ด์ฉ ์ ์์ด ์ถ๊ฐ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก 1200์ ์ง๋ฆฌ 4ํ ์ด์ํ์ผ์๋ฅผ ์ฌ์ฉํ์๋ฉด ํ๋ชจ๋ ์ ์ธ์ ์ง์์ฃผ์
์ ํจ์๋ฅผ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.
์๋๊ฒ์ TRIG, ๋ฐ๋ ๊ฒ์ ECHO ํ์ธ ๊ฒ๋ง ๊ธฐ์ตํ์๋ฉด ์ฝ๊ฒ ๋ณ๊ฒฝ๋์๊ฒ ์ง์. ์ฆ, 3ํ ์ด์ํ์ผ์์์ ์ถ๋ ฅ๋ชจ๋์ผ ๋ TRIG์ด๊ณ ์
๋ ฅ๋ชจ๋์ผ ๋ ECHO๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
#include
Servo servo;
int servoPin = 9;
servo.attach(servoPin); //angle (0~180)
servo.write(m_angle);
delay(50);
m_angle+=1; or m_angle= m_angle+1;
9๋ฒํ์ servo๋ชจํฐ์ ์ถ๋ ฅํ์ผ๋ก ์ฐ๊ฒฐํ๊ณ servo.write()๋ก ๊ฐ๋(angle)๋งํผ ์ด๋ํ๋๋ฐ ๋ง์ง๋ง ๋ผ์ธ์ m_angle์ +1์ฉ ์ฆ๊ฐํฉ๋๋ค. ์ฆ 0๋์์ 1๋์ฉ ๊ณ์ servo๋ชจํฐ๋ฅผ ํ์ ํ๊ฒ ๋๋ ๊ฒ์ด์ฃ . ๋๋ ์ด์๊ฐ์ 1๋์ฌ์ ์์ฃผ ์งง๊ฒ 0.05์ด๋ฅผ ์คฌ์ต๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ํ๋ก๋ ์ ๋๋ค. ๋์ถฉ ํ๋ก๋๋ฅผ ๋ณด์๊ณ ํด๋น ์์น์ ํ์ ์ ์ ์ฐ๊ฒฐํ์๋ฉด ๋ฉ๋๋ค.
์ค๊ณ๋ ์์ 1, 2์์ ๋ณต์ต ์ฐจ์์ ์ฝ๋ฉ์ ๊ทธ๋๋ก ์ฌ์ฉํ์ต๋๋ค. ์ค์ํ ๊ฒ์ 0์์ 180๋ ๊น์ง 1๋์ฉ ํ์ ์ํค๊ณ ๋ค์ 180์์ 0๋๊น์ง 1๋์ฉ ํ์ ํ๋ ๊ฒ์ด์ฃ .
Servo servo;
int servoPin = 9;
int m_distance=0;
int m_angle=0;
int m_chk=0;
if(m_chk==0){
if(m_angle<180)m_angle+=1;
else m_chk=1;
}
else{
if(m_angle>0)m_angle-=1;
else m_chk=0;
}
if ์กฐ๊ฑด๋ฌธ์ผ๋ก m_chk๋ณ์์ ์ด๊ธฐ๊ฐ์ด 0์ด๋ค m_angle(๊ฐ)๋ 0๋์ด๋ค. ์กฐ๊ฑด์์ด m_chk==0 ์ผ๋ก m_chk๊ฐ 0๊ณผ ๊ฐ์๊ฐ ์๋๊ฐ๋ก ๋ฌผ์ด๋ณธ๋ค. ๋๊ฐ์ง ํจํด์ผ๋ก ๋ถ๋ฆฌ๋๋ ์๊ฐ์ด๋ค. 0๊ฐ ๊ฐ๋ค๋ฉด ์ฐธ์ธ๋ฌธ์ฅ์ด 1์ด๋ฉด ๊ฑฐ์ง๋ฌธ์ฅ์ด ์ํ ๋๊ฒ ์ฃ . m_chk๋ณ์๊ฐ ์ด๊ธฐ๊ฐ์ผ๋ก 0์์ผ๋ก ์ฐธ์ด ๋๋ค. ๊ทธ ์์ ๋ค์ if๋ฌธ์ผ๋ก m_angle(๊ฐ)์ด 180๋๋ณด๋ค ์์๊ฐ๊ฐ ์กฐ๊ฑด์์ด ๊ฑธ๋ ค์๋ค. 180๋๋ณด๋ค ์์ผ๋ฉด m_angle+=1;๋ก m_angle=m_angle=+1๊ณผ ๊ฐ์ ๋ฌธ์ฅ์ด๋ค. ์ฆ, m_angle(๊ฐ)์ 1๋ใ ์ฆ๊ฐํ๊ฒ ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ์ m_angle(๊ฐ)๊ฐ 180๋ ์ด์์ด ๋๋ฉด else ์ดํ ๋ฌธ์ฅ์ด ์ํ๋ฉ๋๋ค. m_chk=1๋ก ํ์ ๋ฐฉํฅ ์ํ๊ฐ์ด ๋ฐ๋๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์ ๋ฃจํ๋ if ์กฐ๊ฑด๋ฌธ m_chk๊ฐ 0์ด ์๋๊ธฐ ๋๋ฌธ์ else ์ดํ ๋ฌธ์ฅ์ด ์ํ๋๊ณ ๋ฐ๋๋ก m_angle ๋ณ์๊ฐ 0๋ณด๋ค ํฌ๋๊ณ ๋ถ๊ณ ํฌ๋ฉด์ m_angle-=1๋ก -1๋๋ก ๊ฐ์ํ๊ฒ ๋๋ค. ์ ์ฝ๋ฉํ๊ณ ๋ ๋ฐ๋ ๋์์ ์ํํ๋ ๊ฒ์ด์ฃ .
๋ค์ ์ข ํฉํด์ ์ค๋ช ํ์๋ฉด m_chk๋ณ์ ๊ธฐ์ค์ผ๋ก 0์ด๋ฉด m_angle ๊ฐ์ด 180๋๊ฐ ๋ ๋๊น์ง 1์ฉ ์ฆ๊ฐํ๊ณ 180๋๊ฐ ๋๋ฉด์ m_chk๋ณ์๋ฅผ 1๋ก ๋ณ๊ฒฝํ๊ณ m_chk๋ณ์๊ฐ 1์ด๋ฉด m_angle ๊ฐ์ด 0๋๊ฐ ๋ ๋๊น์ง -1์ฉ ๊ฐ์ํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ 0๋๊ฐ๊ฐ ๋๋ฉด m_chk๋ณ์๋ฅผ 0์ผ๋ก ๋ณ๊ฒฝํ๋ค. ์ด๋ ๊ฒ ๋ฌดํ ๋ฐ๋ณตํ๊ฒ ๋๋ ๋ก์ง์ ๋๋ค.
Serial.begin(9600);
Serial.print("d : ");
Serial.println(m_distance);
begin(9600)์ setup()ํจ์์ ์ ์ธํ๊ณ ๋๋จธ์ง ๋ชจ๋ํฐ ์ถ๋ ฅ์ print(์ถ๋ ฅ๊ฐ)์ printIn(์ถ๋ ฅ๊ฐ)ํจ์๊ฐ ์๋๋ฐ print()์ ์ถ๋ ฅ๊ฐ์ ์ถ๋ ฅํ๊ณ ์๋ก์ด ๋ผ์ธ์ผ๋ก ๋์ด๊ฐ์ง ์๊ณ ํ์ฌ ๋ผ์ธ์ ๋จธ๋ฌธ๋ค. printIn()์ ์ถ๋ ฅ๊ฐ์ ์ถ๋ ฅํ๋ค์ ์๋ก์ด ๋ผ์ธ์ผ๋ก ๋์ด๊ฐ๋ผ๋ ์๋ฏธ ์ ๋๋ค. ๋ฌธ์ ์ฅ์ฑํ ๋ ํค๋ณด๋ Enter ๋ช ๋ น์ผ๋ก ์๊ฐํ์๋ฉด ๋ฉ๋๋ค. C์ธ์ด์์๋ '\n'๋ก ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
Serial.print("d : ");
Serial.println(110);
๊ฒฐ๊ณผ => d : 110
๋์ถฉ ์๋ฏธ๋ฅผ ์ดํดํ์ จ๊ฒ ์ฃ .
#include
Servo servo;
int servoPin = 9;
int m_distance=0;
int m_angle=0;
int m_chk=0;
void setup() {
Serial.begin(9600);
servo.attach(servoPin); //angle (0~180)
}
void loop() {
servo.write(m_angle);
delay(50);
m_distance=CalDistance(7); //์ด์ํ์ผ์๋ก ๊ฑฐ๋ฆฌ๊ณ์ฐํจ์
Serial.print("d : ");
Serial.println(m_distance);
if(m_chk==0){
if(m_angle<180)m_angle+=1;
else m_chk=1;
}
else{
if(m_angle>0)m_angle-=1;
else m_chk=0;
}
}
int CalDistance (int Pin){ //์ด์ํ์ผ์(3ํ) ์์ ๋ฅผ ๊ทธ๋๋ก ์ธ๋ถํจ์๋ก ๋นผ๋
pinMode(Pin,OUTPUT); //์ถ๋ ฅ๋ชจ๋๋ก ์ฌ์ฉ
digitalWrite(Pin, LOW);
delayMicroseconds(2);
digitalWrite(Pin,HIGH);
delayMicroseconds(10);
digitalWrite(Pin,LOW);
pinMode(Pin,INPUT); //์
๋ ฅ๋ชจ๋๋ก ์ฌ์ฉ
int duration = pulseIn(Pin, HIGH);
int distance = duration / 57.5; //๊ฐ์์๋ฎฌ๋ ์ด์
์ ์ค์ฐจ์จ์ ์ค์ด๊ธฐ ์ํด ์ด๊ฑธ๋ก ํ
์คํธ ํจ.
return distance; //๊ฑฐ๋ฆฌ๊ฐ ๋ฆฌํด
}
๊ฐ์์๋ฎฌ๋ ํฐ์์ ์คํ ๊ฒฐ๊ณผ๋ ๊น๋ํ๊ฒ ๋์๋๋ฐ ์ค์ ํํ์์๋ ๋ณด์ ์์ ์ด ๊ผญ ํ์ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์๋ ์ค์ ๋ก ์ด์ํ๋ ์ด๋๋ฅผ ๋ง๋ ๋ค๋ฉด ๊ทธ๋ํฝ์์ ์ผ๋ก ๋ ์ด๋๋ฅผ ๋ง๋ค์ด ๋ ์ด๋์ ๊ฒ์๋ ๋ฌผ์ฒด๋ฅผ ํ์ฌํ์ ๊ฐ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ์ผ๋ก (x,y)์ ์ขํ๋ฅผ ๊ตฌํ ์ ์๊ณ ๊ทธ๊ฑธ ๊ทธ๋ํฝ์์ ํ ๋ชจ๋ํฐ์ ์ํ๋ ํํ๋ก ๊ทธ๋ํฝ๋ชจ์์ ์ถ๋ ฅํ๋ฉด ์ข ๋ ๊ทธ๋ด์ธํด ์ง๊ฒ ์ฃ .
์ฌ๊ธฐ์์๋ ๋จ์ง ์๋์ด๋ ธ IDE ์๋ฆฌ์ผ๋ชจ๋ํฐ์ ๊ฑฐ๋ฆฌ๊ฐ๋ง ์ถ๋ ฅํ์ต๋๋ค. ๊ทธ๊ฒ ๊ธฐ๋ณธ ์ด์ํ๋ ์ด๋์ ์ ๋ณด์ ๋๋ค. ์๋ณด๋ชจํฐ์ ๊ฐ๋์ ๊ฑฐ๋ฆฌ๋ง ์์ผ๋ฉด ์ธก์ ๋ ๋ฌผ์ฒด์ (x,y) ์ขํ๋ฅผ ๊ตฌํ ์ ์๊ณ ๊ทธ๊ฒ์ ํ๋ก์ธ์ฑ์ด๋ ์คํฌ๋์น๋ก ์ด๋ฏธ์งํ ํ๋ฉด ๋ณด๊ธฐ๊ฐ ๋ ์ข๊ฒ ์ง๋ง ํต์ฌ์ ๊ทธ๊ฒ ์๋๋ก ํ์ ๊ณผ ๊ฑฐ๋ฆฌ ์ธก์ ์ ๋์์ ์ํํ๋ค๋ ๊ฒ์ ์์ต๋๋ค. ์ด๋ฏธ์ง ์๊ฐํ๋ฅผ ๋จ์ง ๋ณด์ฌ์ฃผ๋ ๋ถ์์ ์ธ ํจ๊ณผ์ผ๋ฟ์ด์ฃ . ๋์์์ ๋ณด์๊ณ ์๋ณด๋ชจํฐ๊ฐ ํ์ ํ๋ฉด์ ์๋ฆฌ์ผ๋ชจ๋ํฐ์ ์ด์ํ ์ผ์์ ๊ฑฐ๋ฆฌ๊ฐ ์ธก์ ๋์ด ์ถ๋ ฅ๋๋ ๊ฑธ ์ ๋ณด์๊ณ ์์์ ํด๋ณด์ธ์. ์๋ณด๋ชจํฐ์ ์ด์ํ์ผ์๊ฐ ๋ถ์ฐฉ๋์ด ํ์ ๋๋๋ฐ ๊ทธ ํ์ ํ๋ ๊ฐ๋์ ์ ๋ฉด์ ๋ฌผ์ฒด์์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ๋ ๋ชจ์ต์์. ๊ทธ๋ฌ๋ฉด ์๋ง ๋์ถฉ์ ์ดํด๊ฐ ๋์ค ๊บผ์์.
๊ฐ๋จํ ์ด์ํ๋ ์ด๋์ ๊ธฐ๋ณธ ๋ก์ง๋ง ์ค๋ช ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ , ์ค๋ ํฌ์คํ ํ ์ฝ๋ฉ์ ์ฌ์ค ์ ๊ตํ ์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์๋๋ฉด ์๋ณด๋ชจํฐ ์ข ๋ฅ์ ๋ฐ๋ผ ์ข ๋ค๋ฅด๊ฒ ํ์ ์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ฐธ๊ณ ๋ก ์ฝ๋ฉ์์ servo.attach(servoPin, Min, Max)๋ก ๋ฒ์๋ฅผ ์ค์ ํ๊ณ servo2.writeMicroseconds(๊ฐ๋์๊ฐ๊ฐ)์ผ๋ก ์ ์ดํ์๋ฉด ๋ ์ ๊ตํ๊ฒ ์ ์ด๊ฐ ๊ฐ๋ฅํ ๊บผ์์. ์ค์ ๋ก ํ ์คํธ ํ ๋๋ ์ ๋ฐฉ์๋๋ก ํด๋ณด๋ค๊ฐ ์๋๋ฉด ์ด ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟ์ ์๋ณด๋ชจํฐ์ ๊ฐ๋๋ฅผ ์ ์ดํ์๋ฉด ๋ฉ๋๋ค. 4ํ์ด์์ผ๋ฉด์ ํ์ค 4ํ ์๋ณด๋ชจํฐ๋ ๋์ผํด์ ๋ ํธํ์ํ ๋ฐ 3ํ ์ด์ํ์ผ์์ฌ์ ์ฝ๊ฐ ์ฝ๋ฉ์ด ์์ฝ์ต๋๋ค.
์ถ๊ฐ๋ก ์คํฌ๋์น๋ ํ๋ก์ธ์ฑ ํ๋ก๊ทธ๋จ์ ๋ค๋ฃฐ ์ ์๋ ๋ถ์ด๋ผ๋ฉด ๊ทธ๊ฑธ ํตํด์ ์ด์ํ๋ ์ด๋์ ๊ทธ๋ํฝ์ฒ๋ฆฌ๋ฅผ ํตํด ์ค์ ๋ ์ด๋์ฒ๋ผ ํํ์ด ๊ฐ๋ฅํ ๊บผ์์. ํ๋ก์ธ์ฑ์ ์ ๋๋ก ๊ณต๋ถํ์ ์ด ์๊ณ ์ ๊น ๋ง๋ณด๊ธฐ๋ก ํจ์๋ง ๋ช๊ฐ ์จ๋ณธ๊ฒ ์ ๋ถ๋ผ ํ๋ก์ธ์ฑ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ๋ ์ด๋ ๊ทธ๋ํฝํจ๊ณผ๋ฅผ ๋ค์ํธ์ ์ถ๊ฐํด์ ๋ณด์ฌ์ฃผ๊ณ ์ถ๊ธด ํ๋๋ฐ ํ ๊น ๋ง๊น ๊ณ ๋ฏผ๋๋ค์. ์ ๊น ํ๋ก์ธ์ฑ์์ ๋ ์ด๋ ํํ ๊ทธ๋ํฝ ํจ์ ๋ช๊ฐ๋ง ๊ณต๋ถํด์ ๋ก์ง์ ์ง๋ฉด ๋๊ธฐ๋ ํ๋ฐ ํ๋ก์ธ์ฑ์ ์๋ก ์ค์นํ๊ณ ๊ณต๋ถํ๊ธฐ๊ฐ ์ข ๊ท์ฐฎ์์ ์๋ตํ ์ง ์๋๋ฉด ํํ์ ํ ์ง ๊ณ ๋ฏผ์ ํด ๋ด์ผ ๊ฒ ๋ค์.
์ค๋์ ํฌ์คํ ์ ๋ด์ฉ์ ์๋ชจ๋ชจํฐํ์ ์ ํ๋ฉด์ ์ด์ํ์ผ์๋ก ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ๋ค ์ด๊ฒ๋ง ๋จธ๋ฆฌ์์ ๋ฃ์ผ์๋ฉด ๋ฉ๋๋ค.