2015학년도

기계설계프로젝트 최종 보고서

과제명 : Free Steering Board

(2014년 9월 1일 ~ 2015년 06월 30일)

팀명: 친구들

기계공학 설계프로젝트 최종 보고서를

붙임과 같이 제출합니다.

2015. 06. 30.

대구대학교 기계자동차공학부(기계공학전공)

제 출 문

대구대학교 기계자동차공학부 학부장 귀하

본 보고서를 대구대학교 기계자동차공학부 설계프로젝트 과제 “Free Steering Board(자유 조향 및 자동 밸런싱, 레져용 이동수단)”의 결과보고서로 제출합니다. (과제기간 : 14. 09. 01 ~ 15. 06. 30)

2015. 06. 30.

담당교수 : 이동활           (인)

지도교수 : 윤강섭           (인)

대표학생 : 백승찬           (인)

참여학생 : 백원기            (인)

염철웅           (인)

이지범           (인)

임홍열           (인)

장종욱           (인)

보고서 작성 윤리 서약서

대구대학교 기계자동차공학부 학부장 귀하

본인은 보고서를 작성함에 있어 다음과 같이 연구 윤리 및 보고서 작성 윤리를 준수하였음을 서약합니다.

1. 본인은 다른 학생의 보고서를 복사(copy)하지 않았습니다.

2. 본인은 다른 사람의 보고서 내용 중 전부 또는 일부를 무단으로 도용하거나 인터넷에서 내려받기(download)하여 대체하지 않았습니다.

3. 본인은 보고서에 참고자료를 인용할 경우 원본의 출처를 반드시 표시하였습니다.

2015. 06. 30.

담당교수 : 이동활           (인)

지도교수 : 윤강섭           (인)

대표학생 : 백승찬           (인)

참여학생 : 백원기            (인)

염철웅           (인)

이지범           (인)

임홍열           (인)

장종욱           (인)

최종보고 요약문

과제명	Free Steering Board(자유 조향 보드)
팀명	친구들
팀원	백승찬, 백원기, 염철웅, 이지범, 임홍열, 장종욱
과제기간	2014 년 9 월 1 일 ~ 2015년 06 월 30 일
1. 개발내용 및 목표 레저용 및 단거리 이동 수단을 목표로 휴대 간편한 제품으로 개발할 것입니다. 그러기 위하여 부품 소형화를 통하여 전체 규격을 줄이고 NFX 시뮬레이션을 통하여 재질을 비용에 적합하면서 가벼운 것을 선정할 것이며 프레임 두께를 최소화하여 중량을 낮출 것입니다. 규격을 700X150X150[eqn: (mm ^{ 3})], 최대 속도를 10km/h, 무게를 8kg을 최우선 목표로 하며 자이로 센서의 롤&피치 값을 받아 그 값으로 제어를 하여 자동 밸런싱 및 주행이 되도록 할 것이며 경량화 및 소형화 시킬 것입니다. 2. 개념설계 및 상세설계 전원 입력 시 자동으로 밸런싱(-1˚~+1˚) 각 발판각도 조절(-3˚~+3˚)만으로 전후 또는 회전이동(양 발판 교차) 소프트웨어개발을 하여서 모터(감속기)를 제어(속도조절) 보드전원 on/off 스위치 3. 제작 발판: 소형화 및 경량화, 안전성을 고려한 적정 설계(알루미늄으로 제작, 안전성을 고려하여 보강재를 설치) wheel axis: 모터와 휠을 직접 연결하는 식의 설계로 커플링 및 기어를 사용하지 않아 공간 활용을 최대화. 축이 커플링 역할까지 함. main shaft: 발판과 발판 사이를 연결하는 축으로 플랜지와 보강재를 설치하여 하중에 견딜 수 있게 설계. 소프트웨어 개발 - 자이로센서값(Roll&Pitch)을 이용을 하여 전원이 입력이 되었을 때 자동으로 밸런싱이 되고 사용자가 탑승을 하였을 때 -3˚~+3˚를 기울이면 전후방 속도조절이 되도록 개발 4. 시험 및 평가 1. 속도를 측정하기 위해 10m거리 주행 시 시간 측정. 2. 체중계를 사용하여 무게 측정. 3. 오르막길 경사 20°까지 주행가능성 측정. 4. 허용하중 측정

5. 안전성을 고려한 긴급스탑 스위치 작동여부

5. 결론

1. 볼팅과 용접 중 볼팅을 택 → 용접보다는 볼팅이 모터축과 바퀴축을 일자로 하는데 정확하다.

볼팅을 위해서 두께5mm→6mm

보강재와 프렌지를 사용하여 축의 부담을 덜어 주고 하중을 좀 더 버틸 수 있게 되었다.

2. 재질이 무겁다고 판단되어 NFX를 이용하여 알루미늄으로 변경하였다.

3. NFX시뮬레이션 중에 축이 문제가 되어(축을 중공축으로 하여 양 발판간에 선처리를 하였다) 축을 기존의 20mm(알로이스틸)에서 25mm(SM45C)로 변경하였다

4. 전체발판의 모양이 삼각형모양으로 중간으로 모이는 모양이였는데 공간이 너무 협소하여 직육면체 모양으로 변경을 하였다.

5. 24V 150W DC모터를 선정을 하였는데 크기가 너무 크고 출력이 과설계 되었었다. 목적에 맞게 크기 최소화하기 위해 25V 100W BLDC모터를 사용하였다. BLDC모터를 사용함으로서 100mm이상 크기가 감소 되었다.

<최종 조립도>

6. 기대효과

1. 레저용 및 스포츠를 즐길 수 있다.

2. 전기충전방식으로 유지비가 적다.

3. 좁은 회전반경으로 실내에서 작업용으로 쓰일 수 있다.

4. 기존의 바퀴-모터 일체형은 해외수입 제품이라 그에 따른 비용이 많이 드는데 그것을 모터와 바퀴를 분리형으로 제작을 하여 가격이 더욱 낮아진다.

5. 국내제작으로 인해 A/S가 간편해 진다.

처음 요구기능을 설정을 하였을 때 로드 셀을 사용하여서 무게가 감지되면 밸런싱이 되게 하였는데 사용자가 탑승하였을 때 밸런싱을 잡으면 탑승을 할 때 사용자가 자체적으로 밸런싱을 잡아야되는 단점이 있다. 그런 단점을 고치기 위하여 처음 전원을 입력하면 바로 밸런싱이 되게 수정을 하였다. 그러면 처음부터 안전하게 탑승을 할 수가 있다. 이러한 이유로 로드 셀은 요구기능에서 삭제를 하였다.

목  차

제1장 과제내용 및 목표 제1절 목적 및 필요성 제2장 개념설계 및 상세설계 제1절 개념설계 제2절 요구기능 제3장 제작 제1절 실험 제2절 기구부 제3절 제어부 제4절 부품제원 제5절 결과분석 제6절 NFX시뮬레이션을 이용한 Free Steering Borad의 기대효과 제4장 시험 및 평가 제1절 운용 및 시험 요구조건 제2절 시운전 및 평가 제5장 결론 제1절 문제점 분석 및 처리결과 제2절 시제품 사양서 제3절 총평 참고문헌 부록 부록1 설계구성요소 요약 제시 부록2 현실적 제한요소 요약 제시 부록3 기타 부록들	1 1 2 2 3 3 3 5 9 11 13 14 14 14 15 15151718 19 20 21 22 23

