가속도 센서, 자이로 센서를 이용한 밸런싱 로봇 제작.

글 내용


2009년에 동아리 프로젝트로 시작한 밸런싱 로봇 제작.
아무것도 모르고 시작해서 대충 로봇 형태까지는 갖추었고, 로봇이 중심을 잡으려고 용쓰는상태까지 만들었다.
그 후............제작중단............ㅋㅋ (프로그램실력이 딸려서;)
 
NTC AM-3AXIS 가속도 센서와  무라타 ENC-03MA 자이로센서를 사용, 기어박스와 4AA배터리케이스 2개,
기어박스와 자체 설계한 PCB를 조립해 만든 밸런싱 로봇!!

큰 바퀴, 기어박스와 졸 비싼 모터, 배터리팩을 이용해 그럴듯한 바디를 만들었다.


이렇게 바디를 만들고 PCB를 제작했다.
MCU는 Atmega128L을 사용했다. 전원은 AA사이즈 건전지 4개를 직렬로 연결한 배터리케이스가 2개 사용되었으며 하나는 회로동작을 위해 PCB의 레귤레이터쪽으로 연결되고, 다른 하나는 모터 구동을위해 LB1630으로 연결된다.
 
모터 드라이버는 LB1630을 사용했다. 양쪽 바퀴가 따로 움직일수도 있다고 생각되어 OCR0, 2 핀 두개를 각각 모터드라이버에 하나씩 연결하고 OCR핀의 신호를 74HC04를 사용해 반전된 신호를 Vin2에 연결한다. 이럴경우 분주비를 128로 했을때 모터는 정지하게 되며, 0으로 가까워질수록 역회전으로 빨리 회전하며, 255로 가까워질수록 정회전으로 빨라진다.  회로는 아래와 같다.

LB1630과 74HC04 회로

센서는 AM-3AXIS라는 NTC社의 3축 가속도 센서를 사용했다. 이 센서는 X, Y, Z축의 가속도를 측정할수 있으나 본 프로젝트에서는 X축 하나만 사용했다. 경우에 따라 Z축을 같이 쓰거나 3축을 한꺼번에 써도 된다. 이를 위해서 PCB에서는 각 축의 출력값을 PORTF에 각각 연결해놓았다.
또한 무라타의 ENC-03MA 자이로 센서도 사용되는데, 가속도센서의값을 보상해주기 위해 같이 사용한다.
두 센서의 값은 모두 아날로그로 출력되며, ATmega128의 ADC기능을 사용해 값을 받아들인다.  ENC-03MA는 출력값이 작기 때문에 OP-AMP를 사용해 출력값을 증폭한다. OP-AMP는 NJM2115를 사용한다. 증폭 회로는 아래와 같다.

OP-AMP를 사용한 증폭회로

이 회로를 사용해 출력되는 값을 ADC로 확인해볼때 정지상태에서 약 402값을 유지하고 있다. 회전하는 속도에 따라 값이 달라진다.

이제 위 모든 사항들을 종합해 PCB를 제작한다. PCB는 기구에 장착할수 있도록 나사 Hole을 만들었으며, 위에서 봤을때 기구의 면적을 초과하지 않게 설계하였다.

직접 설계한 PCB와 제작된 PCB

이제 펌웨어 제작을 해야한다.

펌웨어 제작은 AVR Studio4와 WinAVR을 이용하여 제작한다. 코딩은 C언어를 사용한다. 여기서 주로 사용되는 ATmega128의 기능은 ADC와 PWM이다. 코딩실력은 많이 부족해 여기서 내세울게 못된다.ㅡㅡ;;

이제 완성된 하드웨어를 보자

완성된 밸런싱 로봇

OP-AMP 패키지를 잘못그려 점프선으로 연결했다;;;
결과적으로 제대로 동작은 하지 않는다... 하지만 열심히 일어서 보려고 발버둥치는 모습을 보여주는것이 무척이나 기특하다.
조금 더 공부해서 펌웨어를 완성하면 세울수도 있을것 같으나.......  이놈의 귀차니즘... 아니.. 다른거 할게 많아서라고 해두자.
(제가 쫌 바쁨.)
 
프로그래밍실력이 부족해 짜놓은 소스는 창피해서 공개를 못함을 이해해주기 바란다.
언젠가 제대로 동작시켜볼것이다........................................ㅋㅋㅋㅋㅋ

  1. user picture
    무라다 자이로에 amp 에 노이지때문일겁니다.
    엠프제거후에 ref 값을 낮추어 해보시면 잘될거 같기도 합니다만..
    • user picture
      회로는 datasheet에 있는대로 최대한 따라한겁니다...
      노이즈는 오실로스코프로 확인해 보진 않았지만 같이 쓴 가속도 센서보다는 훨씬 안정적이었습니다.
      결국은 제 저질 프로그래밍 실력 때문이지요.ㅜ.ㅜ
  2. user picture
    형 안녕하세요 ~ ㅋ 좋은 정보 잘 보고 갑니다 ~
  3. user picture
    이게 근데 어딜봐서 밸런싱 로봇인거죠? 이건그냥 두바퀴가달린 로봇같은데
    높이가 너무낮아서 밸런싱 이라는걸 하지도 않는걸로보이는데....
    • user picture
      뭘보신거죠? 제대로 보긴 하신건가요? 높이가 낮으면 밸런싱할수없나요? 높이에 따른 밸런싱로봇 구분 방법이 있나요? 높이가 높으면 밸런싱로봇, 낮으면 그냥 두바퀴달린 로봇.....
      밸런싱로봇이뭔지 알아보고 오시죠
  4. user picture
    코드 참고해도 될까요?
    그래도 만드신것만으로도 대단하신데 ^^
    부탁드립니다.
    staybesideyou@hanmail.net 으로 부탁드립니다.

티스토리 툴바