작품설명서

1. 작품명

국문: 라인 트레이서

영문: Line Tracer

2. 작품개요

◦ 라인 트레이서(Line Tracer)란 ?

라인 트레이서는 바닥에 그려진 선(Line)을 따라서 이동하는 단순한 형태의 로봇을 말한다. 검은 바탕에 흰 선 혹은 흰 바탕에 그려진 검은 선을 적외선 센서로 감지하여 움직이는 로봇으로, 산업현장에서 물건을 운반하는 무인 반송차에 응용되고 있는 기술이다.

라인 트레이서를 라인 스캐너(Line Scanner)라고 부르기도 한다.

- 라인 트레이서는 검정색 바닥면에 흰색 라인 혹은 흰색 바닥면에 검정 라인을 판별하여    주행할 수 있는 방식의 시스템이다.

- 라인을 검출하는 역할을 하는데 발광(EL-7L)과 수광(ST-7L)의 적외선 센서가 필요하다.

- 발광 센서가 적외선을 발광 시키면 수광 센서에서 빛을 받아들이는 원리이다.

- 바닥은 검정색이고 라인은 흰색이기 때문에 검은색은 적외선을 흡수하고 흰색은 적외선을    반사한다. 따라서 수광 센서에서 빛을 받아들이는 유무와 그 양에 따라서 라인인지 아닌지를 식별한다.

- 중앙처리부는 프로그램과 데이터를 저장하고 연산하는 작업을 한다.

- 센서부에서 입력받은 데이터(빛의 양)를 이용하여 진행방향을 제어한다.

- 좌측과 우측의 모터의 회전으로 앞으로 전진할 수 있으며 좌우 바퀴 회전량의 차를 이용하여 좌회전과 우회전을 할 수 있다. 오른쪽 커브를 위해서는 오른쪽 바퀴는 멈추고  한쪽바퀴만 회전시킨다.

3. 개발 배경 및 목적

컴퓨터가 발전함에 따라 사회의 여러 분야에서 자동화가 이루어지고 있다. 자동화가 많이 이루어지고 있는 곳 중 하나가 공장이다. 자동화 공장에서는 물건을 운반하기 위하여 AGV(Auto Guided Vehicle)라는 운반용 로봇을 사용하게 된다. AGV의 이동 경로를 알려주는 방법으로는 바닥에 자기 테이프를 붙이거나 명암 차이가 분명한 테이프를 붙이는 방법이 주로 사용된다. 레일과 같은 구조물을 설치하는 방법도 생각할 수 있으나 설치비가 많이 들고 이동경로의 변경이 어렵다. 공장자동화(Factory Automation)는 생산성 향상과 신뢰성, 원가절감의 효과를 얻을 수 있기 때문에 이러한 이유로 공장자동화는 계속 발전하고 있다. 자동화 된 공장에서는 물건을 운반하기 위하여 컨베이어시스템이나 운반용 로봇을 사용하는 경우가 많다. 이때 라인트레이서가 운반용 로봇으로 개발되어지고 있다.

◦ 국내 연구개발 동향

로봇 제작은 전자공학, 전기공학, 컴퓨터 프로그래밍, 기계공학, 제어계측 등 모든 것을 배울 수 있는 현대 과학의 결정체로 사고력과 창의력을 마음껏 발휘하는 데 도움이 된다. 로봇산업에 대한 관심 고취를 위해 로봇 페스티벌이 전국 곳곳에서 개최되고 있다.

가정용 청소로봇에서부터 오락용 배틀 로봇, 축구로봇, 마이크로마우스, 라인트레이서, 보행로봇 등 다채로운 종목의 행사가 열리고 있는데, 이 행사를 통해 청소년 및 시민들에게 로봇이 우리의 생활 속으로 들어와 있는 시점에 인간과 공존하는 로봇세계를 한 번 더 느끼고, 과학기술에 대한 관심과 흥미를 유발시켜 과학기술문화 저변확대를 기대하고 있다.

차세대 성장 동력산업 중 하나인 산업용 로봇 분야는 국내에서도 선진국과 경쟁할 수 있는 기술력을 확보하였으나, 아직 기술의 실용화와 산업화 관련 연구와 기술조사가 미진한 상황에서 여러 대회를 계기로 이공계를 전공하여 과학 기술인이 되고자 하는 학생은 물론, 지역주민에게도 과학기술분야에 많은 관심이 유발 될 것이다.

◦ 연구 목적

- AVR Controller (ATmega128)의 내부 구조를 분석하고 CPU 각 PORT의 이용방법을 숙지.

- 기존의 제작된 PCB보드 사용을 배제하고, 만능기판에 직접 설계, 제작을 통한 기술 습득.

- 센서의 분석 및 이해.

- C언어 응용 및 알고리즘 연구.

- C언어를 이용하여 AVR Controller (ATmega128)를 동작시켜 스텝 모터 제어.

- 적외선 센서를 통해 라인 검출.

- 스텝 모터의 원리분석과 응용방법을 숙지.

4. 주요 개발 내용

4-1  Line Tracer BLOCK DIAGRAM.

표) 전체 시스템 블록 다이어그램

중앙처리부			적외선센서부				라인
	➀		발광부			➁
	→					→
	➃		수광부			➂
	←					←
		모터구동부				➅	좌측모터
	➄					→
	→
						➅	우측모터
						→

4-1.1 각 모듈 설명

1) 적외선 센서부

발광소자(EL-7L)와 적외선센서인 수광소자(ST-7L)를 사용한다. 검은 바탕에 흰색라인을 인식할 수 있도록 제작하였으며, 검은색은 0, 흰색은 1로 값을 받아 주행할 수 있게 한다. ATmega128 A포트로부터 펄스를 받으면 EL-7L은 적외선을 발사하게 되고, 이 적외선을 바닥에 반사시켜서 그 빛의 양을 감지한다. 발광부에서는 트랜지스터 2N2222A를 고속스위치용으로 사용하여 펄스 구동을 하게 되고, 수광부에서 감지한 전압은 빛에 따라서 고저가 나타나지만 그것은 디지털소자의 전압 레벨인 L레벨(0V) 또는 H레벨(5V)로 출력되지 않기 때문에, 여기에 필요한 것이 전압비교기(Analog Comparater, LM324)이다. 비교기의 출력은 발광 소자를 차단하면 수광부의 출력이 0이 되므로 흰색라인  검출 데이터의 유지를 위해 8비트 래치인 74HC574를 사용하여 기억시켜둔다.

2) 중앙처리부

센서를 구동 할 수 있도록 500Hz 펄스를 만들어준다. 만들어진 펄스는 센서부의 펄스신호 입력단의 핀으로 신호가 전송된다. 센서부의 PORT E에서부터 8비트의 HIGH, LOW 데이터 신호를 받아서 중앙처리부는 진행방향 제어 알고리즘에 의해 모터 구동부의 좌, 우 모터를 구동시킬 수 있는 신호(펄스)를 만들어 모터 구동부로 보낸다.

3) 모터 구동부

모터 구동부는 2개의 스텝 모터와 각각의 모터에 상발생기인 L297과 정전류 구동 드라이버인 SLA7024M이 연결되어 다른 각종 소자들로 구성한다.

중앙처리부에서 전송받은 신호를 통해 좌측과 우측의 모터의 회전으로 앞으로 전진할 수 있으며 좌우 바퀴 회전량의 차를 이용하여 좌회전과 우회전을 할 수 있다.

4-2. Line Tracer 개발 내용.

4-2.1 모듈별 개발자 요구사항.

1) 중앙처리부

- CPU는 ATmega128을 사용한다.

- 외부전압 9V를 전원부에 필요한 5V로 낮춰주기 위해 LM7805를 사용한다.

- 패러럴 포트와 MCU칩인 ATmega128과 데이터 통신을 하기 위해서 74HC244P를 사용한다.

- 시리얼 포트와 MCU칩인 ATmega128과 데이터 통신을 하기 위해서 MAX292CPE을 사용한다.

