
보호 구역에 진입하는 물체나 사람을 감지하고 경보를 울리기 위해 경계 침입 감지 로봇 을 초음파 센서, IR 센서 및 버저 를 사용하여 설계합니다.
STEP 1. 준비물



번호부품수량
1)DESHBOT Shield
1
2)Arduino Nano
1
3)초음파 센서 (HC-SR04)
1
4)IR 센서
1
5)버저
1
6)점퍼 와이어
필요한 만큼
7)배터리/USB 전원
1
STEP 2. 작동 원리
다음 초음파 센서 는 봇과 주변 물체 사이의 거리를 지속적으로 측정합니다. 물체가 미리 설정된 거리 안으로 들어오면 Arduino는 이를 침입으로 간주합니다.
다음 IR 센서 는 적외선을 사용하여 물체나 사람을 감지합니다. IR 센서가 장애물을 감지하면 Arduino로 신호를 보냅니다.
Arduino Nano는 두 센서의 신호를 모두 처리합니다:
- 초음파 센서가 물체 감지 → 부저 켜짐
- IR 센서가 물체 감지 → 부저 켜짐
- 침입이 감지되지 않음 → 부저 꺼짐
따라서 이 봇은 제한 구역 주변의 움직임을 감지하는 간단한 보안 시스템으로 사용할 수 있습니다.
STEP 3. 연결
부품 핀 / 연결
초음파 TRIG - A3
초음파 ECHO - A4
초음파 VCC - 5V
초음파 GND - GND
IR 센서 OUT - D2
IR 센서 VCC - 5V
IR 센서 GND - GND
부저 + D11(내장)
부저 − GND
STEP 4. 코드
물론입니다. 다음은 단계별 코드 설명입니다. 프로젝트 문서에 바로 붙여 넣을 수 있도록 작성했습니다.
코드 설명 – 경계 침입 감지 봇
1단계: 핀 연결 정의
const int TRIG_PIN = A3;
const int ECHO_PIN = A4;
const int IR_PIN = A5;
const int BUZZER_PIN = 11;
- TRIG_PIN은 초음파 센서의 TRIG 핀에 연결됩니다.
- ECHO_PIN은 초음파 센서의 ECHO 핀에 연결됩니다.
- IR_PIN은 IR 센서 출력에 연결됩니다.
- BUZZER_PIN은 버저에 연결됩니다.
- 이 핀 번호는 각 부품이 Arduino의 어디에 연결되어 있는지를 알려 줍니다.
2단계: 경고 거리 설정
const int ALERT_DISTANCE = 30;
- 경고 거리는 30 cm로 설정됩니다.
- 물체가 초음파 센서에서 30 cm 이내로 들어오면 침입이 감지됩니다.
3단계: Setup 함수
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(IR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(BUZZER_PIN, LOW);
Serial.begin(9600);
}
setup() 함수는 Arduino가 시작될 때 한 번만 실행됩니다.
- TRIG는 Arduino가 이를 통해 신호를 보내기 때문에 OUTPUT 으로 설정됩니다.
- ECHO는 Arduino가 초음파 신호를 수신하기 때문에 INPUT 으로 설정됩니다.
- IR 센서는 감지 신호를 수신하기 위해 INPUT 으로 설정됩니다.
- 버저는 Arduino가 제어하기 때문에 OUTPUT 으로 설정됩니다.
- 버저는 처음에 OFF상태로 설정됩니다.
- Serial.begin(9600)은 9600 baud로 Serial Monitor 통신을 시작합니다.
4단계: 메인 루프 시작
loop() 함수는 계속해서실행됩니다.
Arduino는 다음 작업을 반복합니다:
- 거리를 측정합니다.
- IR 센서를 읽습니다.
- 침입 여부를 확인합니다.
- 버저를 제어합니다.
5단계: 초음파 펄스 전송
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
- 먼저 TRIG 핀을 LOW로 설정합니다.
- 그런 다음 10 microseconds동안 HIGH로 설정합니다.
- 이렇게 하면 짧은 초음파 트리거 펄스가 생성됩니다.
- 초음파 센서가 초음파를 방출합니다.
6단계: 에코 읽기
long duration = pulseIn(ECHO_PIN, HIGH, 30000);
- Arduino는 초음파가 돌아올 때까지 기다립니다.
- pulseIn()은 ECHO 핀이 HIGH로 유지되는 시간을 측정합니다.
- 측정된 시간은 duration에 저장됩니다.
- 30000은 최대 대기 시간인 30,000 microseconds를 의미합니다.
7단계: 거리 계산
int distance = duration * 0.034 / 2;
Arduino는 에코 시간을 센티미터 단위의 거리로 변환합니다.
- 0.034는 마이크로초당 cm 단위로 나타낸 음속의 근삿값입니다.
- 소리가 물체까지 갔다가 돌아오기때문에 결과를 2로 나눕니다.
계산된 거리는 distance 변수에 저장됩니다.
8단계: IR 센서 읽기
int irValue = digitalRead(IR_PIN);
- Arduino는 IR 센서의 출력을 읽습니다.
- 값은 irValue에 저장됩니다.
- IR 센서에 따라 다르지만, 이 설정에서는 일반적으로 LOW가 물체가 감지되었음을 의미합니다.
9단계: 센서 값 표시
Serial.print("Distance: ");
Serial.print(distance);
Serial.print(" cm | IR: ");
Serial.println(irValue);
이 기능은 센서 측정값을 Serial Monitor에 표시합니다.
예:
Distance: 45 cm | IR: 1
Distance: 20 cm | IR: 0
이를 통해 프로젝트를 테스트하는 동안 센서를 모니터링할 수 있습니다.
10단계: 침입 여부 확인
if ((distance > 0 && distance <= ALERT_DISTANCE) || irValue == LOW) {
Arduino는 두 가지 조건을 확인합니다:
조건 1:
초음파 센서가 1 and 30 cm사이의 물체를 감지합니다.
OR
조건 2:
IR 센서가 물체를 감지합니다(LOW).
두 센서 중 하나라도 침입을 감지하면조건은 TRUE가 됩니다.
11단계: 버저 켜기
digitalWrite(BUZZER_PIN, HIGH);
Serial.println("!!! INTRUSION DETECTED !!!");
침입이 감지되면:
- 부저가 ON상태가 됩니다.
- Serial Monitor에 "INTRUSION DETECTED"가 표시됩니다.
12단계: 영역 이상 없음
else {
digitalWrite(BUZZER_PIN, LOW);
Serial.println("Area Clear");
}
두 센서 모두 침입을 감지하지 않으면:
- 부저는 계속 OFF상태로 유지됩니다.
- "Area Clear"가 표시됩니다.
13단계: 짧은 지연
Arduino는 다음 과정을 반복하기 전에 200밀리초 동안 대기합니다.
이를 통해 시스템이 안정적인 값을 읽을 시간을 확보하고 Serial Monitor가 너무 빠르게 업데이트되는 것을 방지합니다.
원문: https://www.instructables.com/Perimeter-Intrusion-Bot-kit-Only-Ultrasonic-IR-Buz/