[아두이노 자작 쿼드콥터] 변속기와 아두이노 신호

Posted by Doony
2015. 8. 25. 14:38 아두이노 드론 프로젝트

아두이노 신호를 통해 변속기 스로틀 셋팅을 하는 방법을 알아보도록 하겠습니다. 보통은 조종기와, 그에 딸린 수신기를 바로 장착하여 스로틀 셋팅을 비교적 쉽게 할 수 있도록 되어있는데요.

저희는 조종기와 송수신기 따로 없이, 바로 아두이노를 통해 변속기에 신호를 주는 방법을 택했습니다.


다시한번 저희가 선택한 아이템들에 대해 설명드리자면..


변속기 - Skywalker Quattro 25a X 4

bldc모터 - 잘 기억이 안남

배터리 - 11.1V / 2800mAh

조종기 - 아두이노 우노와 블루투스 모듈 (이는 추후 라즈베리파이로 변경할 예정)


네 이렇습니다.


각 변속기마다 세팅하는 방법이 다 있는 것으로 알고 있는데, 스로틀 신호 주는 부분에서는 대부분 공통인 듯 합니다.

아두이노를 통해 조종기를 대신하여 스로틀 허브를 통해 변속기에 신호를 주어야 하는데, 이 신호가 거의 공통인 듯 하더라고요.


따라서 변속기마다 다를 수 있는 셋팅법 자체가 아니라, 신호를 어떻게 주는지 아두이노 코드의 관점에서 포스팅을 해볼게요.


바로 결론부터 말씀드리면, 신호는 PWM 신호로 들어가면 됩니다. 원래 PWM 신호라는 것은, 전압의 세기를 조절하기 위해 사용되는 방법 중 하나인데요. 조종기에서도 비슷한 방식으로, 즉 전압 차이를 통해 신호를 주고 받기 때문에 아두이노에서도 동일하게 해볼 수 있겠습니다.

duty cycle이라고 해서, 신호가 어떤 파형으로 들어가는 지에 대해 구체적으로 정해볼 수 있는데요.

제가 막 그림을 그려보자면..


이게 정지 상태, 즉 모터가 돌아가지 않을 때 조종기에서 주는 신호라고 보시면 됩니다. (조종기 = 아두이노)

그냥 0V를 쏴주는게 아니라, 1ms/20ms 비율 정도로는 전압이 흐르는 거라고 보시면 되겠네요. 아두이노의 경우는 5V가 최대치니까 이를 통해 계산해보면 전압도 구할 수 있겠네요.



이게 모터가 최고치로 돌아갈 때의 PWM 신호입니다.

차이를 아시겠나요? 정지는 1ms/20ms의 듀티를 가진다면, 최고 속도일때는 2ms/20ms 의 듀티를 가집니다. 두배인 셈이지요.



저희가 가진 변속기의 경우, 최고 속도일 때와 정지 상태일 때, 이 두가지 PWM 신호만을 가지고 모든 셋업을 할 수 있도록 되어 있었습니다.

그래서 아두이노 코드도 간단하게 짜보았는데요.


아두이노 변속기 코드는 아래와 같습니다.






int r=0;

void setup() {

  pinMode(6, OUTPUT);

  digitalWrite(6, LOW);

  Serial.begin(9600);

}


void loop() {

 

  if (r==1){

    digitalWrite(6, HIGH);

    delay(1);

    digitalWrite(6,LOW);

    delay(19);

  }

  if (r==2){

    digitalWrite(6,HIGH);

    delay(2);

    digitalWrite(6, LOW);

    delay(18);

  }

  Serial.println(r);


}


void serialEvent() 

{

  while(Serial.available()){

    r=Serial.parseInt(); 

  }    

}





먼저 조금씩 살펴보도록 하죠. 저희는 원하는대로, 실제 조종기에서 스로틀을 위아래로 조정하는 것처럼 아두이노 신호를 조작할 필요가 있었습니다. 그래서 시리얼 통신을 통해, 제가 입력한 값으로 위 아래를 표현해보았는데요.


Serial.parseInt() 는 시리얼 통신으로 제가 입력한 값을 정수 형태로 받아들이라는 함수입니다.

이를 통해 제가 입력한 값을 1, 2로 나누어 케이스를 두가지 만든거죠.