2) 적외선 센서부

- 검은색 일 때는 센서가 OFF상태이고, 흰색 일 때 는 센서가 ON 상태이므로 검은 바탕에     흰색 선의 경우 센서부 출력은 5V이다.

- 적외선 센서 수발광 소자로 EL-7L, ST-7L로 구성한다.

- 비교기로 LM324를 사용한다.

- 비교기의 출력은 발광부를 끄면 곧바로 사라져 버리므로 8비트 래치인 74HC574를 사용하여    기억시켜 둔다.

- 고속스위치용 트랜지스터인 2N2222A를 사용한다.

- 가변저항은  비교기의 기준전압을 설정하여 센서의 감도를 조절하는데 사용한다.

3) 모터 구동부

- 모터는 스텝 모터 HB형(복합형)을 사용하여 2상 여자방식으로 구동한다.

- 모터 상발생기인 L297을 사용하여 구동 방향 및 속도, 스텝각을 제어할 수 있게 한다.

- 스텝 모터 전용 구동 드라이버인 SLA7024M을 유니폴라 구동방식으로 사용하여 가능하게 한다.

- 가변저항은 모터의 힘을 조절하는데 사용한다.

4-2.2 각 모듈별 상세설계.

4-2.2.1중앙처리부(CPU부).

(1) 중앙처리부 개요

- 중앙처리부는 하드웨어에 핵심 부분으로서 사람의 뇌와 비슷한 역할을 한다.

- 라인 트레이서의 중앙처리부는 라인 트레이서가 제대로 작동할 수 있도록 제어한다.

- MCU인 ATmaga128에서 사용자가 정의한 포트에서 HIGH, LOW신호로 제어 하도록 한다.

- 적외선 센서부에서 선을 감지하여 출력된 8비트 값을 중앙처리부에서 센서부와 연결된    PORT로 신호를 읽어 들여서 사용자가 정의한 프로그램을 수행한다.

- AVR Controller를 이용하려면 PonyProg2000 프로그램에서 C언어를 사용한다.

- 센서부의 필요한 펄스 신호와 모터구동부의 L297과 SLA7024M의 필요한 펄스 신호를    주어서 바퀴를 구동할 수 있도록 제어한다.

(2) 마이크로컨트롤러 ATmega128 주요특징

AVR은 다양한 제품에 활용될 수 있도록 성능에 따라 TINY, CLASSIC, MEGA 이렇게 3가지  종류로 나뉘어진다. 각각의 종류를 구분하기 위해 제품의 모델명 역시 ATtiny, AT90,  ATmega로 시작되며, ATmega128은 ATmel 사의 AVR 패밀리 중의 하나로서 최근에 많이  사용되고 있다. ATmega128의 주요특징은 다음과 같다.

- 고성능 저소비전력형의 8비트 마이크로 콘트롤러이다.

- RISC 구조를 사용하여 16MHz에서 평균적으로 16MIPS의 명령처리 속도를 나타낸다.

- 128KB의 ISP 방식 프로그램용 플래시 메모리를 가지고 있으며 10,000까지 지우고 다시    쓸 수 있다. ISP를 위하여 SPI 인터페이스 핀을 가지고 있다.

- 시스템 클럭을 발생하는 내부 RC 오실레이터 회로를 가지고 있으며, 또한 외부에    크리스털이나 세라믹 레조네이터를 접속할 수 있는 발진 회로도 내장하고 있다.

- ATmega128은 4.5V~5.5V의 전원 전압 및 16MHz이하의 시스템 클럭에서 동작한다.

사진) ATmega128

(3) 마이크로컨트롤러 AVR(ATmega128) 개발환경

- 회로를 동작시키기 위해 프로그램(C 언어나 어셈블리 언어)

- 컴파일러(프로그램을 ATmega128이 인식할 수 있는 기계어(헥사코드) 변환 프로그램)

※ AVR Edit : AVR GCC 기반의 WinAVR을 포함하고 편집, 컴파일 할 수 있게 통합 환경을  구축한 프로그램. AVR GCC 기반의 프로그램이기 때문에 무료이고 사용상의 어떤 제약도 없고 용량제한도 없다.

- 다운로드 프로그램 (컴파일 되어 만들어진 헥사코드 ATmega128에 쓰기 위한 프로그램)

※ PonyProg2000 : 주로 AVR칩 등에 프로그램을 쓸 수 있는 프로그램

- ISP 다운로드 케이블 (AVR, AT89S51, AT89S52 등에 프로그램 다운로드 하기 위해 사용)

(4) 중앙처리부 전체 모듈

전원부	→	Atmega128칩부
ISP부	↔

- 중앙처리부 전체 모듈 설명

DC 아답터를 이용해서 9V의 전압을 가해서 7805의 레귤레이터를 통해서 5V의 전압을 만들어 준다. PC와 Atmega128칩과 통신을 하기 위해서 Ponyprog200에서 페러럴케이블을 거친 다음 74HC244를 통해서 Atmega128칩과 데이터 통신하기 위해 RXD0, SCK, RESET, TXD0핀을 통해서 데이터를 주고받는다.

(5) 중앙처리부 세부 모듈

a. 전원부

DC JACK 연결 정격 9V 출력	→	SW ON 작동	→	7805 정격 5V 레귤레이터 작동	→	9V의 전압이 5V로 변환됨

- 전원부 설명

DC잭으로 정격전압 9V인 아답터를 이용해서 전압이 들어온다. SW(스위치)ON 시켜서 7805의 입력 쪽으로 흐르게 하며 7805를 이용해서 5V의 전압으로 변환하게 된다. 7805의 출력전압 5V를 이용해서 중앙처리부의 여러 소자들의 전압을 인가한다.

b. ATMEGA128칩부

			센서 출력
			↑①
			PORT A
고휘도 LED 출력	←	PORT C	ATmega128	PORT E	→ ③	모터구동부
			PORT D
			↑②
			센서입력

- ATMEGA128칩부 설명

Atmega128칩안에는 7개의 PORT가 있으며 타이머, ADC, UART등 여러 가지 기능들이 있지만 그중에 4가지의 포트를 사용한다. PORT A는 센서부의 동작을 위해서 펄스를 출력해주고 PORT C는 고휘도 LED를 위한 출력신호를 보내주며 PORT D는 센서부의 센서데이터입력을 하고 있다. PORT E는 모터의 구동을 위해서 펄스를 출력해준다.

핀 이름	핀 번호	역 할
VCC	21, 51	공급 전압
GND	22, 53, 63	접지
AVCC	64	ADC 및 포트 F에 대한 공급 전압
/RESET	20	리셋
XTAL1	24	반전 발진 증폭기 및 내부 클록 회로 입력
XTAL2	23	반전 발진 증폭기로부터의 출력

2개의 VCC와 3개의 GND를 이용해서 센서부와 모터구동부의 전원을 공급해준다.

Atmega128에서는 A,B,C,D,E,F,G 포트가 있으며 7개의 포트에서 사용하는 포트는 A, C, D, E포트로 4가지를 사용한다.

핀 이름	핀 번호	역 할
포트A (PA7~PA0)	44~51	포트 A는 반이중 I/O 포트로 내부 풀업저항이 있다. 8비트 양방향성 I/O 포트, 외부 메모리를 둘 경우 주소(A7~A0)/데이터 버스(D7~D0)로 멀티플렉스 됨
포트C (PC7~PC0)	35~42	포트 C는 반이중 I/O 포트로 내부 풀업저항이 있다. 8비트 양방향성 I/O포트, 외부 메모리를 둘 경우 상위주소(A15~A8) 버스로 동작
포트D (PD7~PD0)	25~32	포트 D는 반이중 I/O 포트로 내부 풀업저항이 있다. 8비트 양방향성 I/O포트 등 별도의 기능을 가짐
포트E (PE7~PE0)	2~9	포트 E는 반이중 I/O 포트로 내부 풀업저항이 있다. 8비트 양방향성 I/O포트, 외부 인터럽트 요청 등 별도 기능을 가짐