제 1장 과제내용 및 목표

제1절 목적 및 필요성

1. 과제개발의 목적

설계 프로젝트를 시작하며 여러 가지 아이디어를 고안하던 중 원형 전동 보드의 아이디어를 내었다. 하지만 원형 전동 보드에 대해서 조사를 하던 중 호버트랙스라는 제품을 알게 되어서 다시 재조사를 실시하였다. 호버트랙스는 바퀴 안에 모터가 포함된 제품으로서 부피를 줄여서 휴대성을 강화한 제품이다. 하지만 호버트랙스의 부품은 해외에서 수입을 하는 것이기 때문에 여러 가지 단점이 있다. 이러한 단점들을 개선을 하고 호버트랙스의 제어방법을 공부를 하고 휴대성을 강조하여 기구부를 설계하면 설계 프로젝트의 과목에서 실무능력과 개발 능력이 향상 될 거라는 것을 짐작하였다.

<기존의 호버트랙스>

2. 과제개발의 필요성

현재 호버트랙스라는 제품은 해외에서만 생산되고 있다. 그렇기 때문에 국내로 들어올 때는 비싼 가격으로 들어와 관심은 가지만 가격이 부담이 되어 살 엄두를 내지 못하는 사람들이 많다. 또한 구매하더라도 국내에는 판매만 대행해주기 때문에 고장이 생겼을 경우 A/S를 받지 못하고 애물단지가 되는 경우가 있다. 만약 국내에서 만들어 가격이 저렴해지고 보급화가 되면 이 같은 문제점들이 해결될 것이다. 이렇게 된다면 작고 간편하여 휴대성이 좋고 쉽게 다룰 수 있는 이 제품이 널리 사용될 것이다. 또한 전기 구동으로 인해서 환경친화적이고 유지비가 저렴하다는 장점이 있다. 이러한 다양한 기대효과들로 이 제품을 설계 프로젝트를 통해 설계할 필요가 있다고 생각된다.

제2장 개념설계 및 요구기능

제1절 개념설계

1) 이론적 배경

<초기 설계한 손 그림>

-개념설계를 시작할 때 기존제품 ‘호버트랙스’의 모양을 참고하여서 만들었다. 개념설계때는 모터의 크기를 고려하지 않고 하여서 모양이 역 삼각형 으로 소형화가 된 모델이다.

<변경 후 손 그림>

-모터의 크기를 고려하고 모터를 삽입하였을 때 모터의 옆부분에 남는 공간이 있는데 거기에 회로들과 센서 배터리가 삽입된다.

-자이로의 Roll 출력값을 받아 전원 입력시 -1°~1°사이로 밸런싱이 되고 -3°~3°까지는 주행(가감속 제어)이 되며 교차를 시킬 시 조향이 되게 된다.

제2절 요구기능

2.1) 레저용 및 이동수단

2.2) 전원이 입력 시 자동으로 밸런싱(-1˚~+1˚)

2.3) 각 발판각도 조절(-3˚~+3˚)만으로 전후 또는 회전이동

2.4) 소프트웨어개발을 하여서 모터(감속기)를 제어(속도조절)

2.5) 보드전원 on/off 스위치

제3장 제 작

제 1절 실험

1.1) 가능성 실험(Feasibility Test)

가능성 실험의 목적 : 박스를 이용한 자이로센서의 Roll값을 받아 밸런싱을 하여 가능성 실험을 하였다. 가능성 실험을 통하여 익숙하지 않은 자이로센서를 잘 다룰 수 있고 프로젝트의 성공여부를 알기 위함이다.

→

(전원 OFF)                                        (전원 ON)

http://blog.naver.com/qortmdcks019/220351440787 (동영상링크)

<우측 자이로 센서>

<좌측 자이로 센서>

-두개의 자이로 센서의 값을 하이퍼터미널로 받아서 엑셀 그래프로 나타낸 것이다. 자이로센서를 처음에는 느리게 기울였고 두 번째는 빠르게 기울였다. PID제어는 오차가 나는 값을 줄여서 구동을 자연스럽게 시켜주는 것인데 그래프에서 보면 값의 오차가 거의 없어 PID제어를 생략하였다.

제2절 기구부

1.1) 기존 발판의 두께 5mm에서 고정과 볼팅을 하기 위하여 6mm로 변경하였다.

1.2) 재질을 변경을 하여서 예산을 보고 가격이 적당한 재질을 찾아 하중을 버틸 수 있는 상황에서 최대한 가볍게 한다.

1.3) 호버트랙스에는 축이 하중을 받기 때문에 시뮬레이션을 통하여 축 설계를 좀 더 명확하게 할 수 있다. 그러므로 축이 받는 하중을 좀 더 덜어주기 위해 보강재와 프렌지를 사용한다.

<프렌지>

<보강재>

1.4) 탑승자가 제품이 익숙하지 않아 조향 할 때 많이 기울이면 발판이 손상이 될 수 있기 때문에 3˚에서 더 이상 내려가지 않게 기구적 설계를 한다.

<3°안전장치>

변경 ->허나 3°안전장치를 사용하게 되면 조향과 소음에 문제가 생기게 되어(회전이 불가능) 제거 하였다.

1.5) 모터선정 식

1.6)발판 및 옆면 두께 선정 식

1.7) 축

1.8) 최소 2.39565kg·m의 토크값을 가진 모터에 안전계수 1.5를 생각하여 계산을 한 값이 77.6W이 계산이 되었다. 최소한의 크기와 효율적인 출력을 하기 위해 BLDC 100W급 모터를 선정하였다. 발판의 최소 두께는 4.85mm이며 옆면의 두께는 0.306mm이다. 하지만 정확한 모터 축 체결을 위해서 볼팅을 택하게 되면서 두께를 6mm로 선정을 하였다.

<전체적인 조립도>

제3절 제어부

2.1) 자이로센서의 롤0&롤1값을 이용하여 전원입력시 +1˚~-1˚까지 자동으로 밸런싱

2.2) 자이로센서의 롤0&롤1값을 이용하여 +3˚~-3˚까지 주행(가감속)

2.3) 자이로센서의 롤0&롤1값을 이용하여 발판을 앞뒤로 기울일시 조향

<구동 알고리즘>

1.전원 스위치를 ON시킨다.(배터리 및 MCU 전원 동시 ON)

2.전원이 켜지면 시제품 스스로 밸런싱을 잡는다.

3.밸런싱이 잡혀있는 시제품에 한 발씩 올려 서서히 균형을 맞춘다.

4.ROLL(0,1)값을 받아 속도조절을 한다.

5.전원 스위치를 OFF시키면 모든 동작이 정지한다.