그래서 loop문 안에 그 두가지에 해당하는 경우가 써있습니다.


r=1 일때는 정지 상태로, 간단하게 delay를 써서 PWM 신호를 만들었습니다.

r=2 일때는 최고속 상태로, 역시 delay를 써서 PWM 신호를 만들었습니다.


모두 6번 핀을 통해 신호를 보내는 방식입니다. (아두이노 우노에서 6번핀은 PWM신호를 지원하는데, analogWrite 함수를 통해서 해당 duty ratio에 맞게 해본 결과, 잘 되지 않았습니다. 왜 그런지는 좀 더 연구해봐야 알듯)


변속기 셋팅 정도 할 때는 애초에 코드가 너무 간단하기 때문에, 그냥 delay를 사용해도 무방하다고 합니다. 이후 pid 제어와 같이 코드가 길어질 경우에는 되도록 delay를 사용하지 않고, 인터럽트를 쓰는 편이 좋지 않을까 싶네요.




이렇게 시리얼 통신으로 1 또는 2 값 입력을 통해 조종기가 위아래를 향하는 것과 똑같은 결과를 만들어볼 수 있었습니다. 결과적으로 변속기 셋팅도 완벽하게 할 수 있었죠. (혹시 이 변속기에 대해 더 궁금하시다면 따로 댓글 부탁드립니다.)



이제 아두이노를 통해 정지 상태와, 최고속도를 구현하는 법을 배웠네요.

그렇다면, 중간 속도는 어떻게 낼까요?


PWM 신호로 모두 결정이 됩니다. 1ms보단 길고 2ms보단 짧으면 중간 속도로 날겠지요?
저는 변속기 셋팅을 위해서 시리얼 통신 값을 1 혹은 2만 의미가 있게 했지만, 아예 받는 값 자체를 duty라는 변수로 새로 두고 이를 통해 delay 내부에 사용한다면, 원하는 중간 속도를 낼 수 있을 것입니다.




이제 코드에 대해 알아보았으니, 어떻게 전선들을 연결했는지 알아볼까요?

이건 사진을 못찍어둬서.. 다음 포스팅에서 하는 것으로 !!!

맛보기로 영상 하나 투척합니다.





엄청난 추력입니다. 혹시나 안잡아놓고 돌렸다간 후회하실 겁니다.. 바로 날아가거든요. 손으로 잡고 있는데도 붕 뜨네요.


암튼, 다음포스팅에서 계속됩니다!



[아두이노 자작 쿼드콥터] 배터리에 대한 탐구

Posted by Doony
2015. 8. 25. 14:06 아두이노 드론 프로젝트

이번 포스팅에서는 배터리에 대해 알아보도록 하겠습니다.

저희도 처음 이런 것들을 접하는지라.. 이곳저곳에서 끌어모은 정보를 바탕으로 설명드린다는 점을 먼저 말씀드리고..


저희가 사용할 배터리는 11.1V LiPo   2800mAh 입니다. 배터리 충전기로는 Hitec ad/dc mf charger 을 선택하였습니다.


배터리 먼저 볼까요?




배터리는 크게 두 부분으로 나눌 수 있습니다. +- 단자와, 밸런싱을 위한 단자입니다. +-는 말그대로 충전 시 충전기와 연결하거나, 혹은 드론 운행 시 변속기에 전원을 공급해준다고 보시면 됩니다.

밸런싱 단자가 중요한데, 밸런싱 단자는 드론 운행시에는 사용하지 않는 것으로 알고 있습니다. 다만 각 셀이 (제 배터리는 3cell입니다) 균형있게 충,방전되도록 하는 역할을 하는 것으로 알고 있습니다. 


라서 배터리 충전기와 이 부분을 잘 연결해주어야 하는데요.

저희가 어디서 들은 정보에 의하면, 이 부분을 잘못 연결하면 배터리 사망할수도 있으니 조심하라고...


사망안나도록, 조심해야겠죠??



배터리 충전기인 HITEC ad/dc charger에는 위와 같은 어댑터가 하나 들어있습니다. 밑을 보아하니 HP/PQ adaptor라고 쓰여있네요. 바로 밸런싱을 위한 장치입니다. 우선 배터리 충전기와 잘 연결해주도록 합니다. (접지를 잘 맞출 것)

