코드 검색

레슨 30/31: SunFounder Arduino 키트의 스마트 카를 이용한 Car-8 라인 트래킹 | Robojax

레슨 30/31: SunFounder Arduino 키트의 스마트 카를 이용한 Car-8 라인 트래킹 | Robojax

이 가이드는 SunFounder 3-in-1 Arduino 키트를 사용하여 라인 추적 스마트 카를 제작하는 방법을 안내합니다.

lesson30-line-tracking-line-1

 비디오에서 시연된 이 프로젝트는 적외선 라인 추적 모듈을 사용하여 흰색 표면의 검은색 라인을 감지하고 두 개의 모터를 제어하여 차량이 트랙을 유지하도록 합니다. 이는 센서 판독, 조건부 논리 및 모터 제어에 대해 가르쳐 주는 기본적인 로봇 공학 프로젝트입니다. 실제 세계에서의 가치는 엄청납니다—창고의 자동 유도 차량(AGV), 방 가장자리를 따라가는 로봇 청소기, 자율 주행 학습을 위한 교육 플랫폼의 기초입니다. 기본 제작 외에도 이 개념을 다음 용도로 사용할 수 있습니다:

  • 미로나 트랙에서 미리 정의된 경로를 탐색할 수 있는 간단한 로봇 만들기.
  • 소규모 사무실이나 실험실을 위한 자동 배달 카트 구축.
  • 학교 과학 프로젝트나 대회를 위한 라인 추적 로봇 개발.
  • 위치에 따라 항목을 분류하는 산업용 컨베이어 벨트 시스템 프로토타입 제작.

하드웨어 및 구성 요소

이 프로젝트의 핵심은 적외선(IR) 송신기와 수신기 쌍을 사용하는 라인 추적 모듈입니다. 주요 구성 요소는 다음과 같습니다:

  • 라인 추적 모듈(TCRT5000): 이 센서는 적외선을 방출하고 반사된 강도를 측정합니다. 모듈에는 아날로그 신호를 디지털 HIGH 또는 LOW 출력으로 변환하는 LM393 비교기가 포함되어 있습니다.
  • 모터가 장착된 스마트 카 섀시: SunFounder 키트에는 Arduino가 차량을 조향하기 위해 제어하는 두 개의 기어 모터가 있는 자동차 프레임이 포함되어 있습니다.
  • Arduino 보드: 작동의 "두뇌"로, 센서를 읽고 모터에 명령을 보냅니다.
  • 모터 드라이버(자동차 실드에 장착): 이 회로는 Arduino의 저전력 핀이 더 높은 전류의 모터를 제어할 수 있게 합니다.
lesson30-line-tracking-wiring

배선 가이드

라인 추적 모듈의 배선은 간단합니다. 비디오는 다음과 같은 연결을 보여줍니다(비디오 04:04 시점):

  • 라인 트래커 VCC(가운데 핀): Arduino의 5V 핀에 연결합니다.
  • 라인 트래커 GND(왼쪽 핀): Arduino의 GND 핀에 연결합니다.
  • 라인 트래커 OUT(오른쪽 핀): Arduino의 디지털 핀 2에 연결합니다.

모터는 자동차 실드의 모터 드라이버에 연결됩니다. 코드에서 오른쪽 모터는 핀 5와 6으로, 왼쪽 모터는 핀 9와 10으로 제어되며, 비디오 시연(비디오 12:28 시점)에서 확인할 수 있습니다.

lesson30-line-tracking-how-line

코드 설명

코드는 라인 트래커의 디지털 신호를 읽고 그에 따라 모터를 제어하도록 설계되었습니다. 주요 사용자 구성 가능 부분은 다음과 같습니다:

const int in1 = 5; // in1,2는 오른쪽 모터용
const int in2 = 6;

const int in3 = 9; // in3,4는 왼쪽 모터용
const int in4 = 10;

const int lineTrack = 2;
  • 모터 핀(in1, in2, in3, in4): 이 상수는 Arduino의 어떤 핀이 모터 드라이버에 연결되는지 정의합니다. 배선이 다르다면 설정에 맞게 이 값을 변경해야 합니다.
  • 라인 트래커 핀(lineTrack): 센서의 신호 출력에 연결된 디지털 핀을 정의합니다. 코드는 이 핀을 읽어 센서가 검은색 또는 흰색 표면 위에 있는지 확인합니다.

