Optimus Dragoon 2013 스마트 컨트롤러 중간 프로젝트 김성엽 진종영 조유진 개요 • 4족 보행 로봇, RC카 구현 • Blizzard 사의 스타크래프트에서 모티브를 따옴 • 블루투스 모듈을 이용한.

Download Report

Transcript Optimus Dragoon 2013 스마트 컨트롤러 중간 프로젝트 김성엽 진종영 조유진 개요 • 4족 보행 로봇, RC카 구현 • Blizzard 사의 스타크래프트에서 모티브를 따옴 • 블루투스 모듈을 이용한.

Slide 1

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 2

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 3

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 4

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 5

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 6

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 7

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 8

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 9

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 10

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 11

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 12

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 13

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 14

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 15

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 16

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 17

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 18

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 19

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 20

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 21

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 22

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 23

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 24

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 25

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 26

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 27

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 28

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 29

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 30

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상


Slide 31

Optimus Dragoon
2013 스마트 컨트롤러
중간 프로젝트

김성엽 진종영 조유진

개요
• 4족 보행 로봇, RC카 구현
• Blizzard 사의 스타크래프트에서 모티브를 따옴

• 블루투스 모듈을 이용한 기기와의 통신
• Servo 모터를 활용한 움직임 제어
– 관절 제어, 바퀴 제어

제어
AVR을 이용한 서보 모터 제어

기본 구성
3단 기어

속도 제어

변경되면 상태를 알림

부저 및
LED
알림!

4족 모드
자동차 모드

상태 알림

서보 모터 Dynamixel AX-12
• 주요 특징
– 감속기, Driver, Control Unit 및 Network기능까지 일체형으로 구
성 되어 있는 Module형 Smart Actuator임
– 패킷을 통해 제어
– 현재 상태 값을 받는 것도 가능
– 바퀴 모드와 관절모드의 두 방법으로 작동
– Half duplex Asynchronous Serial Communication (8bit, 1stop,
No Parity)
– TTL Level Multi Drop

관절 & 바퀴 모드
관절 모드
• 0 ˚ ~ 300 ˚(0x3FF) 까지
움직임
– 각도를 설정하여 사용 가능

바퀴 모드
• 무한 회전
• 0또는 1024
– 멈춤

• 1 ~ 1023
– 정방향 회전

• 1025 ~ 2046
– 역방향 회전

• 숫자가 클 수록 속도 증가

Dynamixel AX-12 제어 패킷
모터가 동작하기 위해서는 제어 패킷을 보드와 모듈 사이에 UART로 전송해야 한다.
패킷의 구조는 아래와 같음
( 명령어나 Parameter에 대한 상세 정보는 제작사에서 제공하는 pdf문서를 참조)

0xFF

0xFF

ID

Length Instruction

Parameter
1



Parameter
N

Checksum

시작을 알림
명령어를 전송할 ID
(ServoMotor 전체에 보내
는 Broadcast는 0xFE)

지시 명령

패킷의 길이
(Parameter 개수 + 2)

Instruction의
추가 정보

~( ID + Length + Instruction +
Parameter1 + … Parameter N )

패킷 전송
• USART 0 설정
– Dynamixel은 8 bit, 1 Stop bit, None Parity의 Asynchronous
Serial 통신

• USART 0의 Tx핀을 서보 모터의 Data 핀에 연결
• 패킷을 전송하여 각도 등 움직임을 셋팅 및 실행

각도 계산
• 최소값 0 ˚
• 최대값 300 ˚(0x3FF, 1023)
• 300 ˚ 가 1023에 대응하므로 원하는 각도대로 움
직이려면 알맞은 값을 구해내야 함
unsigned int Angle_to_Value(unsigned int uiAngle)
{
uiAngle = ((long)1023*(long)uiAngle)/300;
}

return uiAngle;

4족 보행 알고리즘
• 사람이 걷는 원리를 이용하여 이동

자동차 모드 알고리즘
• 본체의 다리 끝의 바퀴를 이용하여 이동
• 모터의 각도를 제어하여 방향제어 가능

회로
전원/제어 회로 구성

회로 구성
• 전원 부
– 전원을 공급하는 회로

• 제어 부
– 제어를 위한 회로
– 포트와 릴레이가 연결되어 있음

전원 회로
• 모터의 동작 전압 9~12V와 보드 동작 전압 5V
– 서로 전압이 다르므로 각각에 맞게 맞춰주어야 함
– 배터리는 9.6V를 사용 중이므로 보드용 전원을 5V로 낮춰줌
– 블루투스 모듈은 3.3V를 사용

• 레귤레이터
– 높은 전압을 낮은 전압이 되도록 낮춰주는 역할

전원 부 회로 사진
3.3V 레귤레이터
블루투스
모듈 및
상태 LED

전원 스위치
5V 레귤레이터

서보 모터
구동 전원
(12V 출력)

12V 입력

콘덴서

RxTx, 5V, GND

제어 회로
• AVR

– ATmega2560을 장착
– 전원 부에서 5V를 공급받아 작동

• LED + 릴레이

– 릴레이를 이용하여 다수의 LED를 한번에 제어
– 릴레이 포트를 이용하여 LED 뿐만 아니라 다른 것도 제어 가능

• USART

– 서보 모터 제어를 위한 USART0 Tx
– 블루투스 데이터 송신(AT Command)을 위한 USART1 Tx
– 블루투스 데이터 수신(제어 프로그램에서 송신)되는 값을 받는
USART1 Rx

• ADC

– 조도 센서와 연결됨
– 다른 센서나 부품을 연결해 이용 가능

제어 부 회로 사진
모터 제어용
Tx

PORTC와 연
결된 릴레이

ADC
센서

5V 전원공급

기어 상태
표시 장치

LED 장식(눈)

통신
블루투스 안드로이드 앱
블루투스 모듈 제어

개발 개요
• 기본 목표는 Bluetooth 장치에 값을 송수신하여
조종할 수 있도록 함
• 거의 누구나 편하게 사용할 수 있고, 재사용이
가능하도록 함

통신!

Android 어플리케이션
• 사용 기능
– Android API를 통한 Bluetooth SPP 통신

• 사용된 파일
– Source(Java 파일) 9개, Layout(XML 파일) 6개

• 목표
– 버튼을 클릭하거나 터치할 때 값을 전송
– 조도 센서 등의 값을 수신해 화면에 출력
– 기기 정보를 알아냄

화면(1)

화면(2)

게임기 조이스틱에서 모티브를 따옴

통신 절차
• 기본적으로 안드로이드에서 API를 통해 통신 방
법을 제공함
– (Bluetooth로 시작하는 클래스들)

• 통신 방법은 기존의 TCP/IP와 매우 유사함
– 연결 시 connect(), 종료 시 close()
– write()함수와 read()함수를 이용함

• 장치 검색→연결→데이터 송수신→연결 종료
• 장치와 연결을 좀 더 효율적으로 사용
– Singleton 패턴을 이용하여 단일 객체 매니저 클래스를 생성함

Android App
주요 클래스
블루투스 관리
BluetoothManager
블루투스 장치를 관리
하며, 수신된 값이 들
어 있음

BluetoothHandler
블루투스 수신 데이터
를 UI에 반영

BluetoothThread
블루투스 데이터를 다
른 작업에 지장을 주지
않고 수신

액티비티(화면)
MainActivity
제일 처음 어플리케이
션을 실행했을 때

SearchActivity
장치 검색

RemoteActivity
블루투스 장치에 데이
터를 송수신

모듈 정보







모듈이름
제작회사
구동전압
통신방법
통신거리
프로파일

:
:
:
:
:
:

FB155BC
Firmtech
3.3V
Bluetooth Specification V1.2
Up to 30 M
SPP(Serial Port Profile)

모듈 세팅 정보
1. VCC(3.3v), GND를 연결
2. Rx는 개발 보드의 Tx에, Tx는 개발 보드의 Rx에 연결
3. 상태 핀은 기기의 현재 상태(대기 중, 검색 대기 중,
통신 중 등)를 나타내므로 LED를 연결하여 쉽게 알
수 있도록 함
4. UART통신 환경을 설정(9600/8/None/1)
5. 수신 인터럽트를 설정하여 수신 값을 그때 그때 처리
할 수 있도록 함
6. 기기의 이름, PIN Number 등 기본 정보들을 설정한
다. 일반적으로 Slave모드로 설정되어 있음
7. AT+BTSCAN\r을 전송해 검색이 가능하게 설정

데이터 송수신
• USART 0는 모터 제어에 사용되어 1을 이용
• 조도 센서의 값을 ADC로 변환하여 해당 값을
USART1 TX로 전송
– 더 나아가 영상 송신 등 유용한 데이터들을 전송할 수 있을 것

• 수신 인터럽트로 들어온 값들은 switch문 처리

Atmega2560 프로그램
시작
UART1 설정 및 모듈 설


while(1)

조도 센서 값
ADC














수신 인터럽트
시작

수신된 값을
읽어 들임

수신된 값
전/후/좌/우/1/2/3/4/5…

값에 따른 움직임
처리

변환된 값 전송
수신 인터럽트


최종 시연
장치 및 블루투스 통신 테스트

시연 동영상