저희는 3S이기 때문에 위에 적힌대로 3S에 배터리 밸런싱 부분을 보았는데.. 


이럴수가!!

배터리에서 나오는 선은 4개인데, 어댑터에는 5개가 있네요.

네 그렇습니다. 하나는 사용하지 않는 핀인 것인데요. 위에서부터 순서대로 GND/X/1/2/3 이라고 보시면 됩니다. 이 순서대로 배터리에서도 나오니까 순서 그대로 꼽아주시면 됩니다. 두번째에는 아무것도 꼽지 마세요!

그리고 hitec 충전기에서 한번 배터리 잔량을 확인해봅시다.



배터리 충전기에 대한 리뷰는 유투브에 많이 있으므로 패스. 설명서도 비교적 잘 되어 있습니다.

보시다시피 3S이기 때문에, 각 셀에 해당하는 전압이 적혀 있습니다.

그리고 버튼을 하나 밀어보면..




보시다시피 총 전압과, 각 셀에서의 최고(HIGH)/최저(LOW) 전압을 보여주는 것을 알 수 있습니다.


경험이 없다보니, 배터리 하나 알아가는데도 정말 많은 시간이 걸리는 것 같습니다. 우선 만땅 차있다고 판단해서 저희는 충전하는 과정 없이 바로 모터 돌리기로 방향을 잡아보았는데요.


아두이노를 통해 모터를 제어하는 방법에 대해 다음 포스팅에서 탐구해보도록 하죠.


[아두이노 자작 쿼드콥터] 변속기와 모터 연결

Posted by Doony
2015. 8. 25. 13:56 아두이노 드론 프로젝트

보통 드론에 조종기가 같이 딸려있죠?

자작으로 만드시는 분들 중에도 조종기를 사용하시는 분들이 있고..

아두이노와 같은 프로세서들을 통해서 다른 방식으로 조종기를 만드시는 분들도 있습니다.


저 역시 아두이노를 활용해서 쿼드콥터를 제어할 생각이기 때문에, 이와 관련된 포스팅을 해볼까 합니다.


제가 사용한 변속기는

skywalker quattro 25a X 4 라고 해서, 4개의 변속기가 하나로 통합되어 있는 형태입니다. 별도의 전원배분 장치가 필요하지 않기 때문에 비교적 깔끔하게 디자인을 완성할 수 있는데요.



네 바로 요놈이죠. 보시다시피 배터리와 연결할 +- 단자가 각각 있고, 스로틀 및 셋업을 위한 S1,S2,S3,S4 에서 나온 선이 보입니다.

그리고 M1 ~ M4는 아시다시피 모터 4개를 의미합니다. 스로틀 설정을 위해 설명서가 한장 들어있습니다. 다만 다 영어이고.. 저희처럼 처음 하시는 분들에게는 좀 어려울 것 같아 직접 자세히 설명드립니다.


1. 먼저 변속기와 각 모터를 연결해봅시다.



보시다시피 말입니다.

각 모터와 M1 ~ M4는 다 연결되면 되고, 순서는 상관없습니다. 배터리 단자는 말그대로 배터리와 연결될 것이기에 우선 놔두고, S1~S4 부분은, 이에 해당하는 스로틀 장치(리시버)가 하나 있는데 그 곳에 사진처럼 연결해줍니다.

(사진에는 중앙 하단에 보이는 작은 장치)


이제 해야할 일은 두가지입니다.

첫번째, 배터리를 연결해야한다. 이를 위해서는 배터리 연결법과 배터리 잔량 확인 등이 필요합니다.

두번째, 아두이노를 통해 리시버 파트에 신호를 주어야 합니다. 이를 위해서는 실제 조종기 등이 어떻게 신호를 주는 지 알아야겠죠?




이 사진에서는 우측에 좀 더 리시버가 보이네요. 리시버는 +-S 부분으로 되어있는데, 각각에 맞추어 장착하시면 됩니다. 순서는 상관없고요.


아래는 구글이미지에서 퍼왔습니다.



이게 제가 말씀드린 스로틀 장치, 스로틀 허브입니다. 


자 이제 변속기와 모터는 연결하였습니다.

배터리에 연결하는 것과, 스로틀 허브를 통해 신호를 주는 것에 대해도 살펴보아야 하는데요.

이는 다음 포스팅에서 이어서 계속 하도록 하겠습니다!!