아두이노 우노로 자율 주행 라인 트레이서 로봇 만들기
부품 및 소모품
| 아두이노 우노 |
1개 |
| BO 모터 (기어드 모터) |
2개 |
| 바퀴 (모터 축 맞춤) |
2개 |
| 캐스터 휠 (전방향 바퀴) |
1개 |
| IR 적외선 센서 모듈 (반사형) |
2개 |
| L293D 듀얼 H-브리지 모터 드라이버 |
1개 |
| PCB (만능 기판 또는 주문 제작) |
1개 |
| 9V 배터리 (또는 리튬 배터리 팩) |
1개 |
앱 및 온라인 서비스
프로젝트 개요
아두이노 우노와 적외선 센서 2개로 흰 바닥 위 검은 선을 따라가는 완전 자율 라인 트레이서 로봇을 만듭니다. 초보자도 쉽게 따라 할 수 있는 기초 로봇 프로젝트입니다.
섀시 제작
아크릴 판이나 골판지에 모터, 바퀴, 캐스터, 아두이노, 배터리, PCB를 고정합니다. 사진과 같이 직사각형 프레임으로 조립하세요.
회로 구성
모터 드라이버 (L293D) 연결
- 입력 핀: 아두이노 D8, D9 (좌측 모터), D10, D11 (우측 모터)
- 모터 출력: OUT1/OUT2 (좌), OUT3/OUT4 (우)
- 전원: VS (모터용 9V), VSS (로직용 5V), GND 공통
IR 센서 연결
- 좌측 센서 OUT → 아두이노 D13
- 우측 센서 OUT → 아두이노 D12
- VCC → 5V, GND → GND
센서는 검은 선 위에서 HIGH, 흰 바닥에서 LOW를 출력한다고 가정합니다. (모듈에 따라 반대일 수 있음)
PCB 제작
만능 기판에 직접 납땜하거나, PCBWay에서 공유된 거버 파일로 전문 PCB 주문 가능.
아두이노 코드
// Line Following Robot using 2 IR sensors
// by Shubham Shinganapure
int lm1 = 8; // 좌측 모터 IN1
int lm2 = 9; // 좌측 모터 IN2
int rm1 = 10; // 우측 모터 IN1
int rm2 = 11; // 우측 모터 IN2
int sl = 13; // 좌측 센서 입력
int sr = 12; // 우측 센서 입력
int SlV = 0, SrV = 0;
void setup() {
pinMode(lm1, OUTPUT); pinMode(lm2, OUTPUT);
pinMode(rm1, OUTPUT); pinMode(rm2, OUTPUT);
pinMode(sl, INPUT); pinMode(sr, INPUT);
stopRobot();
}
void loop() {
SlV = digitalRead(sl);
SrV = digitalRead(sr);
// 둘 다 흰색(LOW) → 직진
if (SrV == LOW && SlV == LOW) forward();
// 우측만 검은선(HIGH) → 좌회전
else if (SrV == HIGH && SlV == LOW) left();
// 좌측만 검은선(HIGH) → 우회전
else if (SrV == LOW && SlV == HIGH) right();
// 둘 다 검은선(HIGH) → 정지
else if (SrV == HIGH && SlV == HIGH) stopRobot();
}
void forward() {
digitalWrite(lm1, HIGH); digitalWrite(lm2, LOW);
digitalWrite(rm1, HIGH); digitalWrite(rm2, LOW);
}
void backward() {
digitalWrite(lm1, LOW); digitalWrite(lm2, HIGH);
digitalWrite(rm1, LOW); digitalWrite(rm2, HIGH);
}
void left() {
digitalWrite(lm1, LOW); digitalWrite(lm2, HIGH);
digitalWrite(rm1, HIGH); digitalWrite(rm2, LOW);
}
void right() {
digitalWrite(lm1, HIGH); digitalWrite(lm2, LOW);
digitalWrite(rm1, LOW); digitalWrite(rm2, HIGH);
}
void stopRobot() {
digitalWrite(lm1, LOW); digitalWrite(lm2, LOW);
digitalWrite(rm1, LOW); digitalWrite(rm2, LOW);
}
회로도
L293D 핀아웃과 아두이노 연결 배선도 참조.
확장 아이디어
- PWM으로 속도 제어 추가
- 더 많은 센서로 급커브 대응
- 블루투스 모듈로 원격 제어/모니터링
- 장애물 회피 센서 추가