◦ A포트 센서의 출력 설정

A포트를 이용해서 MCU인 Atmage128칩부에서 센서부가 구동 할 수 있도록 160Hz의       펄스를 출력해준다.

◦ C포트 LED의 출력 설정

C포트를 이용해서 고휘도 LED를 작동할 수 있도록 5V의 High 신호를 출력해준다.

◦ D포트 센서의 입력 설정

센서부로부터 출력된 센서데이터(8개조의 센서의 High, Low 신호)를 D포트를 이용해서    받아들인다.

◦ E포트 모터의 출력 설정

D포트를 이용해서 입력받은 센서 데이터를 사용자의 프로그램에 의해서 2개의 모터에    440Hz의 구동 신호를 E포트에 출력해 준다.

Atmega128칩에 연결된 크리스털

그림) Crystal Oscillator 16MHz

Atmega128의 크리스털은 16Mhz로서 1초에 1600만개의 명령어를 처리한다.

Atmega128칩에서 16Mhz의 펄스를 구동할 수 있도록 하기 위해서 16MHz 크리스털을 XTAL1, XTAL2에 연결된다.

ATmega128은 퓨즈비트의 설정으로 내부 RC회로를 이용하여 1.0, 2.0, 4.0, 8.0MHz의 클럭을 사용할 수 있고, 외부 회로를 이용하여 최대 16MHz까지의 클럭을 사용할 수 있다.

c. ISP부(In-System Programming)

PC 데이터 전송	↔	패러럴커넥터	↔	74HC244 Atmega128칩에 들어갈 신호 변환

MCU를 보드에 장착하고 온라인 상태에서 외부의 컴퓨터를 통하여 프로그램을 MCU내부의 비휘발성 메모리에 write하는 기능으로서 Pc의 PonyProg에서 데이터를 전송하여 패러럴커넥터를 이용해서 74HC244에 입력되면 74HC244는 Atmega128칩에 맞는 데이터 신호를 변환하여 출력해준다..

※ 페러럴 커넥터

1번부터 25번까지 25개의 핀이 존재하며, 이중 18번에서 25번까지는 그라운드이다. 2번에서 부터 9번까지 8개의 핀은 PC에서 외부로 신호를 내보내는, 즉 Output으로 사용되며, 10번에서 15번까지 6개의 핀은 외부에서 PC로 신호를 보내는, 즉 Input으로 사용된다. 기타 나머지 핀들은 각각의 정해진 기능 및 Input/Output을 모두 수행하는 Bidirectional Input/Output으로 동작한다.

핀번호

1) 데이타포트, D0 ~ D7 (Data Port, 주소 : 0x378)

컴퓨터에서 Atmega128로 자료(data)를 보내는 신호로 모두 8 개가 있으며, 1 바이트 단위로 자료를 보낼 수 있다.

2) 상태포트, S3 ~ S7 (Status Port, 주소 : 0x379)

장치의 상태를 컴퓨터가 알기위하여 만든 것으로 신호를 컴퓨터가 받아 Atmega128의 상태를 파악한다.

3) 제어포트, C0 ~ C3 (Control Port, 주소 : 0x37A)

컴퓨터가 제어하기 위한 신호를 내보내기 위한 핀으로 모두 4 개가 있다.

4) Ground

초록색으로 표시된 핀으로 컴퓨터와 외부 장치(ATmega128 혹은 다른 장치)

연결할 때 기준이 되는 선이며, 반드시 외부 장치와 연결되어야 하며 모두 사용할 필요는 없다.

(6) 기능별 사용 소자

․ 7805(레귤레이터)

부하에 상관없이 항상 일정한 전압을 유지하는 전원공급원을 말한다. 흔히 DC아답타라고 하는 전원장치는 정전압원이 아니라서 부하에 걸리는 정보에 따라 전압이 바뀐다. 5V의 정전압이 필요한테 이 경우 높은 입력 전압을 낮추어 정전압원을 만드는 전용 레귤레이터(7805)를 사용한다. 7805는 35V~8V의 전압을 인가해 줘야 작동하며 입력전압이 높거나 낮으면 동작하지 않는다. 즉 7805는 35V~8V의 전압을 5V로 낮추어 준다.

․ 16Mhz의 크리스탈

그림) 16Mhz의 크리스탈

Atmega128에는 16Mhz의 크리스탈이 칩의 외부회로에 연결되어 있다.

외부 클럭은 크리스탈 발진기를 사용하는 방법, 외부 RC 발진기를 사용하는 방법, 별도의 외부 클럭 입력을 사용하는 방법의 세 가지 방법이 있다.

각각은 그 방식과 클럭 주파수 범위에 따라 퓨즈비트를 세팅해 주어야 한다.

크리스탈 발진기를 사용하여 16MHz의 클럭을 인가하는 방법을 선택했다.

․ 74HC244

그림) 74HC244

74HC244는 Octal Buffers/Line Driver/Line Receivers (with noninverted 3-state outputs) 역할을 한다.

PC의 Ponyprog에서 데이터의 신호가 패러럴포트로 데이터가 이동하며 74HC244의 입력단자에 데이터가 입력된다.

74HC244에서는 Function Table에 의해서 출력이 결정한다. 출력된 데이터 신호는 Atmega128칩의 RXD0, TXD0등 데이터 입력단자에 데이터가 전송된다.

표) 74HC244의 Function Table

Inputs		Output
G‘	A	Y
H	X	Z
L	H	H
L	L	L

Notes H: high level

L: low level

X: irrelevant(부 적절한 입력)

Z: off (high-impedance) state of a 3-state output

(7) 중앙처리부 회로도

그림) 중앙처리부 회로도

①

②

① DC 전원아답타를 사용했을 경우 회로도

DC전원이 9V이므로 Atmega128칩 및 주변장치가 사용 할 수 있도록 전압을 5V로 낮춰줘야 한다.

② 배터리를 사용했을 경우 회로도

배터리의 전압은 7.2V이므로 마찬가지로 전압을 5V로 낮춰야 한다. 배터리의 경우는 배터리앞부분의 +, - 잭이 필요하므로 회로도에 커넥터로 전원을 공급 할 수 있도록 만들었다.

(8) 중앙처리부 모의실험

9V

그림) PSpice 시뮬레이션 결과 9v가 정상 출력

5V

그림)  PSpice 시뮬레이션 결과

7805 레귤레이터의 VCC OUT에서 5v 정상 출력

※ 만능기판을 이용하여 실제 제작한 중앙처리 모듈의 사진은 아래와 같다.

사진) 중앙처리부

4-2.2.2 적외선 센서부.

(1) 센서부 전체 모듈

Atmaga 128	→	발광부	→	라인	→	수광부	→	비교기	→	래치	→	LED
포트로 부터 펄스입력		적외선 발광		검정바닥0 흰색선1		적외선이 반사되어 돌아오는양 감지		기준전압과 비교해서 0, 1값 출력		출력값 기억위해 래치사용		물체감지여부확인

(2) 센서부 개요

ATmega128 A포트부터 펄스를 받으면 발광부에서는 펄스구동을 하여 적외선을 발광하고 수광부에는 적외선이 라인에 반사되어 오는 양을 감지한다. 이 전압을 기준전압과 비교해서 비교기에서는 디지털 값인 0,1을 출력해서 이 값을 그대로 유지하기 위해 래치를 사용한다. 래치로부터 출력된 값은 ATmega128의 D포트와 LED로 각각 출력된다.

※ 적외선 센서를 사용하는 이유는?

빛은 크게 가시광선, 자외선, 적외선으로 나누어진다. 가시광선은 무지개빛깔의 빛으로서 사람의 눈으로 볼 수 있는 반면에 자외선과 적외선은 눈으로 볼 수 없다. 우리가 햇볕을 쬐고 있을 때 따뜻함을 느끼는 것과 겨울철에 이용하는 난로에서 발생하는 복사열도 주로 적외선에 의한 것이다.