(하차 시 균형을 잡은 상태에서 하차한다.)

<시스템 구성도>

<회로도>

제 4절 부품 제원

BLDC 모터	제품명 : K9LH100N2 제조사 : GGM 판매처 : 디바이스 마트 용량 및 전압 : 100W-24V 감속비 : 25:1 속도제어범위 : 100~3000 정격 TORQUE : 0.4 Nm 크기 : 104 X 90 X 90 (mm) 가격 : 166,320 (부가세 포함 2개 가격)
모터 드라이버	제품명 : OZBV-05A-D2MN 제조사 : 오즈시스템즈 판매처 : 디바이스 마트 입력전압 : 15~30[VDC] 출력 : 20/ 40/ 60 [W] 입력신호 : 4 출력신호 : 3 보호기능 : 과전류, 과열, 과전압, 저전압 크기 : 90 X 57 X 27 (mm)
리튬 폴리머 배터리	제품명 : Sky-Holic Extreme (70c max) 제조사 : Sky-Holic 판매처 : Sky-Holic 크기 : 155 x 50 x 57 (mm) 무게 : 842g(실리콘와이어 포함) 전압 : 22.2V
자이로 센서	제품명 : myARS-USB 제조사 : 위드로봇(주) 판매처 : 디바이스마트 특징 : 롤-피치 각도출력 3축 가속도 센서 100HZ 데이터 출력 속도 UART/ 12C/ USB 인터페이스 지원 가격 : 154,000 (부가세 포함 2개 가격)

ATmega128	제품명 : AB-M128PRO-A 제조사 : 주식회사 뉴티씨(NEWTC) 판매처 : 디바이스 마트 사이즈 : 124 * 75 ATMEL사의 AVR 마이크로 컨트롤러 ATMega128 사용 가격 : 46,000( 부가세 미포함 2개 가격)
9인치 튜브형 바퀴	휠의 외경 : 121mm 키 가로 : 5mm 키 세로 : 2mm 휠의 내경 : 19mm 내경의 깊이 : 38mm 가격 : 110,000 (부가세 포함 2개 가격)
외주가공	발판, 축 외주가공 업체 : 형제정밀 가격 : 880,000원 (부가세 포함)

제5절 결과 분석(NFX시뮬레이션 및 시운전)

NFX 시뮬레이션의 목적 : NFX시뮬레이션으로 최적화된 두께를 계산하고 재질을 선정함으로 가공비(바퀴축과 모터축을 일렬로 하기 위하여 볼팅으로 하였는데 그 정확성을 위해서 외주가공을 함)를 절감하고 안전한 설계를 할 수 있다.

4.1) 요소망은 8mm이하부터는 값이 비슷하게 나오고 컴퓨터의 해석 시간만 길어지기 때문에 8mm로 선정을 하였다. SM45C와 알루미늄 재질 중 NFX 시뮬레이션을 통해 축을 선정하는데, 둘 모두 안전율이 2 이상이 되기 때문에(보통 설계시 안전율이 2이상이면 안전하다고 판단) 안정성에는 문제가 없다. 하지만 SM45C가 가격이 저렴하기 때문에 선정하게 되었다.

	<변위> max : 0.0045047mm
	<변위> max : 0.0126713mm
	<응력> max : 24.2844N/mm^2

	<응력> max : 25.418N/mm^2
	<안전율> min : 2.88251
	<안전율> min : 8.69436

제6절 NFX시뮬레이션을 이용한 Free Steering Borad의 기대효과

5.1) 발판의 두께를 6mm로 볼팅을 할 수 있게 변경을 하고 NFX시뮬레이션을 이용해 안전하다는 결과가 나왔다.

5.2) 재질을 알로이스틸→알루미늄으로 변경을 하여 알로이스틸(합금강)을 쓸 때 보

다 무게가 더 가벼워 져서 전체적인 무게를 줄일 수가 있었다. 무게를 줄임으로서

제품의 목적에 맞게 휴대성이 높아졌다.

제4장 시험 및 평가

제1절 운용 및 시험 요구조건

1.1) 구동방식은 모터를 보강재에 볼팅을 하여 흔들리지 않게 축과 일직선상으로 고정을 하고 구동을 한다.

1.2) 모터의 공간과 배터리, 모터드라이브의 공간을 제외한 나머지부분은 제어에 필요한             회로부분을 넣게 된다.

1.3) 앞서 공간을 많이 활용을 한 이유는 나머지 공간에 회로 판을 넣고 최소한의 크기로 만들려고 하기 때문이다.

제2절 시운전 및 평가

밸런싱문제, 모터문제, 프로그램 제작 미숙 등으로 시간이 지연되어서 시운전단계까지는 하지 못하였지만 6월6일까지 모든 문제들을 해결하고 시운전을 하여서 밑의 단계를 3번씩 평가를 할 예정이다.

1) 속도를 측정하기 위해 10m거리 주행 시 시간 측정 (스톱워치 사용)

2) 체중계를 사용하여 무게 측정

3) 오르막길 경사 10°~20°까지 주행가능성 측정 (각도계 사용)

4) 안전성을 고려한 긴급스탑 스위치 작동여부

5) 허용하중 측정 (70~100kg 10kg단위 측정, 무게에 맞는 인원이 탑승)

제5장 결론

제1절 문제점 분석 및 처리결과

1.1) 두께5mm에서 6mm에서 변경을 하였고, 볼팅과 안전성을 위하여 보강재와 프렌지를 사용하여 축의 부담을 덜어 주고 하중을 좀 더 버틸 수 있게 되었다.

1.2) 재질이 무겁다고 판단되어 NFX를 이용하여 알루미늄으로 변경하였다.

1.3) NFX시뮬레이션 중에 축이 문제가 되어(축을 중공축으로 하여 양 발판간에 선처리를 하였다) 축을 기존의 20mm(알로이스틸)에서 25mm(SM45C)로 변경하였다.

1.4) 전체발판의 모양이 삼각형모양으로 중간으로 모이는 모양이였는데 공간이 너무 협 소하여 직육면체 모양으로 변경을 하였다.

1.5) 전체적으로 크기를 차지하는 것이 모터인데 기존은 24V 150W DC모터를 사용하였는데 크기가 너무 커서 휴대성이 힘들고 출력이 과하다는 결론이 나와서 모터를 24V 100W BLDC모터를 사용하였다. 그렇게 해서 총 크기가 100mm이상 감소 하였다.

<24V 150W DC모터>

<24V 100W BLDC 모터>

1.6) 기구부를 외주가공을 맡겨서 찾았을 때 3°안전장치를 확인해보았는데 소음이 생각보다 심해서 6월초까지 고무패킹이나 실리콘으로 얇게 할 예정이다.

1.7) 발판의 모서리 부분이 직각이라서 탑승자가 다칠 위험이 있기 때문에 고무패킹을 할 때 이 부분도 같이 할 예정이다.

1.8) 탑승도중 문제가 발생시 바로 정지할수 있게 B접점스위치를 이용하여 비상정지스위치를 6월 6일까지 완성예정이다.

