[아두이노 드론] I2C (Inter Integrated Circuit) 통신 1부

Posted by Doony
2017. 2. 12. 23:22 아두이노 드론 프로젝트

안녕하세요! 와이엔지니어스입니다. 




지금까지 드론 프로젝트를 진행하면서 원리에 대한 기술 없이


진행했던 부분들도 많은데요. (빨리 띄우고 싶은 마음이 급하다보니..^^;;)


앞으로는 이렇게 빠뜨리고 넘어간 원리들을 조금씩 채워나가려고 합니다. 




mpu6050의 통신 방법 : I2C 통신


그 첫번째 원리는 바로 I2C 통신입니다.  


I2C 통신은 시리얼 통신 (UART/USART) 그리고 SPI 통신과 더불어 가장 많이 활용되는 통신 방법 중 하나인데요.


저희 프로젝트에서는 각도와 각속도를 추출하기 위해 사용했던 mpu6050이 I2C 통신 기반입니다. (오호..)

        


      

                                   

                                                              <I2C 통신 기반의 mpu6050>


그럼 이제 그 원리를 알아볼까요??



통신을 위해 꼭 필요한 구성요소들


I2C 통신에 대해 알아보기 전에, 


일반적으로, 하나의 기기가 다른 기기들과 통신을 하려면 반드시 필요한 요소가 무엇이 있을까요?


저희가 우편물을 보낼 때를 생각하면 답을 유추하기가 쉬운데요.


가장 먼저, 전달하고자 하는 데이터 (우편물), 그리고 이 데이터를 전달하고자 하는 위치에 대한 정보, 즉 주소 (배송지)가 있어야 할 것입니다. 


또, 이 데이터를 언제 전달할지 결정하는 전송 시점에 대한 정보 또한 필요하겠죠.



전송 시점의 경우에는 일반 우편물 보내는 것과 조금 다른데요. 


일반 우편물을 보낼 때는 최대한 빨리 가길 원하지만, 기기 간의 통신에서는 여러 기기가 동시 다발적으로 통신을 하게 되면 서로 간섭을 일으킬 수 있어요. 


특히, 공용으로 통신을 위한 선(버스선)을 활용하는 경우에 말이죠. 



또, 데이터를 읽을 것인지 또는 쓸 것인지를 대한 정보 또한 필요합니다.



이 정도면 얼추 통신은 가능할 것 같네요. (빠진게 없겠지..??)



I2C 통신 구성


I2C 통신은 n개의 마스터 장치n개의 슬레이브 장치간의 통신 프로토콜인데요.


저희의 경우엔, 마스터는 아두이노였고, 슬레이브는 mpu6050 및 다른 I2C 기반 센서들입니다.


아래 mpu6050 그림을 보면 SDA, SCL line이 아두이노 우노의 A4 (SDA) 및 A5 (SCL) 핀으로 연결되어 있는데요. 


이 두 선을 통해 데이터, 주소, 전송 시점 등에 대한 정보를 전송합니다. 엄청 단순하죠??



SDA (Serial Data) 선은  마스터에서 슬레이브 또는 슬레이브에서 마스터로 데이터를 전달하게 됩니다.


SCL (Serial Clock) 선은 통신의 동기화를 위한 클럭 시그널을 전송합니다.



      


                                                              <I2C 통신 기반의 mpu6050>



참고로, SDA와 SCL은 High 상태여야 하는데, 이를 위해서 pull-up 저항에 연결되어야 합니다. 


(아두이노에서는 내부 풀업 저항이 있어 신경을 쓰시지 않아도 된다고 하네요.)



또, 하나가 아닌 여러개의 센서들을 연결할 때는 아래 그림 <아두이노에 병렬로 연결된 I2C 기반 온도센서들> 같이 병렬로 연결하시면 되요. 



                 <아두이노에 병렬로 연결된 I2C 기반 온도센서들>



데이터 구성 


                                     <I2C 통신 개략도>


위 그림은 I2C 통신이 어떻게 구성되는지 잘 보여주는데요. 


마스터와 슬레이브가 SDA, SCL선을 통해 연결된 걸 볼 수 있습니다.


I2C 통신을 통해 전달되는 전송되는 데이터들은 다음과 같은 형태를 띄고 있어요. 



                                     <I2C 통신 Data 형태>



조금 복잡해보일 수 있으나, 잘 살펴보면 위에서 통신을 위해 꼭 필요하다고 했던 요소들이 있음을 확인할 수 있습니다.


(주소 ADDRESS, 데이터를 쓸 지 읽을지 나타내는 Read/Write DIRECTION BIT, 그리고 데이터)


그리고 통신의 처음과 끝을 나타내는 시작(SDA : High to Low / SCL : High) 그리고 정지 (SDA : Low to High / SCL : High) 조건과


ACK (통신이 제대로 진행되고 있다고 알려주는 신호) 또한 보이는데요.


글이 조금 길어질 것 같아 각각의 구성요소와 이 데이터들이 전달되는 형태는 다음 포스팅에서 좀 더 자세히 알아볼게요.                          


