co:bit Training Kit 기초강좌 10: 서보모터를 배워보자.

서보모터란 무엇일까?

서보모터는 아래와 같이 생긴 장치로, 일반적인 모터와 달리 움직임을 지정하면, 이에 맞게 정확하게 움직일 수 있는 모터를 말합니다. 로봇을 제작할 때 관절 부분에 대부분 서보모터를 사용합니다. 이를 통해 로봇의 팔다리를 정확히 조종할 수 있습니다.

서보모터에 대한 이미지 검색결과

서보모터는 3개의 핀을 가지고 있습니다. 각각의 핀에 대한 설명은 아래 그림과 같습니다. VCC 핀은 배터리의 +가 연결되는 핀입니다. GND 핀은 배터리의 -가 연결되는 핀입니다. PWM 핀은 출력량을 조절해줍니다.

co:bit Training Kit에 포함된 서보모터는 0°~180° 범위의 값을 출력해 줍니다. 지정한 각도에 맞추어 서보모터가 회전합니다.

준비물

이번 강좌의 준비물은 다음과 같습니다.

  • co:bit Training Kit 베이스 보드 (micro:bit 장착한 상태)
  • 마이크로 USB 케이블 2개
  • 웹브라우저 연결 가능한 PC (맥북, 리눅스 포함) 혹은 크롬북
  • 서보모터 (co:bit Training Kit에 포함되어 있습니다.)

하드웨어를 준비해 봅시다.

우선 co:bit 베이스보드에 micro:bit를 장착합니다. 장착을 할 때는 micro:bit의 LED와 버튼 부분이 위로 가게 합니다.

 

PC와 micro:bit, co:bit 베이스보드를 각각 USB 케이블로 연결합니다. 아래 사진과 같이 연결하면 됩니다. 그리고 PC에서 웹브라우저를 실행합니다. 웹브라우저는 마이크로소프트의 에지 혹은 익스플로러, 구글의 크롬 등 어떤 브라우저라도 상관이 없습니다.

 

이번에는 서보모터를 co:bit 베이스보드에 연결합니다. 연결할 때 아래 사진의 설명을 그대로 따라야 합니다. 우선 서보모터를 준비합니다.

 

co:bit 베이스보드를 자세히 보면 왼쪽 상단에 영어로 “Servo Motor”라고 적힌 핀단자를 볼 수 있습니다. 이 단자에 서보모터를 연결합니다.

 

연결할 때, 아래 사진처럼 서보모터의 PWM 핀에 연결된 주황색 전선이 co:bit 베이스보드의 흰색 사각형이 위치한 부분에 연결되도록 합니다. (서보모터의 경우에는 다른 장치들과 다르게 항상 주황색 전선이 흰색 사각형이 위치한 부분에 연결되어야 합니다.)

 


코딩과제 1: 서보모터를 돌려보자 

과제 개요

이번 프로젝트에서는 co:bit 베이스보드에 연결된 서보모터를 버튼을 통해 회전시키는 코드를 만들어 봅시다. 코드의 동작은 다음과 같습니다.

  1. 코드가 실행되면 “Servo…” 문자열이 스크롤됩니다.
  2. LED 스크린에 문자 “S”가 디스플레이되며 서보모터가 90° 회전합니다.
  3. A 버튼을 누르면 서보모터가 5° 회전하며 문자 “R”이 디스플레이 됩니다.
  4. B 버튼을 누르면 서보모터가 180° 회전하며 문자 “L”이 디스플레이 됩니다.
  5. A 버튼과 B 버튼을 동시에 누르면 서보모터가 90° 회전하며 문자 “S”가 디스플레이 됩니다.

정확히 코딩이 되었다면 다음과 같이 동작할 것입니다.

 

블럭코딩의 흐름도

프로젝트를 시작하기 전, 먼저 블럭코딩의 흐름도를 봅시다.

 

블럭코딩 하기

이번 프로젝트는 코딩을 하기 위해서 특별한 프로젝트를 사용해야 합니다. 서보모터를 읽는 확장블럭이 사용되었기 때문입니다. 다음에 링크된 블럭 에디터의 프로젝트를 사용하시기 바랍니다.

