Studuino 블록프로그래밍환경입문가이드후편 DC 모터서보모터 본자료는 Studuino( 스터디노 ) 프로그래밍환경의블록프로그래밍환경사용 안내서입니다. Studuino 프로그래밍환경변화에따라첨삭 / 수정될수있습니다.
목차 5. DC 모터... 1 5.1. DC 모터제어... 1 5.1.1. Studuino 기판과 DC 모터의접속... 1 5.1.2. 입출력포트정보의설정... 2 5.1.3. 프로그래밍... 3 5.2. 자동차제어... 6 5.2.1. 프로그래밍... 6 5.3. 가속도센서를사용한자동차제어... 13 5.3.1. Studuino 기판과가속도센서의연결... 14 5.3.2. 입출력포트정보설정... 14 5.3.3. 가속도센서동작확인... 15 5.3.4. 프로그래밍... 16 6. 서보모터작동... 25 6.1. 서보모터의각도교정... 25 6.1.1. 서보모터의구동축각도조정... 25 6.1.2. Studuino 기판과서보모터의연결... 26 6.1.3. 입출력포트정보설정... 26 6.1.4. 프로그래밍... 28 6.2. 서보모터 3 개로로봇팔제작... 30 6.2.1. 로봇조립... 30 6.2.2. 입출력포트정보설정... 32 6.2.3. 프로그래밍... 32
5. DC 모터 5.1. DC 모터제어 DC 모터를제어하는기본적인프로그램을통해 DC 모터의동작방법과설정을배웁니다. 5.1.1. Studuino 기판과 DC 모터의접속아래의순서로조립합니다. (1)DC 모터에아래와같이타이어를부착합니다. 좌우대칭으로 2 개제작 (2)DC 모터를기판베이스의뒷면에부착합니다. (3) 블록으로뒷바퀴를만듭니다. (4)DC 모터및배터리박스를각각 Studuino 기판에연결합니다. M1: 오른쪽 DC 모터 M2: 왼쪽 DC 모터 POWER: 배터리박스 1
(5) 배터리박스를기판에고정합니다. 5.1.2. 입출력포트정보의설정블록프로그래밍환경에 Studuino 기판의포트정보를설정합니다. 블록프로그래밍환경메뉴바의 [ 편집 ] 에서 [ 입출력설정 ] 을선택하여입출력설정대화상자를엽니다. 입출력설정대화상자의 [DC 모터 ] 에어리어의 M1, M2 가체크되어있는지확인해주십시오. M1, M2 가체크되어있는지확인해주십시오. 2
5.1.3. 프로그래밍 M1 에부착된 DC 모터를제어하는프로그램을작성, 테스트모드로 DC 모터의설정과동작을확인합니다. 1 [ 동작 ] 팔레트에서블록과블록과 블록을각각드래그해붙입니다. 2 [ 제어 ] 팔레트에서 블록을 블록과 블록사이에붙입니다. 3 블록에붙입니다 3
이상으로 M1 에연결한 DC 모터가회전하는프로그램이완성되었습니다. DC 모터의회전속도를 100 으로설정 DC 모터의회전개시 1 초대기 DC 모터회전을정지 4 DC 모터의동작을확인합니다. Studuino 기판과 PC 가 USB 케이블로연결되어있는지확인하고메뉴바 [ 실행 ] 에서 [ 테스트모드시작 ] 을선택해주십시오. 5 테스트모드가진행되면을클릭해주십시오. 클릭 프로그램이테스트모드에서실행됩니다. M1 에연결한 DC 모터가회전, 1 초후에정지합니다. 6 블록수치를 50 으로설정한후을클릭하십시오. DC 모터의회전속도가늦어집니다. 4
7 블록수치를 100 으로되돌려을 [ 역회전 ] 으로설정, 을클릭하십시오. DC 모터가반대방향으로회전합니다. 8 블록수치를 [ 정회전 ] 으로설정하고블록을 [ 감속후정지 ] 로설정한후을클릭하십시오. DC 모터가감속후정지합니다. DC 모터의회전속도는 100 이최대입니다. 100 이상의수치를입력해도속도는올라가지않습니다. DC 모터의회전속도를일정속도이하로설정하면 DC 모터가회전하지않습니다. 설정수치는 DC 모터로보내는전류의양을나타내고있습니다. DC 모터를움직이게하려면 DC 모터가회전하기위해필요한최소한의전류를보내야합니다. 5
5.2. 자동차제어 DC 모터 2 개를사용해자동차가전진, 후퇴, 회전하는프로그램을작성합니다. 5.2.1. 프로그래밍우선자동차전진프로그램을작성합니다. 1 [ 제어 ] 팔레트에서블록을드래그해블록 을클릭, [ 새로만들기..] 를선택합니다. 여기서는표시된대화상자에함수명 "forward" 를설정하고 OK 를클릭합니다. 2 함수명입력 1 클릭해서 [ 새로만들기.. ] 를선택 함수명을입력할대화상자가표시됩니다. 3 클릭 2 [ 동작 ] 팔레트에서블록과블록과 블록을드래그해블록과각각붙입니다. 6
3 [ 제어 ] 팔레트에서 블록을 블록과 블록 사이에붙입니다. 4 블록과블록과블록의 M1 을 M2 로변경합니다. 5 블록을드래그해블록과붙입니다. 7
이상으로자동차를전진시키는프로그램이작성되었습니다. 제어시작 DC 모터 M1, M2 의속도를설정 DC 모터 M1, M2 가회전을시작 1 초대기 DC 모터 M1, M2 의회전을정지 6 자동차의동작을확인합니다. Studuino 기판과 PC 가 USB 케이블로연결되어있는지확인하고메뉴바 [ 실행 ] 에서 [ 테스트모드시작 ] 을선택하십시오. 7 테스트모드로진행되면을클릭하십시오. 클릭 프로그램이테스트모드에서실행됩니다. 자동차가전진, 1 초후에정지합니다. 8 을클릭하여테스트모드를종료해주십시오. 클릭 다음은자동차후퇴프로그램을작성합니다. 8
9 블록위에서오른쪽을클릭해블록을복사합니다. 1 오른쪽클릭 2 복사선택 복사가작성됩니다. 10 복사한블록의 을클릭하고 [ 새로만들기 ] 를선택합니다. 표시된대화상자에함수명 "backward" 를설정하고 OK 를클릭합니다. 1 을클릭해 [ 새로만들기 ] 를선택 함수명을입력하는대화상자박스가표시됩니다. 2 함수명입력 3 클릭 9
11 backward 함수의블록과블록을 [ 역회전 ] 으로변경합니다. 12 블록 을클릭하고 "backward" 를선택합니다. 이상으로자동차를후퇴시키는프로그램이완성되었습니다. 6, 7 순서에따라자동차가후퇴, 1 초후에정지하는지확인해주십시오. 10
다음은자동차를오른쪽으로회전시키는프로그램을작성합니다. 13 9, 10 순서에따라 rotationright 함수를작성해주십시오. forward 함수를복사해함수명을 rotationright 로설정합니다 14 rotationright 함수의첫번째 블록을 [ 역회전 ] 으로변경하고 블록 을클릭해 "rotationright" 을선택합니다. 이상으로차를오른쪽으로회전시키는프로그램이완성되었습니다. 6, 7 순서에따라자동차가오른쪽으로회전, 1 초후에정지하는지확인해주십시오. 11
다음은차를왼쪽으로회전시키는프로그램을작성합니다. 15 9, 10 순서에따라 rotationleft 함수를작성해주십시오. forward 함수명을복사해함수명을 rotationleft 로설정합니다 16 rotationleft 함수의 2 번째 블록을 [ 역회전 ] 으로변경하고 블록 을클릭, "rotationleft" 을선택합니다. 이상으로차를왼쪽으로회전시키는프로그램이완성되었습니다. 6, 7 순서에따라차가왼쪽으로회전, 1 초후에정지하는지확인해주십시오. 12
5.3. 가속도센서를사용한자동차제어 5.2 자동차제어에서작성한프로그램을사용하여, 가속도센서를이용한자동차제어프로그램을작성합니다. 가속도센서란, 가속도 ( 속도가일정시간당얼마나변화했는지 ) 를측정하는센서이며 X, Y, Z 각방향의가속도를읽어냅니다. Z X Y 또한가속도센서는아래그림과같이센서의방향을바꾸면, 각각의방향수치가변합니다. 가속도센서를고정한상태에서도가속도가 0 이되지않는방향이있는것은중력가속도 를검출하고있기때문입니다. 이러한성질을이용해지면으로부터어느정도기울어져있는지를알수있습니다. 중력가속도란항상중력의방향으로작용하는가속도입니다. 13
5.3.1. Studuino 기판과가속도센서의연결 Studuino 기판센서 /LED/ 부저용커넥터의 A4, A5 에가속도센서를부착합니다. A4-A5 가속도센서는 4 선의코드를사용하며 A4 와 A5 에접속합니다. 가속도센서 센서접속코드방향주의! 위쪽에회색코드가오도록합니다. 5.3.2. 입출력포트정보설정블록프로그래밍환경에 Studuino 기판의포트정보를설정합니다. 블록프로그래밍환경메뉴바 [ 편집 ] 에서 [ 입출력설정 ] 를선택하여입출력설정대화상자를엽니다. 입출력설정대화상자의 [ 센서 /LED/ 부저 ] 에어리어의 A4, A5 를체크하고가속도센서를선택해주십시오. A4, A5 를체크하고가속도센서를선택해주십시오. 14
5.3.3. 가속도센서동작확인가속도센서수치를체크합니다. Studuino 기판과 PC 를 USB 케이블로연결해블록프로그래밍환경메뉴바 [ 실행 ] 에서 [ 테스트모드시작 ] 을선택해주십시오. 테스트모드가시작되면센서 / 보드가표시되며 "[A4/A5] 가속도센서 " 가표시됩니다. 가속도센서수치는 0~100 으로표시합니다. X 방향 ( 앞페이지그림참조 ) 을수평으로둔경우가속도센서 (X) 수치는 50 이됩니다. X 방향이위쪽으로되도록기울이면가속도센서 (X) 수치는커지며수직으로되었을때는 75 가됩니다. 반대로 X 방향이아래쪽으로되게기울이면가속도센서 (X) 수치는작아지며수직으로되었을때는 25 가됩니다. 중력가속도이상의가속도를주었을때 ( 가속도센서를 X 방향으로움직였을때 ) 수치의변화는더욱커집니다. Y, Z 방향도같습니다. 기울기를바꾸거나움직이면수치가변합니다 확인되면메뉴바의 [ 실행 ] 에서 [ 테스트모드종료 ] 를선택하고테스트모드를종료해주십시오. 15
5.3.4. 프로그래밍 5.21 에서작성한자동차를전진, 후퇴, 회전하는프로그램을사용합니다. 1 블록설정을 [0.1] 로변경합니다. 16
2 블록과블록설정을 [ 감속후정지 ] 로변경합니다. 3 forward 함수의블록과블록을분리, 을블록팔레트에드래그해삭제합니다. 1 접속을분리 2 블록팔레트에되돌림 17
4 블록과블록을붙입니다. 5 다른함수도 3, 4 와같은순서로을삭제합니다. 18
6 [ 동작 ] 팔레트에서블록을 2 개드래그해블록에붙이고 2 번째블록의설정을 [M2] 로설정합니다. 7 [ 제어 ] 팔레트에서블록을붙입니다. 8 [ 연산 ] 팔레트에서블록을붙입니다. 19
9 [ 관찰 ] 팔레트에서 블록을 블록의왼쪽에붙이고오른쪽에 40 을설정합니다. 10 [ 제어 ] 팔레트의블록을블록의열린부분에넣고 forward 함수를선택합니다. 11 블록에서오른쪽클릭, 복사를선택합니다. 오른쪽클릭후복사선택 복제가작성됩니다. 20
12 복사한블록을원본블록에붙입니다. 13 블록 < 기호위에서오른쪽클릭 > 을선택합니다. 1 오른쪽클릭 2 > 을선택 14 블록의오른쪽을 60 으로설정하고 블록에서 backward 함수를선택합니다. 21
15 블록에서오른쪽클릭, 복사를선택합니다. 오른쪽클릭후복사선택 복사가작성됩니다. 16 복사한블록을원본블록에붙입니다. 17 복사한블록에 Y 를, 블록에 rotationleft 함수와 rotationright 함수를설정합니다. 22
18 블록을드래그해아래의블록을둘러싸게합니다. 이상으로, 가속도센서를사용해자동차를제어하는프로그램이완성되었습니다. DC 모터 M1, M2 의속도를 100 으로설정 가속도센서를앞으로기울인경우 forward 함수 ( 전진 ) 를실행 가속도센서를뒤로기울인경우 backward 함수 ( 후진 ) 를실행 가속도센서를왼쪽으로기울인경우 rotationleft 함수 ( 좌회전 ) 를실행 가속도센서를오른쪽으로기울인경우 rotationright 함수 ( 우회전 ) 를실행 23
17 가속도센서의기울기와자동차의움직임을확인합니다. Studuino 와 PC 가 USB 케이블로연결되어있는지확인하고배터리박스를 ON 으로한후메뉴의 [ 실행 ] 에서 [ 테스트모드시작 ] 을선택해주십시오. 18 테스트모드로진행되면을클릭해주십시오. 가속도센서의기울기에따라실행되는함수가달라집니다. 가속도센서의기울기에반응해자동차가움직입니다. 19 테스트모드에서동작이확인되면, 메뉴바 [ 실행 ] 에서 [ 프로그램작성 / 전송 ] 을선택해주십시오. 테스트모드에서는각각의프로그램처리에시간이걸리기때문에자동차가움직임이자연스럽지않습니다. 프로그램전송후에는자연스럽게움직입니다. 24
6. 서보모터작동 여기서는서보모터를사용하는기본적인프로그램의작성을통해서보모터의작동방법, 변수블록과연산블록의사용법을설명합니다. 6.1. 서보모터의각도교정서보모터는같은각도로설정해도개체차이에의해수치에차이가생깁니다. 서보모터각도교정으로이차이를보정할필요가있습니다. 6.1.1. 서보모터의구동축각도조정서보모터를부착하기전에서보모터의구동축이정상적으로준비되었는지아래의방법으로확인해주십시오. 구동축을기준위치에서좌우로움직이지않을때까지돌렸을때, 본체와의각도가좌우로크게다를경우에는구동축의블록부분이돌아가정상적인위치에서어긋나게된것입니다. 구동축 코드 정상 본체 기준위치 이상 이는구동축이큰힘을받았을때, 블록부분만미끄러져회전하여내부기어의손상을방지하는구조로되어있기때문입니다. 구동축블록부분을크게회전한방향과반대방향으로손으로돌리면, 찰칵소리가나며원래상태로돌아갑니다. 무리하게돌리지마십시오. 서보모터의성능저하및손상의원인이됩니다. 다소의각도차이는후에소프트웨어에서각도교정으로보정할수있습니다. 25
6.1.2. Studuino 기판과서보모터의연결 Studuino 기판의서보모터용커넥터 D9 에서보모터를연결합니다. 서보모터 D9 서보모터코드방향주의! 오른쪽에회색의코드가오도록합니다. 6.1.3. 입출력포트정보설정블록프로그래밍환경에 Studuino 기판포트정보를설정합니다. 블록프로그래밍환경의메뉴바 [ 편집 ] 에서 [ 입출력설정 ] 을선택해입출력설정대화상자를엽니다. 입출력설정대화상자의 [ 서보모터 ] 에어리어에서 D9 만체크해주십시오. D9 만체크해주십시오. 1 메뉴바 [ 편집 ] 을선택하여표시된창에서 [ 서보모터각도교정 ] 을선택합니다. 기판에 USB 케이블이연결되어있는지확인해주십시오. 클릭 클릭 26
서보모터교정을선택하면접속된서보모터가모두 90 도위치에서고정됨과동시에자동적으로테스트모드가되어다음과같은창이뜹니다. 기판에배터리박스를연결하여전원을 ON 한상태에서확인해주십시오. 90 도위치구동축과본체가평행 2 이때, 90 도의위치에서약간어긋나있을경우, 서보모터교정화면에수치를입력해서보모터의각도를조정할수있습니다. 90 도위치가되도록수치를입력해주십시오. 클릭 조정필요구동축과본체가어긋나있음 교정시설치된커넥터에다른서보모터를바꿔끼운경우에는다시서보모터의각도교정이필요합니다. 각도교정을마친서보모터에는서보모터용커넥터의번호와같은번호의스티커를붙여구별할수있도록해주십시오. 27
6.1.4. 프로그래밍 1 [ 동작 ] 팔레트에서 블록을 블록에 붙입니다. 2 블록 [90] 에 [0] 을입력합니다. 테스트모드에서동작을확인합니다. Studuino 와 PC 가 USB 케이블로연결되어있는지확인하고메뉴바 [ 실행 ] 에서 [ 테스트모드시작 ] 을선택해주십시오. 3 테스트모드로진행되면을클릭하십시오. 서보모터가 0 도로작동하는지확인합니다. 4 와마찬가지로블록 [0] 에 [180] 을입력하고을클릭해서보모터가 180 도로작동하는지확인합니다. 28
5 블록으로블록을둘러쌉니다. 6 블록안의블록의 [180] 에 [0] 을 입력하고을클릭해서보모터가 0 도로천천히움직이는지확인합니다. 블록은복수의서보모터를둘러쌀수있습니다. 이블록으로둘러싸인서보모터블록의서보모터는동시에지연시간을거쳐목적각도로이동합니다. 이블록을사용해서보모터를제어할경우서보모터의구동중다른처리를실행할수없습니다. 29
6.2. 서보모터 3 개로로봇팔제작서보모터를 3 개사용해물건을잡는로봇팔을만듭니다. 기판에붙어있는스위치를사용, 버튼을누를때마다각도가바뀌는팔을만듭니다. 변수블록, 연산블록, 버튼블록을이용해버튼을누를때마다상태가바뀌는프로그램을작성합니다. 6.2.1. 로봇조립이하의순서로로봇팔을조립합니다. 파트 1 D10 완성 파트 2 파트 1 과같은형태로조립 D11 완성 파트 3 D9 완성 30
팔조립 (1) 파트 1~3 을아래와같이조립합니다. 파트 3 파트 1 파트 2 (2) 기판토대에아래그림처럼배터리박스를장착, POWER 의커넥터에연결합니다. POWER (3) 팔을부착하고, 각각의서보모터를커넥터에연결합니다. D10 D11 D9 서보모터코드방향주의! 오른쪽에회색코드가오도록합니다. 31
6.2.2. 입출력포트정보설정블록프로그래밍환경에 Studuino 기판의포트정보를설정합니다. 블록프로그래밍환경메뉴바의 [ 편집 ] 에서 [ 입출력설정 ] 을선택하여입출력설정대화상자를엽니다. 입출력설정대화상자의 [ 서보모터 ] 에어리어에서 D9, D10, D11 이체크되어있는지확인해주십시오. D9, D10, D11 이체크되어있는지확인해주십시오. 6.2.3. 프로그래밍서보모터 1 개로동작을확인합니다. 1 [ 변수 ] 팔레트에서 [ 변수만들기 ] 를클릭하여표시되는변수명설정대화상자에서변수 "flag1" 을작성합니다. 1 클릭 2 변수명입력 변수명설정대화상자가표시됩니다. 3 클릭 32
2 [ 변수 ] 팔레트에서블록을블록에붙입니다. 3 푸시스위치 A0 이눌러질때마다 flag1 수치를바꾸어처리부분을작성합니다. [ 제어 ] 팔레트에서블록을드래그합니다. 4 [ 연산 ] 팔레트에서블록을붙입니다. 33
5 [ 관찰 ] 팔레트에서 블록을 블록의왼쪽에붙이고오른쪽에 0 을설정합니다. 6 [ 변수 ] 팔레트에서블록을블록의열려있는곳에넣습니다. 7 [ 연산 ] 팔레트에서블록을붙입니다. 34
8 [ 변수 ] 팔레트에서블록을블록의오른쪽에붙이고왼쪽에 1 을설정합니다. 이상으로푸시스위치 A0 이눌러질경우에 flag1 수치를바꾸는처리부분이완성되었습니다. 이블록에서는푸시스위치 A0 이눌러질때, flag1 수치가 0 이면 1, 1 이면 0 이됩니다. 9 flag1 수치에따라서보모터의각도를바꾸는처리를작성합니다. [ 제어 ] 팔레트에서블록을드래그합니다. 35
10 [ 연산 ] 팔레트에서블록을붙입니다. 11 [ 변수 ] 팔레트에서 블록을 블록의왼쪽에붙이고오른쪽에 1 을 설정합니다. 36
12 [ 동작 ] 팔레트에서블록을드래그해블록의열려있는곳에곳에붙입니다. 붙인위아래의블록의수치부분에각각 115, 90 을입력합니다. 이상으로 flag1 수치에따라서보모터의각도를바꾸는처리부분이완성되었습니다. 13 12 에서작성한블록과붙입니다. 37
14 [ 제어 ] 팔레트에서블록을드래그해서블록을둘러쌉니다. 여기까지의과정으로푸시스위치를누를때마다서보모터의각도를바꾸는처리가완성되었으나, 이그룹안에서사용되는처리는모두명령을받은후바로다음단계로넘어갑니다. 때문에한번버튼을누르고있는동안에몇번이고루프를돌면서그때마다 flag1 수치가바뀌어다른각도로설정되어버립니다. 이를피하기위해다음단계에서반복중적당한대기시간을준비합니다. 여기서는 0.2 초로하겠습니다. 15 [ 제어 ] 팔레트에서블록을드래그해그림의위치에붙입니다. 38
16 블록에 0.2 를설정합니다. 이에따라 0.2 초마다버튼상태를판정할수있게되었습니다. 39
17 블록을블록에붙입니다. 이상으로푸시스위치 A0 을누를때마다 D9 에연결된서보모터의각도를 115 도, 90 도로바꾸는프로그램이작성되었습니다. 18 메뉴바 [ 실행 ] 에서 [ 프로그램작성 / 전송 ] 을선택하고실제움직임을확인합니다. 19 나머지 2 개의서보모터도같은방식으로프로그램을작성합니다. 완성된프로그램을아래쪽에옮겨놓고클릭해복사를만듭니다. 블록을오른쪽 복제가작성됩니다. 오른쪽 클릭 후 복사 선택 40
20 복사한블록을분리해블록을커맨드팔레트에합니다. 21 [ 변수 ] 팔레트에서 [ 변수만들기 ] 를클릭하여표시되는변수명설정대화상자에서변수 [flag2] 를작성합니다. 1 클릭 변수명설정대화상자가표시됩니다. 2 변수명입력 3 클릭 22복사된블록 [flag1] 을 [flag2] 로바꿉니다. 1 클릭 2 선택 41
23블록을블록의오른쪽에드래그합니다. 원래있던블록이밀려나오므로오른쪽클릭으로삭제합니다. 아래의블록도마찬가지로드래그해서튀어나온블록을삭제합니다. 블록이밀려나옵니다. 24 블록에 A1 을선택합니다. 그리고 블록에 D10 을선택합니다. 42
25완성된 2 개의블록을더복사해복사원본에붙입니다. 1 오른쪽 클릭 후 복사 선택 복사원본블록에붙입니다. 2 오른쪽클릭후복사선택 복사원본블록에붙입니다. 26 3 번째서보모터의설정을합니다. 변수 flag3 을작성합니다. 1 클릭 2 변수명입력 변수명설정대화상자가표시됩니다. 3 클릭 43
27 2 번째때와같은순서로복사한블록의수치를바꾸어갑니다. 변수는 flag3 을, 서보모터는 D11 을선택합니다. 28서보모터의각도를 50 도, 150 도로변경합니다. 44
29각각의블록은흰선의위치에붙입니다. 45
30 선택합니다. 블록을 2 개드래그해그림의위치에붙입니다. 각각 flag2, flag3 을 이상으로버튼 A0, A1, A2 를누를때마다 D9, D10, D11 에연결된서보모터의각도를바꾸는로봇팔프로그램을만들었습니다. 메뉴바 [ 실행 ] 에서 [ 프로그램작성 / 전송 ] 을선택해주십시오. 전송이완료되고버튼 A0, A1, A2 를누르면로봇팔이동작합니다. 46