본문 바로가기
Developer/Drone DIY

드론 DIY | 소형 드론 모터 구동하기

by Doony 2017. 2. 4.

​소형 드론 모터 구동하기 (DC모터)



보통 드론은 bldc모터를 사용한다. 내가 작년에 만들었던 450급 드론 역시 bldc 모터를 사용했는데, 이번에 구매한 소형 드론의 경우 bldc가 아닌 dc모터를 사용한다. 보통 bldc모터는 수명이 길고 열 발생이 dc모터에 비해 낮다는 얘기가 있는데, 소형드론의 경우 아무래도 크기가 작은 만큼 굳이 그럴 필요가 없었나보다.


아무튼, 내가 구매한 모터는 온라인 드론 쇼핑몰에서 구매한 작은 모터이고, 3.7V가 정격전압인 듯 하다. 세트로 묶여있는 배터리까진 구매했는데.. 문제는 모터드라이브였다. 충분한 전력량을(어쩌면 소형이라 아두이노에서도 충분했을수도 있지만) 뽑아내기 위해서는 모터드라이브가 필요한데, 문제는 저전압에서 작동할 수 있는 모터드라이브가..


있었다!!

LB1630. 지금은 생산중단이래나.. 이런 얘기도 들었는데 아무튼 인터넷에 팔고 있었다. 모터드라이브 원리를 잘못 이해한 부분 때문에 , 4개 모터에 사용할 것을 드라이브 2개만 구매했었는데, 어제 다시 조사해보니 모터 1개당 1개를 써야함이 맞더라. 아두이노에서 디지털핀 1개만 써도 된다는 것이었지, 드라이브 한 개당 모터 2개는 아니었던.


암튼, 데이터 시트는 첨부를 보면 된다. 핀 연결을 어떻게 해야하는지 나와있다.


시트에 보면 샘플 회로도라고, 마지막에 올려놓은 게 있는데 그거 따라서 올리면 된다.



핀 기준은 좌측 아래 동그라미 표시를 보면 된다. 간혹 표기가 안되어있는 게 있기도 하던데.. 운에 맡겨야...... (내 경우, 저 위에 LB1630이란 폰트가 그대로 쓰여있더라. 즉 폰트 기준으로 좌측 하단이 동그라미라고 보면 될듯)

동그라미 부분이 1번, 반시계방향으로 쭉 2,3,4,5,6,7,8 번 순이다.

이걸 어떻게 연결하냐면,


이렇게 연결한다. 왼쪽 그림에서 핀 넘버를 보면 되고, 우측 그림처럼 회로를 연결하면 된다. 3.3V는 아두이노에서 3.3V를 의미한다. LB1630 작동 전압에 맞춰서 넣은 것. OUT1, OUT2는 모터의 +- 극에 각각 연결하면 되나, 어차피 드론은 한방향으로만 회전하기 때문에 둘 중에 하나는 LOW로 입력신호만 주고, 굳이 모터와 연결할 필요는 없다. (모터의 다른 극은 접지에 연결하면 된다.)



보기 아주 힘든 회로 그림. 지금 모터 2개를 연결해놓은 터라 생긴게 좀 더럽다. 나 같은 경우 아두이노 메가로 테스트하기로 했고, 디지털 핀 6,7에 연결했다.


모터 장착의 허접함. 새로 이사온 집이라 납땜질 하긴 좀 그렇고.. (인두기도 어디로 갔는지 보이지 않는다..) 직접 선 따서 대충 꼬아만 놓은건데 모터 선이 너무 얇아서 저렇게 결쳐놓을 수밖에 없었다.

암튼, 글 초반에 언급했듯이 이건 잘못된 테스트였다. 즉, 모터 두개가 아니라 하나만 했어야하는데... 이 포스팅을 보고 비슷하게 dc 모터를 제어하시는 분은, 위 사진에서 모터 하나만 빼고 진행하시면 된다.

우측 모터의 초록색 선을 빼서 좌측 모터의 빨간 선과 바꾸기만 하면 끝! 



아두이노 모터 연결 상태.​


​모터가 힘겹게 버텨 있다..

소형 드론 모터라고 해서 그래도 중간 사이즈 드론일줄알았는데 구매하고 보니 진짜 손바닥만한 드론이었다는.ㅠㅠ 

​LB1630 회로


모터 하나만 연결한다면 위와같은 상태가 될 것이다.


이제 이 작은 모터 속도를 조절해보는 코드를 돌려보도록 하자.

double a = 0;


void setup() {

  Serial.begin(9600);

  pinMode(6, OUTPUT);

  pinMode(7, OUTPUT);

  digitalWrite(6, LOW);

  digitalWrite(7, LOW);

  Serial.setTimeout(5);

}


void loop() {

  Serial.println(a);

  analogWrite(6, a);

}


void serialEvent() {

  while (Serial.available()) {

    a = Serial.parseInt();

  }

}

코드는 매우 단순하다. 

1. a라는 변수를 통해 속도를 제어할 것.

2. 시리얼 모니터로 a를 입력받을 것. (정수형태로 입력.)

3. 루프 내, a값에 따라 analogWrite 함수가 6번 핀에 작동되도록 설정. 


analogWrite 함수는 0~255까지의 범위만 입력받기 때문에 이 범위에 속하는 숫자만 입력해야한다.

코드를 업로드하고 값을 입력해보면, a 값에 따라 속도가 변하는 것을 볼 수 있다. 만약 모터 회전 방향이 반대로 돈다면 회로에서 모터 극만 서로 바꿔서 연결해주면 된다.

댓글