라인 트레이서란?
라인 트레이서는 바닥에 그려진 선을 따라 움직이는 로봇입니다. 적외선(IR) 센서를 사용하여 선을 감지하고, 선을 놓치지 않도록 조향을 제어합니다.
필요한 추가 부품
- TCRT5000 또는 유사한 IR 센서 모듈 (2개 이상): 바닥의 선을 감지하는 데 사용됩니다.
회로도
기존 회로에 IR 센서를 추가로 연결합니다. VCC는 5V, GND는 GND에 연결하고, 각 센서의 디지털 출력(D0)을 ESP32의 디지털 핀에 연결합니다.
[라인 트레이서 회로도 이미지가 여기에 표시됩니다]
라인 트레이서 코드
아래 코드는 2개의 IR 센서를 사용하여 라인을 따라가는 기본적인 예제입니다.
#include <Arduino.h>
// 모터 핀 (기본 코드와 동일)
#define ENA 5
#define IN1 18
#define IN2 19
#define ENB 23
#define IN3 22
#define IN4 21
// IR 센서 핀
#define IR_LEFT 13
#define IR_RIGHT 12
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(IR_LEFT, INPUT);
pinMode(IR_RIGHT, INPUT);
}
void loop() {
bool left_sensor = digitalRead(IR_LEFT);
bool right_sensor = digitalRead(IR_RIGHT);
if (left_sensor == HIGH && right_sensor == HIGH) {
// 둘 다 검은 선을 감지하면 직진
moveForward();
} else if (left_sensor == LOW && right_sensor == HIGH) {
// 왼쪽 센서만 감지하면 우회전
turnRight();
} else if (left_sensor == HIGH && right_sensor == LOW) {
// 오른쪽 센서만 감지하면 좌회전
turnLeft();
} else {
// 둘 다 감지하지 못하면 정지 (또는 후진)
stopMotors();
}
}
void moveForward() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 150);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 150);
}
void turnRight() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH); // 왼쪽 바퀴 후진
analogWrite(ENA, 120);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW); // 오른쪽 바퀴 전진
analogWrite(ENB, 120);
}
void turnLeft() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW); // 왼쪽 바퀴 전진
analogWrite(ENA, 120);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH); // 오른쪽 바퀴 후진
analogWrite(ENB, 120);
}
void stopMotors() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
홈으로 돌아가기