모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 오유인페이지
    개인차단 상태
    구마컴님의
    개인페이지입니다
    가입 : 15-05-11
    방문 : 1161회
    닉네임변경 이력
    회원차단
    회원차단해제
    게시물ID : humorbest_1056887
    작성자 : 구마컴
    추천 : 58
    조회수 : 3902
    IP : 119.197.***.212
    댓글 : 11개
    베스트 등록시간 : 2015/05/13 18:59:10
    원글작성시간 : 2015/05/13 09:09:17
    http://todayhumor.com/?humorbest_1056887 모바일
    [레고테크닉]기술이민자료 두번째. 서보모터를 블루투스로 제어하기
    <div><br></div> <div><span style="font-size:9pt;line-height:1.5;">벌써 오유로 출석한지 3일째되네요~</span></div> <div><br></div> <div>이번에는 기술이민 증빙용 두번째 자료입니다. ㄷㄷㄷ</div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><span style="font-size:9pt;line-height:1.5;">테크닉 모터에는 M모터, L모터, XL모터 그리고 서보모터가 있는데, 앞에 3개 모터(M, L, XL)는 사이즈와 힘만 다른 모터입니다.</span></div> <div><br></div> <div>그냥 360도 계속 회전합니다. 전압을 반대로 걸면 반대로 돌구요.</div> <div><br></div> <div>주행같은 동작에 적합합니다.</div> <div><br></div> <div>DC모터라고도 하지요.</div> <div><br></div> <div><br></div> <div>근데 서보모터는 좌우로 90도만 회전하는 모터입니다.</div> <div><br></div> <div>그래서 조향같은 동작에 적합하지요.</div> <div><br></div> <div>이번에는 서보모터 제어하는 방법입니다.</div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><b><font size="5">1. 준비작업</font></b></div> <div><br></div> <div><br></div> <div>파워펑션 연장선을 준비하여 절반으로 자르고, 피복을 벗겨줍니다.</div> <div><br></div> <div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201505/14314751673F4q4rZwgIIMKdAQsZBgebo.jpg" width="800" height="453" alt="wire0.jpg" class="chimg_photo" style="border:none;"></div><br></div> <div><br></div> <div><br></div> <div><br></div> <div>피복을 벗긴 연장선의 끝에 납을 묻혀서 브레드보드에 꽂기 편하도록 해둡니다.</div> <div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201505/1431475189vaadd32FY5lka.jpg" width="683" height="551" alt="wire1.jpg" style="border:none;"></div> <div style="text-align:left;"><br></div> <div style="text-align:left;"><br></div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201505/1431475196p7vEaXs5q2XF7rUE.jpg" width="800" height="453" alt="wire2.jpg" class="chimg_photo" style="border:none;"></div></div> <div><br></div> <div>저는 회사에 있는 핀을 이용해서 핀이랑 납땜을 해버렸습니다. </div> <div><br></div> <div>이러면 브레드보드에 꽂기 더 편하거든요. (브레드보드랑 간격도 동일해서)</div> <div><br></div> <div><br></div> <div><br></div> <div>연장선의 핀맵은 아래 사진을 참조합니다.</div> <div><br></div> <div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201505/1431475241tEDsWDm8CBYNPAWjnzCWPPM.jpg" width="584" height="687" alt="wire_pinmap.jpg" style="border:none;"></div><br></div> <div><br></div> <div>기존 DC 모터들은 중간에 C1, C2만 연결하였지만, 서보모터는 모든 선을 다 연결해야합니다.</div> <div><br></div> <div>1번과 4번핀으로 전원이 공급되고, C1, C2핀의 전압에 따라 좌우로 돌아가게 됩니다.</div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><b><font size="5">2. 회로 꾸미기</font></b></div> <div><br></div> <div><br></div> <div>아래 회로도를 참조하여 브레드보드에 회로를 구성합니다.</div> <div><br></div> <div>서보모터의 경우 아두이노보드의 PWM 출력 기능을 이용하므로 DC모터처럼 별도의 IC가 필요하지 않습니다.</div> <div><br></div> <div>주의해야할점은 PWM를 지원하는 핀에 C1, C2를 연결해야합니다.</div> <div><br></div> <div>아두이노 우노의 경우 3, 5, 6, 9, 10, 11 핀이 PWM 기능을 지원합니다.</div> <div><br></div> <div>C1 = 0V, C2 = 0V : 중앙정렬</div> <div>C1 = 5V, C2 = 0V : 오른쪽 90도회전</div> <div>C1 = 0V, C2 = 5V : 왼쪽 90도 회전 </div> <div><br></div> <div>이런식으로 동작하는데, PWM으로 제어한 전압값에 따라 90도가 되기도 하고, 45도가 되기도 합니다.</div> <div><br></div> <div><br></div> <div><b>핀맵</b></div> <div><b><br></b></div> <div><b> 2번핀 : 블루투스 통신용 rx</b></div> <div><b> 3번핀 : 블루투스 통신용 tx</b></div> <div><b><br></b></div> <div><b> 9번핀 : 서보모터 제어 C1</b></div> <div><b>10번핀 : 서보모터 제어 C2</b></div> <div><br></div> <div><br></div> <div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201505/1431475271jO4qiNFqlS7P5zjCBYGvtdF8Sj.jpg" width="800" height="477" alt="1.jpg" class="chimg_photo" style="border:none;"></div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><b><font size="5">3. 코딩</font></b></div> <div><br></div> <div>아래 소스를 참조하여 코딩합니다.</div> <div><br></div> <div>9번핀과 10번핀을 analogWrite 함수로 PWM 기능을 쓸수있습니다.</div> <div><br></div> <div>0부터 255까지 입력이 가능합니다.</div> <div><br></div> <div>서보모터가 좌우로 90도를 회전한다고 가정하면 다음과 같이 동작합니다.</div> <div><br></div> <div><br></div> <div> 9번핀 = 0</div> <div>10번핀 = 0</div> <div>=> 중앙 정렬</div> <div><br></div> <div> 9번핀 = 255</div> <div>10번핀 = 0</div> <div>=> 오른쪽 90도 회전</div> <div><br></div> <div> 9번핀 = 0</div> <div>10번핀 = 255</div> <div>=> 왼쪽 90도 회전</div> <div><br></div> <div> 9번핀 = 128</div> <div>10번핀 = 0</div> <div>=> 오른쪽 45도 회전</div> <div><br></div> <div><br></div> <div>주의할점은 두 핀중에서 하나만 입력값 들어가야한다는 점입니다.</div> <div><br></div> <div>둘다 입력하면 어떻게 될지는 저도 안해봐서 모르겠지만 부하가 걸리겠죠? ㅎㅎ</div> <div><br></div> <div>그래서 반대로 동작할때는 꼭 다른핀의 입력값을 0으로 넣어주세요.</div> <div><br></div> <div><br></div> <div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201505/1431475590q5k2Oi7drXQsCxywlu.jpg" width="500" height="744" alt="src.jpg" style="border:none;"></div><br></div> <div><br></div> <div><br></div> <div><br></div> <div>// 코딩시작 ==============================================================</div> <div><br></div> <div>#include <SoftwareSerial.h></div> <div>SoftwareSerial mySerial(2,3);//HC-06 블루투스 모듈 설정 rx, tx</div> <div><br></div> <div>int pinC1 = 9;  // c1 제어</div> <div>int pinC2 = 10; // c2 제어</div> <div><br></div> <div>byte rcvByte; // 블루투스 데이터 읽기</div> <div><br></div> <div>unsigned long tm;  // 시퀀스 동작 주기 확인용 시간 변수</div> <div>int bSeqRun=0;     // 시퀀스 동작 명령</div> <div>int stepSeqRun=0;  //시퀀스 동작 구분 변수</div> <div><br></div> <div><br></div> <div>void setup() {</div> <div>  // 아두이노 전원 인가시 1회만 실행됨</div> <div><br></div> <div>  // 블루투스 모듈 동작시킴</div> <div>  mySerial.begin(9600);  </div> <div>  Serial.begin(9600);</div> <div>  </div> <div>  // 핀 설정</div> <div>  pinMode(pinC1, OUTPUT);</div> <div>  pinMode(pinC2, OUTPUT);</div> <div>  </div> <div>  // 핀 기본값 0</div> <div>  analogWrite(pinC1, 0);</div> <div>  analogWrite(pinC2, 0);</div> <div><br></div> <div>  tm = millis(); // 현재 시간으로 설정</div> <div>}</div> <div><br></div> <div><br></div> <div>void loop() {</div> <div>  // 계속 반복 동작하는 부분</div> <div>  </div> <div>  if (mySerial.available() > 0) {     // 블루투스로 데이터를 읽었을때...</div> <div>    rcvByte = mySerial.read();        // 블루투스로 읽은 데이터를 rcvByte에 넘겨줌.</div> <div>    </div> <div>    if (rcvByte == 'f') MtrMove(1, 255); // f 문자가 입력되었으면 +방향 동작</div> <div>    if (rcvByte == 'b') MtrMove(0, 255); // b 문자가 입력되었으면 -방향 동작</div> <div>    if (rcvByte == 'l') MtrMove(1, 128); // l 문자가 입력되었으면 +방향 절반 동작</div> <div>    if (rcvByte == 'r') MtrMove(0, 128); // r 문자가 입력되었으면 -방향 절반 동작</div> <div><br></div> <div><br></div> <div>    if (rcvByte == 's') {                // s 문자가 입력되었으면 정지, 시퀀스도 정지</div> <div>      MtrMove(0, 0);</div> <div>      bSeqRun = 0;</div> <div>      stepSeqRun = 0;</div> <div>    }</div> <div>    </div> <div>    if (rcvByte == 'q') {             // q 문자가 입력되었으면 시퀀스 동작</div> <div>      bSeqRun = 1;</div> <div>    }</div> <div>  }</div> <div>  </div> <div>  if (bSeqRun == 1) {  //시퀀스동작변수에 1이 입력되면</div> <div>    SeqStart(); // 시퀀스동작 함수 실행</div> <div>  }</div> <div>  </div> <div>}</div> <div><br></div> <div>void MtrMove(int dir, int val)   // dir : 모터방향, val : 이동범위</div> <div>{</div> <div>    if (dir == 1) {              // 모터방향이 1이면 C1 동작, 아니면 C2 동작</div> <div>        analogWrite(pinC1, val);</div> <div>        analogWrite(pinC2, 0  );</div> <div>    }</div> <div>    else {</div> <div>        analogWrite(pinC1, 0  );</div> <div>        analogWrite(pinC2, val);</div> <div>    }</div> <div>}</div> <div><br></div> <div><br></div> <div>void SeqStart() </div> <div>{</div> <div>  unsigned long nowtm = millis();  // 현재 시간을 설정</div> <div>  if (nowtm - tm > 1000) {         // 1초 마다 실행하도록 하는 조건문.  [현재시간]과 [동작주기확인용시간]의 차이가 1000ms이 넘으면 실행. (단위는 1/1000초)</div> <div>    tm = nowtm;                    // 동작주기확인용 변수에 현재 시간 기록</div> <div>    </div> <div>    </div> <div>    switch (stepSeqRun) {   // 동작 구분 변수의 값에 따라 해당부분의 명령을 수행</div> <div>        case  0 : {</div> <div>                    MtrMove(1, 255); // +방향으로 회전</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>            stepSeqRun++;    // 다음 동작으로 넘어감.</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>            break;</div> <div>                  }</div> <div><br></div> <div>        case  2 : { // 2초후</div> <div>                    MtrMove(0, 0);   // 정지</div> <div>                    stepSeqRun++;</div> <div>                    break;</div> <div>                  }</div> <div>        case  3 : { // 1초후</div> <div>                    MtrMove(0, 255); // -방향으로 회전</div> <div>                    stepSeqRun++; </div> <div>                    break;</div> <div>                  }</div> <div>        case  5 : { // 2초후</div> <div>                    MtrMove(0, 0);   // 정지</div> <div>                    stepSeqRun=0;    // 다시 처음으로</div> <div>                    break;</div> <div>                  }</div> <div>        </div> <div>        </div> <div>        default : {  // 동작 구분 변수와 일치하는 항목이 없을때 수행.                             </div> <div>                     stepSeqRun++; </div> <div>                     break;</div> <div>                  }</div> <div>      }</div> <div>      </div> <div>      Serial.println(stepSeqRun);</div> <div><br></div> <div>  }</div> <div>}</div> <div><br></div> <div><br></div> <div><br></div> <div>// 코딩끝 ==============================================================</div> <div><br></div> <div><br></div> <div><b><font size="5">4. 스마트폰 설정</font></b></div> <div><br></div> <div>이번에도 Bluetooth controller 어플을 이용하여 제어를 하고 있습니다.</div> <div><br></div> <div>키를 다음 화면과 같이 설정해주세요.</div> <div><br></div> <div>l, r은 이름짓기도 귀찮아서 걍 써버린...;;;;</div> <div><br></div> <div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201505/1431475611kUDoSGRWxjPKIx17uOvw.png" width="720" height="1182" alt="btset.png" style="border:none;"></div><br></div> <div><br></div> <div><br></div> <div>항상 블루투스로 제어하기때문에 매번 기능 만들때마다 설정해줘야하네요. ㅎㅎㅎ</div> <div><br></div> <div>참고로 앱인벤터를 이용하면 안드로이드용 어플도 간단히 만들수있습니다. </div> <div>( <a target="_blank" href="http://appinventor.mit.edu">http://appinventor.mit.edu</a> )</div> <div><br></div> <div>저도 블루투스 제어용으로 만들어보긴했는데 안이쁜데다가(디자인 잼병...ㅠㅠ) 기능 수정하려면 </div> <div><br></div> <div>매번 코딩해야해서 걍 이거 계속 쓰네요.</div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><b><font size="5">5. 동작 영상</font></b></div> <div><br></div> <div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201505/14314756289GLTArhMu9A7u.jpg" width="800" height="450" alt="comp.jpeg" class="chimg_photo" style="border:none;"></div><br></div> <div><br></div> <div><br></div> <div><iframe width="560" height="315" src="https://www.youtube.com/embed/7tC9aFJsbRY" frameborder="0"></iframe><br></div> <div><br></div> <div>전진/후진 버튼을 누르면 각 방향으로 최대치(90도) 돌아가고, l/r 버튼을 누르면 각 방향으로 절반(45도)만큼 돌아갑니다.</div> <div><br></div> <div>시퀀스는 그냥 최대치로 왔다, 갔다 시킨거구요.</div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><span style="font-size:9pt;line-height:1.5;">다음번에는 초음파센서로 거리를 측정하는 방법을 올려보겠습니다.</span></div> <div><br></div> <div>감사합니다~</div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><br></div>
    출처 브릭나라에 먼저 올렸던 내용입니다.

    이 게시물을 추천한 분들의 목록입니다.
    [1] 2015/05/13 09:33:20  222.109.***.120  염제신농씨  190097
    [2] 2015/05/13 10:12:43  155.230.***.217  벽곰  402720
    [3] 2015/05/13 10:23:40  58.238.***.145  붱  283530
    [4] 2015/05/13 11:01:17  110.70.***.101  캬옹*ㅁ*  71515
    [5] 2015/05/13 11:08:19  211.219.***.12  웨스터룬드  400958
    [6] 2015/05/13 12:16:12  103.10.***.37  Mr.판다  333861
    [7] 2015/05/13 13:10:26  1.217.***.139  칼가는과객  213663
    [8] 2015/05/13 13:35:46  1.220.***.234  제브라얼룩말  438470
    [9] 2015/05/13 16:11:58  111.65.***.199  배영수  168073
    [10] 2015/05/13 18:59:10  58.226.***.59  신선공유기  171721
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    [건프라]지른다, 간호사 [51] 구마컴 15/11/03 17:00 4648 29
    처음 사진 시작하시려는 분들께 드리는 조그마한 조언.. [3] 창작글 구마컴 15/06/12 20:22 2442 31
    오이도 [11] 창작글 구마컴 15/06/03 23:51 1305 28
    [레고테크닉]기술이민자료 두번째. 서보모터를 블루투스로 제어하기 [11] 구마컴 15/05/13 18:59 3902 58
    스르륵 기술이민 신청합니다. (레고 테크닉 블루투스 제어) [96] 구마컴 15/05/11 15:10 10352 111
    [1]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