적외선센서는 적외선을 이용하여 주위 환경을 감지하는 용도로 사용된다. 즉, 라인 트레이서는 단순이 명암차이가 있는 줄을 반사광의 차이로 구분하여 따라가는 것이지 선의 색깔을 구분하는 것은 아니다 .예를 들어 발간색 바탕위에 파란색줄 같은 경우는 컬러를 구별할 수 있는 방법이 없는 한 주행하기 어렵다. 적외선센서는 일상생활 속에서 다양하게 사용되고 있다. 텔레비전이나 에어컨과 같은 가전제품의 리모컨, 자동 개폐문 등이 그 예이다.

(3) 센서부 세부 모듈

a.발광부

	VCC (5V)
										발광소자 (EL-7L)
	ATmega128 A 포트				2N2222A

발광부는 발광소자(EL-7L)를 저항과 직렬로 연결하여 구성하는데, VCC와 ATmega128 A포트로부터 각각 전원과 펄스를 받으면 트렌지스터 2N2222A를 고속스위치용으로 사용하여 EL-7L을 펄스 구동을 하게 되고 적외선이 발사된다. 적외선은 사람의 눈으로는 보이지 않으므로 카메라로 확인한다

b.수광부

바닥

PHOTO TR(EL-7L)은 빛을 감지하는 수광소자이다. 수광부에서는 발광부에서 빛이 바닥에 반사되어 돌아오는 양을 감지한다.

c.비교기부(LM324)

	수광소자(ST -7L)
								비교기(LM324)
	가변저항(기준전압)

수광부에서 감지한 전압은 빛에 따라서 고저가 나타나지만 그것은 디지털소자의 전압 레벨인 L레벨(0V) 또는 H레벨(5V)로 출력되지 않기 때문에, 필요한 것이 전압비기(Analog Comparater, LM324)이다. LM324에는 4개의 비교기를 내장하고 있다. 따라서 8개의 센서를 처리하려면 LM324 2개가 필요하다.

발광부로부터 적외선이 방출되고 이 적외선이 바닥에 반사되어 온 빛이 수광부로 전달되어 이 빛을 베이스 전류로 취급하여 전류를 흘리게 된다. 이에 따라 포토TR의 이미터의 전압이 상승하게 되는데 이 전압을 LM324의 3번 단자(+전압)에 걸어주고 2번단자(-전압)에 비교전압 즉, 흰 바닥과 검은 선을 구별하기 위한 전압의 한계를 지정해 준다. 따라서 3번(+전압)에 걸린 전압과 2번(-전압)에 걸린 비교전압에 의해 비교기가 동작하여 3번(+전압)의 전압이 높으면 high(5v)가 3번(+전압)전압이 2번(-전압)전압보다 낮으면 low(0v)가 1번단자에 출력된다.

즉, 가변저항의 크기에 따라서 비교기의 (-)쪽에 걸리는 전압이 변하고(+)쪽으로는 수광부의 전압이 들어온다. 그렇게 해서 (+)쪽의 전압이 크면 출력은 5V가 나오고 작으면 0V가 나온다.

d.래치부(74HC574)

									ATmega128 (D포트)
LM324			LATCH (74HC574)
									LED

LM324의 출력 데이터는 74HC574에 입력단으로 들어가는데, 발광부의 빛을 차단하면 수광부의 출력이 0이 되므로 흰색라인(1) 검출 데이터의 유지를 위해 8비트 래치인 74HC574를 사용하여 기억시켜둔다. 래치로부터 출력된 값은 ATmega128의 D포트로 입력되고, LED는 물체 감지 여부를 눈으로 직접 확인하기 위해 달아둔다.

(4) 센서부의 기능 및 동작(적외선 센서8조- 라인감지 6조, 마크감지 2조)

		○	○	○	○	○	○
		●	●	●	●	●	●
○		6	5	4	3	2	1		○
●									●
7									0

발광부

수광부

발광소자로 EL-7L, 수광소자로 ST-7L을 8쌍 사용하며 수광센서의 경우 다리가 긴쪽이 (-), 짧은 쪽이 (+)로 극성이 발광센서와 반대이다. 트랜지스터 2N2222A를 고속 스위치용으로 사용하여 펄스 구동을 하게 된다. 센서의 배치를 보면 6쌍의 자세보정용 센서가 라인쪽에 있고 나머지 2쌍의 센서가 라인에서 좀 떨어진 위치에 자세 보정용 센서보다 뒤쪽에 떨어져 있다. 6쌍의 센서는 주행 중 곡선을 인지하여 회전을 하는 역할을 하며 나머지 두 쌍은 라인 옆에 있는 정지 마크를 감지하기 위한 것이다.

(5) 기능별 사용소자

① EL-7L, ST-7L (적외선 센서)

센서부는 적외선 빛을 쏘는 발광소자(EL-7L)와 그 빛이 반사되어 돌아오는 양을 감지하는 수광소자(ST-7L)로 구성된다. 발광부의 경우에는 일반적인 LED와 똑같은 원리와 작동 구조를 가지고 있다. 일정한 전압이 흐르고 이 전압에 의해서 전류가 생기면 눈에 보이는 가시광선 대신에 적외선 빛을 발하게 되는 것이다.(카메라로 확인가능) 수광부의 경우에는 TR과 비슷한 구조로 되어 있다. 따라서 이미터단과 컬렉터단은 다리가 나와 있고 ON-OFF의 역할을 담당하는 베이스단은 적외선 빛을 받는 센서로 이루어져 있다. 그래서 이 부분에 적외선이 감지가 되면 베이스단이 ON이 되면서 이미터와 컬렉터 전류가 흐르게 된다

	그림) EL-7L, ST-7L

② LM324 (전압비교기)

+에 걸린 전압과 -에 걸린 비교전압에 의해 비교기가 동작하여 +전압이 -전압보다 높으면 high(5V)가 +전압이 -전압보다 낮으면 low(0V)가  출력된다.

.

그림) LM324

③ LED(센서확인용)

발광다이오드 (LED)는 일반 다이오드와 마찬가지로 (+) 와 (-) 단자 구분이 있으므로 일반다이오드처럼 사용하면 된다. 회로도를 보면 비교기(LM324)의 1번 단자에 저항을 거친 LED가 연결되어 있는데, 이는 물체 감지 여부를 눈으로 직접 확인하기 위해 달아두었다 이것이 없으면 감지 되어지는 여부를 알 수가 없다. 물체를 감지하지 못하면 가변저항을 조정하여 물체 감지여부를 확인한다.

그림) LED

④ 74HC574(Octal Edge Triggered D-type Flip Flop with 3-State Output)

비교기의 출력은 발광부를 끄면 곧바로 사라져 버리므로 8비트 래치인74hc574를 사용하여 기억시켜 둔다. 8개의 플립플롭 출력이 CLK핀의 상승에지에서 입력데이터를 유지시킨다.

74hc574의 핀기능은 다음과 같다.

핀번호	SYMBOL	설명
1	OC	3-state output enable input. "L"일때 active됨.
2,3,4,5,6,7,8,9	D1 to D8	Data inputs.
10	GND	Ground(0V).
11	CLK	Clock input. "Low-to-High"일때 active 됨.
19,18,17,16,15,14,13,12,	Q1 to Q8	3-state flip-flop outputs.
20	VCC	Positive supply voltage.

74hc574의 동작모드는 다음과 같다.

입력			출력
OC	CLK	Dn	Q1 to Q8
L	↑	l	L
L	↑	h	H
H	↑	l	Z
H	↑	h	Z

(6) 센서부 회로도

(7) 모의실험(PSPICE 이용)

a.발광부

1) V5를 통해서 펄스파 구현

V1,V2를 통해 최고 전압과 최저 전압을 조정하고, TD(처음에 지연되는 시간), TR(Rising Edge의 걸리는 시간), TF(Falling Edge의 걸리는 시간), PW(한주기 내에서 Low 부분에 걸리는 시간), PER(한주기의 크기)

