설계의 기초, 고체 역학

Posted by Doony
2015. 9. 18. 01:07 Mechanical Engineering

오늘은 기계공학과에서 배우는 4대 역학 (고체역학, 열역학, 유체역학, 동역학)중 하나인 

고체역학에 대해 간단히 얘기해볼까 합니다. 지식을 전달하기 보다는 어떠한 과목인지 대략적으로 알수 있도록 간단하게 설명해드리려고 해요. 

(아라미르 드론 포스팅도 조금 미뤄졌는데 조만간 포스팅 하겠습니다.)


우선 연세대학교 기계공학과에서는 2학년 때부터 전공 공부를 시작하게 됩니다.

그럼 1학년 때는 무얼 하냐구요? 

1학년 때는 수학, 물리, 화학 (또는 생물), 영어, 글쓰기 등 기초 과목을 들으며 소양을 쌓게 됩니다. 

1학년 때 듣는 대부분의 과목의 경우 고등학교 범위와 겹치기 때문에 고등학교 때 열심히 공부했던 학생은

조금 수월하게 학교를 다닐 수 있게 됩니다. 학업 이외의 동아리 같은 다양한 활동을 경험할 수 있는 기회가 되지요. 

반면 수업이 조금 지루하게 느껴질 수도 있고 많은 남학생들이 1학년을 마치고 군대를 가기 때문에 전공을 제대로 접하지 못하고 군대에 가게 되는 단점도 있습니다. 여담이지만 군대에 가게 되면 진로에 대한 고민을 참 많이 합니다.

저 또한 그랬는데, 당시 전공을 제대로 접해보지 못했기에 기계공학이 제 적성에 맞는지 판단이 잘 서지 않더라구요.

기계공학 개론으로 인해 후배들이 저희와 같은 문제를 겪지 않으면 좋겠습니다. 잡설이 길었습니다. 


고체 역학은 이름에서도 알 수 있듯이 고체에 응력이 작용했을 때 발생하는 변형에 대해 공부하는 과목입니다. 

Stress(응력)는 단위 면적당 작용하는 힘인데요. 해당 면적에 수직 방향으로 작용하는 normal stress(수직 응력)와 수평 방향으로 작용하는 shear stress(전단 응력)가 있습니다. 이러한 응력이 물체에 작용하게 되면 물체에 변형 (체적 및 모양의 변화)이 발생하게 됩니다. 


고체에 작용하는 응력과 변형률의 관계를 그래프로 나타내면 많은 경우 다음과 같이 나타납니다. (모든 고체가 이러한 관계를 보이지는 않아요!) 기계공학과에서 가장 많이 보는 그래프 중 하나인데요. 





위 그래프의 빨간색으로 표시된 부분을 유심히 보시길 바랍니다. 

1) Yield Point (Strength) 이전의 영역은 탄성 구간입니다. 고체가 장력으로 인해 늘어나더라도 장력이 제거되는 순간 본래의 형태로 되돌아옵니다. 이 point (strength)를 지나는 순간 외부에서 작용하는 힘이 없어지더라도 고체는 본래의 모습을 찾지 못합니다. 너무 많이 잡아당긴 고무줄을 연상하시면 쉽게 이해되실 거 같습니다.

2) Ultimate Strength는 재료가 절단되기 전 견디는 최대 응력입니다. 이 구간이 지나면 재료는 엿가락이 늘어지듯이 직경이 줄어들면서 결국 마지막 단계인 3) Fracture, 파괴 단계에 도달합니다.



이러한 재료의 성질에 대해 이해하는 것은 상당히 중요합니다. 특히, 안전한 설계를 하기 위해서는 물질에 작용하는 응력을 특정 구간 이상 넘어가지 않도록 제한하는데요. 이를 반영한 것이 안전 계수 (factor of safety)입니다. 안전계수는 다음과 같이 정의됩니다.



안전 계수가 1을 넘지 못하면 실제 작용하는 응력이 물질이 견딜 수 있는 최대 응력보다 크기 때문에 잘못된 설계가 되겠죠? 반면 안전 계수가 클수록 안전하지만 너무 큰 안전 계수에 맞춰 설계를 하면 '오버디자인'이 되버려 비효율적인 설계가 되버리고 맙니다. 




