본문으로 바로가기

요즘 몇 일간 뜸했네요. 몇몇 하고 싶지 않았지만 어쩔 수 없이 해야할 일... 모 드라마의 대사처럼 앞에 있는 독배를 마실 수 밖에 없는 상황 몇몇과 또 바쁜 몇몇 일들로 블로그 관리가 소흘했네요. 이제 더위도 한 걸음 달아난 모양이에요. 적어도 새벽에는 시원하더군요^^ 최근 저는 Python관련된 글을 올리고 있었는데요. Python에 관심을 가지게 될 쯤... 또 관심을 가지게 된 아이가 아두이노(Arduino)랍니다. 아두이노 보드라는 말을 처음 들었을때는 단순히 그냥 학습용 보드겠지... 라고 생각했는데 직접 다뤄보니 그 편리함과, 간편함, 쉬운 접근성 등의 매력에 푹~ 빠져버렸습니다. 

아두이노의 매력은 꽤 많습니다. 보통 단순히 MCU가 필요할때, MCU의 기본부터 학습해 가기 위해서, 컴파일러를 준비해야하고, 또 컴파일러 자체를 익혀야하고, ... 아무튼 엄청 많은 노력이 들어갑니다. 그러나~ 만약 내가 프로토타입 혹은 단순한 테스트 혹은 취미 활동 수준의 단순한 일들을 하고 싶다면, 생각보다는 많은 에너지 낭비이기도 합니다. 그걸 아두이노는 상당히 편하게 접근하게 해 준다는 것을 알았습니다. 제 경우는 아두이노 보드를 구하고, 동봉된 케이블로 PC에 연결하고, 아두이노 소프트웨어를 살짝 다운받아 깔고, 예제를 돌려보고 감탄하는데 딱 10분도 걸리지 않았습니다. 특히 또 대단한 장점은 바로 오픈플랫폼이라는 것입니다. 회로도와 소프트웨어 소스는 이미 다 공개되어 버렸고, 심지어 커머셜 버젼으로도 사용할 수 있도록 저작권이 허용되어 있습니다. 대단하죠~ 여기서 제가 주저리주저리 이야기 하지 않아도, 그냥 검색 사이트에서 아두이노라고만 검색해 봐도 아주 많은 글들이 있습니다.^^ 그 중에서 저는 아두이노로 엔코더를 해석하는 부분을 (절대 소스 깊숙히 들어가지 않고, 그냥 사용하기 수준^^ 제가 항상 그러하듯이 말이죠^^) 오늘은 다뤄볼려고 합니다.

먼저 위 사이트에 가보면 [바로가기] 아두이노에서 엔코더를 해석하는 라이브러리를 배포하고 있습니다. 다운받아 압축을 풀고, 편하게 아두이노IDE 프로그램이 설치된 경로의 libraries 폴더 아래에 다른 라이브러리들과 함께 복사해 넣고, 아두이노 IDE를 재실행해주면 됩니다.

저는 Arduino UNO를 사용했습니다. UNO는 2번 3번이 인터럽트 포트입니다. 여기다 물려줘야 정확한 엔코더값을 읽을 수 있습니다. A,B상을 각 각 연결해주고, 제가 사용한 엔코더는 저전력에 5V를 사용하는 거라 그냥 UNO의 출력을 사용했습니다. 그나저나 Fritzing은 왜 딱 구미에 맞는 엔코더가 없는지..ㅠㅠ

실제 연결된 모습이구요. 모터는 연결하지 않고 그냥 손으로 살짝 돌려보았습니다.

간단한 연결이라 뭐 딱히 할 말이 없습니다. 그리고 Arduino IDE 프로그램에서 예제 읽어오기에서 Ecoder 예제를 하나 불렀습니다.