2) 스위칭 트랜지스터를 사용

발광센서(위에 그림에서는 다이오드로 표현-D3)는 50Ω의 저항을 연결한 다음에 한쪽 단자에는 Vcc(+5V)를 연결하여 주고, 다른 쪽에는 발광 소자를 스위칭 할 수 있는 트랜지스터에 연결을 한다. 왜냐하면 발광회로의 전체 저항 값이 작기 때문에 지속적으로 빛을 발광하게 되면 발광 소자에 많은 전류가 흐르게 되고 따라서 발광 다이오드의 수명이 짧아질 수 있다. 따라서 발광다이오드는 원하는 시점에서 짧게 빛을 발산한 후에 OFF시켜 주는 제어가 필요하다. 따라서 펄스 입력이 High로 들어올 때, 스위칭 트랜지스터가 연결되어 회로가 동작을 하여 LED에 불이 들어온다. 하지만 펄스 입력이 Low로 들어올 때, 스위칭 트랜지스터가 역방향으로 전류가 흐르기 때문에 LED에 불이 들어오지 않는다.

3) 발광부 시뮬레이션 결과

b.수광부

1) 수광부 Transistor(위에 그림에서는 트랜지스터로 표현-Q6)는 Base부분이 전기적인 단자로 되어 있는 것이 아니고, 빛을 이용하게 된다. 들어오는 빛의 양이 많아지면 스위치가 연결되고, 들어오는 빛의 양이 적어지면 스위치가 연결되지 않는다.

2) 수광부 시뮬레이션 결과

c.비교기부 입출력

1) 비교기의 입력부분

Q6 부분의 스위칭 트랜지스터에서 클럭이 High로 들어오면(발광이 켜있는 시간), 트랜지스터는 연결된다. 그래서 전류가 연결되어 커패시터에게 충전이 시작된다. 그러므로 충전되는 양만큼의 전압이 떨어지게 된다. 그리고 다시 클럭이 Low로 들어오면(발광이 꺼있는 시간), 트랜지스터는 연결되지 않는다. 그러므로 전압은 0이 된다. 이 부분 역시 충전된 만큼의 값이 전압으로부터 빠져서, 전압의 값은 -가 된다. 충전되어있던 커패시터가 방전을 시작하기 때문에, 다시 전압의 값이 점점 더 0쪽으로 회복되어 진다.

2) 비교기의 출력부분

감지한 전압은 빛에 따라서 고저가 나타나지만 그것은 디지털소자의 전압레벨인 L레벨(0볼트) 또는 H레벨(5볼트)로 출력되지 않는다. 그래서 여기에 필요한 것이 전압비교기이다. 비교기의 입력 단은 IN(+)와 IN(-)가 있고, IN(+)가 IN(-)보다 전압이 높으면 출력단(Out단자)에 5V의 전압이 출력된다. IN(+)가 IN(-)보다 전압이 낮으면 출력단(Out단자)에 0V의 전압이 출력된다. 이런 기능을 이용하여 IN(-)전압에 적절한 전압을 걸어주고(0.5V를 걸어 주었음) 수광부의 전압(V)을 IN(+)단자에 연결시키면 바닥의 검고 흰 여부를 정확하게 0V,5V로 출력단(Out)에 출력할 수가 있다.

3) 비교기부 시뮬레이션 결과

4) 데이터의 지연현상

콘덴서 내부로 전자가 흘러들어가거나 흘러나올 때, 저항이 연결된 쪽에서는 당연히 저항을 거쳐서 흘러들어야가 한다. 저항 때문에 한꺼번에 전자가 흘러들어가는 것이 방해를 받아서 조금씩 흘러들어가게 되기 때문에 여기서 시간이 걸리게 된다. 그리고 그 시간은 저항 값이 클수록(전자가 조금씩 흘러갈수록), 그리고 콘덴서 내부를 모두 채울 때까지 흘러들어가야 할 전자의 총량(=콘덴서 용량값)이 클수록 길어지게 된다.

이렇게, 지연시간은 저항 값과 콘덴서 용량 값에 따라 결정된다. 이 두 값의 곱(=RC)을 'RC 타임' 또는 '시상수(time constant)'라고 부른다. '시상수(RC)' 값이 커지면 지연시간이 길어지고, 작아지면 지연시간이 짧아진다.

c.비교기부 입출력

1) 래치의 입력 = 비교기의 출력

2) 래치의 클럭

래치는 클럭이 Rising Edge 때의 데이터 값을 저장하여 한주기가 끝날 때까지 그 데이터 값을 유지시켜주는 장치이다. 따라서 데이터의 값은 커패시터 때문에 지연이 항상 생긴다. 그렇기 때문에 클럭을 원래의 클럭에 인버터를 시켜 주어 지연되어 나온 결과에 값을 읽도록 하였다.

3) PR, CLR - DATA SHEET에서 발췌

4) 래치의 출력부분

따라서 위의 부분에서는 클럭 Rising Edge 부분의 모든 부분이 지연된 데이터 부분이기 때문에, 래치의 결과는 항상 High로 나온다.(Portno-L)

5) 래치부의 시뮬레이션 결과

※ 만능기판을 이용하여 제작한 센서모듈의 사진은 아래와 같다.

사진) 적외선 센서부 윗부분

사진) 적외선 센서부 아래부분

4-2.2.3 모터 구동부.

(1) 모터 구동부 전체 모듈

모터 구동부는 아래 그림과 같이 상발생부, 증폭부, 스텝 모터로 구성한다. 오른쪽, 왼쪽바퀴를 제어하기 위해 2개의 스텝 모터와 각각의 모터에 상발기인 L297과 정전류 구동 드라이버인 SLA7024M로 구성되어 있다.

모터 구동부 제어신호 ․ 전/후진 ․ 리셋 ․ 클럭신호	→ → →	상발생부	A → B → C → D →	증폭부	A → A' → B → B' →	스텝 모터

(2) 모터 구동부 개요

스텝 모터는 스텝에 의해 구동되는 모터이다. 4개의 모터상이 있어서 한 스텝 한 스텝 진행하면서 모터가 회전하는 것이다. 한 스텝 당 1.8°씩 회전한다.

SST42D100제품을 사용하며 스텝 모터 제어를 위해서 ATmega128 E포트를 통해 들어온 신호를 L297를 사용하여 입력제어 신호로부터 A, B, C, D의 4개 상으로 구성되는 모터 제어신호를 발생시켜 스텝 모터를 제어한다. 그런데 스텝 모터 제어를 위해서 충분한 전류가 필요하므로 L297출력신호를 SLA7024M을 이용하여 증폭시킨 뒤, 스텝 모터를 제어한다.

(3) 모터 구동부 세부 모듈

a.상발생부(L297)

L297 18번핀(클럭통과 핀)에 클럭이 입력되면 4,6,7,9번핀 모터구동에 필요한 A, B, C, D의 펄스를 생성해 준다. SLA7024M만 설계했을 시 필요한 펄스 4개의 값을 일일이 지정해 줘야하는 반면 297을 같이 설계하였을 시 핀 하나로 모터구동이 가능하게 된다.

b.증폭부(SLA7024M)

보통 스텝 모터를 돌리는데 제어회로가 필요한데,DC모터처럼 단순히 한 방향으로만 돌리는 경우에는 제어회로가 필요 없지만 서보용 또는 힘 조절을 할 경우에는 정밀한 제어가 필요하게 된다. 제어를 할 때는 보통 마이크로 프로세서를 이용하는데 이것이 핀 개당 출력할 수 있는 전류의 양이 20mA로 극히 작기 때문에 마이크로 프로세서로 스텝 모터를 돌리려면 중간에 전류를 증폭할 수 있는 소자가 필요하게 된다.

일반 TR와 저항 다이오드를 사용해서 회로를 꾸밀 수도 있지만 보통 마이크로 마우스나 라인 트레이서 같이 작은 pcb를 요구하는 그런 것에는 SLA7024M을 써서 부피나 면적을 작게 할 수 있다. 그리고 그 밖에 SLA7024M에는 부가적으로 전류 제한 회로가 들어가 있어 전류를 조정해서 토크를 조절 할 수 있게 한다.