https://makecode.microbit.org/_0T3bJDhsEhrC

위 링크로 가면 블럭 에디터에 빈 프로젝트가 화면에 나타날 것입니다. 하지만 다른 비어있는 프로젝트와는 달리 “Cobit-base”라는 확장블럭이 있습니다. 이 “Cobit-base” 확장블럭은 다음과 같습니다.

 

프로젝트에 사용될 블럭 코드들을 살펴봅시다. 완성된 전체 코드는 맨 아래에 있습니다.

“시작하면 실행” 블럭은 다음과 같습니다. 코드가 실행되면 “Servo…” 문자열을 출력한 뒤, 문자 “S”를 출력하며 서보모터를 90° 회전시킵니다.

 

A 버튼을 눌렀을 때 서보모터를 5° 회전시키며 문자 “R”이 출력되도록 합니다.

 

B 버튼을 눌렀을 때 서보모터가 180° 회전하며 문자 “L”이 출력되도록 합니다.

 

A 버튼과 B 버튼을 동시에 눌렀을 때 서보모터가 90° 회전하며 문자 “S”가 출력되도록 합니다.

 

전체 프로젝트


코딩과제 2: 수평 유지 장치 만들기

과제 개요

이번 프로젝트에서는 서보모터와 내장 가속도 센서를 이용하여 수평 유지 장치를 만들어 봅시다.

  1. 코드가 실행되면 “Stabilizer…” 문자열이 출력됩니다.
  2. A 버튼을 누른 후 micro:bit를 기울이면 (micro:bit 경사도)/5° 만큼 회전합니다.
  3. B 버튼을 누르면 서보모터가 90° 회전한 후 동작이 정지됩니다.
  4. 다시 A 버튼을 누르면 micro:bit의 경사도에 따른 서보모터의 회전이 재개됩니다

정확히 코딩이 되었다면 다음과 같이 동작할 것입니다.

 

블럭코딩의 흐름도

 

블럭코딩 하기

이번 프로젝트 역시 코딩을 하기 위해서 특별한 프로젝트를 사용해야 합니다. 아래 링크의 블럭 에디터 프로젝트를 사용해 주기 바랍니다.

https://makecode.microbit.org/_0T3bJDhsEhrC

 

프로젝트에 사용될 블럭 코드들을 살펴봅시다. 완성된 전체 코드는 맨 아래에 있습니다.

“시작하면 실행” 블럭은 다음과 같습니다. 코드가 실행되면 “Stabilizer…” 문자열을 출력한 뒤, 서보모터를 0° 회전시킵니다.

 

“동작” 변수를 설정하고, A 버튼을 눌렀을 때, 동작 변수에 1을 저장합니다.

 

B 버튼을 눌렀을 때, 동작 변수에 0을 저장하고, 서보모터를 90° 회전시킵니다.

 

“무한 반복 실행” 블럭 전체는 다음과 같습니다.

 

“무한 반복 실행” 블럭 안에 들어갈 코드들을 살펴봅시다. 우선 “경사” 변수를 설정하고, 동작이 1이면, 즉 A 버튼을 눌렀다면 경사 변수에 가속도센서 y축 값을 저장합니다.

 

서보모터를 (경사 변수에 저장된 값)/5° 만큼 회전시킵니다. co:bit Training Kit에 포함된 서보모터는 0°~180° 범위 만을 표현할 수 있기 때문에 가속도센서의 y축 값을 그대로 사용할 경우 micro:bit의 경사도를 정확히 표현할 수 없습니다. 따라서 가속도센서의 y축 값을 5로 나누어 사용합니다.

 

if 문 블럭 전체는 다음과 같습니다. 이렇게 하면 B 버튼을 눌렀을 때, 즉 동작 변수에 0이 저장되었을 때에는 if 문을 실행하지 않으므로 micro:bit를 기울여도 서보모터가 동작하지 않습니다.

 

전체 프로젝트