여기서 수정한건 오른쪽 하단 그림처럼 2, 3번을 왼쪽 코드처럼 지정해 준 것 뿐입니다. 그리고, 시리얼 모니터링 도구를 사용해서 관찰해보면, 저렇게 잘 카운팅되는 것을 확인할 수 있습니다. 고가의 고급형 컴파일러처럼 디버깅 도구를 제공하는 것은 아니지만, 자체적으로 시리얼 모니터링을 제공하고 있으니, 간편히 확인하기 좋더군요. ㅎ 이렇게 전 또 하나의 도구를 가지고 감명받고 있습니다. 왜~~~ 우리는 요런 멋드러진 아이를 만들 아이디어를 내지 못했을까 ... 하다가 그런 골치 아픈 일은 글로벌하게 멋진 분들이 하는 거고, 전 그냥 요런 아이들을 잘 쓰는 걸로 만족해야겠다... 라는 마인드로 바꾸었습니다. ㅎㅎㅎ


댓글을 달아 주세요

  1. BlogIcon 핑구야 날자 2013.08.28 21:50

    디버깅 도구가 있다면 훨신 코딩하기 편할텐데 말이죠

  2. BlogIcon 블루오션 2013.08.29 09:53

    잘보고 갑니다 ~
    즐거운 하루되세요 ^^

  3. 장발장 2013.09.24 18:20

    엔코더 값을 정확히 읽는 곳이 2, 3번 밖에 없나요?
    UNO 한개로는 엔코더 모터 하나밖에 정확히 구동할 수 없는건가요?

    • BlogIcon PinkWink 2013.09.24 19:28 신고

      http://arduino.cc/en/Main/ArduinoBoardUno
      에서도 나와 있지만
      UNO 보드의 외부 인터럽트는 딱 두개, 2,3번입니다. 엔코더는 둘다 사용해야하니 어쩔 수 없이 엔코더는 하나를 사용할 수 밖에는 없지요.

  4. 장발장 2013.10.15 16:41

    방향은 무시하고 엔코더 하나당 하나의 핀만 사용해서 ,, 두개의 엔코더 값을 읽을 수 있다는 얘기를 들은 거 같은데, 어렵네요..ㅎ

    • BlogIcon PinkWink 2013.10.15 19:16 신고

      엔코더의 A상만 연결해서 카운트한 결과를 읽으면 될듯합니다. 방향은 무시하구요.
      그런데 해보진 않았습니다.^^

  5. 베스트샷 2016.04.08 23:00

    안녕하세요? 엔코더를 구매하고자 하는데 처음 사용하는지라 어떤 것을 구매해야 아두이노와 호환되어 위와 같이 시리얼 모니터창에서 회전한 정도를 볼 수 있는지 모르겠습니다. 위에서 사용한 모델은 무엇인지 알려주시면 감사드릴게요

    • BlogIcon PinkWink 2016.04.09 07:27 신고

      엔코더는 대부분 비슷합니다. A-B상을 이용해서 방향과 위치를 검출하는 거라면 다 똑같은 거니까요...

    • 베스트샷 2016.04.11 15:16

      그렇군요.. Incremental 엔코더로 사용하던 absolute 엔코더로 사용하던 상관이 없나요? 핑크윙크님께서는 어떤 종류의 엔코더를 사용하셨었나요? 저도 자이로센서의 상보필터 파라미터를 구하기 위해 엔코더를 사용해야 하는데요..

    • BlogIcon PinkWink 2016.04.11 15:34 신고

      앱솔루트는 사용하기 어렵습니다. 통신방식으로 연결할 건지 bus로 읽을건지 등등에 따라 종류도 많구요. incremental형을 사용하시는게 간편하고 좋을 겁니다. 실험을 위해서라면 homing도 필요 없을 테니까요.

    • 베스트샷 2016.04.13 11:43

      친절한 답변 정말 감사드립니다^^

    • BlogIcon PinkWink 2016.04.14 09:52 신고

      도움이 되면 좋았을텐데요ㅠㅠ