c.스텝 모터(SST42D100)

▪ 스텝 모터의 특징

- 스텝 모터는 펄스에 의해 디지털적으로 제어하는 것이 가능하다는 점에서 적합한 모터.

- 스텝 모터가 DC모터나 AC모터와 크게 다른점은 모터 샤프트의 위치를 검출하기 위해    피드백없이 정해진 각도를 회전하고, 상당히 높은 정확도로 정지가 가능.

- MCU에 사용되는 모터는 크게 스텝 모터와, DC 모터이다. 스텝 모터는 가격이 DC     모터보다 저렴하고 제어하기가 DC 모터보다 쉽게 때문에 많이 사용.

- 고속주행이나 큰 토크를 필요치 않으므로 스텝 모터를 사용하고, 프로세서의 출력에    따라 모터의 회전수가 결정되어 정밀한 주행이 가능.

- 한스텝당 각도 오차가 5%이내이며 회전각 오차는 스텝마다 누적되지 않는다. 회전각    검출을 위한 피드백이 불필요하며, 제어계가 간단해서 가격이 상대적으로 저렴.

▪ 스텝 모터의 장 ․ 단점

․ 장점

- 모터의 회전각은 입력 펄스 수의 총 수에 비례하고, 모터의 속도는 1초당의 입력       펄스수에 비례.

- 회전자의 오차는 스텝마다 누적되지 않는다. 스텝 모터의 위치결정은 모터 내부에       고정자와 회전자가 측을 대면하고, 자기 저항이 가장 작아지는 점에서 움직인다.

- 디지털 신호로 직접 오픈 루프 제어를 할 수 있고 시스템이 간단.

- 위치나 속도 제어를 위한 피드백 시스템을 사용하지 않고 정밀 제어가 가능.

- 정지시에 큰 유지 토크가 발생하고 저속 구동시 큰 토크가 발생.

․ 단점

- 고속 구동시 탈조하기 쉽다.

- 특정한 주파수에서는 진동, 공진 현상이 발생하기 쉽고, 관성이 있는 부하에 약하다.

- 펄스의 주파수가 상승함에 따라 토크가 저하.

▪ 스텝 모터의 종류

스텝 모터는 구조상 3가지가 있는데 그중 HB형을 사용하였다.

PM형과 VR형을 복합한 타입인데, 회전자의 바깥쪽에 이빨이 만들어져 있다. 또 회전자에는 축방향으로 자화된 영구자석이 끼워져 있으며, 그 바깥쪽에 이빨이 있는 2개의 철심으로 구성되있다. 복합형은 고정밀도, 고토크, 소스텝의 모터에 사용된다.

가변 릴럭턴스형(VR,

Variable Reluctance Type)

영구자석형(PM,

Permanent Magnet Type)

복합형(HB,

Hibrid PM Type)

▪ 스텝 모터의 구동원리

아래 그림은 4개의 전자석을 나열하고 그 아래쪽에 1개의 구동 마그네트(움직이는 자석)를 나란히 설치하고 있다. 그림에서 알 수 있듯이 우선 전자석 1의 여자 코일에서 전자석 1을 여자하면 전자석 1의 아래쪽에 N극이 발생하고 이에 따라 전자석1과 구동 마그네트 사이에 서로 흡인력이 작용하여 구동 마그네트는 그림 (가)의 위치에 정지하게 된다. 다음 동작으로 전자석 2를 여자하고 조금 전과 같이 아래쪽에 N극이 발생하도록 여자한 후 조금 전에 여자하고 있던 전자석 1의 전류를 off한다. 그러면 구동 마그네트는 전자석 2에 흡인되어 (나)의 위치까지 이동한 후 고정되게 된다. 이 과정을 반복하게 되면 일종의 모터가 구현이 되는 것이다. 회전형의 모터를 구현하기 위해 오른쪽과 같은 구조로 전자석을 배열하고 그 중심에 구동 마그네트를 위치시키면 회전형 모터의 구현이 가능하게 된다.

그림) 스텝 모터 구동원리

▪ 스텝 모터 제어회로에 의한 분류 - 유니폴라 구동

모터 내부 코일에 전류를 한쪽 방향으로만 흘리는 방법.

- 저속 영역에서는 토크가 작다.

- 회로의 구성이 간단하여 저렴.

- 에너지 효율이 낮으나, 고속시 탈조 가능성이 낮아 고속 회전시 활용.

(주로 마이크로 로봇에 활용)

▪ 스텝 모터 여자방식에 의한 분류 - 2상 여자방식

2상 모두에 전류를 흘려 펄스를 제공함. 1상여자에 비해 입력전류 2배, 토크 크고 감쇠 진동 작다. 주파수 특성 양호하여 일반적인 용도에 많이 활용.

고정자의 2개 코일을 아래 그림과 같이 동시에 여자하여 모터를 구동하여 모터를 구동시키는 방식이다. 이 여자 방식에서의 회전자는 2개의 고정자 사이에 위치하는 특성을 가지고 있다. 이 방법은 1상 여자방식에 비해 2배의 입력신호를 필요로 하게 되어 에너지 효율은 떨어지지만 진동이 적어 가장 널리 이용이 되고 있다.

그림) 2상 여자방식

(4) 모터 구동부 기능 및 동작

스텝 모터 전용 구동 드라이버인 SLA7024M을 유니폴라 구동방식으로 사용하여 모터 회전을 가능하게 한다. 모터 상발생기인 L297을 사용하여 구동 방향 및 속도, 스텝각을 제어할 수 있게 하며, 가변저항을 넣어 힘을 조절할 수 있게하여 미세하게 조정한다.

중앙처리부에서 전송받은 신호를 통해 좌측과 우측의 모터의 회전으로 전진할 수 있게  하고 좌우 바퀴 회전량의 차를 이용하여 좌회전과 우회전을 할 수 있다.

(5) 기능별 사용소자

① 모터 드라이버 SLA7024M

▪ 사용 목적 및 특징

보통 스텝 모터를 돌리는데 제어회로가 필요한데,DC모터처럼 단순히 한 방향으로만 돌리는 경우에는 제어회로가 필요 없지만 서보용 또는 힘 조절을 할 경우에는 정밀한 제어가 필요하게 된다.

제어를 할 때는 보통 마이크로 프로세서를 이용하는데 이것이 핀 개당 출력할 수 있는 전류의 양이 20mA로 극히 작기 때문에 마이크로 프로세서로 스텝 모터를 돌리려면 중간에 전류를 증폭할 수 있는 소자가 필요하게 된다.

전류를 증폭할 수 있는 소자의 대표적인 것으로 TR이 있는데 이 TR을 4개와 저항을 사용해서 회로를 꾸밀 수도 있지만 보통 마이크로 마우스나 라인 트레이서 같이 작은 pcb를 요구하는 것에는 SLA7024M을 써서 부피나 면적을 작게 할 수 있다. 그리고 그 밖에 부가적으로 전류 제한 회로가 들어가 있어 전류를 조정해서 토크를 조절 할 수 있게 한다.

그림) SLA7024M

②모터 상발생기 L297

▪ 사용 목적 및 특징

SLA7024M만으로 쓰면 불편한 것이 있는데 그것은 마이크로프로세서에서 PWM 콘트롤러에 의한 것이 아닌 CPU에 의한 상을 만들어 줘야 하기 때문이다. 보통은 마이크로 프로세서가 스텝 모터만을 돌리지 않고, 다른 일 즉 LED를 켜거나 센서 입력을 받는데 이런 작업들을 하며 CPU사용률을 높이고 있는 상태이고, 모터를 제어하는 일 또한 CPU사용률이 높기 때문에 SLA7024M과 직접적으로는 인터페이싱이 안된다. 그래서 중간에 PWM을 상 분배회로로 변환해주는 칩이 있어야 하는데, 그 이유로 L297을 이용한다.