제2절 시제품 사양서

크기	720X220X230 (mm)
무게	20kg
속도	12km/h
허용하중	80kg
구동가능시간	30분
가격	60만원 대

제3절 총평

기계 설계를 시작하기 전 아이디어 선정을 하고 선정된 아이디어의 요구기능을 정하고 기존 제품의 사양을 참고하여 정량적 목표를 정하여 정량적 목표를 토대로(소형화) 설계를 하였다. 하지만 기존 제품(호버트랙스)의 부품 인휠 모터(모터-바퀴 일체형)를 국내에서 구입하지 못하기 때문에 모터-바퀴 분리형으로 설계를 진행함으로 소형화에는 다소 문제가 있게 되었다. 그러하여 BLDC 모터를 사용하여 이 문제점을 개선하려고 하였지만 차후 예산에 문제가 생길 것을 생각하여 DC모터(기어드모터)를 구입하여 설계를 진행하였다. 그런데 기구부 전문가와 상담을 하였는데 DC모터를 사용하게 되면 처음 생각(750mm)하였던 길이 보다 300mm가량 증가하여 대책을 강구하여 BLDC모터를 대체하여 300mm가량 감소시켜 정량적 목표에 가깝게 설계하였다. 그리고 축 자체의 재질을 알루미늄으로 변경을 한다면 무게 자체를 감소될 것이라고 예상한다. 프로그램 제작을 하던 도중 자이로 센서 값을 하나로 밸런싱은 성공했지만 두 개의 자이로 값을 받는 과정에서 시간이 지체 되었고, DC모터를 사용할 때 규격이 너무 커져서 BLDC로 변경하였다. 그로 인해 제어부 진도가 늦어져 시운전을 하지 못하였다. 시운전을 5월 31일까지 완료를 하고 그에 대한 보안을 6월 6일까지 완성 할 예정이다.

[참고문헌]

[1] 율정, “모터선정시 토크값 계산”

http://m.blog.naver.com/PostView.nhn?blogId=jungbw92&logNo=90013188711&isFromSearchAddView=true

[2] 이해기, 김동완, 민완기 등, 2011, 자동제어, 복두출판사

[3] Cofacs, 2014, Castors and Wheels, Cofacs

[4] 자이로센서(MY ARS-USB) 데이터 시트 ,withrobot,1~20P

[5] NT-DC20A DC Motor Driver Quick reference Manual ,(주)엔티렉스

[6] KEC SEMICONDUCTOR TECHNICAL 데이터시트(레귤레이터), KEC 1P

http://www.alldatasheet.com/datasheet-pdf/pdf/69437/KEC/7805.html

[7] 베어링 카탈로그, NSK

[8] 배터리 매뉴얼, Sky-Holic

[9] BLDC 데이터 시트

[10] Charles E. Wilson, 2001, 기계설계, 인터비젼

[부록] (종합설계 최종보고서 필수부록:설계구성요소 및 현실적 제한조건)

부록 1. 설계구성요소 요약 제시표

구 분		적용 내용	적용 여부	적용
설계구성요소	설계 목표 설정	현대사회에서 편한 이동수단을 원하기 때문에 보드쪽으로 탐색을 하던 중 ‘호버트랙스’라는 제품을 알게 되었다. 아직까지는 많이 알려져 있지 않지만 고객의 수요가 증가 하고 있고 센서를 사용한 기술이 있기 때문에 과제설정으로 적절하다고 판단하여 설정을 하였다. 기존의 제품은 모터-바퀴 일체형이고 개발할 제품은 모터-바퀴 분리형으로 최소한의 크기와 무게로 설계 목표 설정을 하였다.	○	1.1절 pp. 2
	합성	설계과제에 사용한 기술은 자이로센서의 Roll값을 받아 밸런싱을 하고 주행과 조향을 종합적으로 하는 것이다. 밸런싱은 탑승전 밸런싱이 되어 안전성을 높이고 탑승자의 각도조절로 주행과 조향을 실행한다.	○	3.2절 pp. 5
	분석	기존제품의 기술과 개발제품의 기술은 동일하다. 하지만 기존제품은 국내에서 생산이 되지 않는 해외 제품이므로 AS가 어렵고 개발제품은 국내에서 충분히 생산이 가능하므로 수리가능성은 개발제품이 더 높다.	○	1.1절 pp. 2
	제작	mockup(모형)제작을 하여서 밸런싱을 먼저 확인하고 주행과 조향이 되는 소프트웨어를 개발을 하였다. 그리고 설계된 도면으로 제품을 만들고 시운전을 한다.	○	부록 pp. 19
	시험	시제품 성능 시험을 위해서 무게측정 속도측정 오르막길 각도측정등을 한다. 사용기구로는 저울계, 스톱워치, 각도계를 사용한다.	○	4.1~4.3절 pp. 7
	평가	시제품의 표기된 사양과 측정된 사양을 비교하였을 때 기술적인 문제점은 차이가 없지만 크기면에서 기존제품이 좀더 작지만 휴대성으로 보았을 때 큰 차이가 없다고 본다. 활용성으로 보면 기존제품이 디자인면으로 좋지만 개발제품의 디자인을 개선하고 장기적으로 보았을 때 생산 및 수리를 국내에서 한다는 점이 앞선다.	○	4.1~4.3절 pp. 7

부록 2. 현실적 제한조건 요약 제시표

구 분		적용 내용	적용 여부	적용
현실적제한조건	원가	개발제품의 개발비가 기존제품의 가격보다 비싸긴 하지만 대량으로 만든다는 점과 기존제품의 부품이 국내에서는 생산이 되지 않는 해외제품이기 때문에 생산단가가 비싼 편이다. 그래서 제품화가 된다면 개발제품이 가격이 기존제품보다 낮을 것이라고 평가한다.	○	1.1절 pp. 2
	안전성	3˚이상 발판이 기울어져 탑승자가 앞뒤로 넘어질 우려가 있기 때문에 안전사고 방지를 위해 안전장치를 설계하였다.	○	3.1절 pp. 4~6
	신뢰성	주행, 허용하중등 시운전을 반복적인 측정으로 기존제품과의 차이가 크지 않다는 것을 증명하고 내부 보강재를 이용하여 안전성이 높다	○	3.1절 pp. 4~6 4.1~4.3절 pp. 10~11
	윤리성	생산단가를 낮추는 면에서는 3˚도 안전장치를 제거 하는 것이 맞지만 기술자윤리를 따져 봤을 때 이용자의 안전을 위해서 설치하는 것이 바람직 하다.	○	3.1절 pp. 4~6
	미학	현대 사회에서 간편한 이동수단을 원하기 때문에 소비자의 마음을 사로잡을 수 있다고 평가한다. 개발제품은 볼팅으로 되어있어서 보기가 좋지 않을 수 있지만 금형으로 제작하게 되면 디자인면에서도 문제가 없다.	○	3.1절 pp. 4~6
	사회에 미치는 영향	배터리로 구동되는 제품이기 때문에 전기로 충전을 하기만 하면 되어서 유지비면에서 저렴한 편이다. 전기구동으로 따로 오염물질이 배출 되지 않고 친환경적인 제품이다.	○	1.1절 pp. 2

