![201907081402511278682086.jpg](https://clevermate.kr/upload/board/20190731/20190731103457556238937.jpg)
- 자율주행차에 대해서 아는 것들에는 어떤 것들이 있나요?
- 자동차가 스스로 주변화 환경을 인식해서 움직입니다.
- AI의 적용 정도에 따라 다양한 등급으로 나누어 분류합니다.
- 주변환경을 인식할 수 있는 센서들이 필요합니다.
- 주차할 때 사용되는 거리감지 센서가 필요합니다.
- 어두울 떄 라이트가 자동으로 들어올 수 있도록 빛 감지센서가 필요합니다.
- 자율주행차를 만들기 위해 SAM Labs로 구현해야 하는 부분은 어디일까요?
- 바퀴를 작동시킬 DC모터가 필요합니다.
- 거리를 감지할 근접센서가 필요합니다.
- 센서의 값이 정밀해야 합니다.
- 측정된 센서값에 따라 다양하게 동작할 수 있도록 세밀한 코딩이 되어있는 자동차를 의미합니다.
- SAM Labs : DC모터 2개, 근접 센서 1개
- 준비물 : 플라스틱 음료수 병, 바퀴 2개, 아이스크림 막대 3개, 양면테이프, 칼
1. 준비물을 준비합니다.
![20191027_072505204_iOS.jpg](https://clevermate.kr/upload/board/20191130/201911301310182107592517.jpg)
2. 플라스틱 병에 아이스크림 막대 3개를 꽂아넣을 자리를 만들어주어 햡니다. 3.5cm 정도 펜으로 표시한 후 칼로 잘라줍니다.
![20191027_073041418_iOS.jpg](https://clevermate.kr/upload/board/20191130/201911301310191576387932.jpg)
3. 자른 부분에 아이스크림 막대를 3개 끼워넣어 줍니다.
![20191027_073228241_iOS.jpg](https://clevermate.kr/upload/board/20191130/20191130131019803880664.jpg)
4. 음료수병 뚜껑에 근접센서를 양면테이프로 붙여 줍니다.
![20191027_073353377_iOS.jpg](https://clevermate.kr/upload/board/20191130/20191130131019776322350.jpg)
5. 나무막대기 아래쪽에 DC모터를 양면테이프를 사용하여 부착시켜 줍니다.
![20191027_073625487_iOS.jpg](https://clevermate.kr/upload/board/20191130/20191130131019603429287.jpg)
6. DC모터에 바퀴를 부착해줍니다.
![20191027_073809087_iOS.jpg](https://clevermate.kr/upload/board/20191130/201911301310201264768266.jpg)
7. 본인의 취향에 맞게 눈을 달거나 이쁘게 꾸며주세요.
![3프로젝트코딩하기.jpg](https://clevermate.kr/upload/board/20190708/201907081433091669573126.jpg)
1. Google workbench에서 근접센서와(Proximity Sensor) DC모터 2개를 페어링해줍니다.
![자율주행-페어링.png](https://clevermate.kr/upload/board/20191130/201911301310472075451073.png)
2. [General]에서 {program start} 블록을 가지고 옵니다.
![자율주행-스타트.png](https://clevermate.kr/upload/board/20191130/20191130131037533344467.png)
3. 프로그램이 시작후 계속해서 동작을 반복하도록 [Loop]에서 {repeat forever / do} 블록을 가지고 옵니다.
![자율주행-반복설정.png](https://clevermate.kr/upload/board/20191130/201911301310361684862113.png)
4. 센서의 값을 입력받을 변수를 만들어 주어야 합니다. [Variables]에서 Create variable을 클릭하여 변수의 이름을 설정합니다.
![자율주행-변수설정.png](https://clevermate.kr/upload/board/20191130/201911301310361145373158.png)
5. 변수 proximity에 값을 저장하기 위하여 [Variables]에서 {set 'proximity' to }블록을 가지고 와 반복 문 {repeat forever do}에 연결시켜 줍니다.
![자율주행-변수값 설정.png](https://clevermate.kr/upload/board/20191130/201911301310361564483211.png)
6. 변수 proximity에 저장할 값을 센서 값으로 정해야 합니다. [Proximity Sensor] - [Values] - {get 'proximity' value}를 오른쪽에 놓여진 보라색 블록 {set 'proximity' to} 블록에 비어있는 변수 값 칸으로 위치시킵니다.
![자율주행-센서값 얻기.png](https://clevermate.kr/upload/board/20191130/20191130131036729165380.png)
7. 자율주행차의 움직임을 세가지 단계로 구분하여 작동하도록 코딩하기 위해서 [Logic]에서 {if do / else if do / else} 블록을 가지고 옵니다.
![자율주행-분기설정.png](https://clevermate.kr/upload/board/20191130/20191130131036370716139.png)
8. 모두 주어진 2가지의 조건을 모두 충족할 경우의 움직임을 코딩하기 위해서 [Logic]에서 { and } 블록을 끌고와 if 옆에 붙여줍니다.
![자율주행-첫번째 조건.png](https://clevermate.kr/upload/board/20191130/201911301310471060125956.png)
9. 센서값이 특정한 조건일 때 반응하도록 코딩하기 위하여 등호 / 부등호 블록이 필요합니다 [Logic]에서 { = } 블록을 { and } 블록의 양쪽에 각각 조립해주세요.
![자율주해-첫번째 조건2.png](https://clevermate.kr/upload/board/20191130/201911301310191798399121.png)
10. [Valuables]에서 {proximity(새로 만든 변수블록)}을 { = }블록의 왼쪽에 각각 연결시켜 주고,
오른쪽에는 [Math]에서 [ 0 ]블록을 { = } 블록의 오른쪽에 각각 연결시켜 줍니다.
![자율주행-조건에 숫자넣기.png](https://clevermate.kr/upload/board/20191130/201911301310471249487058.png)
![자율주행-조건1 모터액션.png](https://clevermate.kr/upload/board/20191130/20191130131036244003948.png)
11. [DC Motor] - [Actions]에서 조건에 따라 작동할 동작을 { do } 블록 옆에 붙여줍니다.
{set DC Motor motor speed to } 블록은 DC모터의 속도를 조절해줍니다. +는 시계방향, -는 반시계방향으로 회전하게 됩니다.
1) 자율주행차에 무엇인가가 가까이 위치할경우( 80< 근접센서의 값 < 95)에는 빠르게 앞으로 전진하도록 { do } 에 코딩을
2) 자율주행차에 너무 가까울경우(근접센서의 값 ≥ 95) 자동차가 뒤로 가도록 { else if / do } 에 코딩을
3) 자율주행차 앞에 무엇인가 감지가 안되는 경우(근접센서의 값 ≤ 80)인 경우에는 천천히 앞으로 전진하도록 { else }에 코딩을 해주세요.
![자율주행-코드완성.png](https://clevermate.kr/upload/board/20191130/201911301310471379047802.png)
(※ 모터가 서로 반대방향으로 연결되어 있다는 점 잊지 마세요. 같은 방향으로 회전시키면 자동차가 제자리에서 빙글빙글 돌게 됩니다)
(※ if else 블록을 사용하여 센서 값을 더욱 세분화할수록 더욱 정밀한 자율주행차를 만들 수 있습니다. 도전해보세요)