게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
스르륵 기술이민 신청합니다. (레고 테크닉 블루투스 제어)
게시물ID : bestofbest_205024짧은주소 복사하기
작성자 : 구마컴
추천 : 297
조회수 : 24413회
댓글수 : 96개
베오베 등록시간 : 2015/05/11 16:57:51
원본글 작성시간 : 2015/05/11 14:29:38
안녕하세요?

스르륵 이민자입니다.

기술이민 증빙자료입니다. ㄷㄷㄷㄷㄷ



레고 테크닉을 수동으로 움직이는것에 만족하지 못하고 프로그래밍해서 움직이고자 시도하게되었습니다.

아두이노를 이용하여 테크닉 모터를 스마트폰으로 제어하게 만들었습니다.


=====================================================================================================

1. 하드웨어 준비 작업

준비물

명칭 가격대 설명
 아두이노 우노 R3 (호환보드가능)  11,000원 (호환보드)  제어보드
 SN754410   5,000원  모터 제어용 IC
 HC-06   11,000원  블루투스 슬레이브 모듈
 브레드보드  4,000원  회로용 기판
 브레드보드용 점퍼선  6,000원  배선
 8886 레고® 파워 펑션 연장선 8"   6,000원  배터리박스 및 모터 연결용
 8881 레고® 파워 펑션 배터리 박스   12,000원
 8883 레고® 파워펑션 M-모터  19,000원  



2. 연장선 작업
연장선은 절반으로 잘라서 아래와 같이 피복을 벗겨 인두로 납을 뭍혀둡니다. (브레드보드에 꽂기 편하도록)

선까기.jpg

연장선의 양쪽 컨넥터는 하부쪽 디자인이 다른데, 한쪽(회색)은 아랫쪽에 단자가 있고, 다른쪽(검정색)은 없습니다.
아래에 단자가 있는 케이블은 배터리 박스에 연결하고, 단자가 없는 케이블은 모터에 연결합니다.

핀맵3.jpg

배터리 박스 연결용 케이블은 9V, GND(0V) 만 사용하고, 모터 연결용 케이블은 C1, C2만 사용합니다.

9V, GND 단자는 배터리 박스 스위치의 방향에 관계없이 똑같이 9V, 0V가 각각 인가되는 반면
C1, C2는 스위치 방향에 따라 9V와 0V가 서로 바뀌게 되어 모터 회전 방향을 변경합니다.

아두이노 보드에 연결하는 전원은 방향이 바뀌면 안되므로 9V, GND를 사용하고,
모터는 C1, C2를 연결하여 방향 제어를 하도록 회로를 꾸미면 됩니다.




3. 회로 꾸미기

아래 그림을 참조하여 브레드보드에 회로를 꾸밉니다.

아두이노 보드 핀맵
 핀번호  설명
 
 4번핀  블루투스 통신용 RX
 5번핀  블루투스 통신용 TX
 6번핀  모터 정방향 회전
 7번핀  모터 역방향 회전

회로도2.jpg


아래 사진은 참고만 하세요. 

저기서 약간 배선이 변경되었습니다. (ic에 5v로 EN 입력을 하는 선을 빼버림. 위의 회로도를 보시고 작업하세요)

우노_브레드.jpg



4. 프로그래밍

아두이노 스케치 프로그램에 새 스케치를 생성하고 다음과 같이 코딩합니다.

속도 조절기능이 있었는데 이건 삭제했습니다.

속도 조절이라는게 전류조절이라 힘이 약해지는데다가, 안그래도 아두이노 우노는 IO가 적어서 여러개의 모터를

제어하려면 IO단자 하나가 아쉽거든요. ㅎㅎ

과감히 삭제했습니다.


// 코딩시작======================================================
#include <SoftwareSerial.h>
SoftwareSerial mySerial(4,5);//HC-06 블루투스 모듈 설정 rx, tx

int dir1PinA = 6; // 전진
int dir2PinA = 7; // 후진
byte rcvByte; // 블루투스 데이터 읽기
int spd_val_mtrA; // 속도값
void setup() {
  // 아두이노 전원 인가시 1회만 실행됨
  // 블루투스 모듈 동작시킴
  mySerial.begin(9600);  
  
  // 핀 설정
  pinMode(spdPinA, OUTPUT); 
  pinMode(dir1PinA, OUTPUT);
  pinMode(dir2PinA, OUTPUT);
  
  // 핀 기본값 OFF 
  // LOW  -> OFF
  // HIGH -> ON
  digitalWrite(dir1PinA, LOW);
  digitalWrite(dir2PinA, LOW);
}
void loop() {
  // 계속 반복 동작하는 부분
  
  
  if (mySerial.available() > 0) {  // 블루투스로 데이터를 읽었을때...
    rcvByte = mySerial.read();   // 블루투스로 읽은 데이터를 rcvByte에 넘겨줌.
    
    if (rcvByte == 'f') {             // f 문자가 입력되었으면 전진 동작
      digitalWrite(dir1PinA, HIGH);
      digitalWrite(dir2PinA, LOW);
    }
    
    if (rcvByte == 'b') {             // b 문자가 입력되었으면 후진 동작
      digitalWrite(dir1PinA, LOW);
      digitalWrite(dir2PinA, HIGH);
    }
    
    if (rcvByte == 's') {             // s 문자가 입력되었으면 정지
      digitalWrite(dir1PinA, LOW);
      digitalWrite(dir2PinA, LOW);
    }
  }
  
}
//코딩끝===============================================================


코딩.jpg



코딩이 끝나면 USB 케이블을 연결하여 보드로 프로그램을 업로드합니다.


다운로드.jpg



5. 스마트폰 블루투스 설정 작업

1) 플레이스토어에서 BlueTooth Controller 라는 어플을 다운받습니다.

2) 실행후 키설정 버튼을 클릭합니다.

bt1.jpg

3) 4,5,6번째칸에 다음과 같이 입력한뒤 맨 아래 OK 버튼을 클릭합니다.
bt2.jpg

4) 장치검색을 클릭하고, HC-06 항목을 선택합니다.
키는 기본값으로 1234 또는 0000을 입력합니다.
bt3.jpg

5) 연결되었다는 메시지가 뜨면 전진/정지/후진 버튼을 각각 클릭하여 모터가 구동되는지 확인합니다.


6. 동작 확인

배터리박스와 모터를 연결한 후 전원을 올리고 동작을 테스트합니다.

DSC03127.JPG



1) 동작영상
- 아웃 트리거를 동작시켜봤습니다. 요즘 왠지 블루투스 통신이 좀 느려서 반응이 늦네요.


2) 응용 동작
- 초음파 거리센서를 이용하여 (화면 상단쪽에 있음) 손을 가까이 대면 멈추고, 손을 떼면 동작하게끔 만들었습니다.
근데 카메라 들고 찍으니 제대로 안보이네요. -_-a


출처 브릭나라에 먼저 올렸던 내용입니다.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호