
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40


목차
Ⅰ. 서론
(1) 작품 개요 ---------------------- p.2
(2) 구현 목표 ---------------------- p.2
Ⅱ. 기초 자료
(1) 계획 및 일정 -------------------- p.3
(2) 블록다이어그램 -------------------- p.3
(3) 부품 상세 -------------------- p.4
Ⅲ. 작품 기능
(1) 회로도 ----------------------- p.17
(2) 작품 설계 ---------------------- p.18
(3) 흐름도 ---------------------- p.21
Ⅳ. 실 험
(1) SRF04 초음파 센서 거리값 측정 ---------- p.26
Ⅴ. 결과 고찰 ----------------------- p.27
Ⅵ. 결 론 ------------------------- p.29
Ⅶ. 참고 문헌 ------------------------ p.30
Ⅷ. 부 록
(1) 전체 회로도 ------------------- p.31
(2) 프로그램 소스 ------------------ p.32
(1) 작품 개요 ---------------------- p.2
(2) 구현 목표 ---------------------- p.2
Ⅱ. 기초 자료
(1) 계획 및 일정 -------------------- p.3
(2) 블록다이어그램 -------------------- p.3
(3) 부품 상세 -------------------- p.4
Ⅲ. 작품 기능
(1) 회로도 ----------------------- p.17
(2) 작품 설계 ---------------------- p.18
(3) 흐름도 ---------------------- p.21
Ⅳ. 실 험
(1) SRF04 초음파 센서 거리값 측정 ---------- p.26
Ⅴ. 결과 고찰 ----------------------- p.27
Ⅵ. 결 론 ------------------------- p.29
Ⅶ. 참고 문헌 ------------------------ p.30
Ⅷ. 부 록
(1) 전체 회로도 ------------------- p.31
(2) 프로그램 소스 ------------------ p.32
본문내용
터 방향 설정 포트
PORTB.4 = 1; // 오른쪽 모터 인에이블
PORTB.3 = 1; // 왼쪽 모터 인에이블
DDRF = 0xFF; // LED 출력
PORTC = 0x00;
PORTD = 0x00;
cm = 0;
cm_left = 0;
cm_right = 0;
cm_center = 0; //측정 거리 변수
state =0; //초음파 센서 상태 변수
move_state =0; // 로봇 상태 변수
}
///////////////////////////////////////////// 타이머 설정 부분
void timer1_init() //트리거 신호 출력 주기 50ms, 하이 신호 12us출력
{
TCCR1A = 0xAA; //모드 14, 출력 OC1A(PB5),OC1B(PB6)
TCCR1B = 0x1C; //256분주
ICR1 = 0x061a; //100ms 주기
OCR1A = 0x0003; //12us : INT7
OCR1B = 0x0003; //12us : INT4
OCR1CH = 0x00; //12us : INT5
OCR1BL = 0x03; //12us : INT5
}
void timer3_init()
//Echo 신호 체크, 1cm = 5.941 카운트, 58.5125us마다 인터럽트발생
{
TCCR3B = 0x01; //기본 모드.
TCNT3H = 0xFC;
TCNT3L = 0x52;
}
//////////////////////////////////////////////////////// 인터럽트 설정 부분
void send_data1() //INT7 걸릴때 (왼쪽 센서)
{
cm_left = cm;
}
void send_data2() //INT4 걸릴때 (앞 센서)
{
cm_center = cm;
}
void send_data3() //INT5 걸릴때 (오른쪽 센서)
{
cm_right = cm;
}
void SelectMove();
void main(void) /////////////////////////////////////////////////////////// 메인
{
delay_ms(1000);
TestLED();
port_set(); // 포트 설정
timer1_init(); // 타이머1 초기화
timer3_init(); // 타이머3 초기화
#asm("sei") // 전역 인터럽트 인에이블
TestMove(); // 모터 테스트
delay_ms(1000);
Front();
while (1)
{
cm_left = 0; cm_right = 0; cm_center = 0;
//센서 측정
srf_01(); //INT7
srf_02(); //INT4
srf_03(); //INT5
SelectMove();
}
}
/* 200 => 15도 / 320 => 45도 / 650 => 90도 / 1500 => 180도 */
void SelectMove()
{
if(cm_center <= 7)
{
StopMove();
srf_02(); //INT4
srf_03(); //INT5
delay_ms(100);
//////////////////////////////////////////////////////////////////// ㄷ 자형 장애물
if( (cm_left<=6) && (cm_right<=6) )
{
do{
Back(1000);
srf_02(); //INT4
srf_03(); //INT5
}while((cm_right<=6) && (cm_left<=6));
StopMove();
srf_02(); //INT4
srf_03(); //INT5
if(cm_left>cm_right)
{
Left_turn(650);
StopMove();
Front();
return;
}
else if(cm_left
{
Right_turn(650);
StopMove();
Front();
return;
}
else
TestLED();
}
//////////////////////////////////////////////////////// 전방 장애물 우측면 개방형
else if((cm_left<=5) || (cm_right >= 15))
{
Right_turn(320);
StopMove();
Front();
return;
}
else if((cm_left<=5) || (cm_right < 15))
{
Right_turn(1500);
StopMove();
Front();
return;
}
//////////////////////////////////////////////////////////// 전방 장애물 좌측면 개방형 else if((cm_right<=5) || (cm_left >= 15))
{
Left_turn(320);
StopMove();
Front();
return;
}
else if((cm_right<=5) || (cm_left < 15))
{
Left_turn(1500);
StopMove();
Front();
return;
}
else
TestLED();
}
////////////////////////////////////////////////////////////////// 벽면 따라 주행하기
else if( (cm_center>=6)&&(cm_left<=4)&&(cm_right<=4) )
{
StopMove();
Front();
return;
}
////////////////////////////////////////////////////////////////좌측면 장애물 피하기
else if(cm_left<4)
{
Right_turn(200);
Front();
return;
}
////////////////////////////////////////////////////////////////우측면 장애물 피하기
else if(cm_right<4)
{
Left_turn(200);
Front();
return;
}
cm_left = 0; cm_right = 0; cm_center = 0;
Front();
}
PORTB.4 = 1; // 오른쪽 모터 인에이블
PORTB.3 = 1; // 왼쪽 모터 인에이블
DDRF = 0xFF; // LED 출력
PORTC = 0x00;
PORTD = 0x00;
cm = 0;
cm_left = 0;
cm_right = 0;
cm_center = 0; //측정 거리 변수
state =0; //초음파 센서 상태 변수
move_state =0; // 로봇 상태 변수
}
///////////////////////////////////////////// 타이머 설정 부분
void timer1_init() //트리거 신호 출력 주기 50ms, 하이 신호 12us출력
{
TCCR1A = 0xAA; //모드 14, 출력 OC1A(PB5),OC1B(PB6)
TCCR1B = 0x1C; //256분주
ICR1 = 0x061a; //100ms 주기
OCR1A = 0x0003; //12us : INT7
OCR1B = 0x0003; //12us : INT4
OCR1CH = 0x00; //12us : INT5
OCR1BL = 0x03; //12us : INT5
}
void timer3_init()
//Echo 신호 체크, 1cm = 5.941 카운트, 58.5125us마다 인터럽트발생
{
TCCR3B = 0x01; //기본 모드.
TCNT3H = 0xFC;
TCNT3L = 0x52;
}
//////////////////////////////////////////////////////// 인터럽트 설정 부분
void send_data1() //INT7 걸릴때 (왼쪽 센서)
{
cm_left = cm;
}
void send_data2() //INT4 걸릴때 (앞 센서)
{
cm_center = cm;
}
void send_data3() //INT5 걸릴때 (오른쪽 센서)
{
cm_right = cm;
}
void SelectMove();
void main(void) /////////////////////////////////////////////////////////// 메인
{
delay_ms(1000);
TestLED();
port_set(); // 포트 설정
timer1_init(); // 타이머1 초기화
timer3_init(); // 타이머3 초기화
#asm("sei") // 전역 인터럽트 인에이블
TestMove(); // 모터 테스트
delay_ms(1000);
Front();
while (1)
{
cm_left = 0; cm_right = 0; cm_center = 0;
//센서 측정
srf_01(); //INT7
srf_02(); //INT4
srf_03(); //INT5
SelectMove();
}
}
/* 200 => 15도 / 320 => 45도 / 650 => 90도 / 1500 => 180도 */
void SelectMove()
{
if(cm_center <= 7)
{
StopMove();
srf_02(); //INT4
srf_03(); //INT5
delay_ms(100);
//////////////////////////////////////////////////////////////////// ㄷ 자형 장애물
if( (cm_left<=6) && (cm_right<=6) )
{
do{
Back(1000);
srf_02(); //INT4
srf_03(); //INT5
}while((cm_right<=6) && (cm_left<=6));
StopMove();
srf_02(); //INT4
srf_03(); //INT5
if(cm_left>cm_right)
{
Left_turn(650);
StopMove();
Front();
return;
}
else if(cm_left
Right_turn(650);
StopMove();
Front();
return;
}
else
TestLED();
}
//////////////////////////////////////////////////////// 전방 장애물 우측면 개방형
else if((cm_left<=5) || (cm_right >= 15))
{
Right_turn(320);
StopMove();
Front();
return;
}
else if((cm_left<=5) || (cm_right < 15))
{
Right_turn(1500);
StopMove();
Front();
return;
}
//////////////////////////////////////////////////////////// 전방 장애물 좌측면 개방형 else if((cm_right<=5) || (cm_left >= 15))
{
Left_turn(320);
StopMove();
Front();
return;
}
else if((cm_right<=5) || (cm_left < 15))
{
Left_turn(1500);
StopMove();
Front();
return;
}
else
TestLED();
}
////////////////////////////////////////////////////////////////// 벽면 따라 주행하기
else if( (cm_center>=6)&&(cm_left<=4)&&(cm_right<=4) )
{
StopMove();
Front();
return;
}
////////////////////////////////////////////////////////////////좌측면 장애물 피하기
else if(cm_left<4)
{
Right_turn(200);
Front();
return;
}
////////////////////////////////////////////////////////////////우측면 장애물 피하기
else if(cm_right<4)
{
Left_turn(200);
Front();
return;
}
cm_left = 0; cm_right = 0; cm_center = 0;
Front();
}
추천자료
간단한 C언어 lexical analyzer
등수매기기
Mining Rules From Source Code
[데이터 통신] Packet Sniffer의 구현
그래픽스, lineDDA, lineBres, circle, ellipse
네트워크 프로그래밍 - 과제1. 멀티 스레드를 이용한 파일 수신 서버 작성
프로그래밍기초 및 실습 설계과제1 - 1. 24시간제로 시간을 입력하면 오전과 오후를 AM, PM ...
matlab을 이용한 주파수 가감법 (차감법)
논리회로실험 - 샘플링 이론(Sampling Theorem)과 나이키스트 주파수(Nyquist Frequency) MAT...
소켓 프로그래밍(Socket Programming), 파일전송 프로그램, 데이터 통신
[자료구조] Linked List를 이용한 예약프로그램 - 버스예약 프로그램을 Linked_list로 구현한다
컴퓨터네트워크 - 자바 소켓프로그래밍을 이용한 야구게임
[구글은 왜 자동차를 만드는가] 우수 독후감 및 요약 정리
자바 팀프로젝트 자판기 프로그램
소개글