설계프로젝트 기존/관련제품 조사표

팀명 : 친구들           주제 : Free Steering Board

제품명	Hovertrax
품종	Hovertrax		출시국	USA
생산자	Invertist		출시년도	2014년
사진 및 요약		일반적인 세그웨이를 보드형으로 만든 제품이다. 휴대성이 편하고 각 발판을 이용하여 조향을 한다. 배터리 잔량을 표시하는 LCD와 전원 스위치가 있다. 활용되는 분야는 산업현장에서 운반시 사용되며 레져산업에도 사용된다. 자이로 센서 이용하여 PID제어에 나오는 값들을 계산 하여 자동 밸런싱을 한다. 모터-바퀴 일체형을 사용하여 크기를 최소화 하였다.
키워드	Hovertrax
유사점	1. 자이로 센서, PID제어 사용 2. 2륜 구동
차별점	1. 모터-바퀴 분리형 이용
출처	Invertist (http://inventist.com/index.php)

설계프로젝트 관련특허 조사표

특허명	자가균형 이륜 이동차 (SELF-STABILIZED VEHICLE HAVING TWO WHEELS)
출원번호	대한민국 1020130053813	등록일자	2013.05.13
출원자	박진만	등록상태	등록
도면 및 요약	자가균형 이륜 이동차가 개시된다. 본 발명에 따른 자가균형 이륜 이동차는, 좌측에 제1 구동모터가 구비되고 우측에 제2 구동모터가 구비되는 몸체; 몸체 좌측에 결합되어 제1 구동모터에 의해 회전하는 좌륜 및 몸체 우측에 결합되어 제2 구동모터에 의해 회전하는 우륜; 몸체 상측으로 길게 형성되어 상단에 손잡이가 형성되는 지지기둥; 및 몸체 또는 지지기둥의 경사 각도를 감지하는 적어도 하나 이상의 제1 감지센서를 포함하고, 제1 감지센서에 의한 정보에 따라 좌륜 및 우륜의 회전속도를 제어하여 균형을 잡도록 이루어지는 이륜 이동차에 있어서, 몸체는; 사용자의 발이 안착되고 상하방향으로 탄성변형 가능하게 이루어지는 발판; 발판 하측에 형성되고,일측에 상하방향으로 이동가능하게 이루어지고 발판에 의해 가압되는 누름키가 구비되는 중앙판; 및 누름키가 하측으로 이동할 때 가압되어 제1 감지센서의 작동신호를 송출하는 스위치를 포함하고, 발판의 면적은 누름키의 면적보다 크게 이루어지는 것을 특징으로 한다. 본 발명에 의하면, 사용자의 발이 발판에 안착될 때 탄성변형되는발판에 의해 가압되면서 누름키가 하측으로 이동하고 아울러 제1 감지센서의 작동신호를 송출하는 스위치가 작동되도록 함으로써 자가균형 이륜 이동차의 전원이 온(on) 되더라도 사용자의 발이 발판에 안착되지 않는 경우에는제1 감지센서의 작동이 이루어지지 않으면서 좌륜 및 우륜의 회전이 이루어지지 않아 안전사고를 방지할 수 있고, 발판을 통하여 누름키가 눌려지도록 함으로써 발판 상에서 임의 부위가 가압되더라도 자가균형 이륜 이동차의 작동이 이루어질 수 있어 최소한의 누름키로 제1 감지센서의 작동이 이루어질 수 있다.
키워드	세그웨이
유사점	자이로 센서를 이용하여 자가 균형을 이루고 좌우에 각각 모터를 사용하고 자이로 센서를 이용해 좌륜 및 우륜의 회전속도를 제어하여 균형을 잡도록 이루어진 이륜 이동차 발판이 가압되면 앞뒤로 구동되는 형태
차별점	특허등록 된 제품은 손잡이를 이용하여 조향을 하지만 Free Steering Board는 두 개의 발판을 이용하여 좌측으로 조향하고 싶다면 좌측 발판을 기울이고 우측으로 조향하고 싶다면 우측 발판을 기울이고 제자리 회전하고 싶다면 발판을 앞뒤로 기울이면 가능 한 점이 차별된 것이다. 그렇게 하여서 양손이 자유롭다는 장점이 있다.
출처	KIPRIS 특허정보검색서비스 (http://www.kipris.or.kr)

팀명 : 친구들                       주제 : 자이로센서를 이용한 구동 및 조향

설계프로젝트 개념설계 스펙정리표 (Full-scale 제품 기준)

팀명 : 친구들           주제 : free steering board의 개념 설계 및 기능요약

제품명	free steering board
개념 설계안 및 기능 요약	개념 설계안 사람이 탑승할 때를 생각해 발판에 각각 집중하중 40kg을 가했을 시 모터와 연결된 구동축과 발판 사이를 연결한 축, 그리고 발판 프레임의 nfx해석을 통한 설계 기능요약 ① 밸런싱기능(자이로센서를 이용한 밸런싱) ② 주행기능 (사람탑승시 최대 속도 8km/h로 30분동안 주행, 자이로센서로 3∘기울이면 전진, 후진, 조향)
필수스펙 # 1.	자이로 센서 (MY-ARS) 3축
필수스펙 # 2.	BLDC모터(K9LS100N2)-DC24V 100W
필수스펙 # 3.	프레임바디(축-SM45C 발판-알루미늄)
필수스펙 # 4.	구동휠 - 9인치 튜브형 휠
필수스펙 # 5.	배터리(Sky-holic extreme 22.2v5000mah) - 사용시간 0.5h
필수스펙 # 6.	모터드라이브(OZBV-5A) - PI제어와 오픈루프제어를 선택가능, 4가지 동작모드(cw/ccw입력, RUN/STOP모드, 속도선택모드, RS232통신모드)
필수스펙 # 7.	ATmega128

설계프로젝트 제품사용 시나리오 검토표 (Full-scale 제품 기준)

팀명 : 친구들           주제 : Free Steering board 주행 시나리오

제품명	Free Steering board
기능 요약	① 밸런싱 기능(자이로센서로 기울기 측정 후 수평유지) ② 주행기능 (사람 탑승 시 최대 속도 8km/h로 30분동안 주행, 자이로센서로 3∘기울이면 전진, 후진, 조향)
시나리오 # 1.	상황	평평한 지면에서 밸런싱 유지
	작동 방식	사람이 탑승 → 자이로센서의 기울기 측정 → 기울기0∘측정
	필요 기술	자이로센서, 제어기술
시나리오 # 2.	상황	10m이상의 평평한 지면
	작동 방식	사람이 탑승 → 밸런싱 유지확인 → 발판을 앞으로 3∘기울기를 부여 → 전진 → 기울기를 0∘유지하면 정지 → 발판을 뒤로 3∘기울기 부여 → 후진 → 기울기를 0∘유지하면 정지 → 발판을 앞뒤로 3∘기울기 부여 → 회전
	필요 기술	자이로센서, 모터제어, 제어기술
시나리오 # 3.	상황	10m이상의 평평한 지면
	작동 방식	사람이 탑승 → 밸런싱 유지확인 → 발판을 앞으로 3∘기울기를 부여 → 전진 → 가속 → 최대의 속도로 주행
	필요 기술	자이로센서, 모터제어, 제어기술
시나리오 # 4.	상황	15∘ 경사의 지면
	작동 방식	사람이 탑승 → 밸런싱 유지확인 → 발판을 앞으로 3∘기울기를 부여 → 전진
	필요 기술	자이로센서, 모터제어, 제어기술

제어부 진척내용

일자	구분	참여자	작업 내용	결과
3/2	AVR-STUDY 1. LCD I/F 2. AM-DC2-20 I/F 3. NT-DC20A 4. CW, CCW	이지범 백승찬 임홍열 염철웅 장종욱 백원기	NEW TC 예제 활용 : 테스트 PWM	OK
			Mecha 실습 예제 활용 테스트	OK
			배선 연결 후 테스트	OK (모터구동가능)
3/3	AVR-STUDY 1. PWM 2. 소형 DC모터 구동 (AM-OC2-2D) (S9D150-24CH) 3. 오실로스코프 (NT-DC20A)	이지범 백승찬 임홍열 염철웅 장종욱 백원기	Mecha 실습 예제 활용 테스트	OK
			소형 모터를 구동하여 프로그램 소스에 이상 없음
			오실로스코프를 이용하여 모터 드라이브 신호 확인
			PWM 예제를 사용하여 100%에서 모터 구동이 안되는 것과 delay가 1000 이상이 안된다는 것을 확인
3/4	AVR-STUDY	이지범 백승찬 임홍열 염철웅 장종욱 백원기	LCD & 모터 PWM 제어 예제 (12W & 150W 모터 2종류 모터 테스트)	OK (~9:00 PM)
			자이로를 연결 해서 LCD를 통해 센서 정보를 눈으로 확인 (각도가 기대하는대로 얻어지는지?)	NO
3/5	AVR-STUDY	이지범 백승찬 임홍열 염철웅 장종욱 백원기	CEMTOOL 사용법 알기	OK
			MATLAB 언어 알기
			USART 통신 확인	NO
3/9	AVR-STUDY	이지범 백승찬 임홍열 염철웅 장종욱 백원기	USART 예제	NO
3/10	AVR-STUDY	이지범 백승찬 임홍열 염철웅 장종욱 백원기	USART 통신 연결은 되나 원하는 결과 값이 나오지 않음	NO
3/11	AVR-STUDY (MYARS-USB)	이지범 백승찬 임홍열 염철웅 장종욱 백원기	USART 통신을 이용한 LDC & 하이퍼터미널에 문자 띄우기	OK (~7:00 PM)
			ROLL & PITCH 값 얻기	OK (~8:20 PM)

일자	구분	참여자	작업 내용	결과
3/12	AVR-STUDY (MYARS-USB)	이지범 백승찬 임홍열 염철웅 장종욱 백원기	ROLL & PITCH 값을 LCD에 띄우기	NO
			ROLL & PITCH 값을 이용하여 모터 제어	NO
3/16	AVR-STUDY (MYARS-USB)	이지범 백승찬 임홍열 염철웅 장종욱 백원기	ROLL & PITCH 값을 LCD에 띄우기	OK
3/17	AVR-STUDY (MYARS-USB)	이지범 백승찬 임홍열 염철웅 장종욱 백원기	ROLL & PITCH 값을 이용하여 모터 제어 (각도에 따라 CW)	OK (~10:50 PM)
			가감속 제어(각도에 따라)	OK (~11:30 PM)
3/18	AVR-STUDY (MYARS-USB)	이지범 백승찬 임홍열 염철웅 장종욱 백원기	ROLL & PITCH 값을 이용하여 모터 제어 (각도에 따라 CCW)	OK (~8:30 PM)
3/24	AVR-STUDY (MYARS-USB)	이지범 백승찬 임홍열 염철웅 장종욱 백원기	ROLL 값을 이용하여 모터제어 (밸런싱 잡기)	NO
3/31	AVR-STUDY (MYARS-USB)	이지범 백승찬 임홍열 염철웅 장종욱 백원기	회로도 구성에 필요한 커넥터 만들기 (모터 드라이브, 자이로센서, MCU의 커넥터)	NO
			배터리 양 극 전선 분리 (+ : 2개, - : 2개)	NO

일자	구분	참여자	작업 내용	결과
4/6	AVR-STUDY (MYARS-USB)	이지범 백승찬 임홍열 염철웅 장종욱 백원기	자이로 센서 ROLL 값을 이용하여 소형 DC모터 2개 구동	NO
4/7	AVR-STUDY (MYARS-USB)	이지범 백승찬 임홍열 염철웅 장종욱 백원기	자이로 센서 ROLL & PITCH 값을 이용하여 소형 DC모터 2개 구동	NO
4/10	AVR-STUDY (MYARS-USB)	이지범 백승찬 임홍열	자이로 센서 ROLL & PITCH 값을 이용하여 소형 DC모터 2개 구동 (모터1 DIR X)	NO
4/14	AVR-STUDY (MYARS-USB)	이지범 백승찬 임홍열	자이로 센서 ROLL & PITCH 값을 이용하여 소형 DC모터 2개 구동	OK
4/16	AVR-STUDY (MYARS-USB)	이지범 백승찬 임홍열	자이로 센서 ROLL 값을 이용하여 소형 DC모터 2개 구동 (작은 상자로 가능성 테스트)	OK
4/28	AVR-STUDY	이지범 백승찬 임홍열	BLDC 모터 사용 설명서 숙지	NO
4/29	AVR-STUDY	이지범 백승찬 임홍열	BLDC 모터 구동 관련하여 데이터시트 내용 부실로 인하여 SPG에 문의하여 핀 구성에 대한 자세한 설명 듣기	NO
4/30	AVR-STUDY	이지범 백승찬 임홍열	BLDC 모터 구동 관련하여 SPG에 문의한 내용을 바탕으로 윤강섭 교수님에게 상담 후 해결책 마련	NO

기구부 진척내용

(백원기, 염철웅, 장종욱)

초기 도안 구상->규격 최소화를 위하여 모터 축에 기어 사용하여 바퀴에 연결

문제점: 모터 제어를 이용하여 속도 조절하여야 하고 감속기를 이용하여 토크 값을 높여야 하여 감속기를 사용 하여야 하기 때문에 기어 사용 불필요(14년 11월~12월)

모터-축 직결 형식으로 설계, 중심축 한 쪽은 너트 체결이고 한쪽은 hole ∅보다 크게 가공하여 체결

문제점: BODY가공 시 내부를 깎아 내는 형식으로 하게 되면 가공료가 비싸지고 내부 활용 공간이 줄어들어 제품의 크기가 커짐 중심축 가공 시 일반 선반에서 가공하기 어려워 CNC선반 사용하여야 하기 때문에 가공료 비싸짐. BODY와 COVER체결을 위한 부분을 R을 주어 설계하였는데 가공이 어려워 질 수 있어 가공료 비싸짐.(15년 1월~2월)

BODY 가공료 줄이기 위해 전문가 자문을 받아 벽면 및 바닥 부분으로 나누어 가공하고 마지막에 용접하는 형식으로 설계 전환, 중심축 양쪽 모두 너트 체결형식으로 설계 전환, BODY-COVER 볼팅 위해 R을 줬던 부분을 사각형으로 설계 전환

문제점: 가공 후 용접을 하게 되면 중심이 비틀어 질 수 있고 가공 후 변경사항이 생기게 되면 BODY의 모든 부분을 새로 가공하게 되어야 함. 모터와 축의 직결에서 사용되는 베어링과 중심축에 사용되는 베어링이 수직하중을 받게 되면 그 하중을 견디지 못하고 파괴될 수 있다.

BODY 두께 3T사용 시 벽면이 견디지 못할 수 있다.

(15년 2월~3월)

JSNT 정구상 전무님 자문-BODY용접형식설계->BODY볼팅형식, 바퀴-축 연결 부위와 중심축 연결 부위의 베어링 조립 부위에 프렌지 사용하여 보강 BODY내부에 보강제 사용하여 보강 설계, BODY 볼팅 조립위해 3T->6T로 변경, BODY 3°이상 기울어지지 않게 STOPER설계

바퀴-모터 체결 시 축의 이탈방지를 위해 스냅링을 사용하여 이탈 방지, 바퀴의 이탈을 방지 하기 위해 너트 설계

(15년 4월~5월)

●2D 도면

-두개의 발판을 이어주는 역할을 하는 메인 축

-중공축으로 설계를 하여 배선역할을 하도록 하였다.

-양 끝에 베어링 너트와 와셔를 사용하여 빠지지 않도록 고정하였다.

-바퀴와 발판을 이어주는 바퀴 축

-스냅 링을 사용하여 플랜지에서 빠지지 않도록 고정하였다.

-모터와 바퀴와 연결하는 부분은 키를 사용하였다.

-바퀴와 축을 고정시키기 위해서 설계하였다.

-고정하기 위해서 넣고 볼팅을 한다.

-발판이며 보강재를 사용하였고, 볼팅을 위해서 두께를 6T로 설계하였다.

-중심축과 바퀴 축이 연결되는 부분은 플랜지를 사용하여 무너지지 않게 설계하였다.

-발판 덮개이며 접시머리를 사용한 이유는 볼트 머리가 위로 올라오지 않고 구멍 안으로 들어가게 하기 위해 사용하였다.

-플랜지이며 모터를 고정시켜주는 역할 뿐만 아니라 축이 받는 하중을 덜어주어 보호하는 역할을 한다.

-베어링과 베어링사이에 보강재를 사용하여 베어링이 안쪽으로 밀리지 않도록 설계하였다.

-조립도 이며 최소한의 크기와 모터드라이버 배터리 등을 남은 공간이 거의 없이 설계를 하였다. 전체적인 크기는 565mm이지만 바퀴크기를 고려하면 700mm정도가 된다.

<Free Steering Board 내부사진>

●프로그램 소스

#include  <avr/io.h>

#include  <avr/interrupt.h>

#include  <stdio.h>

#include  "lcd_portd.h"

#define   USART0   ((unsigned char)0)

#define   USART1   ((unsigned char)1)

#define   F_CPU 16000000

#include  <util/delay.h>

#define ENA1	PA2

#define DIR1	PA0

#define PWM1	PB4

#define ENA2	PA5

#define DIR2	PA3

#define PWM2    PB7

motor1_cw(char speed)

{

OCR0= 255*speed/100;

PORTA |= 0x05;

}

motor1_ccw(char speed)

{

OCR0=255*speed/100;

PORTA &= ~0x05;

}

motor2_cw(char speed2)

{

OCR2=255*speed2/100;

PORTA |= 0b00101000;

}

motor2_ccw(char speed2)

{

OCR2=255*speed2/100;

PORTA &= ~0b00101000;

}

extern   int USART1_send(char data, FILE *stream);

extern   int USART1_receive(FILE *stream);

extern   int USART0_send(char data);//, FILE *stream);

extern   int USART0_receive(); //FILE *stream);

int USART0_rx_check(void);

int USART1_rx_check(void);

#define   CR   0x0d

#define   LF   0x0a

#define   LENGTH_RX_BUFFER   20

#define   LENGTH_TX_BUFFER   20

volatile unsigned char rx0_buffer[LENGTH_RX_BUFFER], tx0_buffer[LENGTH_TX_BUFFER];

volatile unsigned char rx0_head=0, rx0_tail=0, tx0_head=0, tx0_tail=0;

volatile unsigned char rx1_buffer[LENGTH_RX_BUFFER], tx1_buffer[LENGTH_TX_BUFFER];

volatile unsigned char rx1_head=0, rx1_tail=0, tx1_head=0, tx1_tail=0;

static FILE usart0_stdio=FDEV_SETUP_STREAM(USART0_send,USART0_receive,_FDEV_SETUP_RW);

//static FILE usart1_stdio=FDEV_SETUP_STREAM(USART1_send,USART1_receive,_FDEV_SETUP_RW);

unsigned char fld[9][7], one0,one1;

unsigned char k=0; // field no

unsigned char nb=0; // bytes in field

unsigned char str0[20],str1[20];

signed char buf0[256], buf1[256];

unsigned char buf_idx0 = 0, buf_idx1 = 0;

int i;

void lf() { putchar(CR); putchar(LF); }

int main(void)

{

int ax, ay, az, bx, by, bz;

int gx, gy, zx, zy;

int temp0 = 0, temp1 = 0, pitch0;

int roll0 = 0, roll1 = 0, pitch1;

char ii;

char kk=0, kkk, kk2;

DDRA =  0b00101101;

DDRB =  0b10010000;

stdin=stdout=stderr=&usart0_stdio;

TCCR0  = 1<<WGM01 | 1<<WGM00;

TCCR0 |= 1<<CS02 | 1<<CS01;

TCCR0 |= 1<<COM01;

TCCR2  = 1<<WGM21| 1<<WGM20;

TCCR2 |= 1<<CS22 ;

TCCR2 |= 1<<COM21;

UCSR0B=0x98; UBRR0H=0; UBRR0L=8;

UCSR1B=0x98; UBRR1H=0; UBRR1L=8;

lcd_init();

lcd_str("TEST");

printf("start");

Gotoxy(15,1); lcd_ch('*');

sei();

while(1)

{

if (USART0_rx_check())

{

one0=USART0_receive(); //stdin);

if(one0==LF)

{

sscanf(&buf0[1], "%d,%d,%d,%d,%d,%d,%d,%d",&bx, &by, &bz, &zx, &zy, &temp0, &roll0, &pitch0);

buf_idx0 = 0;

if (roll0<=-300) //각도 3도 이상 일때 motor1 cw, motor2 ccw

{

motor1_cw(80*(-roll0)/8000);

}

else if (roll0>=300) //각도 -3도 이하 일때 motor1 ccw, motor2 cw

{

motor1_ccw(80*roll0/8000);

}

else if (roll0>-300 && roll0<0) //각도 3도 이상 0도 초과 일 때 motor1 ccw, motor2 cw

{

motor1_ccw(80*(-roll0)/8000);

}

else if (roll0<300 && roll0>0) //각도 -3도 이상 0도 미만 일 때 motor1 cw, motor2 ccw

{

motor1_cw(80*roll0/8000);

}

else // motor1, motor2 속도 0

{

motor1_cw(0);

motor1_ccw(0);

}

if(kk2) { Gotoxy(15,0); lcd_ch('+'); kk2=0; }

else    { Gotoxy(15,0); lcd_ch('-'); kk2=1; }

}

else

{

buf0[buf_idx0++] = one0;

buf0[buf_idx0]=0x00;

}

} // if (USART0_rx_check())

if (USART1_rx_check())

{

one1=USART1_receive(stdin);

if(one1==LF)

{

sscanf(&buf1[1], "%d,%d,%d,%d,%d,%d,%d,%d",&ax, &ay, &az, &gx, &gy, &temp1, &roll1, &pitch1);

buf_idx1 = 0;

if (roll1>=300) //각도 3도 이상 일때 motor2 ccw

{

motor2_ccw(80*roll1/8000);

}

else if (roll1<=-300) //각도 -3도 이하 일때 motor2 cw

{

motor2_cw(80*(-roll1)/8000);

}

else if (roll1<300 && roll1>0) //각도 3도 이상 0도 초과 일 때 motor2 cw

{

motor2_cw(80*roll1/8000);

}

else if (roll1>-300 && roll1<0) //각도 -3도 이상 0도 미만 일 때  motor2 ccw

{

motor2_ccw(80*(-roll1)/8000);

}

else // motor2 속도 0

{

motor2_cw(0);

motor2_ccw(0);

}

if(kk>=30)

{

kk=0;

sprintf(str0, "r0:% 6d",roll0);

sprintf(str1, "r1:% 6d",roll1);

//printf("%s,%s",str0, str1); lf();

Gotoxy(0,0); lcd_str(str0);

Gotoxy(0,1); lcd_str(str1);

if(kkk) { Gotoxy(15,1); lcd_ch('+'); kkk=0; }

else    { Gotoxy(15,1); lcd_ch('-'); kkk=1; }

}

else kk++;

//Gotoxy(0,0); lcd_str(buf1[1]);

}

else

{

buf1[buf_idx1++] = one1;

buf1[buf_idx1]=0x00;

}

} // if (USART1_rx_check())

} //while

} //main

int USART0_send(char data)//, FILE *stream)

{

/*

while ( !( UCSR0A & (1<<UDRE0)) );   // UDR 레지스터가 빌 때까지 폴링한다.

UDR0 = data;         // UDR 레지스터에 값을 기록한다.

return data;

*/

while( (tx0_head+1==tx0_tail) || ((tx0_head==LENGTH_TX_BUFFER-1) && (tx0_tail==0)) );

tx0_buffer[tx0_head] = data;

tx0_head = (tx0_head==LENGTH_TX_BUFFER-1) ? 0 : tx0_head+1;

UCSR0B = UCSR0B | 1<<UDRIE0;   // 보낼 문자가 있으므로 UDRE1 빔 인터럽트 활성화

return data;

}

int USART0_receive() //(FILE *stream)

{

/*

while ( !(UCSR0A & (1<<RXC0)) );   // UDR 레지스터에 문자 수신 검사

return UDR0;

*/

unsigned char data;

while( rx0_head==rx0_tail );   // 수신 문자가 없음

data = rx0_buffer[rx0_tail];

rx0_tail = (rx0_tail==LENGTH_RX_BUFFER-1) ? 0 : rx0_tail + 1;

return data;

}

int   USART0_rx_check(void) { return (rx0_head != rx0_tail) ? 1 : 0; }

ISR(USART0_UDRE_vect)

{

UDR0 = tx0_buffer[tx0_tail];

tx0_tail = (tx0_tail==LENGTH_TX_BUFFER-1) ? 0 : tx0_tail+1;

if( tx0_tail==tx0_head)      // 보낼 문자가 없으면 UDRE1 빔 인터럽트 비활성화

UCSR0B = UCSR0B & ~(1<<UDRIE0);

}

// USART0 RXC interrupt service

ISR(USART0_RX_vect)

{   volatile unsigned char data;

// rx_buffer[] full, 마지막 수신 문자 버림

if( (rx0_head+1==rx0_tail) || ((rx0_head==LENGTH_RX_BUFFER-1) && (rx0_tail==0)) )

{

data = UDR0;

}

else

{

rx0_buffer[rx0_head] = UDR0;

rx0_head = (rx0_head==LENGTH_RX_BUFFER-1) ? 0 : rx0_head+1;

}

}

int USART1_send(char data, FILE *stream)

{

// txbuffer[] full, 한 개라도 빌 때까지 기다림

while( (tx1_head+1==tx1_tail) || ((tx1_head==LENGTH_TX_BUFFER-1) && (tx1_tail==0)) );

tx1_buffer[tx1_head] = data;

tx1_head = (tx1_head==LENGTH_TX_BUFFER-1) ? 0 : tx1_head+1;

UCSR1B = UCSR1B | 1<<UDRIE1;   // 보낼 문자가 있으므로 UDRE1 빔 인터럽트 활성화

return data;

}

int USART1_receive(FILE *stream)

{

unsigned char data;

while( rx1_head==rx1_tail );   // 수신 문자가 없음

data = rx1_buffer[rx1_tail];

rx1_tail = (rx1_tail==LENGTH_RX_BUFFER-1) ? 0 : rx1_tail + 1;

return data;

}

int   USART1_rx_check(void) { return (rx1_head != rx1_tail) ? 1 : 0; }

ISR(USART1_UDRE_vect)

{

UDR1 = tx1_buffer[tx1_tail];

tx1_tail = (tx1_tail==LENGTH_TX_BUFFER-1) ? 0 : tx1_tail+1;

if( tx1_tail==tx1_head)      // 보낼 문자가 없으면 UDRE1 빔 인터럽트 비활성화

UCSR1B = UCSR1B & ~(1<<UDRIE1);

}

// USART1 RXC interrupt service

ISR(USART1_RX_vect)

{   volatile unsigned char data;

// rx_buffer[] full, 마지막 수신 문자 버림

if( (rx1_head+1==rx1_tail) || ((rx1_head==LENGTH_RX_BUFFER-1) && (rx1_tail==0)) )

{

data = UDR1;

}

else

{

rx1_buffer[rx1_head] = UDR1;

rx1_head = (rx1_head==LENGTH_RX_BUFFER-1) ? 0 : rx1_head+1;

}

}