그림) L297

③스텝 모터

A

A'

B

B'

SLA7024M →

스텝 모터에는 6가닥의 선이 있다. 파란색(A), 주황색(A'), 빨강색(B), 노란색(B')선은

신호선으로 모터구동에 필요한 신호를 공급하고, 흰색과 검은색선은 배터리의 7V 전압을 공급한다.

(6) 모터 구동부 회로도

(7) 모터 구동부 회로도 동작 예상 결과

a.상발생부

① L297 18번핀은 440Hz를 입력받는다.

② Normal Drive Mode를 사용하고 있기 때문에 아래 그림과 같은 파형을 예상할 수 있다.

1,3,5,7 번호 순으로 모터가 회전하며, 펄스에 따라서 A상과 B상의 서로 반전되고,  C상과 D상은 서로 반전된다.

A상과 C상을 비교해볼때 A상보다 C상이 한클럭의 딜레이가 있다. 그리고 B상과 D상에서는 D상이 B상보다 한클럭의 딜레이가 있다.

b.증폭부

L297 →

→ 스텝 모터

전압

클럭신호

L297에서 5번 6번 17번 18번핀을 통해 들어온 0.2A가 1A로 증폭하게 되어 1번 8번 11번, 18번을 통해 스텝 모터로 출력된다. 스텝 모터의 구동전류가 0.95A이므로 모터가 정상적으로 구동할 수 있게 한다.

모터의 힘 조절을 위해 전류 조절 가변 저항을 사용하는데, 모터에 전류를 높여주는 방법은 3번(REFA), 14번(REFB)에 연결되어 있는 저항 510의 값을 크거나 작게 조절할 수 있다. 모터에 걸리는 저항을 크게 하면, 모터의 힘이 세어지는 반면, 전류를 많이 사용하게 됨으로써, 베터리 소모가 심해 구동 시간이 줄어드는 단점이 있다.

※ 만능기판을 이용하여 제작한 모터 구동모듈의 사진은 아래와 같다.

사진) 모터 구동부

사진) 모터 구동부와 모터 결합

4-2.2.4 결과물.

사진) 중앙처리부

사진) 적외선 센서부

사진) 모터 구동부

사진) 라인 트레이서 최종결과물

사진) 라인 트레이서 주행장면

4-2.3. 주행방향 설정 알고리즘.

8조 센서로 이루어져 있다. 양쪽에 배치된 센서 2조는 정지선을 감지하는 역할을 한다. 전면에 배치되어 있는 6조 센서는 라인 감지용으로 쓰인다.

		○	○	○	○	○	○
		●	●	●	●	●	●
○		6	5	4	3	2	1		○
●									●
7									0

발광부

수광부

PORT

MSB							LSB
7	6	5	4	3	2	1	0

원칙적으로는 표 같이 MSB와 LSB가 구성하는게 맞으나 최상위 비트와 최하위 비트는 정지선을 감지하기 위해서 제외되었다.

	MSB					LSB
7	6	5	4	3	2	1	0

6조의 방향보정용 센서에서 6번센서가 최상위비트가 되었고, 1번센서가 최하위비트가 되었다.

주행방향 설정 알고리즘은 아래와 같다.

․ 중간의 센서를 기준으로 오른쪽에서 라인이 검출되면 왼쪽바퀴를 구동시켜 오른쪽으로 회전.

․ 중간의 센서를 기준으로 왼쪽에서 라인이 검출되면 오른쪽바퀴를 구동시켜 왼쪽으로 회전.

․ 중간의 센서를 기준으로 중앙에서 라인이 검출되면 오른쪽, 왼쪽바퀴를 동시에 구동시켜 직진.

․ 라인이 검출되지 않을 경우에 오른쪽, 왼쪽바퀴를 2:1로 동시에 구동시켜 왼쪽으로 이동.

․ 노이즈 때문에 라인과 무관한 센서가 켜진 경우는 센서가 라인 검출이 많이 된 방향으로 이동.

주행방향 설정 알고리즘에 따른 센서 데이터 패턴과 주행방향 설정 결과

표) 주행방향 설정 알고리즘 패턴표

순번	패턴	방향	순번	패턴	방향
0	000000	라인감지(왼쪽)	32	100000	왼쪽
1	000001	오른쪽	33	100001	직진
2	000010	오른쪽	34	100010	직진
3	000011	오른쪽	35	100011	오른쪽
4	000100	직진	36	100100	직진
5	000101	오른쪽	37	100101	직진
6	000110	오른쪽	38	100110	직진
7	000111	오른쪽	39	100111	오른쪽
8	001000	직진	40	101000	왼쪽
9	001001	직진	41	101001	직진
10	001010	직진	42	101010	직진
11	001011	오른쪽	43	101011	오른쪽
12	001100	직진	44	101100	직진
13	001101	직진	45	101101	직진
14	001110	직진	46	101110	직진
15	001111	오른쪽	47	101111	오른쪽
16	010000	왼쪽	48	110000	왼쪽
17	010001	직진	49	110001	왼쪽
18	010010	직진	50	110010	왼쪽
19	010011	오른쪽	51	110011	직진
20	010100	직진	52	110100	왼쪽
21	010101	직진	53	110101	직진
22	010110	직진	54	110110	직진
23	010111	오른쪽	55	110111	직진
24	011000	왼쪽	56	111000	왼쪽
25	011001	직진	57	111001	왼쪽
26	011010	직진	58	111010	왼쪽
27	011011	직진	59	111011	직진
28	011100	직진	60	111100	왼쪽
29	011101	직진	61	111101	왼쪽
30	011110	직진	62	111110	왼쪽
31	011111	오른쪽	63	111111	왼쪽

4-3 모듈 및 라인 트레이서 실험결과.

◦ 중앙처리부 실험결과

사진	설명
0V	외부전원 9V 입력
0V	7805를 통해 5V 출력

◦ 발생문제 수정 및 보완

ATmega128 MCU칩 부분 인공호흡 문제

→ 클럭 설정을 잘못해서 한 번 쓰고 나면, 다음부터는 PonyProg2000에서 missing device라는 오류메시지를 발생하게 된다.

증상 : device missing or unknown device [-24]

이럴때는 주변에 동작하는 회로 중 클럭이 들어있는걸 찾아서...(회로에 레조네이터나, 오실레이터가 있는것, 8MHz 내외의 것) 클럭 출력을(오실레이터일 경우 두 핀중에, 전압이 높은것) AVR의 XTAL1(XTAL2에 연결하면 안됨)에 선으로 연결하면 강제로 AVR에 클럭을 인가하게 된다. 흡사 인공호흡하는 것과 같다.

시큐리티 비트를 읽고, 시큐리티 비트를 정상적으로 바꾸고(CKSEL3, CKSEL2, CKSEL1은 체크하고 CKSEL0은 그대로 두고) 그리고 아까 연결한 선은 떼어 내면 정상적으로 작동한다.

◦ 적외선 센서부 실험결과

a.발광부

➀

➁

➂

래치로연결

VCC

LED

-> VCC와 ATmega128의 A포트로부터 각각 전원과 클럭을 받아들여 발광부를 동작시키는 과정.

번호	사진	설명
➀		MCU로부터 1.6KHz의 클럭이 트랜지스터 2N2222A(고속스위치용)로 입력된다.
➁		트랜지스터 2N2222A(고속스위치용) 컬렉터부분에서 스위치가 ON상태 이면, 컬렉터쪽의 전압은 0V이 되므로 클럭이 반전된다.
➂		MCU로부터 NOT게이트(7404)를 통과하면 클럭이 ➁와 같이 반전된다.

c.비교기부

④

⑤

수광부   전압

가변저항(기준전압)

VCC

래치

-> 비교기가 수광부의 전압과 가변저항의 기준전압을 받아들여 래치로 출력하는 과정.

