공부중
[Arduino] 초음파 센서 본문
728x90
1. 이론
2. 코드
int echo = 9;
int trig = 8;
void setup() {
Serial.begin(9600); // 시리얼 통신 시작, 통신 속도 9600bps
pinMode(trig, OUTPUT); // Trig 핀을 출력으로 설정
pinMode(echo, INPUT); // Echo 핀을 입력으로 설정
}
void loop() {
// 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
digitalWrite(trig, LOW); // Trig 핀을 LOW로 설정
digitalWrite(echo, LOW);
delayMicroseconds(2);
// 진동
digitalWrite(trig, HIGH); // Trig 핀을 HIGH로 설정하여 펄스 발생
delayMicroseconds(10); // 10마이크로초 동안 유지
digitalWrite(trig, LOW); // Trig 핀을 LOW로 설정하여 펄스 종료
// 수신
// echoPin이 H를 유지한 시간을 저장한다.
unsigned long duration = pulseIn(echo, HIGH); // Echo 핀에서 HIGH 신호가 오는 시간을 측정
//H일때 시간(초음파가 보냈다가 다시 돌아온 시간을 가지고 거리를 계산한다.
float distance = ((float)(340 * duration) / 10000) / 2; // 거리 계산 (음속 340m/s 사용)
// 출력
Serial.print(distance); // 거리를 시리얼 모니터에 출력
Serial.println("cm");
delay(500); // 500밀리초 동안 대기
}
3. 회로
4. 결과
800이 나오는건 튀는 값이다.
15, 16 cm까지 측정 가능한듯,
초음파 센서 3개중에 2개 고장..
5. 실습 예제
// 초음파 센서로 LED 표현
// 초음파 센서와 물체가 가까워지면 LED 수가 많이 켜지고(4개)
// 물체와 물어지면 LED 수가 적게 켜지도록 (1개)
6. 코드
// 실습 2 거리에 따른 LED 켜지기
// 초음파 센서와 물체가 가까워지면 LED의 수가 많이 켜지고, (4개)
// 반대로 초음파 센서와 물체가 멀어지면 LED 수가 적게 켜지도록 설정 (1개 )
#define PIN1 4 // LED가 연결된 핀 번호
#define PIN2 5 // LED가 연결된 핀 번호
#define PIN3 6 // LED가 연결된 핀 번호
#define PIN4 7 // LED가 연결된 핀 번호
int echo = 9;
int trig = 8;
void setup() {
Serial.begin(9600); // 시리얼 통신 시작, 통신 속도 9600bps
pinMode(trig, OUTPUT); // Trig 핀을 출력으로 설정
pinMode(echo, INPUT); // Echo 핀을 입력으로 설정
pinMode(PIN1, OUTPUT);
pinMode(PIN2, OUTPUT);
pinMode(PIN3, OUTPUT);
pinMode(PIN4, OUTPUT);
}
void loop() {
// 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
digitalWrite(trig, LOW); // Trig 핀을 LOW로 설정
digitalWrite(echo, LOW);
delayMicroseconds(2);
// 진동
digitalWrite(trig, HIGH); // Trig 핀을 HIGH로 설정하여 펄스 발생
delayMicroseconds(10); // 10마이크로초 동안 유지
digitalWrite(trig, LOW); // Trig 핀을 LOW로 설정하여 펄스 종료
// 수신
// echoPin이 H를 유지한 시간을 저장한다.
unsigned long duration = pulseIn(echo, HIGH); // Echo 핀에서 HIGH 신호가 오는 시간을 측정
//H일때 시간(초음파가 보냈다가 다시 돌아온 시간을 가지고 거리를 계산한다.
float distance = ((float)(340 * duration) / 10000) / 2; // 거리 계산 (음속 340m/s 사용)
// 출력
Serial.print(distance); // 거리를 시리얼 모니터에 출력
Serial.println("cm");
delay(500); // 500밀리초 동안 대기
if (distance > 5) {
digitalWrite(PIN1, HIGH);
}else {
digitalWrite(PIN1, LOW);
}
if (distance > 8) {
digitalWrite(PIN2, HIGH);
}else {
digitalWrite(PIN2, LOW);
}
if (distance > 11) {
digitalWrite(PIN3, HIGH);
}else {
digitalWrite(PIN3, LOW);
}
if (distance > 14) {
digitalWrite(PIN4, HIGH);
}else {
digitalWrite(PIN4, LOW);
}
}
728x90
'프로그래밍 > Arduino' 카테고리의 다른 글
버스 공공데이터 활용 (0) | 2025.01.25 |
---|---|
[Arduino] RGB LED, PWM (0) | 2025.01.24 |
[Arduino] 온습도 센서(DHT11) (0) | 2025.01.23 |
[Arduino] 조도센서 CDS 실습 (0) | 2025.01.23 |
[Arduino] error 해결 'ledcAttachPin' was not declared in this scope; did you mean 'ledcAttach? (0) | 2025.01.23 |