반응형

【 아두이노 Proj#2】 라인트레이서 자동차 만들기 L298N모듈)

 

 적외선 센서를 이용하여 바닥에 그려진 라인을 따라 이동하는 RC카를 만들어 보자. 

 

▶ 선수 학습 :

1. (기초) #24 DC 모터 제어 하기 4 (L293 & H브릿지 참고 강좌 클릭
2. (센서) #2 적외선(근접)센서 TCRT5000(TCRT5000 참고 강좌 클릭
3. (센서) #24 L298N 모터 모듈활용한... (L298N 모듈 참고 강좌 클릭   
4. (응용) #1 초음파센서로 자동차 만들기 (자동차 구동이해)  강좌 클릭

 

▶ 라인트레이서 완성 모습

 

▶ 라인트레이서 동작 원리

 

 이와 같은 센싱 역할을 하는 센서가 바로 아래 소개 되는 TCRT5000센서이며 이를 사용하기 편하게 모듈화 한 것이다.

 

▶ 실습에 사용되는 부품 스팩 ( TCRT5000)

 

 TCRT 5000은 적외선 방식이어서 적외선 센서로 불리지만, 가깝고 짧은 거리에 사용되기 때문에 근접센서로도 불린다. 

 TCRT 5000 모듈의 상세한 사용 설명은 선수학습 '2.번'을 참고 

 

 

▶ 실습에 사용되는 부품 스팩 ( L298N ) 

 

 모터 모듈의 상세한 사용 설명은 선수학습 '3.번'을 참고
 
 

▶ 실습 목표 :  

1. L298N 모듈에 대해 이해하고 모터를 연결하여 사용하는 방법에 대해 익힌다.

2. 적외선 센서(TCRT5000)의 작동방식과 활용하는 법을 익힐 수 있다.

4. 검은색 라인위를 따라 이동하는 라인트레이서 로봇을 구현할 수 있다. 

 

 

※ 전원 공급은 건전지를 사용할 수도 있지만 , 요즘 많이 보유하고 있는 휴대폰보조베터리를 사용해도 된다.  소형 보조 베터리 사용시 장점은, 건전지보다 장시간 플레이가 가능하며, 언제든 손쉽게 재충전이 가능하여 건전지 교체비용을 줄일 수 있다. 

 

▶ 실습 회로도면 1 (기본회로):

  (이미지 클릭하면 확대 가능)

※ 주의!! 위 이미지에서 아두이노에 연결된 붉은 선이 5V가 아니라 Vin으로 연결 되어야 합니다!!!

※ 실습회로 도면 1에 보면, 9V 건전지는 아두이노쪽에 전원공급용으로 쓰였구요. L298N모듈에 보면, +5V~(모터, 별도전원) 이라고 되어 있는 부분에는 5V이상 되는 전원을 따로 넣어(연결) 주라는 의미에요.   
그래서, 건전지를 두 개(가지) 사용해야 모터가 잘 돌아갑니다. 

 

▶ 실습 회로도면 2 (확장회로):

  (이미지 클릭하면 확대 가능)

 

 ※ 기본 회로로 동작이 확인 되면 위 그림 처럼 마치 자동차의 헤드램프 처럼 라이트가 들어오도록 LED와 저항을 추가 할 수 있으며, RC카의 전원을 켜고 끄기 쉽도록 슬라이드 스위치를 달아 놓았다.  (토글 스위치를 사용하여도 무방)

 

▶ 회로 연결 쉽게 따라하기 (영상) :

 

(영상을 확대해서 플레이해서 보세요)

 

 

▶ 실습 절차  : 

 
1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    DC 모터의 연결선 방향은 우선 연결 후 프로그램으로 작동시켜보고 방향이 반대가 될 경우 다시 바꾸어 연결하면 된다.
3.    만약 가지고 있는 모터의 용량이 비교적 클 경우 아두이노 전원만으로는 동작이 어려울 수 있으니 회로도에서 처럼 별도 전원을 인가해주면 동작이 잘 될 것이다. (※ 모터 관련 회로에서 대부분의 동작 문제는 모터에 공급되는 전력이 충분치 않아 발생한다) 
 
5.   전원 하나로 아두이노와 DC모터를 포함한 L298모듈 둘 다를 돌리기에는 한계가 있다따라서 아두이노와 DC모터 모듈 전원을 각각 공급해주어야 하며이때 그라운드(GND) 공통으로 연결해주면 된다.  (속도가 빠르지는 않지만 휴대폰 보조베터리를 연결하면 하나의 전원으로 구동이 가능하다)
 
6.  모터 모듈 전원은 최소 5V이상, 모터용량에 따라 넣어 주면 되는데, 모터 구동에는 전압보다 전류가 중요한 역할을 하게 된다실험을 해보면모터모듈 전원으로 9V 베터리를 연결 할 때 보다, 1.5V X 4개 (6V)를 연결할 때가 훨씬 잘 동작될 것이다.(4개의 건전지에서 전류가 충분히 공급 되기 때문)
7.   TCRT5000 센서 동작에 문제가 있다면, 센서에 달려 있는 가변저항을 소형드라이버 등으로 돌려서 측정가능한 거리값을 조절 해보기 바란다. 
8. '라인'은 방바닥에 두툼한 검정색 혹은 짙은색 (종이)테이프 등으로 모양을 만들어도 잘 작동한다.
 
 

 

 

▶ 프로그램 코드 및 설명 : 

/* 라인트레이서(Line Tracer) 프로그램       */
/* by RASIno , http://rasino.tistory.com  */


