January 22, 2018

디바이스마트 미디어:

아두이노에서 NT-ARSv1의 데이터 받기

아두이노 Arduino MEGA ADK에서 NT-ARSv1데이터를 받아서 각도(degree)로 환산하는 예제 코드입니다. 아두이노로 저희 NT-ARSv1를 다룰려고 하시는 분들께 도움이 될 수 있으면 좋겠습니다.

우리 연구소에서는 아주 예전에 Pitch와 Roll각도를 받을 수 있는 NT-ARSv1[바로가기]이라는 저가의 ARS 모듈을 출시했었습니다.

002

 

오늘은 여러 유저들께서 자주 요청하시던 아두이노에서 이 ARS의 데이터를 받는 예제를 공개할려고 합니다. 일단, 이 글에서 테스트 되는 아두이노 보드는 Arduino MEGA ADK[판매 페이지 바로가기]입니다.  왜 MEGA ADK 버젼을 사용했냐면, 저는 PC에서 데이터를 확인하고 싶었기 때문에 ARS와 시리얼 통신으로 연결될 여분의 시리얼 포트가 더 필요했기 때문입니다. Arduino MEGA ADK는 총 4개의 시리얼 포트를 가지고 있어서 선정했구요.

그런데 연결하다보니 약간의 문제를 만났네요. 어떤 문제냐면, NT-ARSv1의 시리얼통신 출력은 RS232신호로 나온다는 겁니다. 만약 UNO나 MEGA ADK의 기본 시리얼 포트에 연결한다면 문제가 없는데, 이 시리얼포트는 PC와의 연결및 모니터링으로 남겨두면, MEGA ADK의 나머지 시리얼포트는 UART신호로, 즉 TTL 레벨의 신호를 받는 포트들입니다. 그래서 할 수 없이 ILX232칩 처럼 RS232신호와 UART 신호를 변환하는 기능이 부가적으로 필요합니다. 직접 구현해도 되지만, LK EMBEDDED라는 회사의 변환모듈 URS232라는 모델[판매페이지 바로가기]을 그냥 사용했습니다.

004

그러나 이 아이도 약간 이상합니다. 판매페이지에서 이 회사가 제시하는 연결 포트들의 핀맵은 약간 혼돈이 올 수 있습니다. 일단

003

NT-ARSv1의 핀맵을 보면, 2번 3번의 TX, RX가 있습니다. 이걸 URS232라는 모듈의 RS의 RX, TX단자에 연결합니다. 이건 정상^^. 아래 연결도를 보시면

001

왜 Fritzing에서 사용자 지정 부품 만들기가 이리도 잘 안되는 걸까요..ㅠㅠ 그래서 그냥 메모지로 URS232와 NT-ARSv1을 표현했습니다. 제가 위에서 혼돈이 있을 수 있다는 것은 URS232의 TTL측 TX는 아두이노 ADK의 TX1에, URS232의 TTL측 RX는 ADK의 RX1에 연결해야합니다. 약간 혼돈스러워서 URS232모듈에서 사용하고 있는 ILX232N이라는 칩의 데이터시트와 비교해 보니, 이 모듈의 TTL측 핀맵에서 TTL_RX라고 표기되어 있는 부분은 실제로 output of recieve data 단자였습니다. 아무튼 어떤 이윤지는 몰라도 모듈 제조사는 이렇게 표현했네요. 그래서 위 그림처럼 결선하시면 아두이노 ADK 보드와 NT-ARSv1과의 연결을 위해 URS232를 사용할 수 있습니다. 이제 준비는 되었구요.

오늘의 목적인 NT-ARSv1의 데이터를 Arduino에서 읽기 위해 Arduino IDE에서 작성한 예제 코드를 보여드리면

입니다.

해당 코드에 대한 설명을 잠시 드리면, 먼저 사용자가 Arduino IDE의 시리얼모니터링을 켜서 테스트한다면, ARS의 명령을 입력하도록 하고 있습니다. 23번부터 26번행까지 설명되어 있지만, <CAO>라고 입력하면 데이터를 한 번 출력해 줍니다.