응력은 여러 형태로 고체에 작용할 수 있는데요. 

1) Bending 



2) Transverse Shear 

3) Torsion 

4) Axial Loading


고체 역학에서는 위의 예시를 비롯하여 여러 상황에서 다르게 작용하는 응력과 이에 따른 재료의 거동에 대해 공부합니다. 재료의 어떠한 부분에 가장 큰 응력이 작용하는지 또 그 응력이 크기는 얼마인지 등을 공부하는 것이지요. 이를 기반으로 하여 주어진 조건 및 환경에서 안전하고 효율적이 설계를 하기 위해서 말이죠.


이상 아주 간략한 고체 역학 얘기를 마치겠습니다. 다음에는 열역학에 대해 얘기해 보겠습니다. 







[아두이노 자작 쿼드콥터] 변속기 장착, 배터리 성능 테스트

Posted by Doony
2015. 8. 27. 19:17 아두이노 드론 프로젝트

이틀 전에 모여 모터의 회전을 확인한 후, 오늘도 만나 몇가지 실험을 해봤습니다.


우선 변속기의 상태가 너무 지저분하였는데..



후우.. 전선이 너무 대충 널부려져있는 모습입니다. 이틀 전에야 bldc 모터의 회전 자체만을 확인하는 과정이었기 때문에 이럴수밖에요.


그래서 오늘은, 좀 정리를 해보았습니다! 우선 모든 선의 중심이 되는 변속기의 자리를 잡은 후 선정리를 하였는데요.

인터넷에 찾아보니깐 다들 뼈대를 여러번 감싸면서 선을 깔끔하게 두시더라고요. 그래서 저희도 좀 따라했는데..



일단 변속기를 모터에서 모두 분리합니다. 저게 은근히 뻑뻑해서 빼는데도 약간 힘이 드네요!!




변속기 선을 가지런히 정리한 후, 프레임 안으로 깔끔하게 집어넣은 후, 다시 나사를 조입니다. 그런데 프레임이 저렴한 것이라 그런지, 저게 정말 뻑뻑하네요. 육각 렌치로 해야하는데.. 크기도 작고 마모가 발생해서 쉽게 조여지지 않더군요.

아무튼 일단 고정 자체가 목적이었으므로 계속 진행하도록 합니다.



볼트너트를 이용해서 고정을 해볼까도 했는데, 케이블 타이로도 충분히 강력하게 고정이 될 것 같아 이로 해결했습니다.

양쪽에서 두번 크로스로 잡아주니, 아주 강력하게 지탱이 되네요!! 깔끔하게 장착된 모습에 기분이 좋습니다 후후




장착 후의 모습..

밑에 상자는 저희가 bldc 출력 테스트를 위해 만들어본 임시 결과물입니다. 

이전 포스팅에서 설명했던것처럼, 모터의 출력은 PWM 신호를 통해 결정하는데요. 5%~10% 사이의 duty cycle을 통해 출력 범위가 제한되어 있기 때문에 아두이노로 이를 설정하는 코드를 짜보았습니다.


한번 보실까요?





int r=0;

void setup() {

  // put your setup code here, to run once:

pinMode(6, OUTPUT); //출력은 디지털 핀 6번을 통해..

digitalWrite(6, LOW); //초기 값은 LOW로 쏴줍니다.

Serial.begin(9600); //시리얼 통신을 시작합니다.

}


void serialEvent() 

{

  while(Serial.available()){ //시리얼 통신을 하는 동안

    r=Serial.parseInt(); // r 이란 변수에 입력값을 '정수형'으로 저장합니다. r값이 곧 출력값이 될거에요.

  }    

}



void loop() {

  // put your main code here, to run repeatedly:


  

  Serial.println(r); //모니터링을 위해 현재 출력값을 출력

  

  digitalWrite(6, HIGH); // 6번핀에 HIGH

  delayMicroseconds(r); // 입력한 r 마이크로초 만큼 HIGH가 입력됨

  digitalWrite(6, LOW); // 그 후 LOW를 쏴줌

  delayMicroseconds(20000-r); // 최대 출력치였던 20000(10%)에서 입력값인 r을 빼준 시간만큼 딜레이.


}