코딩과제 3: 조이스틱-서보로 비행기 러더를 조종해 보자.

과제 개요

이번 프로젝트에서는 서보모터와 조이스틱을 이용해 비행기 러더를 조종해 봅시다. 비행기 러더란 비행기의 방향키를 의미합니다. 비행기 러더가 조이스틱의 움직임에 맞추어 정확한 각도로 움직여야 원하는 방향으로 비행기를 조종할 수 있기 때문에 서보모터를 이용합니다. 비행기를 조종할 때 조이스틱을 이용해 러더를 움직이듯, 조이스틱을 이용해 서보모터를 움직이는 실습을 진행해 봅시다.

조이스틱에 대한 자세한 설명은 생략하고 진행하겠습니다. 따라서 이번 프로젝트를 시작하기 전에 “Training 9: 조이스틱” 을 꼭 마스터하고 오시길 추천합니다.

  1. 코드가 실행되면 “Servo-joy” 라는 문자열이 출력됩니다.
  2. 조이스틱을 움직이면 조이스틱의 X축 값에 따라 서보모터가 회전합니다.
  3. 조이스틱을 움직이면 조이스틱의 X축 값이 micro:bit의 LED 스크린에 그래프로 나타납니다.

정확히 코딩이 되었다면 다음과 같이 동작할 것입니다.

 

하드웨어 준비

동영상에서는 생략했지만, 종이 공작을 통해 모형 러더와 모형 조종간을 만들어 각각 서보모터와 조이스틱에 부착하면 더욱 실감나는 실습을 진행할 수 있습니다.

이번 프로젝트에서는 co:bit 베이스보드에 서보모터 뿐 아니라 조이스틱을 연결해야 합니다. 연결 방식은 앞서 서보모터 연결을 통해 설명한 방식과 동일합니다. 아래 사진과 같이 연결해 주면 됩니다.

 

조이스틱을 연결할 때, 조이스틱의 GND 핀에 연결된 전선이 베이스보드의 흰색 사각형이 위치한 부분에 연결되어야 합니다. 자세한 연결 방법은 조이스틱 강좌에 자세히 설명되어 있습니다.

 

블럭코딩의 흐름도

 

블럭코딩 하기

이번 프로젝트 역시 코딩을 하기 위해서 특별한 프로젝트를 사용해야 합니다. 아래 링크의 블럭 에디터 프로젝트를 사용해 주기 바랍니다.

https://makecode.microbit.org/_0T3bJDhsEhrC

 

프로젝트에 사용될 블럭 코드들을 살펴봅시다. 완성된 전체 코드는 맨 아래에 있습니다.

“시작하면 실행” 블럭 전체는 아래와 같습니다. 시작과 동시에 “Servo-joy” 문자열을 디스플레이합니다.

 

“무한 반복 실행” 블럭 전체는 아래와 같습니다.

 

“무한 반복 실행” 블럭 안에 들어갈 코드들을 살펴봅시다. 우선 “X축”이라는 변수를 설정하고, 조이스틱의 X축 값을 “X축” 변수에 저장합니다.

 

조이스틱의 X축 값을 micro:bit의 LED 스크린에 그래프로 나타냅니다.

 

서보모터를 (X축 변수에 저장된 값)/5° 만큼 회전시킵니다. co:bit Training Kit 에 포함된 서보모터는 0°~180° 사이의 회전각을 갖습니다. 조이스틱의 X축 값은 0~1024 까지이므로, 조이스틱의 X축 값 만큼 회전시킬 경우 조이스틱의 감도가 지나치게 높아집니다. 따라서 조이스틱의 X축 값을 5로 나누어 사용합니다.

 

전체 프로젝트


코딩과제 4: 초음파센서 레이더 만들기 

과제 개요