조만간 다시 찾아오겠습니다! 그 때까지 다들 화이팅!!!!!!!!




출처 

1) mpu6050 : http://fritzing.org/projects/mpu-6050-board-gy-521-acelerometro-y-giroscopio

2) 아두이노와 mpu6050 : http://www.makecube.in/search

3) Connection of multiple I2C devices to Arduino : http://www.learningaboutelectronics.com/Articles/Multiple-I2C-devices-to-an-arduino-microcontroller.php

4) http://wiki.mcselec.com/bavr/Using_the_I2C_protocol


[아두이노 드론] 변속기 연결작업 및 배선 정리

Posted by Doony
2017. 1. 21. 18:40 아두이노 드론 프로젝트

네이버 블로그 펌글 (과거 와이엔지니어스 블로그)

---------------------------------

안녕하세요! 와이엔지니어스입니다!

오늘은 시험기간임에도 불구하고.. 변속기 4개를 장착하기 위해 납땜질을 좀 해봤는데요.

기존 4in1 변속기를 떼어내고, 새로 4개 변속기를 달아야했기 때문에 케이블타이 정리도 좀 하고 깔끔하게 다시 배치해봤습니다.


저희가 세명이서 팀인데... 시험에 면접에 다들 바빠서 저 혼자 했는데요.
우연히 전기전자과 후배를 만나서 도움을 요청했습니다. 전기전자과의 납땜실력을 보고 싶었기 때문에 ㅋㅋㅋㅋㅋㅋㅋ 같이 해봤는데요.

 
연세대 Y모군. 열심히 납땜중.

음 결론적으로 저나 쟤나 똑같더라구요. 자기는 기판에밖에 해본 적이 없다며 핑계를 대더만..ㅋㅋㅋㅋㅋ 아무튼 변속기 4개를 모두 납땜하기 위해, 기존에 2개만 연결되어있던 부위를 다 떼어내고 다시 묶고 땜질했습니다.

그래도 이 친구가 참 센스가 있던게, 제가 납땜할 때 알아서 검정 테이프 길이, 두께 별로 잘 잘라 놓더군요. 크 팀웤이 잘 맞았다능

 
 
단순한 병렬연결을 위한 납땜질의 시작과 끝...

네...... 이게 좀 지루하더군요 ㅠㅠ 납땜질 잘하시는 분들은 어떻게 그리 잘하시는지 모르겠습니다.
볼트로 쪼이는 커넥터를 써도 좋았을 듯 하지만.. 철물점도 멀고 인터넷 주문하자니 바가지 먹는기분이고해서 직접 다 했습니다.

그리고!!! 4개의 변속기를 잘 장착해야겠죠?

 
 
아래는 깔끔하게 초록 케이블타이. 변속기는 깔끔하게 레드&화이트 구성

다 정리한 후의 모습입니다. 물론 아직 전원 연결장치 부분은 대충 해놓긴했어요. 어차피 아직은 뺐다끼울 일이 많기 때문에... 자리만 잡아놓았습니다. 

 
좌: 정리 전 PID 테스트 / 우: 정리 후 모습

사진 순서가 좀 뒤죽박죽이군요.
아무튼, 사실 깔끔하게 정리하기 전에 좌측사진에서 보시는것처럼 모터 돌리는 실험을 해봤습니다.
해본 결과 무리없이 이전에 잡아놓았던 PID값으로 잘 작동하는 것을 볼 수 있었습니다.

저희가 드론 하는걸 처음 본 친구가, 그럼 이거 10도 20도가 아니라 70~80도 경사도 제어가능하냐고 하길래 해봤는데
오오 잘 작동되더군요. 80도까지는 오바같고해서 70도까지만 해봤는데, 무리없이 잘 잡는 모습을 볼 수 있었습니다. 거의 끝이 보이네요.

아!! 근데 확실히 변속기가 25A -> 20A로 되다보니, 잦은 외란 실험을 할 때 모터와 변속기가 다소 열받더군요. 심각한 정도는 아니지만 신경은 써야할 듯 싶습니다. 
convection으로, 즉 프롭 유동장을 이용해서 쿨링해주는 방법도 있고... 좀 더 알아봐야할 것 같네요.


다음에는 다른 축 PID게인값 잡고, 블루투스 조절장치를 통해 직접 날려볼 생각입니다!!!!!
드디어!!!! 곧 끝이!!!!와!!!!

아무튼 전기전자 친구.. 가끔 불러도 괜찮을거같아요 손발이 척척 맞습니다.
지금은 커피 한잔 사주면서 알바비 주는중......................


[아두이노 드론] 변속기 교체 후 PID 제어 영상

Posted by Doony
2017. 1. 21. 18:38 아두이노 드론 프로젝트

안녕하세요 와이엔지니어스입니다. 지금부터 올라가는 글들은 모두 과거 네이버 블로그에서 퍼온 글들입니다.

