아두이노를 공부하다 보면 가장 많이 접하고 한 번쯤 만들어보게 되는 게 라인트레이서인 거 같습니다.
그래서 간단하게 제작한 라인트레이서를 기록하도록 하겠습니다.
-작동원리
적외선 센서를 이용해서 검은색 라인이나 흰색 라인을 감지해서 라인을 따라 이동하게 합니다.
(여기 기록되는 라인트레이서는 적외선 센서를 2개 사용했습니다. )
가장 중요한 적외선 센서는
보통 발광부와 수광부가 있습니다.
발광부에서 적외선을 쏘게 되면 물체에 반사되어서 수광부로 들어오게 됩니다.
하지만 검은색은 빛을 흡수하여 수광부에 적외선이 도달하지 못하게 됩니다.
이 원리를 이용하여 검은 선과 흰 선을 구분해 줍니다.
라인트레이서는 왼쪽 센서와 오른쪽 센서에서 각각 보내는 데이터를 이용해서 이동합니다.
왼쪽 센서에서 검은색선을 미감지하고 오른쪽 센서에서는 검은선을 감지합니다. 이상태에서 직진을 계속한다면 결국 라인트레이서는 검은선을 완전히 이탈하게 됩니다.
그래서 왼쪽 센서에서 검은선을 미감지했고 오른쪽 센서는 감지했기 때문에 라인트레이서를 우회전해서 검은선에 양쪽 센서가 모두 감지되도록 하게 해 줍니다.
반대의 경우도 마찬가지입니다.
-준비물
(참고로 꼭 이게 맞는 게 아닙니다. 재료는 항상 변경이 가능합니다.)
-Arduino Uno 1개
-브레드보드 1개(작은 거면 충분합니다 170핀으로도 만들었습니다. 그냥 단순 점프용입니다.)
-적외선 센서 2개(이 내용은 적외선 센서 2개로 만든 라인트레이서입니다. )
적외선 수광부 발광부 따로 사셔서 직접 연결하셔도 좋습니다만... 처음 하신다면 위 사진처럼 한쪽 방향으로 다 납땜한 제품을 사시는 게 편합니다.('TCRT5000'으로 검색하시면 많이 나옵니다.)
-2WD 자동차 프레임 키트 1개
이것도 위에 내용하고 비슷한 거지만 직접 만드는 게 당연히 좋습니다 하지만 이 내용에서는 보통 '2WD 자동차 프레임'을 검색하면 나오는 제품을 사용하였습니다. (보통 2개의 DC 모터가 포함되어있습니다.)
-듀얼 모터 드라이버 모듈 1개
'L9110'로 검색하면 많이 나오는 제품을 사용했습니다.
모터에 외부 전원을 사용하기 위해 구매했습니다.
*건전지 (선택)
라인트레이서를 만들면서 보통 발생하는 문제가 대부분 1.5v 건전지를 직렬로 연결해서 4개를 사용하는 키트가 대부분입니다.
근데 이걸 이용해서 아두이노와 모터에 전원을 공급하다 보면 DC 모터가 전원 공급이 부족해서 잘 움직이지 않는 경우가 생겼습니다. 그래서 저는 9V 건전지를 사용하여 작동하였습니다.
-회로도 구성
회로도는 자신이 구성하는 모양, 방향에 따라서 유동적으로 변경해야 합니다.
-코드
양쪽 센서가 모두 검은 선이 감지되면 앞으로 직진
왼쪽 센서만 검은 선이 감지되면 좌회전
오른쪽 센서만 검은 선이 감지되면 우회전
양쪽 센서가 모두 검은 선이 감지되지 않으면 정지
이게 기본 틀입니다.
#define LmotorCW 5
#define LmotorCCW 6
#define RmotorCW 9
#define RmotorCCW 10
#define IRL 7
#define IRR 8
int speed = 50; //모터 속도
void setup() {
// put your setup code here, to run once:
pinMode(LmotorCW,OUTPUT);
pinMode(LmotorCCW,OUTPUT);
pinMode(RmotorCW,OUTPUT);
pinMode(RmotorCCW,OUTPUT);
pinMode(IRL,INPUT);
pinMode(IRR,INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
//모터 장착 방향, 배선이 따라 코드를 수정 해서 사용
//양쪽 IR 센서가 모두 검은색 라인 감지시 양 바퀴 전부 전진
if(digitalRead(IRL)==HIGH && digitalRead(IRR)==HIGH){
analogWrite(LmotorCW,0);
analogWrite(LmotorCCW,speed);
analogWrite(RmotorCW,speed);
analogWrite(RmotorCCW,0);
}
// 검은색 선을 왼쪽 IR센서는 감지 오른쪽 IR센서는 미감지
else if(digitalRead(IRL)==LOW && digitalRead(IRR)==HIGH){
analogWrite(LmotorCW,0);
analogWrite(LmotorCCW,speed);
analogWrite(RmotorCW,0);
analogWrite(RmotorCCW,speed);
}
// 검은색 선을 왼쪽 IR센서는 미감지 오른쪽 IR센서는 감지
else if(digitalRead(IRL)==HIGH && digitalRead(IRR)==LOW){
analogWrite(LmotorCW,speed);
analogWrite(LmotorCCW,0);
analogWrite(RmotorCW,speed);
analogWrite(RmotorCCW,0);
}
//모두 미감지시 정지
else if(digitalRead(IRL)==LOW && digitalRead(IRR)==LOW){
analogWrite(LmotorCW,0);
analogWrite(LmotorCCW,0);
analogWrite(RmotorCW,0);
analogWrite(RmotorCCW,0);
}
}
속도는 직접 작동해보면서 유동적으로 변경해야 합니다.
적외선 센서가 검은색일 때 On이 되는 것도 있지만 검은색일 때 Off가 되는 센서도 될 수 있습니다.(직접 확인하고 코드를 수정해야 합니다.)
-완성
적외선 센서를 부착할 때 바닥과의 높이를 잘 조절해야 감지가 잘 됩니다.
완성된 라인트레이서는 검은선을 따라서 움직입니다.
'공부 자료실 > 아두이노' 카테고리의 다른 글
다양하게 아두이노 활용하기 (0) | 2024.10.19 |
---|---|
아두이노 - 8X8 도트 매트릭스 모듈 사용 (0) | 2019.05.29 |
댓글