#define IN1 8#define IN2 9#define IN3 10#define IN4 11int leftLineSensor =  12;      // 라인트레이서 왼쪽 센서

int rightLineSensor = 13;      // 라인트레이서 오른쪽 센서

 

void forward() {      // 

전진 : 모터 두 개를 모두 정회전 시킴

      digitalWrite(IN1, HIGH);

      digitalWrite(IN2, LOW);

      digitalWrite(IN3, HIGH);

      digitalWrite(IN4, LOW);    }

 

void back() {         // 

후진 : 모터 두 개를 모두 역회전 시킴

      digitalWrite(IN1, LOW);

      digitalWrite(IN2, HIGH);

      digitalWrite(IN3, LOW);

      digitalWrite(IN4, HIGH);   }

 

void left() {         // 

좌회전 : 오른쪽 모터만 정회전 시킴

      digitalWrite(IN1, LOW);

      digitalWrite(IN2, LOW);

      digitalWrite(IN3, HIGH);

      digitalWrite(IN4, LOW);  }

 

void right() {      // 

우회전 : 왼쪽 모터만 정회전 시킴

      digitalWrite(IN1, HIGH);

      digitalWrite(IN2, LOW);

 

      digitalWrite(IN3, LOW);

      digitalWrite(IN4, LOW);   }

 

void stop() {       // 

정지 : 2개의 모터 모두 회전 멈춤

      digitalWrite(IN1, LOW);

      digitalWrite(IN2, LOW);

      digitalWrite(IN3, LOW);

 

      digitalWrite(IN4, LOW);  }

 

void setup( )  {

  pinMode(IN1, OUTPUT);     // A 모터 1

  pinMode(IN2, OUTPUT);     // A 모터 2

  pinMode(IN3, OUTPUT);     // B 모터 1

  pinMode(IN4, OUTPUT);     // B 모터 2

  pinMode(leftLineSensor, INPUT);

  pinMode(rightLineSensor, INPUT);  

}

 

void loop( ) {

 

// 만약 양쪽 센서가 모두 선 미감지’(반사신호’OK’) 경우 : 전진

if (!digitalRead(leftLineSensor) && !digitalRead(rightLineSensor)) {

  forward();  

 }  

 

// 만약 왼쪽 센서만 선감지(반사신호X)’ 경우 :  좌회전

else if (!digitalRead(leftLineSensor) && digitalRead(rightLineSensor)) {

  left();  

 }   

 

// 만약 오른쪽 센서만 선감지(반사신호X)’ 경우 :  우회전

else if (digitalRead(leftLineSensor) && !digitalRead(rightLineSensor)) {

  right();

 } 

 

  // 만약 양쪽 센서 모두 선감지(반사신호X)’ 경우 :  정지

else if (digitalRead(leftLineSensor) && digitalRead(rightLineSensor)) {

 

  stop();  

 } 

 

}

◈  모터 A, B가 동시에 시계방향으로 돌면 전진, 반시계 방향이면 후진이고, 
한 쪽바퀴만 돌리거나 두 개의 바퀴를 서로 반대로 돌리면 좌회전 혹은 우회전이 된다.  

 이를 함수 형태로 만들고 메인 루프에서 적절히 함수들을 호출해서 사용하도록 하였다.  라인트레이서의 동작을 좀더 다양하게 꾸밀 수 있는데, 바닥의 라인에 따라 되돌아 나오기 등등 여러 형태로 프로그래밍 해 볼 수 있다. 

▶ 실행영상 :  

(전체화면 보기로 보세요)

 

 

 

 

 

 

 

 

▶ 아두이노 파일(다운) :

LineTracerRC-CAR.ino
다운로드

 

 

▶ 동작이 안 될 때 :

아래 사항을 하나씩 살펴보세요. (위 글 내용에도 강조했지만 다시 정리해드리면)

 

1. 회로 연결을 꼼꼼하게 한번더 살펴 보세요. 분명 회로도 보고 하셔도 어디 한 두 군데 잘못연결되면 동작되지 않습니다. 

2. 모터가 들어가는 회로에서 모터 동작이 이상하거나 잘 안되는 원인의 대부분은 전력부족이에요.   전력 중에서도 전류가 충분하게 공급되어야 하죠. (전압보다 전류가 더 중요해요)

실습회로 도면 1에 보면, 9V 건전지는 아두이노쪽에 전원공급용으로 쓰였구요. 
L298N모듈에 보면, +5V~(모터, 별도전원) 이라고 되어 있는 부분에는 5V이상 되는 전원을 따로 넣어(연결) 주라는 의미에요.   그래서, 건전지를 두 개(가지) 사용해야 아마 제대로 돌아갈 거예요. 

건전지 하나로는 보통 겨우 겨우 돌아가거나 제대로 안 돌아 갈 수 있어요. 

그리고, 9V 건전지는 전압은 높아보이지만 전류가 약한 타입이라서 아두이노 본체 전원으로는 좋은데, 모터쪽 전원으로는 부적합해요.  그래서 모터쪽 전원으로는 AA(1.5V)건전지 4개를 직렬연결해서 6V정도로 만들어 공급해주면 좋구요,  아니면, 18650(3.7V) 두 개를 직렬(7.4V) 연결한 걸 공급해주면 됩니다.  얘네들은 전류가 쎈 건전지라서 모터가 잘 돌아가요. 

그리고, 스위치를 추가한 회로 도면 2번(확장회로)에도 1번과 같이 모터쪽 전원과 따로 분리해서 전원을 이중으로 넣어주면 됩니다.

반응형