메인 루프에서 speed 변수를 조정하여 차량의 회전 속도를 제어할 수 있습니다. 값의 범위는 0에서 255까지이며, 값이 높을수록 차량이 더 빠르게 회전합니다.

int speed = 150;//0에서 255까지

로직은 간단합니다: 센서가 HIGH(검은색 라인)를 읽으면 차량은 왼쪽으로 회전하고, 그렇지 않으면 오른쪽으로 회전합니다. 사용자 정의 함수 moveLeft()moveRight()가 모터를 제어하여 이를 구현합니다. 예를 들어, 왼쪽으로 회전하려면 오른쪽 모터가 회전하고 왼쪽 모터는 정지하여 차량을 회전시킵니다. 이 동작은 비디오(비디오 10:39 시점)에서 자세히 설명됩니다.

lesson30-line-tracking-sensor-on-line
검은색 라인 위에 라인 트래커 배치. 또한 감도 조정.

라이브 프로젝트 시연

비디오는 라인 추적 자동차의 라이브 시연(비디오 13:13 시점)으로 마무리됩니다. 자동차는 검은색 트랙 위에 놓이고 센서는 라인 바로 위에 위치합니다. 자동차가 움직이면 센서는 검은색 라인과 흰색 배경을 감지하여 모터에 신호를 보내 방향을 조정합니다. 시연은 자동차가 완전한 원을 성공적으로 완주하는 모습을 보여주며, 간단한 좌/우 보정 로직의 효과를 입증합니다.

챕터

  • [00:00] 라인 트래킹 소개
  • [01:09] 라인 트래킹 모듈 작동 방식
  • [04:04] 라인 트래킹 모듈 배선
  • [04:23] 시리얼 모니터로 센서 테스트
  • [07:27] 라인 추적 로직 이해
  • [09:08] 라인 추적 자동차 코드
  • [11:37] 라인 추적 자동차 시연
  • [13:13] 검은 트랙에서 실시간 테스트

이미지

Lesson 30 line tracking wiring
Lesson 30 line tracking wiring
Lesson 30 line tracking line 1
Lesson 30 line tracking line 1
Lesson 30 line tracking how line
Lesson 30 line tracking how line
Lesson 30 line tracking sensor on line
Lesson 30 line tracking sensor on line
889-Lesson 30/31: Car-8 Line Tracking by Smart Car from SunFounder Arduino Kit
언어: C++

/*
this is code for the tutorial: Lesson 30/31: Car-8 Line Tracking by Smart Car from SunFounder Arduino Kit
YouTube video: https://www.youtube.com/watch?v=Cp2rD5RkYug
Get the code from: 📚⬇️ Download and resource page https://robojax.com/RJT613
www.robojax.com

*/
const int in1 = 5; // in1,2 for right motor
const int in2 = 6;

const int in3 = 9; // in3,4 for left motor
const int in4 = 10;

const int lineTrack = 2;

void setup() {
  Serial.begin(9600);

  //motor
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  
  //line track
  pinMode(lineTrack, INPUT);
}

void loop() {

  int speed = 150;//0 to 255

  int lineColor = digitalRead(lineTrack); // 0:white  1:black
  // Serial.println(lineColor); //print on the serial monitor
  if (lineColor) {
    Serial.print("Black ");
    moveLeft(speed);
  } else {
    Serial.print("White ");
    moveRight(speed);
  }
}
void moveLeft(int speed) {
  Serial.println("LEFT");
  analogWrite(in1, 0);
  analogWrite(in2, speed);
  
  analogWrite(in3, 0);
  analogWrite(in4, 0);
}

void moveRight(int speed) {
  Serial.println("RIGHT");
  analogWrite(in1, 0);
  analogWrite(in2, 0);
  
  analogWrite(in3, speed);
  analogWrite(in4, 0);
}

자원 및 참고자료

아직 자원이 없습니다.

파일📁

파일이 없습니다.