아두노이노에 적외선센서 3개 부착하기
아두노이노에 적외선센서 3개 부착하기
프로젝트 문서: 아두이노와 3개의 분산된 초음파 센서 연동
1. 개요 (Overview)
본 문서는 하나의 아두이노(Arduino)를 사용하여 물리적으로 떨어진 3개의 위치에 배치된 초음파 센서(HC-SR04)를 제어하는 배선 및 소프트웨어 구성을 기술한다. 각 센서는 개별 브레드보드에 장착되며, 전원은 ‘데이지 체인(Daisy Chain)’ 방식을 통해 공유한다.
2. 하드웨어 배선 (Hardware Wiring)
2.1 전원 공급: 데이지 체인(Daisy Chain) 방식
아두이노의 전원 핀(5V, GND) 제한을 해결하기 위해, 첫 번째 브레드보드에서 전원을 받아 순차적으로 다음 브레드보드로 전달하는 방식을 사용한다.
- 1단계: 메인 전원 연결 (아두이노 → 브레드보드 1)
Arduino 5V→브레드보드 1의 (+) 라인 (빨강)Arduino GND→브레드보드 1의 (-) 라인 (파랑)
- 2단계: 전원 확장 (브레드보드 1 → 브레드보드 2)
브레드보드 1(+) → 점퍼선 →브레드보드 2(+)브레드보드 1(-) → 점퍼선 →브레드보드 2(-)
- 3단계: 전원 확장 (브레드보드 2 → 브레드보드 3)
브레드보드 2(+) → 점퍼선 →브레드보드 3(+)브레드보드 2(-) → 점퍼선 →브레드보드 3(-)
Note: 위 연결을 통해 모든 브레드보드의 전원 레일(Rail)에는 동일한 5V와 GND가 공급된다. 각 센서의 VCC/GND는 해당 브레드보드의 전원 레일에 연결한다.
2.2 신호선 연결 (Signal Wiring)
각 센서의 데이터 핀(Trig, Echo)은 브레드보드를 거치지 않고 아두이노의 디지털 핀으로 직접 연결한다.
Shutterstock
탐색
- 센서 1 (좌측/Board 1): Trig(9번), Echo(8번)
- 센서 2 (중앙/Board 2): Trig(7번), Echo(6번)
- 센서 3 (우측/Board 3): Trig(5번), Echo(4번)
3. 핀 맵 요약 (Pin Configuration Table)
| 부품 위치 | 센서 핀 | 연결 목적지 (아두이노/브레드보드) | 비고 |
|---|---|---|---|
| 브레드보드 1 | VCC | 브레드보드 1의 (+) 라인 | 전원 공유 |
| (센서 1) | GND | 브레드보드 1의 (-) 라인 | 접지 공유 |
| Trig | 아두이노 D9 | 신호 출력 | |
| Echo | 아두이노 D8 | 신호 입력 | |
| 브레드보드 2 | VCC | 브레드보드 2의 (+) 라인 | 전원 공유 |
| (센서 2) | GND | 브레드보드 2의 (-) 라인 | 접지 공유 |
| Trig | 아두이노 D7 | 신호 출력 | |
| Echo | 아두이노 D6 | 신호 입력 | |
| 브레드보드 3 | VCC | 브레드보드 3의 (+) 라인 | 전원 공유 |
| (센서 3) | GND | 브레드보드 3의 (-) 라인 | 접지 공유 |
| Trig | 아두이노 D5 | 신호 출력 | |
| Echo | 아두이노 D4 | 신호 입력 |
4. 소프트웨어 (Source Code)
다음 코드는 3개의 센서를 순차적으로 트리거하여 간섭 없이 거리를 측정한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// 3개의 초음파 센서(HC-SR04) 제어 코드
// 설정: 3개의 브레드보드 분산 배치
// 핀 정의
const int TRIG1 = 9; const int ECHO1 = 8; // 센서 1
const int TRIG2 = 7; const int ECHO2 = 6; // 센서 2
const int TRIG3 = 5; const int ECHO3 = 4; // 센서 3
void setup() {
Serial.begin(9600); // 시리얼 통신 초기화
// 각 센서 핀 모드 설정
pinMode(TRIG1, OUTPUT); pinMode(ECHO1, INPUT);
pinMode(TRIG2, OUTPUT); pinMode(ECHO2, INPUT);
pinMode(TRIG3, OUTPUT); pinMode(ECHO3, INPUT);
}
void loop() {
// 1. 센서 1 측정 (Left)
long d1 = getDistance(TRIG1, ECHO1);
delay(15); // 초음파 간섭 방지를 위한 대기 시간
// 2. 센서 2 측정 (Center)
long d2 = getDistance(TRIG2, ECHO2);
delay(15);
// 3. 센서 3 측정 (Right)
long d3 = getDistance(TRIG3, ECHO3);
// 결과 출력
Serial.print("L: "); Serial.print(d1);
Serial.print("cm | C: "); Serial.print(d2);
Serial.print("cm | R: "); Serial.print(d3);
Serial.println("cm");
delay(200); // 전체 루프 대기
}
// 거리 계산 함수 (단위: cm)
long getDistance(int trig, int echo) {
// 초음파 발사 (10us 펄스)
digitalWrite(trig, LOW); delayMicroseconds(2);
digitalWrite(trig, HIGH); delayMicroseconds(10);
digitalWrite(trig, LOW);
// 돌아온 시간 측정
long duration = pulseIn(echo, HIGH);
// 거리 환산 (소리 속도 340m/s 고려)
return duration * 0.034 / 2;
}`
5. 주의사항 및 팁 (Troubleshooting & Tips)
- 전원 선 연결 주의:
- 브레드보드 간을 연결하는 점퍼선(전원 브릿지)이 빠지지 않도록 각별히 주의해야 한다.
- 앞단의 전원 선이 빠질 경우, 그 뒤에 연결된 모든 브레드보드 및 센서의 전원이 차단된다.
- 순차 측정의 중요성:
- 코드 내
delay(15)는 필수적이다. 여러 센서의 초음파가 서로 섞여 오작동하는 것을 방지하기 위해 센서 간 측정에 시차를 두어야 한다.
- 코드 내
- 배선 거리:
- 신호선(Trig, Echo)이 너무 길어질 경우 노이즈가 발생할 수 있으므로, 가능한 최단 거리를 유지하거나 쉴드 처리가 된 선을 사용하는 것이 좋다.
6. 개선 사항
이제 라즈베리파이 단에서 이벤트가 트리거 되면 아두이노에게 데이터를 받아오는 코드를 구현하자.
7. 느낀점
갑자기 내가 이걸 왜 하고있나 생각이 들것이다. 하고싶은 것만 하면서 살수는 없다. 배울 수 있다는 것에 감사하자.
This post is licensed under CC BY 4.0 by the author.