안녕하세요! 와이엔지니어스입니다.

드디어 네이버 블로그에서 처음으로 드론 관련 포스팅을 하네요.
기존의 포스팅은 모두 저희가 운영하던 티스토리 블로그에서 퍼온 글입니다. 조금씩 수정하면서 동영상 자료도 다시 제대로 넣고 할 예정이지만, 시간이 좀 걸릴테니 급하신 분들은

http://yngneers.tistory.com 으로 가셔서 참고해주시면 감사하겠습니다.

오늘 저희가 다룰 내용은 새로 구입한 변속기에 맞춰 PID 튜닝을 하는 과정입니다.
원래 skywalker 하비윙 4in1 변속기를 사용했는데 그 중 한 모터 부분이 나가버린 것 같았습니다. 

변속기 수리를 해볼 생각도 했지만... 거기에 시간을 다시 투자하기가 조금 껄끄러워서 새롭게 구입했구요.
새로 구입한 녀석은 바로 이녀석입니다. 
https://www.ravenfury.com/shop/escs/hobbywing-new-xrotor-20a-esc-wire/

20A짜리구요. 저희가 사용하는 모터가 18A 수준에서 동작한다고 해서 20A로 하는 게 조금 불안한가 싶기도 했는데... 가장 저렴한 놈을 고른다며 찾은거라 이걸로 그냥 결정!

 

이렇게 배송이 왔습니다. 기존에 똑같은 거 2개가 따로 있어서 2개만 구입을 했고요.
4in1 변속기와는 다르게 전원 분배부터 BEC 장착까지 모두 직접 제작해야 했습니다.
일단 BEC는 필요가 없었어요. 어차피 아두이노 전원은 컴퓨터로 계속 주고 있었으니깐요. 그래서 납땜질만 열라 해서 만들어낸 결과물을 첨부합니다.

이건 팀원 중 한명이 따로 진행하고 있는 프로젝트에서 따온 사진들입니다.

 
 

보시다시피.
예전에도 설명한 포스팅이 있는데, 변속기는 전원선, 아두이노 신호선과 접지선, 그리고 모터선 3개로 이루어져 있습니다. 
배터리 연결부를 2군데로 나누어 병렬연결하고 각각 선 꼬은 뒤에 납땜질!!! 해서 연결합니다. 대충 연결하면 살짝 힘줬을 때 툭 빠져버리는 경우가 생기므로 잘 해주도록 합니다.

 
 

배터리 접합부는 제가 따로 임시로 만들었습니다. 보시다시피 동그란 구멍 2개가 있는데, 저희 배터리 커넥터 부분이 저런 형상에 딱 맞게 생겼거든요.

아무튼, 변속기가 달라지는 만큼 4in1 기존 변속기를 아예 제거하고 이녀석들 4개로 대체해야했습니다. 지금은 pid게인 튜닝 때문에 임시로 이렇게 했지만 나중에는 4개를 다 병렬연결해줘야겠죠?

pid 튜닝하는 과정은 지금과 똑같았습니다.
다만, 변속기가 달라지다보니 확실히 반응에 차이가 난다는 걸 느꼈습니다.
그래서 기존 pid 게인값과 좀 다른 값들로 대충 잡아봤는데요.

위치 P, 속도 P 두개만 잡았을 때 (인듯...)

보시다시피 각도를 바꿀 때나 외란이 주었을 때 반응속도가 매우 빠른 것을 볼 수 있는데요.
내부 P가 너무 커서 외부 P가 결정하는 목표 각속도 값에 너무 이르게 도달하는 것 같았습니다. 그래서 움직이면서도 좌우로 진동하는 걸 볼 수 있었는데요.

대체로 보아하니, 외부 P에 비해 내부 P가 작으면 조금씩 조금씩 제자리 진동하고, 반대로 내부 P가 너무 크게되면 제자리 진동은 딱히 없는데 저렇게 외란을 주거나 했을 때 진동이 심한 것을 알 수 있었습니다.

아래는 P, PID게인을 다 잡아본건데요. 아직 완벽하진 않고 대충 해본거라..

P, PID 게인을 잡은 모습. 대충 잡은거라 지금은 훨씬 더 잘됩니다 이거보다.

훨씬까진 아니고 지금은 이거보다 좀 더 잘되는 것 같은데요. 보시다시피 위 영상보다 반응 속도가 다소 늦은 대신, 그만큼 진동도 덜한 걸 볼 수 있습니다.

이전 변속기에서는 외란을 줬을 때 overshoot과 steady state error 등이 잡히는 데 시간이 좀 걸렸는데 이번에 사용하는 변속기는 그런 문제가 많이 줄어든거같네요.

왜이렇게 차이가 나는지는 잘 모르겠습니다만, 아무튼 이 변속기로 사용하기로 하였으니 이녀석에 맞춰 계속 진행해볼 생각입니다.

셤 끝나고 다음에는 4개의 모터 다 제어하는 모습을 볼 수 있기를 바라며... 오늘은 끝!!