라인 트레이서 만들기

라인 트레이서란?

라인 트레이서는 바닥에 그려진 선을 따라 움직이는 로봇입니다. 적외선(IR) 센서를 사용하여 선을 감지하고, 선을 놓치지 않도록 조향을 제어합니다.

필요한 추가 부품

회로도

기존 회로에 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);
}
        
홈으로 돌아가기