brunch

You can make anything
by writing

C.S.Lewis

by 메이커k May 10. 2018

8/10 균형_스마트폰

스마트폰의 이용


배터리의 대체

스마트폰의 높은 cpu, 고용량 배터리, 내장 센서를 드디어 사용해 보겠다. dc모터를 구동하기 위해서 1.5V 배터리를 4개를 별로도 전원 공급을 하였다. 생각보다 dc 모터 사용 시 배터리 사용이 생각보다 빨리 소모된다. 소모되는 배터리를 가격도 적지 않은 부담과 귀찮음을 동반한다 스마트폰의 고용량 배터리로 dc모터와 안드로이드 전원을 해결하려고 한다. 스마트폰이 충전이 되어 있으면 dc 모터가 구동됨을 확인하였다. 스마트폰 배터리가 부족하면 충전하면 그만이다. 전원 공급이 훨씬 수월해진다. 


3축 센서의 교체

스마트폰 내에 가속도 센서와 기울기 센서가 내장되어 있다. 스마트폰의 회전하면 화면이 자동으로 회전되는 기능 등이 이런 센서가 있기 때문이다. 균형을 잡는 데 사용하였던 mpu6050를 스마트폰에서 받아서 사용하도록 한다. 아두이노와 연결되어 있는 센서를 제거할 수 있다. 


코드 수정

아두이노에서 mpu6050 기울기 센서를 컨트롤할 던 코드 부분은 전부 제거되었다. 이 기능은 스마트폰에서 처리해주게 변경해야 한다. 안드로이드 코드 롤 변경이다. 안드로이드에서 SensorManager를 이용하여 스마트폰에서 Orientation 값을 구하도록 하고 이를 아두이노에 보내어 균형 잡는데 이용하도록 한다. 대부분이 기능이 스마트폰 안드로이드에서 처리되고, 아두이노에서는 균형 잡는데 필요한 값만 받아, dc 모터 2개를 제어하는 역할을 하게 변경되었다. 


안드로이드 코드


아두이노 코드 


한계점 

위에 영상에서 보다시피 스마트폰을 이용하여 무엇인가 멋진 것을 만들려는 계획은 노력은 하였으나 처음에 기대만큼 성공적이지 않았다. 스마트폰에 기능들은 한껏 이용하여 만들어 보려 하였으나 실제 개발과 만들어보니 생각대로 되지 않았다. 베터리를 제거해 보려 했으나 제거 하지 못하였고, 균형센서를 제거해 보러 하였으나 그냥 센서는 센서가 있는게 좋겠다는 생각이다.  이 역시 해봐야 알게 되는 사실이기는 하다. 문제점들의 원인은 아래와 같다.


밧데리

핸드폰 베터리를 사용 할 수 는 있으나 출력이 약하다. 균형을 잡기 위해 박력 있게 움직여야 하는데 미처 움직이기 전에 쓰러지는 불쌍사가 발생한다. 모터 사용용으로 외부 전원을 쓰는데 괜히 쓰는게 아니다. 결론은 핸드폰에 베터리로 모터를 움직일 수 있으나 균형을 잡기에 충분한 힘을 얻지 못 하였다.


무게 중심

원래 자동차인 것을 새워서 균형을 잡을려고 하니 무게중심, 균형에 문제가 있다. 서있는 상태에서 무게중심이 맞아야 하는데 서 있는 자세자체가 비대칭이다 보니 균형을 잡기 힘든 구조가 되어 버렸다. 잘 서기 어려운 구조 였다. 서 있는 상태에서 무게 중심이 가운데 있어야 하는데 자동차 모형을 세워 봤더니 비대칭 구조 였음.

무게 중심이 가운데 있지 않으면 무게 중심을 방향으로 계속 진행하게 된다. 세그웨이에서 앞에 무게 중심을 주면 앞으로 주행하는 것과 같은 원리임. 그리하여 무게 중신이 가운데로 두기 위해서 뒤쪽에 임의로 무게를 싣었다. 무게 중심이 안맞다 함은 난이도가 높다는 이야기힘. 성능을 높이기 위해 비대칭 균형을 잡는 연습도 필요하다. 반응속도를 높이기 위해 프로그램을 최적화 하던가, 모터 출력은 높이던가 하면 될 꺼 같았다. 비교 테스트도 필요하다.


시리얼통신

안드로이드에서 센서의 기울기값 -180 ~ 180 도를 주는데 원래 데이터는 라디안 값이가. 대략 -1.5 , 1.5 byte 배열로 주는데 데이터 구분을 위해 /t 를 구분자를 이용하였다. 아두이노에서도 데이터를 받을때 /t 기준으로 string 으로 읽어 드렸는데. 반응이 느려서 중심을 잡지 못하고, 무게 중심이 있는 가운데서 왔다 갔다를 자주 반복 하였다. 모터의 반응 속도도 중요하고, 무게 중심이 난이도를 결정한다고 하면, 모터의 출력도 중요해 보인다. 무게의 쏠림 현상은 어떻게 해결할지가 문제이다.


그 외 부수적인 개선사항.

앱이 간헐적으로 멈출 상태에서 죽는 현상이 발생하였다. serial 데이터를 보내는 작업이 느려서이던가, 반대로 시리얼 통신으로 받는 데이터도 있는데 비동기 listenr 처리에 문제가 있지 않은가 싶다. 화면 멈춤 문제는 데이터를 아두이노에서 지속적으로 받는데 안드로드에서 데이터 갱신이 안되었다. background 작업 이후 화면 재갱신이 일어 나는데 작업이 연속적으로 진행 됨에 따라 화면 갱신이 안되는것으로 보인다. 다른 앱으로 갔다가 돌아오면 갱신 된다. 안드로이도 개발 부분도 챙겨 볼 필요가 있다.

매거진의 이전글 7/10 균형_센서
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari