코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2016-03-02 14:04:01
안녕하세요! Klant {;] 입니다.
어느덧 2016년에 2월도 막바지에 접어들고 있습니다. 이번 겨울은 참 길었던 것 같아요.
여러분들도 몸 건강히 겨울을 잘 정리하셨으면 좋겠네요! ;)
이번에 만들어 본 프로젝트는 다 마신 음료수 PET 병으로 활용해 만든 작은 RC 보트입니다.
이름은 'PET Boat'라고 지어봤어요ㅎㅎ
보드는 오렌지보드 BLE를 사용하였고, 스마트폰으로 제어가 가능합니다.
PET Boat를 만들기 전 RC카와 비교해 '보트는 만들기 힘들지 않을까?'라는 걱정 아닌 걱정을 하고 시작했었는데 막상 만들어보니 RC카 보다 쉽게 만들 수 있다는 생각을 가지게 되었습니다.
회로도 및 소스 코드를 보시면 아시겠지만 굉장히 간단합니다! ;)
자 그럼 PET Boat에 대해 소개해볼까요?
이번 프로젝트는 오렌지보드 BLE를 사용해 만든 RC 보트입니다.
보통 RC 보트는 방수형 스크류 모터를 사용해 추진력을 얻지만, 제가 이번에 만든 RC 보트는 프로펠러를 통해 바람으로 추진력을 얻게 됩니다.
PET Boat는 크게 오렌지보드 BLE, 모터 쉴드, 3.3V 모터 2개, 서보 모터 1개로 구성되어 있습니다.
동작 원리는 아래와 같습니다.
- 오렌지보드 BLE
스마트폰에서 전송되는 데이터에 맞게 모터와 서보 모터를 제어합니다.
- 모터 쉴드
모터의 방향, 속도를 제어합니다.
- 3.3V 모터
스마트폰에서 FOWARD에 해당하는 데이터가 들어오면 2개의 모터가 동작합니다.
모터에서 발생되는 바람으로 모터가 움직이게 되는 것이죠 ;)
스마트폰에서 STOP에 해당하는 데이터가 들어오면 모터의 동작이 중지됩니다.
- 서보 모터
PET Boat의 방향을 제어하는 역할(방향키)을 합니다.
이 프로젝트는 모터 쉴드, 서보 모터, DC 모터를 사용합니다.
코코아팹 튜토리얼을 참고해 미리 사용법을 익혀두세요!
- DC 모터 사용하기(이번 프로젝트의 경우 모터 쉴드를 사용하기 때문에 트랜지스터와 다이오드 등 별도의 소자를 사용할 필요 없이 모터의 +, -를 모터 쉴드에 바로 연결하면 됩니다.)
NO | 부품명 | 수량 | 상세 설명 |
1 | 오렌지보드 BLE | 1 | |
2 | 아두이노 모터 쉴드 | 1 | 2 channel |
3 | 3.3V 소형 DC 모터(프로펠러) | 2 | X5C 모터 |
4 | 서보 모터 | 1 | sg 90 |
5 | 9V 건전지 | 1 | |
6 | 9V 건전지 커넥터 | 1 |
부품명 | 오렌지보드 BLE | 아두이노 모터 쉴드 | X5C 모터 |
파트 |
부품명 | 서보 모터 | 9V 건전지 | 9V 건전지 커넥터 |
파트 |
아래의 모터 쉴드 그림은 오렌지보드 BLE와 결합한 상태로 이해해주시면 됩니다.
오렌지보드 BLE의 경우 블루투스 통신을 할 때 4번, 5번핀을 사용하기 때문에
모터 쉴드의 OUT 5번은 사용할 수 없습니다.(서보 모터를 OUT 6번에 연결한 이유)
추가적으로 많은 분들이 문의 주신 내용 중 '아두이노 모터 쉴드의 OUT 핀에 서보 모터를 꽂아도 동작이 되지 않는다'는 분들이 많았습니다.
모터 쉴드의 경우 왼쪽부터 차례대로 GND, PWM, VCC의 순서지만, 보통 sg 90 같이 많이 사용되는 서보모터의 경우 핀의 순서가 GND, VCC, PWM의 순서입니다.
즉 서보 모터를 바로 꽂으시면 핀의 순서가 다르기 때문에 동작을 하지 않습니다. 따라서 모터 쉴드의 핀 순서에 맞게 연결을 해주셔야 합니다.
블루투스 통신을 위한 소프트웨어 시리얼(Software Serial) 객체를 선언할 때 오렌지보드 BLE의 경우 4번핀 5번핀을 사용해주셔야 합니다.
#include <SoftwareSerial.h>
#include <Servo.h>
// 서보 모터 객체를 선언합니다.(directNote)
Servo directNote;
// 블루투스 사용을 위한 SoftwareSerial 객체를 선언합니다.
// 오렌지보드 BLE의 경우 디지털 4번, 5번핀으로 지정해주셔야 합니다.
SoftwareSerial BTSerial(4,5);
//**채널 A 모터 설정**
// 모터의 회전 방향 제어를 위한 핀
const int A_Direction = 12;
// 모터의 회전 속도 제어를 위한 핀
const int A_Speed = 3;
// 모터의 회전 중지 제어를 위한 핀
const int A_Brake = 9;
//**채널 B 모터 설정**
// 모터의 회전 방향 제어를 위한 핀
const int B_Direction = 13;
// 모터의 회전 속도 제어를 위한 핀
const int B_Speed = 11;
// 모터의 회전 중지 제어를 위한 핀
const int B_Brake = 8;
void setup() {
//시리얼 통신 속도를 9600bps로 설정합니다.
Serial.begin(9600);
// 블루투스 통신 속도를 9600bps로 설정합니다.
BTSerial.begin(9600);
// 서보 모터를 6번에 연결합니다.
directNote.attach(6);
// 모터 제어를 위한 핀들을 출력 핀으로 설정합니다.
pinMode(A_Direction,OUTPUT);
pinMode(A_Speed,OUTPUT);
pinMode(A_Brake,OUTPUT);
pinMode(B_Direction,OUTPUT);
pinMode(B_Speed,OUTPUT);
pinMode(B_Brake,OUTPUT);
}
void loop() {
// 모터의 회전 방향을 설정합니다.
digitalWrite(A_Direction,HIGH);
digitalWrite(B_Direction,HIGH);
// 스마트폰에서 들어오는 데이터가 있다면
if(BTSerial.available()){
// 전송된 데이터를 data에 저장합니다.
char data = BTSerial.read();
// 전송된 데이터가 8이라면
if(data == '8'){
// 프로펠러(모터)를 회전 시킵니다.
Foward();
}
// 전송된 데이터가 1이라면
if(data == '1'){
// 서보 모터의 각도를 왼쪽으로 변경합니다.
noteLeft();
}
// 전송된 데이터가 2라면
if(data == '2'){
// 서보 모터의 각도를 중앙으로 변경합니다.
noteCenter();
}
// 전송된 데이터가 3이라면
if(data == '3'){
// 서보 모터의 각도를 오른쪽으로 변경합니다.
noteRight();
}
// 전송된 데이터가 5라면
if(data == '5'){
// 프로펠러(모터)의 회전을 중지 시킵니다.
Stop();
}
}
}
// 전진을 위한 함수
void Foward(){
// 두개의 프로펠러(모터)를 동작시킵니다. 0~255 사이의 값으로 모터의 속도를 변경할 수 있습니다.
analogWrite(A_Speed,255);
analogWrite(B_Speed,255);
}
// 정지를 위한 함수
void Stop(){
// 두 개의 프로펠러(모터)의 동작을 중지시킵니다.
analogWrite(A_Speed,0);
analogWrite(B_Speed,0);
}
// 우회전 방향을 위한 함수
void noteRight(){
// 서보 모터의 각도를 110도로 변경합니다.
directNote.write(110);
}
// 직진 방향을 위한 함수
void noteCenter(){
// 서보 모터의 각도를 90도로 변경합니다.
directNote.write(90);
}
// 좌회전 방향을 위한 함수
void noteLeft(){
// 서보 모터의 각도를 70도로 변경합니다.
directNote.write(70);
}
PET Boat를 만드는 과정에 대해 소개해보도록 하겠습니다!
이전 프로젝트와 마찬가지로 Sketch UP을 이용해 각 외형 파츠들을 모델링해주었고,
3D 프린터로 출력을 진행하였습니다 ;)
비하인드 스토리를 말씀드리자면 PET 병을 찾기 위해 엄청난 양의 음료수를 마셨다는......^^
자 그럼 PET Boat를 만드는 과정에 대해 차근 차근 소개하도록 하겠습니다~!!
파츠는 크게 4가지로 분류됩니다.
- 본체 상판
- 본체 하판
- 프로펠러(모터) 고정대
- 노트(방향키)
하나 하나씩 파츠들을 살펴볼까요?
본체 상판
본체 상판에는 오렌지보드(BLE)와 9V 건전지, 그리고 서보 모터가 위치하게 됩니다.
오렌지보드와 9V 건전지의 크게에 맞게 지지대를 세워주었고, 서보 모터를 끼울 수 있는 공간도 만들어주었습니다! ;)
본체 하판
본체 상판과 결합되는 동시에 페트병과 결합할 본체 하판의 모습입니다.
아래 보이는 2개의 홈에 보트의 지느러미(?) 역할을 하는 파츠가 결합하게 됩니다.
프로펠러 고정대
애초에는 하나의 모터를 사용할 예정으나 추진력이 부족할 것 같아서 2개의 모터를 고정할 수 있는 지지대로 다시 모델링 해주어 3D 프린팅을 진행하였습니다.
노트(방향키)
서보 모터와 고정 시킬 노트(방향키)입니다. 서보 모터를 이용해 노트의 방향을 바꿔주면, 물살의 방향이 달라지기 때문에 보트의 방향 전환이 가능하겠죠?
모든 부품을 모델링한 후 3D 프린팅 과정을 진행해야 합니다.
오늘도 3D 프린터는 열심히 돌아갑니다! ;)
모든 파츠들이 출력되었습니다. 재료는 ABS 사용하였고, 최대한 서포터가 생기지 않도록, 굴곡진 부분은 나눠서 출력을 진행하였습니다.
깔끔히 잘 나왔죠?ㅎㅎ
자 이제 출력된 파츠들을 가지고 조립을 진행하는 일만 남았습니다.
그럼 조립하는 과정도 쓰윽~ 살펴볼까요?
제일 먼저 본체의 하판을 조립해주었습니다. 위에서도 언급했지만, 하판의 굴곡진 면에 서포터가 생기기 때문에 하판을 2개로 나눠 프린트를 진행하였습니다.
서포터가 생기는 경우 출력 시간도 증가하고, 서포터를 제거한 후 표면이 지저분하기 때문에 가능하다면 서포터 없이 출력하는 방법에 대해 고민하는 것이 좋습니다.
하판의 홈에 맞게 상판을 결합해 줍니다. 이제 제법 보트의 느낌이 나지 않나요?
상판과 하판을 결합한 후에는 하판의 남은 파츠들을 붙여줍니다.
프로펠러(모터) 고정대와 PET병 그리고 하판의 지느러미(?)를 붙여줍니다.
위에서도 언급했지만, 프로펠러(모터) 고정대의 경우 2개를 고정할 수 있는 고정대로 다시 출력하여, 교체해줬습니다.
오렌지보드 BLE와 모터 쉴드, 모터와 서보 모터(노트 파츠까지)를 보트위에 배치하면 완성입니다!
제법 그럴 듯한 보트가 완성되었네요~ ;)
완성된 PET Boat의 모습입니다. 오렌지색으로 출력하니 상큼하네요!
PET 병을 달아놓으니 우주선 같기도 하구요! ;)
프로젝트에 사용된 소스들입니다. 이미지를 클릭하여 해당 파일을 다운받으세요!
nrF UART v2.0 어플리케이션을 통해 PET Boat 제어 테스트를 진행하였습니다.
현재 배를 띄울 장소를 물색하고 있습니다. 바람으로 추진력을 얻기 때문에 우선 바람의 영향을 거의 받지 않는 실내에서 배를 띄워볼 생각입니다.
RC를 물에 띄워 제어하는 영상은 따로 업데이트 하도록 하겠습니다~ PET Boat의 진수식 기대해주세요~!! ;)
Klant