이보고서는 2017 년도정부 ( 교육부 ) 의재원으로 한국과학창의재단의지원을받아수행된성과물임
목차 덕성여자대학교융합인재교육 (STEAM) 아웃리치프로그램개요 1. 자율주행차와미래사회 3 2. 싱글보드컴퓨터로자율주행차제작 7 3. 파이썬프로그래밍기초 19 4. 자율주행알고리즘과프로그래밍 41 5. 컴퓨터공학과진학과진로 52
덕성여자대학교융합인재교육 (STEAM) 아웃리치프로그램개요 STEAM 프로그램개요 프로그램명 SBC(Single-Board Computer) 로자율주행자동차만들기 학습주제학습목표교육대상수업시수관련교과 자율주행차가가져올우리삶의변화를생각해보고자율주행차의개념, 작동원리와기술등을알아본다. 그리고싱글보드컴퓨터와센서를이용하여자율주행차제작하고창의적인자율주행알고리즘을생각해보며최신과학기술에대한이해도를고취시킨다. 자율주행차를이용하여자율주행원리를이해하고, 효율적인자율주행알고리즘아이디어를도출한다. 고등학교 1~2학년 4차시물리 / 기술 / 미술 STEAM 단계요소 구분 상황제시 학습준거 Ÿ 다가올 4차산업혁명이일상생활에미칠영향은무엇일까? Ÿ 자율주행자동차가보편화되면인간은운전에서해방될까? Ÿ 만약자율주행차가있다면나의등굣길은어떻게바뀔까? 창의적설계 감성적체험 Ÿ Ÿ Ÿ Ÿ Ÿ 자율주행자동차에필요한기능구상하기자율주행알고리즘설계하기주어진센서모듈을활용한자동차디자인하기자신이만든자동차로자율주행테스트하기미래의자율주행자동차가해결해야할문제점제안하기
주제 SBC(Single-Board Computer) 로자율주행자동차만들기 차시교육주제교수 학습활동관련교과 상황제시 미래의자동차는어떤모습일까? 10 분 인공지능을이용하여스스로움직이는자율주행자동차소개 1 자율주행차와 실생활의변화 창의적설계 25분 하드웨어와소프트웨어융합관계알아보기 인공지능과자율주행의관계알아보기 과학 기술 예술 감성적체험 10분 내가생각하는미래의자동차발표하기 자율주행 상황제시 10분 자율주행에필요한기술은무엇이있을까? 2 알고리즘및센서데이터처리 ( 소프트웨어 창의적설계 25분 Python 기초프로그래밍 Python으로센서감지프로그래밍 Python으로자동차주행프로그래밍 과학기술공학예술 프로그래밍 ) 감성적체험 10분 SSH 원격접속으로자동차제어하기 충돌없는자율주행확인하기 3 자동차차체와전자회로구성 ( 하드웨어설계, 제작 ) 상황제시 10분창의적설계 25분 안전한자동차를제작하는데필요한기능은무엇일까? 자동차디자인설계와제작하기 센서와모터작동시키기 과학 공학 수학 감성적체험 10분 자동차디자인설계과정발표 상황제시 10 분 우리생활과밀접한컴퓨터공학소개 4 직업진로탐색 ( 전자공학 ) 창의적설계 25 분 컴퓨터공학세부전공분야체험 과학 공학 감성적체험 10 분 컴퓨터공학전공관련직업탐색
자율주행차가가져올미래사회와우리삶의긍정적인변화와부정적인사례를생각해본다. 자율주행차와우리삶의변화 운전자가차량을조작하지않아도설정한목적지까지주변환경을인식하고스스로주행하 는자동차를뜻한다. 자동차가스스로운전한다면우리의삶은어떻게변화할지생각해보자. 자율주행자동차 * 출처 : digitaldealer.com [ 참고자료 ] Ÿ 자율주행차, 미래를달리다 / YTN 사이언스 https://youtu.be/6za6otfwdhg Ÿ 미래형자율주행자동차벤츠달리는거실인가? https://youtu.be/e5bqwuornji Ÿ 구글이계획하는자율주행자동차의문제점 https://youtu.be/iobsdwriznm 3
생각해보기 : 자율주행차가있다는나의삶은어떻게바뀔까? 오전 7 시 30 분. 잠이덜깬나는무거운가방을들고밖으로향한다. 현관문을열고나갔 더니자율주행차가미리문을열고기다리고있다. 피곤했던등굣길을편안하게바꿔줄자 율주행차가생긴다면나의삶은어떻게변할까? 자율주행차가우리의실생활에어떤영향을미칠지생각해보고아래에적어봅시다. 나에게미래의자율주행자는 이다. 4
생각해보기 : 자율주행차의작동원리는무엇일까? 자율주행차의작동원리는인지, 판단, 제어등크게세가지로나뉜다. 인지기술을통해 도로의상황과현재의위치, 지형지물을감지하고수집된정보를판단, 분석하여목적지까 지안전하게도착할수있도록제어하는것이자율주행의기본원리다. * 출처 : phoneworld.com.pk 자율주행에필요한기술은어떤것들이있는지조사한후작성해보자. 5
[ 참고자료 ] Ÿ 자율주행차가도로를지배하는미래사회 http://www.kama.or.kr/jsp/webzine/201605/pages/issue_02.jsp Ÿ 자율주행자동차가가져올 10가지변화들 http://global-autonews.com/bbs/board.php?bo_table=bd_026&wr_id=261 Ÿ 자율주행자동차 - 컴퓨터와자동차가만나다! 미래의스마트카자율주행자동차 http://blog.skhynix.com/1590 Ÿ 자율주행자동차의세계! http://blog.lginnotek.com/549 자율주행차탑승사진 * 출처 : Yanfeng 6
싱글보드컴퓨터를이용하여주변상황을판단하고자율주행하는자동차설계와제작을진 행한다. 비글본블랙소개 비글본블랙은미국의비글보드재단이만든싱글보드컴퓨터로아두이노, 라즈베리파이등과함께오픈소스하드웨어를대표하는제품이다. 해외오픈소스하드웨어커뮤니티를통해비글본블랙을이용한프로젝트들이많이생겨나고있다. 그러나국내에서는비글본블랙에대한인지도가해외만큼높지않다. 아두이노와라즈베리파이는커뮤니티와블로그등이활발하게이뤄지고있는반면비글본블랙은최근에들어서야관심을받고있다. 비글본블랙하드웨어 2013년 4월, 미국의비글보드재단이비글보드의최신모델인비글본블랙이라는제품을출시했다. 비글본블랙은 45달러라는저렴한가격에놀라운성능을가지고있다. ARMv7 아키텍처의 1GHz AM335x ARM 코어텍스 (Cortex) A8 프로세서를탑재했고, 46핀이있는헤더가 2개있어서총연결가능한핀이 92개나존재한다. 뿐만아니라 GPIO, SPI, I2C 등다양한인터페이스를지원한다. 또한, 2GB 내장스토리지와옹스트롬OS, 클라우드9 IDE가미리설치돼있어제품수령 7
후곧바로개발이가능하다. 비글본블랙은 Node.js 개발이가능하고, 내장라이브러리인 BoneScript 를이용해자바스크립트로센서와액추에이터를제어할수있다. 기존의보드형 PC는성능에대한만족도가낮았지만, 비글본블랙은저렴한가격에도만족스런성능을보여준다. 예로 3D 프린터를개발하는경우리소스가많이드는작업이어서 3D 프린터관련작업만수행하는컴퓨터를따로두어야만했다. 하지만비글본블랙은프로세서와램의성능이충분하기때문에비글본블랙 1개만으로도 3D 프린터를충분히제어할수있다. [ 참고자료 ] DBguide.net http://m.dbguide.net/about.db?cmd=view&boardconfiguid=19&boarduid=177510 비글본블랙홈페이지 https://beagleboard.org/black 8
비글본블랙프로젝트소개 1 Open ROV( 무인수중탐사로봇 ) Open ROV는비글본블랙으로만든오픈소스무인수중탐사로봇프로젝트이다. 무선리모컨조종이가능하고카메라를통해심해속영상을실시간으로확인할수있다. 또한어두운심해를비추기위해조명을제어할수도있다. Open ROV (http://openrov.com) 2 BuddyBot BuddyBot은 Swift 언어로프로그래밍한첫번째무인자동차프로젝트이다. 초음파거리센서를활용하여장애물을피해서자율주행하며버튼, LED 등을 GPIO로제어도록프로그래밍한오픈소스프로젝트이다. BuddyBot (https://github.com/hoffmanjon/swiftybones_buddybot) http://myroboticadventure.blogspot.kr/2016/05/buddybot-gets-obstacle-avoidance.html 9
생각해보기 : 미래의자율주행차는어떻게생겼을까? 국내외에서많은회사들이자율주행차개발에뛰어들고있다. 기존의완성차제조업체 ( 벤 츠, 아우디, 현대등 ) 뿐만아니라 IT 업체 ( 구글, 애플등 ) 에서다양한디자인으로자율주행 차를선보이고있다. * 출처 : Google, Mercedes-Benz F015 내가생각하는미래의자율주행차디자인을상상하고자동차의외부또는내부를 그려보자. 10
설계하기 : 자율주행차를원하는모양으로조립해봅시다. SBC 로자율주행자동차만들기재료목록 구분부품명규격개수 자동차본체키트아크릴 1 자동차 본체 부분 바퀴 2 볼캐스터 1 모터전선 2 개납땜 2 볼트, 너트, 지지대세트 1 비글본블랙 부분 비글본블랙 1 5mm 지지대 M3 2 너트 M3 2 모터드라이버 L298N 모터드라이버 1 초음파 거리센서 부분 초음파거리센서 HC-SR04 1 초음파거리센서브라켓 1 12mm 렌치볼트 M3 2 너트 M3 2 점퍼케이블 (M-F) 4 pin 2 점퍼케이블 (F-F) 1 pin 1 기타 AA 건전지홀더 ( 스위치 ) 4 구 1 AA 건전지 4 휴대용충전배터리 1 미니 USB 연장케이블 1 구분추가준비목록규격개수 조별 1 개씩 드라이버세트 1 양면폼테이프 1 순간접착제 1 11
자율주행자부품사진 1 볼트와너트, 모터브라켓을이용하여자동체본체와모터를조립한다. 12
2 자동차본체에지지대를먼저연결한후볼캐스터를조립한다. 3 초음파거리센서를자동차본체에조립하고 4 핀점퍼케이블을연결한다. 13
4 본체에비글본블랙을너트로고정시킨다. 5 4 구 AA 배터리홀더와휴대용보조배터리를본체에부착한다. 14
모터와모터드라이버전선연결방법 드라이버를이용하여모터와모터드라이버를아래와같이연결한다. 15
아래그림과같이 4 구 AA 배터리홀더의전원선과비글본블랙의 GND 선을모터드라이버 연결한다. 16
비글본블랙 GPIO 연결방법 초음파거리센서의연결핀 4 개 (VCC, Trig, Echo, GND) 를아래그림과같이비글본블랙 의 P8, P9 핀헤더에맞게연결한다. 모터드라이버의입력핀 4 개 (IN1, IN2, IN3, IN4) 와 GND 핀을아래그림과같이비글본 블랙의 P8 핀헤더에맞게연결한다. 17
비글본블랙자율주행차완성 [ 참고자료 ] Ÿ 덕성여자대학교와이즈센터카페 (SBC로자율주행차만들기관련자료 ) http://cafe.naver.com/dswise/36 Ÿ 구글의자율주행차 WAYMO https://waymo.com/ Ÿ 벤츠의자율주행차 F015 https://www.mercedes-benz.com/en/mercedes-benz/innovation/research-ve hicle-f-015-luxury-in-motion/ Ÿ 자율주행기술로인한디자인의변화는? http://magazine.kakao.com/pincar/57d239dbe787d00001302f79 18
거북이그래픽모듈을사용하여파이썬언어사용법에대해서배우고순차, 반복, 선택구조 에대해서알아본다. Python 으로만든자율주행프로그램을업로드하고주행테스트를통 해프로그램을수정, 보완한다. 프로그래밍언어파이썬 파이썬 (Python) 은 1990년암스테르담의귀도반로섬 (Guido Van Rossum) 이개발한인터프리터언어이다. 귀도는파이썬이라는이름을자신이좋아하는코미디쇼인 " 몬티파이썬의날아다니는서커스 (Monty Python s Flying Circus)" 에서따왔다고한다. 파이썬의사전적인의미는고대신화에나오는파르나소스산의동굴에살던큰뱀을뜻하며, 아폴로신이델파이에서파이썬을퇴치했다는이야기가전해지고있다. 대부분의파이썬책표지와아이콘이뱀모양으로그려져있는이유가여기에있다. 파이썬은전세계적으로가장많이사용하는프로그래밍언어중하나이며, 공동작업과유지보수가매우쉽고편하다. 국내외로많은프로그래머가파이썬으로다양한프로젝트를진행하고있으며, 깃허브 (http://github.com/) 에서여러가지프로젝트를찾아볼수있다. 19
파이썬의특징 이세상에프로그래밍언어는 C, C++, Java, Ruby 등다양하다. 각언어마다장단점이 있고사용목적에따라선택해서사용해야한다. 언어마다문법과규칙이정해져있으며 유사하지만조금씩다르다. 파이썬은문법이쉬워빠르게배우기쉽고활용하기편하다. 프로그래밍경험이있는사람이라면파이썬사용법을단기간에배울수있다. 또한, 파이썬은오픈소스라서무료로사용할수있다. 매우복잡하고반복연산이많은시스템프로그램을제외하면시스템유틸리티, GUI 프로그래밍, 웹프로그래밍등다양한분야에적용할수있는언어이다. [ 참고링크 ] 점프투파이썬 https://wikidocs.net/4307 20
파이썬설치하기 1 파이썬홈페이지 (https://www.python.org/downloads/) 에서 Download Python 3.x.x 를내려받는다. 또는, http://cafe.naver.com/dswise/36 에서다운로드. 2 python-3.6.2.exe 파일을실행하면파이썬설치마법사의 Add Python 3.6 to PATH 를체크하고 Install Now 를눌러서설치를시작한다. 21
3 설치화면 4 프로그램이모두설치되면 Setup was successful 이나타난다. Close 버튼을눌러설 치마법사창을닫는다. 22
5 자주사용하는실행파일명은 IDLE(Python 3.6 32-bit 또는 64-bit) 이다. 클릭해서파이썬 IDLE 를실행한다. 6 IDLE 프로그램이화면에나타난다. 테스트로 IDLE 화면에 print( Hello Python ) 을입력하고 Enter 를누른다. 23
프로그램의기본제어구조 기본제어구조는다음과같이 3 가지가있다. 1 순차 (concatenation) 는구문순서에따라서순서대로수행한다. 2 선택 (selection) 은프로그램의상태에따라서여러구문들중에서하나를수행한다. (if, else, elif와같은키워드로표현 ) 3 반복 (repetition) 은프로그램이특정상태에도달할때까지구문을반복하여수행하거나, 집합체의각각의원소들에대해어떤구문을반복수행한다. (while, for와같은키워드로표현 ) 24
거북이그래픽프로그래밍 파이썬은초보자들이쉽고재미있게프로그래밍을배울수있도록 거북이그래픽 이라는 모듈을제공한다. 모듈이란파이썬에서사용하는프로그램의작은단위를말한다. 거북이 그래픽모듈을사용하여순차구조로프로그램을작성해보자. 1 Python IDLE 에다음과같은코드를입력하고실행해보자. >>> import turtle >>> turtle.forward(50) 다음과같이화살표가오른쪽으로이동한화면이나타난다. 25
2 다음은화면에거북이가나오도록코드를작성해보자. >>> turtle.shape( turtle ) 3 이제거북이를좌회전, 우회전을시켜보자. >>> turtle.right(90) >>> turtle.forward(50) >>> turtle.left(90) >>> turtle.forward(50) >>> turtle.exitonclick() # 화면을클릭하면창이닫힌다 26
연습문제 1 거북이그래픽모듈로사각형을만들어보자. >>> import turtle >>> turtle.shape( turtle )... 27
파이썬파일만들기 1 IDLE 을실행하고 File -> New File 을실행하고 Save 를눌러서파일명을 turtle_test 라고적은후저장한다. 2 파이썬에디터에아래코드를입력한다. import turtle turtle.shape( turtle ) 28
3 File -> Save 선택한후경로는바탕화면을선택한후파일명을 turtle_test 라고이 름을적고파일을저장한다. 29
4 Run -> Run Module 을선택하거나 F5 를눌러서프로그램을실행한다. 거북이그래픽모듈로도형그리기 1 원그리기 에디터에아래와같이코드를작성하고 F5 를눌러서실행한다. import turtle turtle.shape("turtle") # 원그리기 turtle.circle(100) 2 삼각형그리기 30
에디터에아래와같이코드를추가하고 F5를눌러서실행한다. # 삼각형그리기 turtle.forward(100) turtle.left(120) turtle.forward(100) turtle.left(120) turtle.forward(100) turtle.left(120) 3 사각형그리기에디터에아래와같이코드를추가하고 F5를눌러서실행한다. # 사각형그리기 turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) 31
32 전체코드
연습문제 2 거북이그래픽모듈로더많은사각형을만들어보자. 파일명은 turtle_ex02.py 로저장한다. import turtle turtle.shape( turtle )... 33
while 반복문 컴퓨터에게같은일을반복해서시키고싶을때반복문을사용한다. 반복문에는 while 과 for 명령어가있으며앞서배운거북이프로그램을응용하여반복구조프로그램을작성해 보자. while 반복문의기본구조는다음과같다. while [ 조건식 ]: 실행할문장1 실행할문장2... 1 Python 에디터에다음과같은코드를입력하고실행해보자. import turtle turtle.shape("turtle") while 1: # 아래문장이무한반복된다. # 사각형그리기 turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(60) 34
다음과같은결과화면이나타난다. for 반복문 for 반복문의기본구조는다음과같다. for 변수 in 리스트 : 실행할문장1 실행할문장2... 2 Python 에디터에다음과같은코드를입력하고실행해보자. import turtle turtle.shape("turtle") for i in range(3): # 아래문장이 3번반복된다. # 사각형그리기 turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(60) 35
다음과같은결과화면이나타난다. if 조건문 앞서배운거북이프로그램을응용하여선택구조프로그램을작성해보자. if 조건문의기본구조는다음과같다. if 조건식 : else: 실행할문장1 # 참 (True) 일때실행할문장 ( 들여쓰기 ) 실행할문장2 # 참 (True) 일때실행할문장 ( 들여쓰기 ) 실행할문장1 # 거짓 (Fasle) 일때실행할문장 ( 들여쓰기 ) 실행할문장2 # 거짓 (Fasle) 일때실행할문장 ( 들여쓰기 ) 3 Python 에디터에다음과같은코드를입력하고실행해보자. 36
import turtle turtle.shape("turtle") angle = 60 for i in range(3): # 아래문장이 3번반복된다. # 사각형그리기 turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) if i == 0: turtle.forward(100) if i == 1: angle = -30 turtle.left(angle) 다음과같은결과화면이나타난다. 37
연습문제 3 더많은거북이그래픽모듈을이용하여코딩을해보자. import turtle turtle.shape("turtle") turtle.color( red ) # 빨간색펜선택 turtle.pensize(5) # 펜굵기를 5로설정 angle = 60 for i in range(3): # 아래문장이 3번반복된다. # 사각형그리기 turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) turtle.forward(100) turtle.left(90) import turtle turtle.shape("turtle") turtle.color("blue") # 파란색펜선택 # 삼각형그리고색칠하기 turtle.begin_fill() # 색칠하기시작 turtle.forward(100) turtle.left(120) turtle.forward(100) turtle.left(120) turtle.forward(100) turtle.left(120) turtle.end_fill() # 색칠하기종료 38
생각다지기 : 파이썬프로그래밍결과물 자신이만든파이썬프로그래밍결과물을정리해봅시다. 예제와연습문제를통해나온결과물은무엇인가요? 실습중에발생한오류를어떻게해결했나요? 39
[ 참고자료 ] Ÿ 파이썬거북이공식문서 https://docs.python.org/3/library/turtle.html#methods-of-rawturtle-turtle-an d-corresponding-functions Ÿ 파이썬거북이그래픽모듈사용하기 http://naver.me/xxp93cwi Ÿ Python for Beginners https://opentechschool.github.io/python-beginners/ko/simple_drawing.html Ÿ Hello, little turtles! http://openbookproject.net/thinkcs/python/english3e/hello_little_turtles.html 40
자율주행차를작동시킬소프트웨어를파이썬으로개발한다. 초음파거리센서를이용하여자동 차주변에물체가접근하면자동으로피해가는알고리즘을프로그래밍한다. 생각해보기 : 운행중자동차주변에누군가접근한다면어떻게피해갈까? * 출처 : digitaltrends.com 자율주행차앞에물체가나타났다. 이때어떻게물체를인식해서물체를피해갈수 있을지생각해보고그순서를작성해보자. 41
1 비글본블랙개발환경설정방법 putty 터미널에다음과같이입력한다. nano setup.sh 아래내용을복사 (Ctrl+C) 후 putty 터미널에마우스오른쪽을클릭해서붙여넣는다. # Title: Setup for BeagleBone Black Car # Author: Duksung Women s University WISE Center # Creation Date: Oct 19, 2017 # Cafe: http://cafe.naver.com/dswise # Free and open for all to use. But put credit where credit is due. echo "Asia/Seoul" > /etc/timezone cp /usr/share/zoneinfo/rok /etc/localtime echo "TimeZone (Asia/Seoul) Setup Complete." sleep 1 apt-get update && apt-get install python-pip python-setuptools python-smbus -y pip install --upgrade pip pip install Adafruit_BBIO echo "Python & Adafruit BBIO Setup Complete." sleep 1 저장 (Ctrl+O), 엔터, 나가기 (Ctrl+X) 를차례대로눌러서파일을저장한다. 다음명령어를실행시켜서개발환경설정을시작한다. chmod 755 setup.sh./setup.sh 모든설치가끝났으면간단한 LED 예제를실행해보자. 화면에다음과같이 led.py 를작성 한다. 42
nano led.py 아래내용을복사 (Ctrl+C) 후 putty 터미널에마우스오른쪽을클릭해서붙여넣는다. import Adafruit_BBIO.GPIO as GPIO import time GPIO.setup("USR2", GPIO.OUT) while 1: GPIO.output("USR2", GPIO.HIGH) time.sleep(0.5) GPIO.output("USR2", GPIO.LOW) time.sleep(0.5) led.py 를실행시킨다. python led.py PUTTY 에서사용하는리눅스명령어 단축키의미단축키의미 nano [ 파일명 ].py [ 파일명 ] 의파이썬파일생성 Ctrl + C 작업취소 Ctrl + X 나가기 Ctrl + X, y 파일저장 Ctrl + Z 작업종료 shutdown h now 시스템종료 Python [ 파일명 ].py [ 파일명 ].py 프로그램실행 43
자율주행차예제코드 [ 참고자료 ] 소프트웨어관련자료는덕성여자대학교와이즈센터카페에서내려받을수있습니다. http://cafe.naver.com/dswise/36 1 Python 에디터에다음과같은코드를입력하고실행해보자. nano bbcar.py """ * reference: https://github.com/graycatlabs/pybbio * millis(), micros(), delay(ms), delaymicroseconds(us) """ # Import the library: import Adafruit_BBIO.GPIO as GPIO import time # L298N(Motor Driver)4 PIN IN1 = "P8_13" IN2 = "P8_15" IN3 = "P8_14" IN4 = "P8_16" # HC-SR04(Ultrasonic ranging module) 2PIN TrigPin = "P8_12" EchoPin = "P8_11" # GPIO Setup GPIO.setup(IN1, GPIO.OUT) GPIO.setup(IN2, GPIO.OUT) GPIO.setup(IN3, GPIO.OUT) GPIO.setup(IN4, GPIO.OUT) 44
GPIO.setup(TrigPin, GPIO.OUT) GPIO.setup(EchoPin, GPIO.IN) START_TIME_MS = time.time()*1000 def millis(): """ Returns roughly the number of millisoconds since program start. """ return time.time()*1000 - START_TIME_MS def micros(): """ Returns roughly the number of microsoconds since program start. """ return time.time()*1000000 - START_TIME_MS*1000 def delay(ms): """ Sleeps for given number of milliseconds. """ time.sleep(ms/1000.0) def delaymicroseconds(us): """ Sleeps for given number of microseconds > ~30; still working on a more accurate method. """ t = time.time() while (((time.time()-t)*1000000) < us): pass # 모터제어함수 def motor_control(i1, i2, i3, i4): GPIO.output(IN1, i1) GPIO.output(IN2, i2) GPIO.output(IN3, i3) GPIO.output(IN4, i4) # 초음파센서구동을위한펄스신호함수 def pulsein(gpio_pin, value, timeout=400): 45
"""https://community.particle.io/t/pulsein-function-for-hc-sr04-sen sor/27028/2""" now = micros() while GPIO.input(gpio_pin) == GPIO.HIGH: if micros() - now > 38000: return 0 now = micros() while GPIO.input(gpio_pin) == GPIO.LOW: if micros() - now > 38000: return 0 now = micros() while GPIO.input(gpio_pin) == GPIO.HIGH: if micros() - now > 38000: return 0 return micros() - now while True: duration = 0 distance = 0 GPIO.output(TrigPin, GPIO.LOW) delaymicroseconds(3) GPIO.output(TrigPin, GPIO.HIGH) delaymicroseconds(10) GPIO.output(TrigPin, GPIO.LOW) duration = pulsein(echopin, GPIO.HIGH) distance = duration / 58 if distance >= 200 or distance <= 4: print "Out of range" else: print distance, "cm", duration, "us" 46
motor_control(1, 0, 1, 0) # FORWARD # delay(300) # motor_control(0, 1, 0, 1) # BACK # delay(300) # motor_control(1, 0, 0, 0) # RIGHT # delay(300) # motor_control(0, 0, 1, 0) # LEFT # delay(300) # 전방 10cm 이내에물체를감지하면자율주행하도록프로그래밍한다. if distance < 10: print "stop", distance, "cm" motor_control(0, 0, 0, 0) # STOP delay(1000) motor_control(0, 1, 1, 0) # LEFT delay(230) motor_control(0, 0, 0, 0) # STOP delay(500) delay(100) 47
비글본블랙이부팅할때 bbcar.py 를휴대용보조배터리전원을비글본블랙에연결해 nano /lib/systemd/system/bbcar.service 아래내용을복사 (Ctrl+C) 후 putty 터미널에마우스오른쪽을클릭해서붙여넣는다. [Unit] Description=Python Service After=multi-user.target [Service] Type=idle ExecStart=/usr/bin/python /root/bbcar.py [Install] WantedBy=multi-user.target bbcar 서비스를자동실행하도록다음명령어를실행한다. systemctl start bbcar.service systemctl daemon-reload systemctl enable bbcar.service shutdown 명령어를이용하여비글본블랙을종료시킨다. shutdown h now 비글본블랙의외부파란색 LED 가모두꺼졌으면보조배터리를비글본블랙에연결하여전 원을입력한뒤자율주행차주행테스트를시작한다. 48
생각해보기 : 자율주행차주행테스트하기 제작한자율주행차는설계한대로작동하나요? 만약자율주행차가정상적으로작동하지않는다면이유를찾아봅시다. Ÿ 배터리를연결하고전원을켰나요? Ÿ 점퍼케이블을비글본블랙 GPIO에잘연결했나요? Ÿ 프로그래밍에오류는없나요? Ÿ 초음파거리센서가작동하고있나요? 49
정리하기 : 평가및발표 프로젝트진행후성공이나실패에대한자신의생각과의견을나누고발표해봅시다. 1. 어떤싱글보드컴퓨터를사용했나요? 추가로사용해보고싶은개발보드가있나 요? 2. 하드웨어를조립할때어려운점이나개선할점이있나요? 3. 비글본블랙과모터드라이버에인가한전압은몇 V( 볼트 ) 였나요? 50
4. 자율주행알고리즘의수정 보완할사항을적어봅시다. 5. 자율주행차를제작하면서느낀점을적어봅시다. 51
컴퓨터공학과와관련된다양한직업에대해알아봅시다. 생각해보기 : 컴퓨터공학과진학과진로 1. 수업시간에소개되었던컴퓨터공학관련직업들을적어봅시다. 2. 소개된직업중가장관심이가는직업은무엇인가요? 3. 원하는직업을가지기위해서어떻게준비를해야할까요? 52
4. 원하는직업을가지기위해서어떻게준비를해야할까요? 생각다지기 : 나에게어울리는직업은무엇일까? 1. 오늘한체험을통해나에게가장어울리는직업이무엇인지생각해봅시다. 2. 나에게어울리는직업에가까이가기위한방법에대해서생각해봅시다. 3. 앞으로실현가능한목표를정해봅시다. 53
54 [ 메모 ]
[ 메모 ] 55