라인 따라 주행하기 엠봇2 5차시 Kp
본수업자료는엠봇2의예제프로그램을활용하였습니다.
지난 '엠보싱2 자기소개' 시간에 한번 사용해본 라인이탈치를 가져오는 블록을 활용합니다.먼저, "디바이스"에 사이버파이(CyberPi)를 추가합니다.
확장으로 mBot2shield, Ultras onic Sensor2, Quad RGB Sensor(beta)를 추가합니다.색인식을 하기 때문에 quadRGB센서를 활용하여 센서 아래에 있는 색을 인식하는 코드를 만들어 보겠습니다. 이벤트 메뉴에서 when joystick [pulled] 블록을 얻고 middle pressed를 선택합니다.
이전에 실행중인 명령 스크립트를 중단할 블록을 넣습니다.'제어' 메뉴에서 'stop % 1 [모두]' 블록을 가져와 [모든] 을 [스프라이트에 있는 다른 스크립트] 로 변경합니다.'제어' 메뉴에서 '계속 반복하기' 블록을 표시합니다.주기적으로 색상을 한 줄씩 아래에 나타내듯이 "print (mblock) and move to newline" 블록을 가져옵니다.[Quad RGB Sensor] 메뉴에서 [quadegb sensor(1) probe(1) R2) detected(색상)] 블록을 가져와(makcblock) 안에 넣습니다.'제어' 메뉴에서 '(1) 초 기다리기' 블록을 가져와 0.1초로 변경합니다.USB 케이블로 연결 후 만든 코드를 사이버파이에 업로드 합니다사이버파이 조이스틱 가운데 버튼을 눌러 잘 작동하는지 테스트해 보도록 하겠습니다.모터 정지선을 따라 이동하는 Empot2를 정지시킬 수 있는 명령을 간단히 추가해 보세요.스톱 기능은 사이버 파이의 A버튼을 사용합니다.빈칸화면에 "when button [A] pressed" 블럭을 가져옵니다.
이전에 실행중인 명령 스크립트를 중단할 블록을 넣습니다.'제어' 메뉴에서 'stop % 1 [모두]' 블록을 가져와 [모든] 을 [스프라이트에 있는 다른 스크립트] 로 변경합니다.'mBor2 Chassis' 메뉴에서 ' Inconder motor EM1 rotates at (50)% power, enconder motor EM2 rotates at (50)% power' 블록을 가져와 power를 0으로 설정합니다.Kp 라인을 따라 달리는 Kp 라인 주행에는 사이버 파이의 B 버튼을 사용합니다.여기서 Kp란 '라인에 따른 감도(정도)의 값' 정도로 이해하면 좋을 것입니다.빈칸 화면에 'when button [A] pressed' 블록을 가져오고 [A] 를 [B] 로 변경합니다.
이전에 실행중인 명령 스크립트를 중단할 블록을 넣습니다.'제어' 메뉴에서 'stop % 1 [모두]' 블록을 가져와 [모든] 을 [스프라이트에 있는 다른 스크립트] 로 변경합니다.변수' 메뉴에서 '변수 만들기' 버튼을 눌러 'base_power' 변수를 만듭니다.base_power 블록을 가져오고 값을 30으로 설정합니다.'변수' 메뉴에서 '변수 만들기' 버튼을 눌러 'kp' 변수를 만듭니다. [base_power] 블록을 다시 가져오고 [kp] 로 변경합니다.제어 메뉴에서 반복 계속하기 블록을 보여줍니다.변수' 메뉴에서 '변수만들기' 버튼을 눌러서 'left_power' 변수와 'right_power' 변수를 만듭니다.[base_power]를 (0)로 설정하는 '블록을 2개 가져와서 '반복하는' 블럭 안에 넣습니다.각각 [left_power], [right_power]로 바꿉니다.'연산' 메뉴에서 '뺄셈' 블록을 가져옵니다. 그리고 "곱하기" 블록을 가지고 와서 아래와 같이 결합합니다.첫 번째 칸에는 (base_pow er) 변수 블록을, 두 번째 칸에는 'kp' 블록을, 세 번째 칸에는 'quadrgbsensor (1) deviation(-100~100)' 블록을 넣습니다.그리고 복사해서 하나 더 만들어요.이 두 블럭을 [left_p ower] 와 [right_power] 블럭에 넣습니다.이와 같이 [left_power] 와 [ri ght_power] 블록에 설정된 모터의 파워값을 실제 2모터에 적용해야 합니다.'mBor2 Chassis' 메뉴에서 'enconder motor EM1 rotates at (50)% power, enconder motor EM2 rotates at (50)% power', 블럭을 가져와 power가 50으로 설정된 칸에 (50)% power) 넣습니다.모든 코딩이 끝났습니다 틀린 곳은 없는지 확인해 보겠습니다.앗, 실수가 있었습니다. 모터가 서로 반대여서 반대로 설정해야 하는데 똑같은 코드를 만들어 버렸어요. ( ´ ; ω ; ` )[right_power] 블럭의 아랫부분을 삭제합니다
연산에서 "덧셈" 블럭을 가져옵니다.'덧셈' 블록 위에 곱셈 블록을 다음과 같이 놓습니다.다시 (base_power), (kp), "quadegbsensor~" 블록을 순서대로 놓습니다.kp값(라인을 인식하는 감도)과 라인이탈값을 곱한 값에 디폴트모터의 파워(base_power)를 더한 값을 left_power와 right_power에 넣어서 이 변수의 값을 모터에 전달하는 것입니다.quad RGB센서의 라인이탈값은 좌측을 이탈했을 때는 -가 되고 우측을 이탈했을 때는 +가 되어 kp값과 곱했을 때 적용되는 것도 이해해 주시기 바랍니다.
오늘 미션의 핵심입니다 모터의위치가반대로되어있으므로우측모터에는정반대음값을적용해야합니다.'뺄셈' 블록 하나 더 가져올게요 그리고 -1을 곱해서 소리값으로 변경합니다.
이렇게 변경된 코드 블록을 right_power 변수에 넣습니다.다음은 전체 코드입니다.문제가 없다면 Mbot2의 서버파이와 노트북을 USB 케이블로 연결하여 업로드하세요.동작을확인하시고코딩원리를옆친구와선생님에게설명하시기바랍니다.잠깐만요!A버튼은 정지입니다.