주석을 달아보긴 했는데.. 어떤 의미인지 아시겠나요?

원래 모터 정지 = 1ms/20ms이고, 모터 최대 속력 = 2ms/20ms 였습니다. 각각 5%와 10%인 셈이지요.

20ms는 마이크로초로 하면 20000초가 됩니다. 그래서 위에 20000이란 수치가 나온 것이구요.


제가 r값으로 1000을 입력하면 모터는 정지해있을 거고, 2000을 입력하면 최고속으로 돌겠죠?

이를 실험해본 것입니다. 1000~2000 사이값 입력을 통해 모터 출력 정도를 확인해보려고요.




위 화면은 제가 r 값으로 2000을 입력했을 때네요. 모터 사진은 안찍었지만, 이 때 모터는 최고속력으로 돌고 있습니다.



이렇게 1000을 입력하면, 정지하게 되는 것이죠.

이 테스트를 해본 목적은, 어느 정도 입력치로부터 모터가 회전하는지, 얼마나 큰 추력을 가지는지를 확인해보고자 했기 때문입니다.

결과적으로 수치는 1160~70 정도까지는 dead zone에 머물러있었습니다. dead zone이란, 모터에 걸리는 전압이 너무 작아서 모터 회전에 필요한 힘이 부족한 것인데요. 따라서 이보다 더 큰 수치를 입력하게 되면 모터가 회전하는 것을 볼 수 있었습니다.


기록해놓진 않았지만, 1400~1500정도부터 (2개 프로펠러) 동체가 뜨기 시작했어요. 2000은 말할 것도 없이 최고속도를 잘 보여주었습니다.




이제 해야할 일은 뭘까요?

저희가 위에서 한 테스트는, 4개의 모터에 모두 동일한 신호가 들어간 것입니다. 그러나 실제 PID 제어를 위해서는 당연히 4개 모터 출력을 각각 조절할 수 있어야하는데요. 그 경우에는 변속기에 딸린 throttle hub를 사용하는 것이 아니라, 변속기에서 내보내는 4개의 S 핀들을 각각 아두이노로 꼽으면 되겠네요! 

가속도, 자이로 센서 등의 값을 입력받는 것을 좀 실험해보면 그 결과값들을 토대로 pid 제어를 사용할 수 있을 것 같습니다.




자.. 변속기 테스트를 마친 우리는 .. 생각보다 모임이 너무 빨리 끝나는게 아닌가 싶어 한가지 더 해보았는데요.

바로 배터리 성능테스트입니다.


LiPo, 즉 리튬폴리머 배터리는 (11.1V / 3셀 기준으로) 9V 이하로 떨어지게 되면, 즉 각 셀당 3V 이하로 떨어지게 되면 충전이 안된다고 하네요. 그 이하로 떨어지면 배터리가 사망한다고..

(물론 방법은 있지만, 약간 위험가능성이 있어보입니다. 안전하게 하기 위해선 9V 이상으로는 늘 유지를 해주어야겠네요)


그래서 어느정도 비행시간이 지나면 전압이 떨어지는 지를 확인해볼 필요가 있었습니다.




배터리 테스트를 위한 장비입니다.

어떻게 하느냐? 방법은 간단합니다.


1. 배터리 충전기를 준비합니다. 저희가 사용한 hitec ad/dc charger는 충전 혹은 방전량을 실시간으로 체크하는 기능이 있어서 이를 사용하면서 배터리 전압을 측정할 수 있었습니다.


2. bldc모터를 최고속도로 돌립니다. 위에서 테스트했던 대로 그대로 돌리는 것입니다.


즉, 모터를 최고속으로 돌리는 건데, 거기다 배터리 잔량만 측정하는 셈이지요.




시작 하기 전 배터리 상태입니다. 3 셀 리튬폴리머이므로, 각 셀의 전압치를 볼 수 있었습니다. 

3개를 더하면 총 전압이 나오겠죠?