번호	사 진	설 명
➃		LM324 입력부분 파형(LOW상태) (검은색 바닥위에 있는 경우 입력이 0이 된다.)
		LM324 입력부분 파형(HIGH상태) (흰 선 위에 있는 경우 입력이 1이 된다.)
⑤		LM324의 입력부분이 0이므로 출력부분의 파형도 0이 된다.(LOW상태)
		LM324의 입력 데이터가 있으므로 출력부분의 파형이 펄스로 High일때는 5V가 된다.

d.래치부

⑥

비교기출력

NOT GATE

GND

ATmega128

D포트와 LED로 각각 입력

-> 비교기의 출력이 래치로 입력되어 래치동작 후

ATmega128 D포트와 LED로 각각 입력 되는과정

번호	사 진	설 명
⑥	0V	래치의 입력값이 없으므로 0V가 된다.
	0V	래치의 입력값이 High신호 5V가 있으므로 이전값을 기억시켜서 계속 High인 5V로 유지시킨다.

◦ 발생문제 수정 및 보완

발광소자에 클럭을 입력하였으나 빛이 발생하지 않은 경우

→ 적외선 인식을 하기 위해 카메라로 확인했으나 빛이 발생하지 않아서 소자를 교체.

센서확인용 LED에 불이 계속 들어오는 문제

→ 가변 저항을 돌려서 센서 감도 조절 가능.

3조 센서 모듈에서 8조 센서 모듈로 변경

→ 3조 센서 모듈로는 정밀한 라인주행이 불가능하다는 판단 후 8조 센서 모듈로 변경

◦ 모터 구동부 실험결과

a.상발생부

번호	사 진	설 명
①		MCU로부터 440Hz의 클럭이 L297로 입력된다.
②		A B	예상과 같이 A상과 B상의 서로 반전됨을 알 수 있다.
		C D	역시 C상과 D상은 서로 반전된다.
		A D	B C	A C	B D	이 4가지 경우는 모두 한클럭의 딜레이가 있다.

b.증폭부

L297 →

→ 스텝 모터

전압

클럭신호

번호	사 진	설 명
③		A A'	A상과 A'의 상은 반전임을 알 수 있다.
		B B'	역시 B상과 B'상은 반전이며, A상과 B상을 비교했을 때, 한주기의 딜레이도 확인할 수 있다.

다음의 왼쪽 사진은 A, B, A', B'의 순으로 나열한 것인데, 모터의 회전 진동으로 인한 노이즈가 포함되어 있다. 오른쪽 그림은 예상결과이고, 비교한 결과 정확하게 파형이 나옴을 확인할 수 있다.

A	0	1	1	0	0	1
B	0	0	1	1	0	0
A'	1	0	0	1	1	0
B'	1	1	0	0	1	1

◦ 실험 중 발생한 문제와 해결방법

SLA7024M의 회로 부분이 동작유무를 확인하는 방법

→ ATmega128에서 포트로 모터의 포트와 연결 후 이상 유무를 판별.

SLA7024M만으로 구동하려했으나 모터의 떨림이 심하고, 불안전함

→ L297을 장착하여 구동.

L297에서 출력되는 상이 문제가 있었던 경우

→ 클럭을 입력신호에 넣었는지 확인 후 해결

SLA7024M에서 출력되는 상이 문제가 있었던 경우

→ 가변저항 및 테스트기로 입력값 확인 후 해결

L297+SLA7024M에서 모터를 정상적으로 돌리지 못했던 경우

→ SLA7024M의 회로도 다시 분석, L297만으로 모터가 구동하는지 파악,

모터입력의 데이터시트와 SLA7024M 출력 확인 후 해결

◦ 통합 실험결과

사진) L자 코스 테스트

사진) 곡선 코스 테스트

사진) 0자 코스 테스트

사진) 라인 신호가 없는 경우 테스트

사진) 전체 주행 테스트

4-4. 프로그램 소스.

// ICC-AVR application builder : 2007-10-06 오전 11:23:36

// Target : M128

// Crystal: 16.000Mhz

#include <avr/io.h>

#include <avr/iom128.h>

#include <avr/ina90.h>

void delay(unsigned int k)

{

int i, j;

for(i=0; i<k; i++)

for(j=0; j<k; j++);

}

void delay2(void)

{

int i, k;

for (i=0;i<2;i++)

{

for (k=0;k<10;k++)

{

delay(5000);

}

}

}

void delay3(void)

{

int i, k;

for (i=0;i<59;i++)

{

for (k=0;k<30;k++)

{

delay(300);

}

}

}

void GoForward(void)

{

int i;

for (i=0;i<1;i++)

{

PORTE =0x17;

delay(200);

PORTE =0x10;

delay(200);

}

}

void GoRight(void)

{

int i;

PORTE =0x10;

for (i=0;i<1;i++)

{

PORTE =0x14;

delay(200);

PORTE =0x10;

delay(200);

}

}

void GoLeft(void)

{

int i;

PORTE =0x12;

for (i=0;i<1;i++)

{

PORTE =0x13;

delay(200);

PORTE =0x12;

delay(200);

}

}

void Search(void)

{

int i;

PORTE =0x10;

for (i=0;i<1;i++)

{

PORTE =0x14;

delay(200); //444Hz

PORTE =0x10;

delay(200); //444Hz

PORTE =0x17;

delay(200);

PORTE =0x10;

delay(200);

}

}

void stop(void)

{

PORTE=0x00;

}

int main(void)

{

// 2:라인감지(왼쪽 이동), -1:오른쪽 회전, 0:직진, 1:왼쪽 회전

int data[64]={2,-1,-1,-1,0,-1,-1,-1,0,0,

0,-1,0,0,0,-1,1,0,0,-1,

0,0,0,-1,1,0,0,0,0,0,

0,-1,1,0,0,-1,0,0,0,-1,

1,0,0,-1,0,0,0,-1,1,1,

1,0,1,0,0,0,1,1,1,0,

1,1,1,1};

unsigned char a,b,c,d;

int e;

DDRA=0xFF; //A포트 센서 출력 설정

DDRC=0xFF; //C포트 LED 출력 설정

DDRD=0x00; //D포트 센서 입력 설정

DDRE=0xFF; //E포트 모터 출력 설정

PORTA=0x00; //A포트 초기화

PORTC=0x00; //C포트 초기화

PORTD=0x00; //D포트 초기화

PORTE=0x00; //E포트 초기화

while(1)

{

//센서 펄스 만듬

PORTA=0x00; //A포트 초기화

delay(210);

PORTA=0xFF;

delay(210);

PORTA=0x00; //A포트 초기화

delay(210);

PORTC=0x03; //고휘도 LED 켜짐

d=PIND;

a=(d>>7);

b=(d<<7);

c=a|b;

if (c==0x81)

{

PORTC=0x00; //고휘도 LED 끄기

while(1)

{

stop(); //라인트레이서 정지

}

}

d=(d>>1) & 0x3F;

e=data[d];

switch(e)

{

case 1 : GoRight();

break;

case 0 : GoForward();

break;

case -1 : GoLeft();

break;

case 2 : Search();

break;

default : break;

}

}

}

5. 제작 일정

첨부 1. 개발 일정표

월 진행 작업		3월				4월				5월				6월				7월				8월				9월
		1	2	3	4	1	2	3	4	1	2	3	4	1	2	3	4	1	2	3	4	1	2	3	4	1	2	3
라인 트레이서 연구분석								중간고사								기말고사
중앙처리부	ATmega128 이해
	만능기판에 제작
	테스트 및 수정보완
적외선센서부	라인 트레이서 적외선 센서부 분석
	각 소자기능 이해
	만능기판에 제작
	테스트 및 수정보완
모터구동부	라인 트레이서 모터 구동부 분석
	각 소자기능 이해
	만능기판에 제작
	테스트 및 수정보완
중앙처리부와 적외선 센서부 통합
중앙처리부와 모터 구동부 통합
통합 프로그래밍
주행 테스트 및 프로그램 보완
작품완성
보고서 작성

첨부 2. 조원 역할 분담표.