Post

아두노이노에 적외선센서 3개 부착하기

아두노이노에 적외선센서 3개 부착하기

arduino1


프로젝트 문서: 아두이노와 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)은 브레드보드를 거치지 않고 아두이노의 디지털 핀으로 직접 연결한다.

HC-SR04 ultrasonic sensor pinout

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)

부품 위치센서 핀연결 목적지 (아두이노/브레드보드)비고
브레드보드 1VCC브레드보드 1의 (+) 라인전원 공유
(센서 1)GND브레드보드 1의 (-) 라인접지 공유
 Trig아두이노 D9신호 출력
 Echo아두이노 D8신호 입력
브레드보드 2VCC브레드보드 2의 (+) 라인전원 공유
(센서 2)GND브레드보드 2의 (-) 라인접지 공유
 Trig아두이노 D7신호 출력
 Echo아두이노 D6신호 입력
브레드보드 3VCC브레드보드 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)

  1. 전원 선 연결 주의:
    • 브레드보드 간을 연결하는 점퍼선(전원 브릿지)이 빠지지 않도록 각별히 주의해야 한다.
    • 앞단의 전원 선이 빠질 경우, 그 뒤에 연결된 모든 브레드보드 및 센서의 전원이 차단된다.
  2. 순차 측정의 중요성:
    • 코드 내 delay(15)는 필수적이다. 여러 센서의 초음파가 서로 섞여 오작동하는 것을 방지하기 위해 센서 간 측정에 시차를 두어야 한다.
  3. 배선 거리:
    • 신호선(Trig, Echo)이 너무 길어질 경우 노이즈가 발생할 수 있으므로, 가능한 최단 거리를 유지하거나 쉴드 처리가 된 선을 사용하는 것이 좋다.

6. 개선 사항

이제 라즈베리파이 단에서 이벤트가 트리거 되면 아두이노에게 데이터를 받아오는 코드를 구현하자.

7. 느낀점

갑자기 내가 이걸 왜 하고있나 생각이 들것이다. 하고싶은 것만 하면서 살수는 없다. 배울 수 있다는 것에 감사하자.

This post is licensed under CC BY 4.0 by the author.