이번 프로젝트에서는 서보모터와 초음파센서를 이용해 레이더를 만들어 봅시다. 초음파센서를 장착한 서보모터를 회전시켜 레이더를 만들 수 있습니다.

  1. 코드가 실행되면 “Radar…” 문자열과 X 모양 아이콘이 출력되며 각도, 방향 변수가 0으로 초기화 됩니다.
  2. 서보모터가 0°~180° 사이 구간을 10° 씩 움직이며 무한 왕복 운동 합니다.
  3. 무한 왕복 운동 중 레이더로부터 30cm 이내에 있는 물체가 없다면 X 모양 아이콘이 출력됩니다.
  4. 무한 왕복 운동 중 초음파센서에 의해 레이더로부터 30cm 이내에 있는 물체가 감지되면 ♥ 모양 아이콘이 출력됩니다.

정확히 코딩이 되었다면 다음과 같이 동작할 것입니다.

 

하드웨어 준비

서보모터의 날개 부분에 초음파센서를 부착해주면 더욱 실감나는 실습을 진행할 수 있습니다.

이번 프로젝트에서는 co:bit 베이스보드에 서보모터 뿐 아니라 초음파센서를 연결해야 합니다. 연결 방식은 앞서 서보모터 연결을 통해 설명한 방식과 동일합니다. 아래 사진과 같이 연결해 주면 됩니다.

 

초음파센서를 연결할 때, 초음파 센서의 GND 핀에 연결된 전선이 co:bit 베이스보드의 흰색 사각형이 위치한 부분에 연결되도록 합니다. 자세한 연결 방법은 초음파센서 강좌에 자세히 설명되어 있습니다.

 

블럭코딩의 흐름도

 

블럭코딩 하기

이번 프로젝트 역시 코딩을 하기 위해서 특별한 프로젝트를 사용해야 합니다. 아래 링크의 블럭 에디터 프로젝트를 사용해 주기 바랍니다.

https://makecode.microbit.org/_0T3bJDhsEhrC

 

프로젝트에 사용될 블럭 코드들을 살펴봅시다. 완성된 전체 코드는 맨 아래에 있습니다.

“시작하면 실행” 블럭의 코드는 다음과 같습니다. 코드가 실행되면 “Radar…” 문자열과 X 모양 아이콘이 출력되며, 각도 변수와 방향 변수를 설정하고 초기화합니다.

 

“무한 반복 실행” 블럭의 전체 코드는 다음과 같습니다.

 

레이더의 움직임을 구현해 줄 “무한 반복 실행” 블럭 내 코드들을 살펴봅시다. 무한 반복 실행 블럭 내 코드에 대한 설명을 위해 아래 그림이 필요합니다.

 

우선 방향이 1이면, 아래 그림의 1 방향을 향해 각도를 10씩 증가시킵니다.

 

각도가 10씩 증가하다가 180보다 커지면 각도를 다시 180을 저장하고 방향을 0으로 바꿔줍니다. co:bit Training Kit에 포함된 서보모터는 0°~180° 구간만 회전할 수 있으므로각도 값이 180을 초과해서는 안되기 때문입니다.

 

방향이 1이 아니면, 즉 0이면 위 그림의 0 방향을 향해 각도를 10씩 감소시킵니다.

 

각도가 10씩 감소하다가 0보다 작아지면 각도를 다시 0으로 저장하고 방향을 1로 바꿔줍니다. co:bit Training Kit에 포함된 서보모터는 0°~180° 구간만 회전할 수 있으므로 각도 값이 0보다 작아서는 안되기 때문입니다.

 

서보모터가 (각도 변수에 저장된 숫자)° 만큼 회전하도록 합니다.

 

이러한 과정을 거치면 서보모터가 0°~180° 구간 사이(0 방향과 1 방향 사이) 를 10° 씩 움직이면서 무한 왕복 운동 합니다.

 

초음파센서를 통한 주변 물체 인식을 구현해 봅시다. “초음파센서 읽기” 값이 30보다 작으면 ♥ 모양 아이콘을 출력하고, 30보다 크면  X 모양 아이콘을 출력합니다.

이렇게 하면 물체와 레이더 사이의 거리가 30cm 이내일 경우 ♥ 모양 아이콘이, 30cm 이상일 경우 X 모양 아이콘이 출력될 것입니다.

 

전체 프로젝트