NT-ARSv1은 출력되는 데이터의 형식이 괄호로 쌓여서 <roll 각, pitch 각, roll 각속도, pitch 각속도>의 형태로 됩니다. 거기다 시리얼 통신으로 텍스트로 날라왔으니 문자입니다. 또 자릿수도 생각하고 부호도 생각해야합니다. 그 부분을 고려하는 코드들입니다. 그리고, 확인을 위해 각각 해당값을 출력하고 있구요. 이미 아두이노를 사용하고 계신 분들이라면 손쉽게 NT-ARSv1을 아두이노에서 사용하실 수 있을 것입니다.

위 코드를 실행하고,

005

시리얼모니터도구에서 <CAO> 라고 괄호포함해서 입력하면, 위 그림과 같은 출력을 볼 수 있습니다. 아두이노 예제는 앞으로도 많이 다뤄서 도움이 되도록 하겠습니다.^^

Comments
5 Responses to “아두이노에서 NT-ARSv1의 데이터 받기”
  1. 조영진 says:

    상황 : 고정물(1)

    고정물 (2)
    이런상황이고
    고정물1은 아래 고정물이 얼마나 돌아갔는지 알려주면서 다른 제어기기에서
    이동하라는 각도만큼 이동하도록 공기를 조절공급하는 부분입니다
    고정물2는 위 고정물1에서 공기를 받아 회전하는 부분입니다
    아래 고정물이 정해진 만큼 회전했는지 축을 통하여 검지하고자 합니다
    축 부위에는 충분히 센서를 고정시킬 수 있는 공간이 있습니다

    질문 : 상기 센서모듈로 각속도 및 회전량을 계측할 수 있을까요?
    회전각은 최대 90도 입니다.

  2. 방경훈 says:

    저희가 사용하는 atmega128에 TTL Level UART0라는 곳이 있는데 이곳에 연결하면 컨버터는 따로 사용안해도 되는것인가요?.

    그리고 저희가 하이퍼 터미널로 기울기의 값을 보려고하는데 밑에 보내주신 링크에 있는 프로그램으로 기울기의 값을 볼수있나요?

    http://www.ntrexgo.com/archives/12020 이 링크에 프로그램을 사용하면 되는건가요?

    • NTRexLAB says:

      위의 회로도에 있듯이 ARS는 RS232레벨의 신호가 출력됩니다. 그런데 아두이노에서 유일하게 RS232가 출력되는 곳은 예제에서 PC와 연결했기 때문에 별도로 RS232와 UART신호를 서로 변환하는 작은 모듈을 사용했습니다. 그것이 본문에 있는 URS232라는 제품입니다.
      그리고 말씀하신 공식 모니터링 프로그램과 연결하시기 위해서는 하나가 더 필요합니다. 말씀드렸듯이 NT-ARSv1은 출력이 RS232레벨입니다. 연결하시고자하는 PC에 RS232를 받는 단자가 있다면 전원만 신경써서 연결하시면 됩니다만, 만약 USB 단자에 연결하고자 하신다면, RS232신호와 USB신호를 변환하는 어댑터를 사용하셔야합니다.

  3. 신은총 says:

    nt-ars-v2 관련 질문있습니다.
    저는 현재 센서와 마이크로프로세서로 mbed를 사용하여 자세를 제어하는 밸런싱로봇을 제작중에 있는데요, 문제는 센서와 mbed의 통신을 할 수가 없다는 것입니다(센서에 ss=1 신호를 mbed에 줄 수 가 없고, 각도값을 mbed를 통해 띄울 수 없다던지).
    알아본바로는 위 포스트처럼 mbed의 uart방식과 센서의 rs232 의 차이인 것 같은데..그럼 저도 게시물과 같이 uart – rs232 와 같은 통신 모듈을 사용하여야 하는 걸까요? 통신모듈을 이용하여 mbed에서 센서로, 센서에서 mbed로 값을 입출력 가능할까요? mbed도 아두이노와 마찬가지로 uart 포트만 있습니다…

Leave A Comment

*