이제 모터를 돌리기 시작합니다. 물론 프로펠러는 장착하지 않았기 때문에, 이번 측정에서 나오는 시간은 큰 의미는 없을 수 있지만.. 심심했기에..

그래도 실험해보면 어느정도 추측은 가능하지 않겠나요? 이 상태로 30분을 돌리면, 프로펠러와 기타 장비들까지 합치면 뭐 한 15분은 돌겠구나~~ 뭐 이런 셈이죠.



이게 10분 경과 후 사진입니다. 생각보다 많이 안줄더라구요. 3개의 배터리가 똑같이 닳긴하지만, 어느정도 차이를 보이는 것을 확인할 수 있었습니다.


아무튼 모터를 계속 돌렸습니다. 물론 모터 돌리면서 변속기 상태도 계속 체크를 해줘야 합니다! 너무 뜨거워지진 않는지..

다행히 저희 변속기는 그냥 열이 조금 느껴지는 정도? 그래서 계속 진행했습니다.



20분 경과 후 상태입니다. 이 상태로라면, 9V까지 사용했을 경우 1시간 혹은 그 이상 사용할 수 있다는 결론이 나오는데요. 실제로 쿼드콥터를 완성시키고 나면 무게도 무거워지니, 이보다는 훨씬 비행시간이 짧을 듯 하네요.


아무튼 재미있는 테스트였습니다.


이제 전반적인 장비 사용법들에 대해 충분히 익힌 것 같으니, 가속도와 자이로센서 값에 대해 연구해보아야겠네요.

칼만 필터니, 상보 필터니 무슨 얘기들이 나오는데 모두 어디서 들어보기만 했지, 생소한 개념들입니다.

연구해보는 맛이 쏠쏠하네요! 대한민국 공대생 화이팅입니다. 



아두이노와 변속기 연결 회로 및 코드

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

저번에 미처 회로 사진을 못찍어놔서.. 결국 하나 만들었습니다.

잠깐 딴 얘기로, 대체 어떤 프로그램으로 아두이노 같은거 깔끔하게 회로 그릴 수 있나 했더니,


http://fritzing.org/download/?donation=0


이 프로그램이었네요. 유용하므로 사이트 공유합니다!



아무튼, 본론으로 들어와서 바로 회로 분석을 해봅시다.

저번 포스팅에서, 아두이노의 신호는 PWM 방식을 사용해야 한다는 것을 알았는데요.


발로 그린 그림이라 양해를..

위 처럼 연결을 하면 됩니다. 물론 변속기마다 타입이 다르겠지만.. 


skywalker quattro는 변속기가 4개가 하나로 통합되어 있는 형태라, 별다른 배분 장치 없이 바로 변속기로 전원을 넣어줍니다.

M1~M4는 모터에 각각 연결해주고요.(순서는 상관없답니다.)


변속기에 잘보면, 신호를 주기 위해 따로 4개의 전선이 나와있는데, 그중 하나는 다시 3개로 이루어져있습니다. 대충 알아본바로는, 배터리 신호를 아두이노와 같은 두뇌에 전원 공급을 해주기 위한 포트라고 합니다.


아무튼, 지금은 아두이노 전원이 컴퓨터를 통해 공급되고 있으므로, 그 아래있는 throttle hub에 연결해줍니다.

+-S 라고 나와있는데, 변속기 보면서 방향 맞추면 되고요.


hub에서는 3개의 선이 나와있는 것을 알 수 있습니다.

하양, 빨강, 검정인데요. 빨강, 검정은 대부분 그렇듯이 전원 공급해주는 선입니다. 저희는 접지만 아두이노와 연결해주도록 합니다.


그리고 하얀선이 바로 PWM 신호를 주는 선인데요. S 부분들과 연결되어 있습니다. 아무튼 이 하얀 선을 아두이노 핀과 연결해줍니다.


그리고 아두이노에서, 이전에 포스팅했던 코드를 돌리게 되면 변속기에 PWM 신호를 쏴주게 되는 셈입니다.


저희는 레이븐퓨리에서 변속기를 구매했는데, 변속기마다 설정 방식이 다르기 때문에 .. 이와 관련된 내용은 따로 질문받으면 말씀드리도록 할게요~~


마무리!!