모바일 오유 바로가기
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도쿄올림픽
  • 게시판찾기
  • 게시물ID : toy_7261
    작성자 : 구마컴
    추천 : 13
    조회수 : 2695
    IP : 119.197.***.212
    댓글 : 11개
    등록시간 : 2015/05/13 09:09:17
    http://todayhumor.com/?toy_7261 모바일
    [레고테크닉]기술이민자료 두번째. 서보모터를 블루투스로 제어하기

    벌써 오유로 출석한지 3일째되네요~

    이번에는 기술이민 증빙용 두번째 자료입니다. ㄷㄷㄷ





    테크닉 모터에는 M모터, L모터, XL모터 그리고 서보모터가 있는데, 앞에 3개 모터(M, L, XL)는 사이즈와 힘만 다른 모터입니다.

    그냥 360도 계속 회전합니다. 전압을 반대로 걸면 반대로 돌구요.

    주행같은 동작에 적합합니다.

    DC모터라고도 하지요.


    근데 서보모터는 좌우로 90도만 회전하는 모터입니다.

    그래서 조향같은 동작에 적합하지요.

    이번에는 서보모터 제어하는 방법입니다.




    1. 준비작업


    파워펑션 연장선을 준비하여 절반으로 자르고, 피복을 벗겨줍니다.

    wire0.jpg




    피복을 벗긴 연장선의 끝에 납을 묻혀서 브레드보드에 꽂기 편하도록 해둡니다.
    wire1.jpg


    wire2.jpg

    저는 회사에 있는 핀을 이용해서 핀이랑 납땜을 해버렸습니다. 

    이러면 브레드보드에 꽂기 더 편하거든요. (브레드보드랑 간격도 동일해서)



    연장선의 핀맵은 아래 사진을 참조합니다.

    wire_pinmap.jpg


    기존 DC 모터들은 중간에 C1, C2만 연결하였지만, 서보모터는 모든 선을 다 연결해야합니다.

    1번과 4번핀으로 전원이 공급되고, C1, C2핀의 전압에 따라 좌우로 돌아가게 됩니다.




    2. 회로 꾸미기


    아래 회로도를 참조하여 브레드보드에 회로를 구성합니다.

    서보모터의 경우 아두이노보드의 PWM 출력 기능을 이용하므로 DC모터처럼 별도의 IC가 필요하지 않습니다.

    주의해야할점은 PWM를 지원하는 핀에 C1, C2를 연결해야합니다.

    아두이노 우노의 경우 3, 5, 6, 9, 10, 11 핀이 PWM 기능을 지원합니다.

    C1 = 0V, C2 = 0V : 중앙정렬
    C1 = 5V, C2 = 0V : 오른쪽 90도회전
    C1 = 0V, C2 = 5V : 왼쪽 90도 회전 

    이런식으로 동작하는데, PWM으로 제어한 전압값에 따라 90도가 되기도 하고, 45도가 되기도 합니다.


    핀맵

     2번핀 : 블루투스 통신용 rx
     3번핀 : 블루투스 통신용 tx

     9번핀 : 서보모터 제어 C1
    10번핀 : 서보모터 제어 C2


    1.jpg





    3. 코딩

    아래 소스를 참조하여 코딩합니다.

    9번핀과 10번핀을 analogWrite 함수로 PWM 기능을 쓸수있습니다.

    0부터 255까지 입력이 가능합니다.

    서보모터가 좌우로 90도를 회전한다고 가정하면 다음과 같이 동작합니다.


     9번핀 = 0
    10번핀 = 0
    => 중앙 정렬

     9번핀 = 255
    10번핀 = 0
    => 오른쪽 90도 회전

     9번핀 = 0
    10번핀 = 255
    => 왼쪽 90도 회전

     9번핀 = 128
    10번핀 = 0
    => 오른쪽 45도 회전


    주의할점은 두 핀중에서 하나만 입력값 들어가야한다는 점입니다.

    둘다 입력하면 어떻게 될지는 저도 안해봐서 모르겠지만 부하가 걸리겠죠? ㅎㅎ

    그래서 반대로 동작할때는 꼭 다른핀의 입력값을 0으로 넣어주세요.


    src.jpg




    // 코딩시작 ==============================================================

    #include <SoftwareSerial.h>
    SoftwareSerial mySerial(2,3);//HC-06 블루투스 모듈 설정 rx, tx

    int pinC1 = 9;  // c1 제어
    int pinC2 = 10; // c2 제어

    byte rcvByte; // 블루투스 데이터 읽기

    unsigned long tm;  // 시퀀스 동작 주기 확인용 시간 변수
    int bSeqRun=0;     // 시퀀스 동작 명령
    int stepSeqRun=0;  //시퀀스 동작 구분 변수


    void setup() {
      // 아두이노 전원 인가시 1회만 실행됨

      // 블루투스 모듈 동작시킴
      mySerial.begin(9600);  
      Serial.begin(9600);
      
      // 핀 설정
      pinMode(pinC1, OUTPUT);
      pinMode(pinC2, OUTPUT);
      
      // 핀 기본값 0
      analogWrite(pinC1, 0);
      analogWrite(pinC2, 0);

      tm = millis(); // 현재 시간으로 설정
    }


    void loop() {
      // 계속 반복 동작하는 부분
      
      if (mySerial.available() > 0) {     // 블루투스로 데이터를 읽었을때...
        rcvByte = mySerial.read();        // 블루투스로 읽은 데이터를 rcvByte에 넘겨줌.
        
        if (rcvByte == 'f') MtrMove(1, 255); // f 문자가 입력되었으면 +방향 동작
        if (rcvByte == 'b') MtrMove(0, 255); // b 문자가 입력되었으면 -방향 동작
        if (rcvByte == 'l') MtrMove(1, 128); // l 문자가 입력되었으면 +방향 절반 동작
        if (rcvByte == 'r') MtrMove(0, 128); // r 문자가 입력되었으면 -방향 절반 동작


        if (rcvByte == 's') {                // s 문자가 입력되었으면 정지, 시퀀스도 정지
          MtrMove(0, 0);
          bSeqRun = 0;
          stepSeqRun = 0;
        }
        
        if (rcvByte == 'q') {             // q 문자가 입력되었으면 시퀀스 동작
          bSeqRun = 1;
        }
      }
      
      if (bSeqRun == 1) {  //시퀀스동작변수에 1이 입력되면
        SeqStart(); // 시퀀스동작 함수 실행
      }
      
    }

    void MtrMove(int dir, int val)   // dir : 모터방향, val : 이동범위
    {
        if (dir == 1) {              // 모터방향이 1이면 C1 동작, 아니면 C2 동작
            analogWrite(pinC1, val);
            analogWrite(pinC2, 0  );
        }
        else {
            analogWrite(pinC1, 0  );
            analogWrite(pinC2, val);
        }
    }


    void SeqStart() 
    {
      unsigned long nowtm = millis();  // 현재 시간을 설정
      if (nowtm - tm > 1000) {         // 1초 마다 실행하도록 하는 조건문.  [현재시간]과 [동작주기확인용시간]의 차이가 1000ms이 넘으면 실행. (단위는 1/1000초)
        tm = nowtm;                    // 동작주기확인용 변수에 현재 시간 기록
        
        
        switch (stepSeqRun) {   // 동작 구분 변수의 값에 따라 해당부분의 명령을 수행
            case  0 : {
                        MtrMove(1, 255); // +방향으로 회전
               stepSeqRun++;    // 다음 동작으로 넘어감.
               break;
                      }

            case  2 : { // 2초후
                        MtrMove(0, 0);   // 정지
                        stepSeqRun++;
                        break;
                      }
            case  3 : { // 1초후
                        MtrMove(0, 255); // -방향으로 회전
                        stepSeqRun++; 
                        break;
                      }
            case  5 : { // 2초후
                        MtrMove(0, 0);   // 정지
                        stepSeqRun=0;    // 다시 처음으로
                        break;
                      }
            
            
            default : {  // 동작 구분 변수와 일치하는 항목이 없을때 수행.                             
                         stepSeqRun++; 
                         break;
                      }
          }
          
          Serial.println(stepSeqRun);

      }
    }



    // 코딩끝 ==============================================================


    4. 스마트폰 설정

    이번에도 Bluetooth controller 어플을 이용하여 제어를 하고 있습니다.

    키를 다음 화면과 같이 설정해주세요.

    l, r은 이름짓기도 귀찮아서 걍 써버린...;;;;

    btset.png



    항상 블루투스로 제어하기때문에 매번 기능 만들때마다 설정해줘야하네요. ㅎㅎㅎ

    참고로 앱인벤터를 이용하면 안드로이드용 어플도 간단히 만들수있습니다. 

    저도 블루투스 제어용으로 만들어보긴했는데 안이쁜데다가(디자인 잼병...ㅠㅠ) 기능 수정하려면 

    매번 코딩해야해서 걍 이거 계속 쓰네요.




    5. 동작 영상

    comp.jpeg





    전진/후진 버튼을 누르면 각 방향으로 최대치(90도) 돌아가고, l/r 버튼을 누르면 각 방향으로 절반(45도)만큼 돌아갑니다.

    시퀀스는 그냥 최대치로 왔다, 갔다 시킨거구요.




    다음번에는 초음파센서로 거리를 측정하는 방법을 올려보겠습니다.

    감사합니다~







    출처 브릭나라에 먼저 올렸던 내용입니다.

    이 게시물을 추천한 분들의 목록입니다.
    [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 초과시 해당없음)

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

    번호 제 목 이름 날짜 조회 추천
    14047
    플레이모빌은 내 친구 [2] NeoGenius 24/11/27 14:59 291 2
    14046
    번개장터가 메루카리 10% 세일 시작했네요 너정말웃겨 24/11/22 17:21 335 0
    14045
    여동생들 다 꺼내봄. [1] 비타육백 24/09/25 21:12 1065 2
    14044
    럭키캣 대수신 리듬괭이 24/09/20 21:17 841 2
    14043
    대륙의 힘으로 되살아난 장비 [2] ㅗㅠㅑ 24/09/13 09:43 1558 3
    14042
    알라신이야말로 진정 위대한 신입니다! [4] ㅗㅠㅑ 24/08/22 14:09 1189 4
    14041
    [마블] TVA 타임스틱과 뱃지 뉴페이스 24/07/22 15:16 1334 3
    14040
    RG 사자비 근데 거기에 도색된 총수님을 곁들인 뉴페이스 24/07/11 16:21 1476 6
    14039
    [광선검] 3가지 비교리뷰 루크 스카이워커 광선검 뉴페이스 24/05/31 17:29 1547 1
    14038
    [광선검] 블랙시리즈 포스 에프엑스 엘리트 루크 스카이워커 만달로리안 버 뉴페이스 24/05/17 16:14 1680 2
    14037
    [마블] 가디언즈 오브 갤럭시 로난 코스미 로드 [2] 뉴페이스 24/05/07 15:29 1999 5
    14036
    아냐 NeoGenius 24/04/26 16:33 1751 5
    14035
    원피스 몬스터즈 흑도 슈스이 뉴페이스 24/04/25 15:17 1770 2
    14034
    사이버펑크2077 발열카타나 (에라타) [1] 뉴페이스 24/04/19 17:34 1962 2
    14033
    [알리 레고] 도움좀 부탁드립니다. 리무버 찾을수 있을까요? 초보라 ㅠㅠ [4] 카푸타치오 24/04/17 08:19 1624 0
    14032
    유희왕 카드 visualwhit 24/03/19 05:10 1766 0
    14030
    스케일RC 미군 험머차량 오프로드 신나게 달리기. [1] 창작글 두부한사발 24/03/04 10:35 2021 2
    14029
    [가조] RG 뉴건담 [2] 뉴페이스 24/02/13 14:22 2240 5
    14028
    [헬멧] 스타워즈 블랙시리즈 스카우트 트루퍼 헬멧 [2] 뉴페이스 24/01/04 20:04 2317 4
    14027
    [헬멧] 스타워즈 클론트루퍼 페이즈2 헬멧 [2] 뉴페이스 23/12/28 19:42 2156 3
    14026
    [마블] 레전드 시리즈 묠니르 2가지 비교리뷰 뉴페이스 23/12/21 20:39 2218 0
    14025
    [마블] 레전드 시리즈 토르 러브 앤 썬더 묠니르 뉴페이스 23/12/14 20:38 2206 4
    14024
    [무비] 스타워즈 그로구 애니매트로닉 에디션 [2] 뉴페이스 23/12/08 15:42 2229 5
    14022
    [광선검] 디즈니파크 오비완 케노비 광선검 뉴페이스 23/11/29 15:44 2454 2
    14021
    [광선검] 2가지 레이 스카이워커 광선검 비교리뷰 뉴페이스 23/11/24 16:50 2343 2
    14020
    [광선검] 디즈니 파크 레이 스카이워커 광선검 뉴페이스 23/11/14 16:56 2370 3
    14019
    RC카와 함께 산을 올라보자. [2] 창작글 알사탕한개 23/11/06 17:42 2450 2
    14018
    [광선검] 디즈니파크 메이스 윈두 광선검 뉴페이스 23/10/31 15:41 2432 3
    14017
    [광선검] 디즈니파크 아소카 광선검 뉴페이스 23/10/18 16:01 2586 5
    14016
    미니메이츠 마블 판타스틱 포 밤버섯 23/10/11 07:42 2351 2
    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