프로젝트

아두이노 서보모터와 ADXL335로 짐벌을 만들어 볼 수 있을까?

페이지 정보

작성자 용용죽겠지 작성일17-04-14 02:27 조회5,699회 댓글0건

본문

안녕하세요 메카솔루션입니다.


이번에는 뭐랄까 '아.. 이게 되는 구나...' 같은 생각이 드는 프로젝트를 준비 해왔습니다.


지난 일요일에 친가를 방문하고 기차타고 대구로 돌아오는데 기차안이 너무 심심한 나머지 이것저것 많은 생각을 해보았습니다.


그러다가 문득 아날로그 가속도 센서(중력센서) 와 서보모터를 바로 연결 해보면 어떨까.. 하는 아이디어를 떠올렸습니다.


아두이노의 서보모터의 동작 구조는 다음과 같습니다.


 

내부에 있는 가변저항이 서보 각도에 따른 아날로그 값을 내보내 줘서 서보가 이를 통해 제어가 됩니다.


그런데 거기서 가변저항을 없애고 아날로그 가속도 센서 ADXL335를 연결한 것이지요


그렇게 되면 가변저항이 기준이 아니라 지구 중력이 기준이 되겠지요?


 

서보모터를 열어서 위와같이 ADXL335의 한축을 센서에 연결해 보았습니다.



이렇게 기울기가 바뀌면 수평을 유지하기 위해 서보모터가 회전하면서 균형을 잡습니다.



잠시만.. 그럼 아두이노 소스코드는 어떻게 돌까요?


#include <Servo.h>


Servo servo;

Servo servo2;


void setup() {

  Serial.begin(9600);

  servo.attach(A0);

  servo.writeMicroseconds(1900);

  servo2.attach(A1);

  servo2.writeMicroseconds(1900);

}


void loop() {

}


기대했던 바와는 다르게 소스코든느 아무것도 없습니다.


writeMicroseconsds 의 의미는 서보모터의 제어값을 의미합니다.


기본적으로는 각도 제어에 대한 범위를 0v ~ 5v으로 사용하지만 ADXL335의 값을 기준으로 할경우 ADXL335는 아날로그 3.3v센서이기 때문에 0~5v가 아니라0~3.3v정도가 센서의 기본값이 되기때문에 이를 따라가서 1500(중앙값)의 값이 아닌 1900정도의 비뚤어진 값이 ADXL335의 수평을 나타내는 중앙값 되는 것입니다.



동작 결과 분석 


그리고 두개의 서보모터를 이용해서 균형을 잡아보면 기울기를 변형을 시작하기는 하는데 전압이나 반응속도가 이를 통과하지 못하는것으로 확인했습니다.


크고 작은 떨림이나 느린 반응 속도.. 이의 원인을 알아본다면 ADXL335가 0~3.3v 범위의 아날로그 출력을 한다는 점과 서보모터는 0~5v 범위의 아날로그 신호로 각도를 제어한 다는 점에서 작은 차이만 가지고 모터를 제어하려하니 반응속도가 늦는 것은 당연한것 같고 떨림은 전류부족등의 회로적인 부분을 좀더 관리해야 할듯합니다. 아마 콘덴서를 더 달아주거나 아날로그신호를 중폭하는 회로를 추가하는등...


이번에는 서보모터로 짐벌을 만드는 것보다 서보모터의 동작원리를 다른 관점으로도 한번 이해해 볼 수 있었던 기회가 아니였나 생각됩니다.


감사합니다.

댓글목록

등록된 댓글이 없습니다.


모바일 버전으로 보기