진짜를 만들어보자 - 2. LCD 폰트 살펴보기


지난 글에서 밝혔듯이 아두이노를 이용하여 TFT LCD에 문자열을 출력하는 방식은 꽤나 
생소했다. 그냥 일반적인 웹 시스템이나 모바일 애플리케이션을 개발할 때는 그냥 폰트 파일
하나 가져다 놓고(물론 폰트 파일의 구조가 어떻게 생겼는지는 알 필요도 없다. 그냥 폰트
이름만 알면 되지) 이름과 size만 지정해서 사용하면 그만이었는데…


아무튼 새로운 지식의 장벽 앞에 조금 막막했다.


닥글링? (닥치고 구글링?)


우선 ‘아두이노’, ‘LCD’, ‘폰트’, ‘TFT LCD’ 등등의 검색어로 구글링을 해보았다. 물론 네이버
검색도…역시나 검색의 바다에는 쓸만한 정보들이 차고 넘친다. 먼저 내가 참조한 사이트들의
링크를 공유한다.


사실 대부분의 내용들이 자세히 살펴보지 않으면 상세한 부분까지 알기 힘든 수준이었다.
특히나 나같은 문돌이들은 일단 수학적인 개념이 들어가면 멘붕 상태에서 이리저리 헤매기
일쑤고…-.- 그래도 그나마 그림으로 표현한 내용들은 어느 정도 이해를 할 수 있었다.


폰트의 구조 - 장인의 한 땀…


일단 위에 링크된 곳들을 돌아다니면서 LCD 화면에 폰트가 어떤식으로 표시되는지는 대략
알 수가 있었다.


LCD상의 하나의 점(pixel)을 하나의 bit로 표시하고 그 점들의 그룹을 한 문자의 영역(이
영역이 바로 폰트의 사이즈라고 보면 되겠다. 8 X 12, 8 X 16, 16 X 22 등)으로 삼고
그 영역 내에서 문자의 형태를 bit값 1로 채워나가는 것이다. (첫 번째 링크의 3. Bitmap
font(비트맵 폰트)의 구조 참조)


그래서 일단 waveshare에서 제공하는 라이브러리에 포함된 font.c 파일에 있는 배열 중
하나에서 ‘A’라고 주석된 배열을 한 번 풀어보기로 했다. 배열의 요소들은 16진수로 표현
되어있으니 이걸 다시 2진수로 만들어보았다.


원본 배열 : 0x00,0x40,0x07,0xC0,0x39,0x00,0x0F,0x00,0x01,0xC0,0x00,0x40
2진수로 변환한 배열 : 00000000,01000000,00000111,11000000,00111001,00000000,
00001111,00000000,00000001,11000000,00000000,01000000


그리고 이렇게 2진수로 변환한 배열을 2개(2byte)씩 잘라 세로로 배치를 해보았다.
그랬더니 아래와 같은 모양이 되었다(블로그에 사용된 폰트가 가변폭이라서 이미지로 첨부
하였다).




오호~!!! 뭔가 보이는가? 조금 더 알아보기 쉽게 0울 모두 지워보자





마치 그냥 암호처럼 보이던 배열이 이렇게 풀어놓고 보니 어렴풋이 문자의 형상이 나타난다. 
이렇게 풀어놓은 것 중에 1로 표시된 것들이 LCD상에서 빛을 내며 문자로 출력되는 것이다. 
비트맵 폰트라는 것이 이렇게 모눈종이같은 영역에 한땀한땀 정성들여 만들어진다는 것을 
처음 알았다…ㅠ.ㅠ


끝이 아니네?


아하~! 일단 폰트의 구조를 알았으니 응용하면 되겠구나.
하지만 나에게는 장인정신이 없으니 한땀한땀 폰트를 만들 수는 없는 일!
대충 비슷한 폰트 크기 큰걸루다가 구해서 쓰면 내가 산 LCD에도 큰 폰트를 출력할 수 있겠네~


그리고 다시 폰트를 찾기 위해 구글링…그러다가 아래의 사이트를 찾았다. 


굉장히 친절한 사이트였다. LCD 모듈도 파는 것 같고 다양한 LCD 라이브러리도 있고 중요한 
것은 이미지 파일로 폰트 파일을 만들어주기도 하고 아예 그렇게 만들어진 폰트를 다운로드 할
수도 있다. 그것도 모양과 크기도 다양하게!


오호 횡재다~ 하고 다양한 폰트를 다운로드 받었으나…웬걸…내가 가진 폰트는 2차원 배열로
구성되어있는데 다운로드 받은 폰트파일은 1차원 배열이네? 게다가 처음 한 줄은 뭔가 byte
수도 모자라고…




다행히 라인별로 아스키 문자가 주석으로 붙어 있어서 각 라인을 하나의 배열로 만들어 2차원
배열로 만들면 되겠다는 것을 쉽게 알 수 있었다. 나중에 알았지만 처음 4바이트는 폰트의
크기와 종류를 나타내는 값이었다. 그래서 일단 폰트 파일을 다음과 같이 수정했다.




자~ 이제 준비는 끝났고 출력만 해보면 되겠다~물론 라이브러리에서 상수 지정하고 새로
지정한 상수 선택시 추가한 폰트를 표시하도록 몇가지 수정을 거쳤다. 그리고 기운차게
스케치의 업로드 버튼을 클릭!!!


악!!! 이거 왜이래!!!




폰트가 나오기는 나왔는데 이게 영 상태가 병맛이다. 옆으로 누워있는데다가 가운데는 홍해가
갈라지듯 갈라져있고 게다가 이게 시계방향으로 돌려도 문자의 좌우가 뒤집힌 것이 분명한…
이게 아예 글자도 아닌 것 같이 찍혔으면 아예 뭔가 크게 잘못되었구나 하고 처음부터 차근차근
다시 해볼텐데…뭔가 글자인 것 분명한데 돌아가고 뒤집히고 한 모양이다보니 괜히 이리저리
머리를 쓰게 만든다…ㅠ.ㅠ for문을 고쳐볼까? 배열에서 요소들의 순서를 바꿔볼까?
아는가? 뭔가 조금만 손대면 될 것 같은데 어디를 손대야 할 지 모를 때 엄습하는 그 답답함…ㅠ.ㅠ


상투적인 것이 가장 확실하다!


사실 이 문제 해결을 위해 하루를 꼬박 보냈다. for문도 수차례 고쳐보았고, 배열 요소의 순서도
여러번 바꿔보았다. 하지만 도무지 답이 나오지 않았다. 결국 처음 폰트에 대해 이해할 때 했듯
배열을 분해해보기로 했다. 짜잔~ 분해했더니 아래 그림과 같이 거대한 문자가 하나 나왔다.
이거 나름 상당한 노가다다…-.- (로봇을 만들 때도 그렇고 이 것도 그렇고…분명 뭔가 지식 산업
에 대한 과제를 하는 듯한데 왜이리 육체노동을 하는 느낌이지…ㅠ.ㅠ???)




일단 풀어는 놨는데…뭔가 이상하다. 물론 크기가 엄청 큰 것도 있지만 그 것 말고도 뭔가
이상하다…waveshare에 포함된 폰트는 풀어헤쳐놓으니 대가리를 왼쪽으로 향하고 누운
모양이었는데 이 UTFT 폰트는 정상적인 형태로 똑바로 서있는 것이다!


라이브러리에 포함된 출력 함수가 옆으로 누운 폰트를 화면상에 똑바로 보이도록 처리해주는
함수였으니 똑바로 선 폰트가 이상하게 출력되는 것은 당연한 일인 것이다. 함수를 좀
분석해보려 하니 짧은 함수이지만 shift 연산도 있고 또 16진수 bit 연산도 있고…간만에
보니 뒷골 땡기는 연산들이 좀 있어서 일단 그림으로 이해해보기로 하였다.



                



그림을 보니 A와 D를 축으로 회전한 모양이다. 그러고보니 UTFT 폰트가 이상하게 나왔던
모양과도 딱 들어맞는다. 결국 함수를 고치는 수밖에는 답이 없어보였다. 그나마 다행인 것은
사용하려는 폰트가 똑바로 선 형태의 폰트이다보니 좌표때문에 머리아플 일은 없다는 것이다.
그냥 순서대로 x좌표를 이동하면서 출력하다가 폰트 사이즈에 따라 적절한 시점에 y좌표를
증가시켜주기만 하면 된다.


그리고 드디어~!




waveshare 라이브러리에서 UTFT의 다양한 폰트를 사용할 수 있게 된 것이다…ㅠ.ㅠ
(그럼에도 불구하고 마지막 Cyan 색상의 가장 큰 폰트는 뭔가 폰트 이미지하고 모양이
맞지 않는다…-.-)


아직도 남아있는 숙제들


다행히 사용하고자 하는 폰트가 똑바로 선 형태라 쉽게 함수를 만들어 사용할 수 있게
되었다. 하지만 아직 숙제가 있다. 바로 화면 회전에 따라 가로모드 세로모드에서 모두
자유자재로 정상적인 형태의 폰트를 보여주는 것! 그리고 가장 중요한 한글의 처리!!!


이와 관련된 자료도 위에 링크한 사이트에 많은 설명이 있지만 좌표 예기만 들어도
머리가 지끈거린다…ㅠ.ㅠ 일단 머리아픈 일은 여기까지 마무리 하고 새로 주문한
LCD들이 UTFT 라이브러리를 지원한다고 하니 조금은 편하게 작업을 좀 해보자…ㅠ.ㅠ


다음 과제는 Wi-Fi 센서를 통해 웹 서버로부터 날씨나 시간 데이터를 가져와서 예쁘게
뿌려주는 것이다!


수정한 라이브러리를 공유드리고 싶은데 라이센스 정보를 확인 못해서 일단 확인 후
별다른 제약이 없으면 UTFT 폰트를 사용할 수 있도록 수정한 라이브러리를 공유하도록
하겠습니다.

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^


진짜를 만들어보자 - 1. LCD에 문자 출력하기


지난 번 “2시간만에 스마트 미러 만들기”를 보시고 실소를 금치 못한 분들이 많이 계실 것이다.
그렇다! 그것은 완벽한 개사기…라기보다는 ‘훼이크’라고 애교스럽게 표현하기로 하겠다…^^;;;


그러면 그렇게 훼이크로 점철된 인생을 살 것이냐? (조금 비약이 심한가…-.-)


그럴 수는 없다. 그래서 이제 진짜를 만들어보려고 한다.
오늘부터는 진짜 스마트 미러 만들기가 시작된다!


아두이노의 제약


우선 시작을 하면서 왜 스마트 미러를 만들 때 라즈베리파이를 이용하는지 제대로 깨달았다.
한마디로 말해서 자바로 프로그램을 짤 것이냐 조금 과장해서 어셈블리로 프로그램을 짤 것이냐의
차이 정도 될 것 같다.


라즈베리파이는 그 자체로 한 대의 컴퓨터다. 즉, PC에 설치할 수 있는 운영체제가 거의 온전한
모습으로 라즈베리파이에 설치 될 수 있는 것이다. 그 말은 화면(LCD)에 문자를 표현하는데 아무런
제약이 없다는 것이다. 물론 이미지도 마찬가지…게다가 다양한 폰트를 자유자재로 이용할 수 있다.
음성이나 모션 인식 등 특별한 기능의 구현이 아니라면 단지 화면에 데이터를 출력해주는 것은
일도 아니라는 것이다.


그런데 아두이노는…ㅠ.ㅠ
그야말로 알파벳 ‘A’ 하나 출력하는데도 이탈리아 장인 정신을 가득 담아 한땀한땀 보여주어야 한다.
물론 모든 LCD 제품들이 라이브러리를 제공해주기 때문에 함수 하나 호출하면 가볍게 출력해
주기는 하지만 폰트 종류, 화면 방향 등 고려해야 할 사항이 다르고 폰트조차도 구성 방식이 달라
라이브러리 별로 사용 가능한 폰트가 따로 있다(물론 얼마든지 수정하여 사용 가능하고 이번 글의
주요 내용이 바로 그것이다).


얼마전 아이들 풍선 껌 종이에 적힌 내용을 보니 이런 글이 적혀있었다.


“집을 나서자 마자 집에 돌아가고 싶어졌다”


그렇다…스마트 미러 만들기를 시작하자 마자 아무 것도 하고싶지 않아졌다…ㅠ.ㅠ


준비물


일단 화면에 정보를 뿌려주는 것이 1차 목표이기에 별다른 준비물은 없다. 아두이노 우노(호환)와
2.8” 크기의 LCD 하나가 전부이다.




헝그리 스마트 미러 제작이 목표이기에 LCD는 크기 대비 가장 싼 녀석으로 골랐다. 메X솔X션에서
2.8”를 23,100원에 그리고 혹시나 해서 2.2”를 11,000에 구매했다. 2.8” 제품은 waveshare라는
브랜드의 제품이었다.


waveshare 제품 페이지 : http://www.waveshare.com/wiki/2.8inch_TFT_Touch_Shield

waveshare 2.8" TFT LCD shield



그리고 아시는 분은 아시겠지만 컵라면이 하나 따라왔다. 스마트미러 만드는 데 쓰라고 보내주신 
것은 아니겠기에 맛있게 먹어줬다(이자리를 빌어 사장님께 감사드립니다^^;).


그런데 준비물을 준비하는데서부터 난감한 미래가 예견되었다. 2.8” LCD는 쉴드 타입인데 이걸
아두이노 우노에 장착하고 나면 남는 핀이 없다…


이런게 찰떡 궁합?



나중에 Wi-Fi 센서도 연결하고 모션 센서나 기타 등등의 센서들을 연결을 해야 할텐데…급한대로
메가에다 장착을 했더니 장착은 잘 되는데 작동을 안한다. 아마도 핀 배열이 안맞는 것이 있나보다. 
일단 이 문제는 나중에 해결하고 우선은 LCD를 통해 문자를 출력하는 것 부터 시작하기로 했다.


참고로 2.8” 크기도 작은 것 같고 이 제품의 라이브러리도 좀 빈약한 것 같아서 아XX팩X리에서
추가로 4.3”와 3.2” 제품을 각각 하나씩 더 구매했다. 헝그리가 목표인데…-.-


또 하나의 장벽


일단 메X솔X션의 제품 페이지에 있는 링크를 찾아가 라이브러리를 다운로드 받고 스케치를 실행해
보았다. 라이브러리를 스케치에 추가하고 샘플 코드를 열어보았다. 그리고 실행!
오~잘된다 잘돼!!!


기본 예제 출력



스마트 미러를 위해 배경색은 검게 문자는 흰색으로도 한 번 출력해보고


색상만 변경~



역시 잘된다!


이제 글자 크기를 좀 키워보자!
어…그런데…폰트가…
일단 출력 함수에 파라미터로 폰트 사이즈를 넘기도록 되어있는데 이 폰트 사이즈가 단 2개만
상수로 정해져 있었다. 그러니까 기본적으로는 2종류 크기의 폰트밖에 사용할 수 없게 되어
있었던 것이다…-.- 아무리봐도 스마트 미러에 사용하기에는 폰트가 너무 작은데…


그런데다가 늘 워드 프로그램에서 간단하게 폰트를 선택해서 쓰기만 하다보니 도대체 이 LCD
에서는 폰트를 어떻게 사용하는지 감이 안잡히는 것이다.


아무래도 라이브러리를 까보는 것 밖에는 답이 없을 것 같았다. 그리고 다행히 라이브러리 소스
안에서 font.c라는 파일을 하나 찾았다. 올타꾸나!하고 파일을 열었는데???
이건 뭔가요??? 1byte Hex값이 잔뜩 적힌 2차원 배열 2개가 다소곳하게 코딩되어 있는데…
얜 어떻게 쓰는건가…


암혼가...ㅠ.ㅠ???



17년 개발자 짬밥으로 1바이트 아스키 문자 95개에 대해 각각 12바이트로 표현을 하고 있는
것 같기는 한데…이게 어떻게 화면에 표시가 되는 것인지 도통…ㅠ.ㅠ


어쩔 수 없이 다시 구글링을 시작…
그리고…신세계를 보게 되었다!


글이 길어져 다음 포스팅에 계속합니다. 다음 포스팅에는 LCD에서 폰트 구조와 사용법에 대해
간단하게 알아보겠습니다.

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^


2시간만에 스마트 미러 만들기!!! (반전주의…^^)


도전 과제를 찾자!!!


4족보행 로봇도 슬슬 마무리가 되어가고…다음엔 뭘 만들어볼까 고민을 하던 차에 뜬금없이
라즈베리파이로 관심이 가기 시작했다. 당연히 이것저것 검색을 하던 차에 눈에 들어온 것이
있었으니…


바로 스마트 미러!


사실 나도 작년 초엔가? 구글 개발자가 만들었다는 스마트 미러 사진을 보고는 꽤 흥미있게
생각을 하고 있던 차였다. 게다가 최근 생산성 카테고리에 해당하는 모바일 앱을 포함한 
웹 서비스 하나를 구현 중인데 생산성 카테고리이다 보니 이 서비스에 연계하여 항상 서비스를
모니터링할 수 있는 장치를 아두이노를 이용해 개발하고 싶었다. 그런데 여기에 스마트 미러가
딱이다 싶은 것이다!


다만 스마트 미러가 아무나 만들 수 없는 꽤나 고도의 기술이 필요한 것으로 생각했다. 
거울을 디스플레이로 이용하려니 거울 뒤에 아주 얇은 디스플레이 장치를 붙여야 할 거라고 
지레 생각한 것이다.


그런데 의외로 꽤나 많은 라즈베리파이 유저들이 스마트 미러를 만들고 있었다. 과장 조금
보태면 마치 아두이노에서 LED 켜듯이…-.-


그러다가 드디어 그 비밀의 열쇠를 발견하게 되었으니…바로 Two Way Mirror 다른 말로
하프 미러(Half Mirror)라고 하는 유리였다. 쉽게 말해 빛의 일부는 반사하고 일부는 투과
시키는 유리다. 그 뒷면에 검은색 배경을 깔면 바로 거울이 된다.(이하 하프 미러)


아하~이거였구나. 많은 메이커들의 스마트 미러 제작기를 보니 바로 이 하프 미러 혹은
일반 유리를 하프 미러처럼 만들어주는 필름을 이용하여 그 뒤에 안쓰는 모니터의 LCD
판넬을 붙여 스마트 미러를 만들고 있는 것이었다. 그리고 스마트 미러에 보여줄 컨텐츠는
라즈베리파이의 PC에 준하는 강력하고 다양한 기능을 통해 쉽게 보여줄 수 있었다. 마치
지하철의 안내 모니터처럼…


그래 바로 이거다! 라고 결정을 하자마자 거의 유일하다시피 소매로 하프 미러를 구매할
수 있는 곳을 찾아 바로 A4 사이즈의 하프 미러 3장 (그 중 2장은 다시 절반으로 재단)을
주문하였다.


그리고…


오늘 드디어 그 유리가 도착했다!!!


나라고 못할소냐!


일단 내가 목표한 것은 무식하게 큰 스마트 미러가 아니라 책상에 놓고 사용할 수 있는 아담한
스마트 미러였다. 그리고 비용도 최소한으로 줄일 수 있는…


라즈베리파이의 경우 이미 보드만도 5만원돈이 나가고 집에 남아도는 모니터가 없는 사람은
라즈베리파이용 LCD라도 사야 할텐데 그 가격 역시 만만치가 않았다. 게다가 사이즈가 커지면
당연히 하프 미러 또는 필름에도 비용이 추가될 것이고…


암튼 여차저차해서 난 이렇게 탁상용으로 만들었다.




탁상용이다보니 요로코롬 가로로 돌릴 수도 있다.




난 이 작업을 단 2시간만에 끝내버렸다. 나의 주체할 수 없는 천재성으로!!!


보드에 센서를 연결하고 Wi-Fi 모듈로 웹을 통해 날씨정보와 시간을 받아와서 LCD에
값을 뿌려주고 하드웨어를 하프 미러 뒤쪽에 잘 배치하…기는 개뿔…-.-


여기가 반전입니다…-.-


사건의 진상은 이렇다…




계획까지는 모두 사실이다. 그리고 실제로 진행도 할 예정이고…
그런데 ‘저럼함’에 방점을 찍다보니 한 가지 아이디어가 떠올랐다.
바로 스마트폰을 이용하여 간이 스마트 미러를 만들면 어떨까 하는 생각…
말하자면 스마트 미러형 거치대라고나 할까?


그리고 바로 작업을 시작했고 앞서 말한대로 2시간의 뻘짓 끝에 프로토타입을 완성했다.
내 예상보다 꽤 그럴듯했다…^^


사실 내 주변에 기념품이나 사은품 제작이나 판매하는 사람이 있으면 아이디어를
제공하고 밥이나 한끼 얻어먹으려 했는데 아직 부족한 부분도 있고 해서 그냥 이렇게
공개를 한다…^^;;;


부족한 부분이란 일단 폰을 넣고 꺼내기가 불편하고 전화가 오거나 혹은 폰으로 다른
앱을 실행시키고자 할 때 폰을 꺼냈다가 다시 집어넣고 해야 한다는 것이다.
무엇보다도 계속 켜져있는 경우 충전을 하고 있는 상태에서도 배터리 눈금이 점점
줄어갔다. 물론 이러한 문제점들은 조금만 생각하면 다 해결이 가능한 것이라서
조만간 어느 오픈 마켓에서 보게 될지도 모르겠다…^^;;


그리고 요고 요렇게 스마트폰 거치 안할 때는 뒤에 판떼기로 막아서 그냥 거울로 쓰면 된다^^



진짜는 과연 만들 수 있을까…-.-


일단 아두이노로 만들 계획이고 이미 2.8인치와 2.2인치 LCD를 주문을 한 상태다.
그런데 이정도 사이즈 LCD는 핀을 너무 많이 소모해서 아두이노 보드 하나에 LCD
하나밖에는 연결을 못할 것 같고…보여주고자 하는 정보는 많고…게다가 LCD 아직
한번도 안써봤는데…복잡한 정보들을 어떻게 예쁘게 보여줄 수 있을지…
게다가 글의 서두에서도 말했듯이 대부분의 중요한 정보는 내가 개발 중인 웹 서비스에서
가져오게 될 것인데 그런 정보들을 어떻게 파싱하고 LCD에 보여주어야 하는지 아직은
감이 잡히질 않는다.


비록 비용은 아낄 수 있지만 고생은 몇배로 더 해야 할 것 같다.


암튼 또 당분간은 심심치 않게 생겼다^^

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^



좌충우돌 로봇 만들기 Season II - 5 : Epilogue


이것저것 벌여놓은 일이 많다보니 한동안 로봇에 손을 못댔습니다.
그러던 중 다행히 12월 29, 30일 휴가를 얻어 여유가 생기면서 개선하기로 생각했던 부분에
대해 드디어 손을 좀 댔습니다.


원래 마지막 포스팅에서 문제로 지적한 모터 성능을 테스트 해보고 모터쪽으로 개선 방향을
맞춰보려고 했습니다. 하지만 그 동안의 문제점에 대해 최종적으로 내린 결론은 배터리나 
모터의 성능 문제가 아니라 확실히 로봇의 설계가 잘못되었다는 것이었습니다. 그래서 몇가지 
조정 작업을 거쳤습니다. 로봇 만들기 Season II는 이 조정작업에 대한 이야기로 마무리 
하려고 합니다.


그동안 페이스북이나 제 블로그를 통해 조언을 주신 많은 분들께 감사 인사 드립니다.
소프트웨어적으로도 아직 완성된 것이 아니라 조만간 다시 준비해서 Season III으로
찾아뵙겠습니다~^^



다시 한 번 다이어트…


지난 포스팅(Season II - 4 : 원래 약골이었네…-.-) 이후 실제로 서보모터 3개 정도를
추가로 구매해서 간단한 실험을 해보기는 하였다. 비슷한 성능의 다른 제품 3개를 가지고
테스트를 한 결과 현재 내가 가진 배터리와 모터로도 충분한 성능을 낼 수 있다는 것을
확인하였다. 기본적으로 포함된 서보 혼에 바로 연결할 경우 3Kg 무게의 가방을 쉽게
들어올릴 수 있었으며 약 10Cm정도의 팔을 추가로 연결한 상태에서도 그 절반정도의
성능을 보여주었다. 결국 SEW MK I 의 전체 무게가 2Kg 남짓이니 그 무게를 

견디지 못할 배터리나 모터는 아니라는 결론을 내릴 수 있다.


그래서 다시 한 번 로봇의 구조를 바꿔보기로 했다. 크게 바뀌는 것은 없고 가능한한
다리의 길이를 줄이고자 시도했다. 그리고 기존 대비 약 6Cm 정도 길이를 줄였다.
비교를 위해 상세하게 찍은 사진이 없어 쉽게 구분이 가진 않지만 아래 사진의 왼쪽이 
기존 형태이고 오른쪽이 개선된 형태이다.


내가 조립이 쉽도록 모듈화를 해서 만든 것도 아니고…하드보드를 목공풀로 붙여가며
만든 것이다보니 이미 만들어진 것을 뜯어고친다는 것이 이만저만 힘든일이 아니다…ㅠ.ㅠ
가장 어려웠던 것은 재조립 과정에서 모터 위치가 바뀌는 바람에 스케치에서 각도 조정을
일일이 다시 해줘야 했다는 것이다. 빨리 스케치 소스도 라이브러리화를 해야 하는데…
이 과정에서 모터 하나가 타버렸다…ㅠ.ㅠ 다행히 앞서 말한 모터 테스트를 위해 구입한
모터 중에 같은 모델이 있어 바로 교체가 가능했기에 망정이지 안그랬으면 또 주문하고
받을 때 까지 기다리다가 시간을 까먹을뻔 했다.
그래도 생각보다 깔끔하게 작업은 완료되었다. 하지만…


어째서인지 여전히 나아진 부분이 없다…기존과 마찬가지로 비리비리 하다…ㅠ.ㅠ


방향전환


답답한 심정으로 이것저것 테스트를 해보다가 이상한 점을 하나 발견을 했다.
처음 구동을 시작해서 가만히 서있을 대는 진동과 소음이 심하고 자꾸 가라앉는 모습이
보이는데 위로 일어서는 동작에서는 오히려 소음도 거의 없고 매우 안정적인 모습을
보여주었다. 여기서 다시 한 번 모터나 배터리가 힘이 없는 것은 아니라는 것이 증명
되었다. 그랬더라면 로봇을 위로 들어올리는 동작이 쉽지 않았을테니까


그리고 제자리에 서있는 동작이나 걷는 동작에서 다리 관절들이 자꾸 몸에서 바깥쪽으로
밀려나가는 모습이 보였다. 그래서 ‘힘’의 문제에서 ‘구조’의 문제로 그리고 ‘구조’의 
문제에서 ‘각도’의 문제로 최종 가닥을 잡았다.


우선 제작 자체에 문제가 있었다. 두꺼운 하드보드를 일일이 손으로 잘라 외형을 만들다 보니
정밀도가 매우 떨어진다. 아무래 자로 재서 똑같은 모양으로 도면을 그렸다고 하더라도
커터로 자르다보면 오차가 안생길 수 없다. 게다가 두께가 3mm나 되다보니 절단면이 수직이
되는 경우가 거의 없다. 이런 문제들을 무시하고 대충 모양을 만들다보니 얼핏 봐서는 동일해
보이는 다리들이 서로 모양과 위치가 어긋나는 것이다. 그 중에 가장 중요한 것이 ‘각도’이다.
스케치에서 동일한 값을 주어도 실제 형태를 보면 미묘하게 각도가 다르게 서있다. 또한 내가 
예상한 각도와 실제 서있는 형태를 맞추기가 왜 그리 어려운지…바로 이런 것들이 수작업의 한계다. 


아래 그림에서 보면 내가 수학이나 공학적 지식이 전무하다보니 논리적으로 설명할 수는 없지만
그래도 인생의 경험으로 A, B 중 어느쪽이 더 안정적으로 서있을 수 있는지는 쉽게 알 수 있다.
나는 B의 형태를 원하는데 정도의 차이는 있지만 자꾸 A의 형태가 되어버린다…ㅠ.ㅠ





세상은 넓고 방법은 많다.


일단 이렇게 문제를 규정하고 나니 사실 당장에 할 수 있는 것이 없어보였다. 그저 3D 프린터에
대한 생각만 간절해질 뿐…-.-


그러던 차에 또 한가지 생각이 떠올랐다. 문제가 뭐가 되었든 힘이 없으면 뭔가로 보완을 해주면
될 것이 아닌가? 우리가 다리를 다치면 목발을 집듯이…그래서 스프링을 이용해서 자세를 유지하면
어떨까 하고 생각해보았다. 하여간 이놈에 잔대가리란~ 부랴부랴 스프링을 주문하고 적당하게
잘라서(자르다가 손목 나가는 줄 알았다…ㅠ.ㅠ) 아래 사진과 같이 연결을 해주었다.


오~이래놓으니 성능상 이점 뿐만 아니라 외관상으로도 뭔가 있어보이네…^^;;


일단 이렇게 스프링을 장착하니 가만히 서있는 자세에서도 확실히 소음과 진동이 줄었다. 스프링의
탄성이 모터의 힘을 보완해주는 것이다. 그리고 아주 만족스럽진 않지만 움직임도 좀 더 안정적으로
보인다.


일단 그 동안의 문제는 해결을 한 것 같다. 하지만 역시 편법은 편법일뿐 근본적인 해결은 될 수 없다.
편법은 문제를 해결할 수는 있지만 그만큼의 비용과 수고를 지불해야 한다. 로봇 만들기 초반에도
잠시 언급했지만 내가 취미로 하고있으니 감수할 만한 내용이지 상업용으로 무언가를 만드는데 이렇다면
당장 일터에서 잘리겠지…-.-


그리고 다음을 위해…


아무튼 이렇게 해서 일단 SEW MK I은 마무리를 하게 되었다. 표면적으로는 어느 정도 문제를
해결한 것 같으나 역시나 근본적인 문제를 해결하지 못했다는 것이 못내 아쉽다.



얼마전 올해 2017년 계획을 포스팅을 했는데 아무래도 거기에 3D 프린터 구매를 추가해야 할 것 
같다. 그리고 좀 더 정밀한 설계를 바탕으로 SEW MK II를 제작해봐야겠다.


시간이 나는대로 SEW MK I의 나머지 동작에 대한 스케치를 마무리하고 한 번 정도는 더 포스팅을
할 지는 모르겠으나 일단 여기서 MK I 개발은 마무리 하려고 한다.


그리고 얼마전 로봇에 FPV 기능을 구현해보고자 계획을 세웠었는데 FPV쪽은 아두이노로 자작할
만한 내용이 거의 없는데다가 관련 모듈 값들이 비싸서 일단 보류 하기로 했다.


그럼 더 나은 MK II를 위하여!

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^


좌충우돌 로봇 만들기 Season II - 4 : 원래 약골이었네…-.-


여전히 전원 공급 문제가 해결이 안되고 있습니다.
일단 이 문제를 제쳐두고 동작 구현부터 마무리 지으려고 했으나 몇가지 더 시험해보고 싶은 것이 있어
그 시험을 먼저 진행을 했습니다. 

결과부터 말하자면 배터리 문제가 아니라 모터의 문제가 아닐까 하는 생각이 짙어지고 있습니다.
본문에 여러가지 테스트한 내용이 나오겠지만 현재로서는 그렇게 생각이 되네요…

예전에 초반에 쓴 글에 제가 사용한 모터가 MG996R이고 가격으로 봐서 짝퉁인 듯하다는
언급을 한 적이 있습니다. 아무래도 저가로 만들면서 뭔가 부족해진 것 같습니다.

여전히 작업에 진전이 없기 때문에 이번 글의 볼거리는 도색 작업이네요^^


이왕이면 다홍치마~


일이 잘 풀리지 않자 살짝 기운이 빠졌다.
요 기운을 북돋우기 위해 심심풀이 삼아 도색 작업을 해보기로 했다.
컨셉은 중장비.


도색만 해도 애초에 프레임을 조립하기 전에 했으면 좋았을 것을…이미 조립이 다 된 상태에서
도색을 하자니 여간 손이 많이 가는 것이 아니다.


우선 아크릴 물감과 붓을 샀다. 이래저래 돈먹는 귀신이다.
아두이노로 로봇을 만드는 것도 처음이지만 아크릴 물감을 써보는 것도 처음이다.



아크릴 물감은 수용성이긴 하지만 마르고 나면 물로 지워지지가 않으며 마르는 속도가 빠르다.
물을 얼마나 섞느냐에 따라 다양한 효과를 낼 수 있다. 많이 섞으면 수채화 느낌으로도 사용가능하고
물을 거의 안섞으면 페인트 느낌이 나기도 한다. 물론 물을 많이 안섞으면 뻑뻑해서 칠하기가 어렵다.




아무튼 말마따나 좌충우돌이다.
그래도 열심히 칠하고 나니 제법 그럴듯하다. 가까이서보면 우둘두둘한 것이 엉망이지만 적당히 거리를 두고
보니 그럴싸 하다. 그래도 뭔가 밋밋한 구석이 있어서 여러가지 데칼을 좀 붙여줄까 했는데…프라모델용
데칼은 비싸기도 하려니와 이놈한테 어울리는 것을 찾기가 쉽지 않았다. 레터링지로 해볼까 했는데 다리에 붙은
큰 숫자 붙이고 나니 더이상 엄두가 안나 그냥 손으로 대충 썼다…-.-






다시 본론으로…


우선 현상부터 보자. 아래 동영상과 같이 처음에는 씩씩하게 잘 서있다.
하지만 움직이기 시작하는 순간 여지없이 무너진다.
은은하게 들리는 고양이 소리는 언제나 찬조 출연에 노고가 많으신 우리 둘째 따님이시다…^^;;;


여전히 바닥을 기는 모습을 보는 내 마음이 마치 무녀리를 보는 어미 개의 마음이랄까…-.-
그럴싸 하게 만들어졌는데 어찌 앉은뱅이 노릇을 하고 있는지…
애써 외면하려 했으나 쉽게 포기가 안되는 상황이다.
그래서 다시 이것 저것 만져보기 시작했다.


우선 배선을 좀 바꿔봤다. 빵판으로 전원이 들어가고 빵판에서 모터로는 모터 자체 케이블 외에 빵판에 쓰이는
가는 점퍼선으로 연결을 하였다. 혹시 이 가느다란 선에서 저항이 걸리나 싶어 우선 이 가는 점퍼선을 제거하고
빵판에 핀헤더를 꽂고 서보모터의 케이블을 바로 연결을 시켰다. 여러 방법으로 바꿔보긴 했으나 아래 이미지와
크게 다르지 않은 배치였고 그런만큼 전혀 아무런 변화가 없었다. (아래 그림에는 빠졌지만 아두이노에도 별도의
9V 전원이 연결되어 있다.)




일단 배터리 교체와 배선의 변화로도 아무런 진전이 없기에 다른 방법을 찾아야 했다.


아두이노 메가 센서 쉴드


일단 빵판은 공간 활용도 어렵고 그닥 믿음이 가지 않아 빼기로 했다.
빵판이 빠지면 서보모터를 연결할 방법이 필요한데…
우선은 서보 드라이버(혹은 서보 컨트롤러)를 한 번 찾아보았다.
하지만 쓸만해보이는 것들이 대부분 고가였다. 그나마 저렴한 것이 Adafruit라는 곳에서 나오는
16개의 서보 모터를 컨트롤할 수 있고 PWM으로 제어가 가능한 제품이었는데 사실 이 제품은
로봇 만들기 시작한 후 얼마 안되어 멋도 모르고 구입했더니 핀헤더가 전부 직접 납땜을 해야 하는
제품이었다. 




나중의 일이지만 짝퉁을 하나 사서 하루 연습 끝에 생전 처음 납땝을 해보았다.
이거 제대로 하긴 한건가 모르겠다…-.-


피나는 연습과...




그 결과...ㅠ.ㅠ



그러던 중 아두이노 메가 센서 쉴드라는 놈을 발견했다. 바로 아래 이미지와 같은 놈이다.





전체 54개의 디지털 I/O와 16개의 아날로그 입력 핀을 3핀으로 도배를 해놓은 제품이다.
게다가 점퍼를 이용하여 아두이노 전원과 외부 전원을 선택하여 사용할 수도 있다. 바로 이것이
내게 필요한 것이었다. 가격도 만원이 안되는 가격으로 비교적 저렴한 편이고…
단점이라면 외부전원을 쓸 경우 모든 디지털 I/O는 같은 전원을 사용하게 되기 때문에
서보모터를 위해 7.2V 배터리를 연결하면 5V이하에서 동작하는 센서는 사용을 못한다는 것,
그리고 블루투스 연결 핀은 아두이노의 TX0, RX0으로 연결되어 USB 연결시에는 블루투스 센서를
빼야 한다는 번거로움이 있다는 점이다. 


그리고 이놈…아무리 뒤져도 데이터 시트를 찾지 못하겠다…ㅠ.ㅠㅠ
겨우겨우 아래 사이트를 찾아 정보를 얻을 수 있었다.


https://arduino-info.wikispaces.com/SensorShield


그리고 아래와 같이 장착을 하였다. 이 쉴드를 사용하여 얻은 또하나의 좋은 점은 바로 배선이 깔끔하게
정리되었다는 것이다. 산발한 미친X 같던 전선들이 가운데 가르마를 멋지게 탄 신사가 되어버렸다…^^;;;


하지만…신사가 된들 무었하랴…여전히 앉은뱅이를 벗어나지 못했다…ㅠ.ㅠㅠ
이 쉴드를 사면서 내심 기대를 많이 했는데…ㅠ.ㅠ


위 제품과는 별도로 조금 더 비싼 아래 제품을 하나 더 주문했는데 해외 직구 상품이다보니 아직 도착을 안했다.
오긴 오는 건지…-.-




원인 좀 제대로 파악해보자!


일단 뭐 안봐도 모터로 적정량의 전류가 공급되지 않는다는 것은 알겠지만 그래도 직접 한 번 측정을 해보는 것이
좋을 것 같았다.


우선은 쉴드로부터 모터로 이어지는 위치에서 멀티테스터기로 전류를 측정해보기로 했다.
헐…(참고로 ‘헐’이 초등생들이 가장 많이 사용하는 신조어란다…-.-)
MG996R의 데이터 시트를 보면 Running Current가 500 mA – 900 mA (6V)로 되어있다.
그리고 Stall Current는 무려 2.5A다. 그런데 측정 결과는 평균 400 mA ~ 600 mA 정도였다.
Running Current의 minimum에 걸리는 수준이니 정상 범위이긴 한 것 같은데. 그럼 도데채
2.5A가 걸리는 시점은 언제란 말인가? (아는 것이 없으니 의문 투성이다…ㅠ.ㅠ)


그래서 이번에는 배터리에서 쉴드로 이어지는 부분을 끊어서 확인해보기로 했다.


웬열~!
평균 2A 정도에서 오르락 내리락 한다. 모터 하나로 들어가는 전류가 400mA라고만 쳐도 12개가 거의
동시에 움직이니 못해도 4A 이상은 나와줘야 하는 것이 아닌가?
내가 뭔가를 잘못 생각하고 있는 것인가?
알아야 면장을 해먹지…ㅠ.ㅠ


문제 정리


일단 전류 측정 결과로 모터를 의심해보기로 했다.
사실 본체의 무게를 버티지 못하는 것만으로는 대충 아무렇게나 이어붙인 덕에 구조상의 문제라고
생각할 수도 있으나 그럴 경우에는 모터가 많은 양의 전류를 요구할 것이고 전류의 측정 결과가
이렇게 어이없게 나올 수는 없을 것이다.


그렇다면 배터리가 불량인가?
하지만 위험을 무릎쓰고 배터리에 직접 전류를 측정한 결과 빵판이 타면서 측정된 값은 16A였다.
안타깝게 멀티 테스터기가 싸구려라 DC 10A까지밖에 측정이 안되어 배터리의 최대 방전량은 확인을 못했지만…
어쨌든 배터리가 불량이라고 보기는 어려웠다. 더군다나 리튬 이온, 니켈-카드뮴, 니켈-수소 3개의 배터리가
모두 동시에 불량일 확률이 얼마나 될까?


결국 모터를 의심해볼 밖에…
필요한 전류를 전혀 땡겨오지 못하는…
그래서 다음 실험은 모터가 과연 스펙상의 성능을 제대로 내는지이다.
안타깝게도 로봇에 사용된 모터들은 케이블을 테이프로 묶어놓은 관계로 다시 뜯기가 어렵고
아무래도 동일한 모터 1개와 좀더 성능 좋은 모터 1개 정도 더 구입을 해서 비교 테스트를 해보아야 할 것 같다.
또 돈깨지는 소리가 들린다…
이러다가 집팔아서 로봇 만들 기세다…ㅠ.ㅠ


암튼 이렇게 다음 포스팅의 내용이 정해졌다.
모터 테스트 결과를 기대하시라~

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

좌충우돌 로봇 만들기 Season II - 3 : 여전히 영양실조…?


지난 번 포스팅까지 배터리 문제로 결론 짓고 추가로 7.4V 2200mAh 10C의 스펙을 갖춘
전동건용 배터리와 전용 충전기를 추가로 구매했습니다. 비용만 6만 5천원 정도가 들었네요…ㅠ.ㅠ
하지만 결과는 그리 신통치 않았습니다.


오늘 이야기는 전원에 대한 추가 이야기를 조금 쓰고 마무리 하려 합니다.
그리고 단순한 배터리 문제가 아니라고 한다면 대공사가 필요할 것같습니다.
그래서 일단 Season II는 짧게, 여기서 마무리 하고 몸통의 외장을 갖추고 모든 동작 구현을 완성한 후
그 이야기로 Season III로 다시 찾아뵙겠습니다. 


여전히 부족한 무언가…


일단 지난 번 구매한 리튬 이온 배터리로도 어느 정도의 동작은 확보했기에 이후에는 그저
동작 구현에 중점을 두려 하였는데…그래도 확인을 해보고자 하는 마음에 배터리를 추가로
구입하게 되었다. 하지만 대부분의 고방전 배터리들이 관리(충격, 사용 온도, 충전과 방전 등)에
까다로워서 아이들도 있는 집에 경험도 없는 내가 쓰기에는 조금 부담이 되었다. 그래서
일단은 조금이라도 안정적인 니켈 수소 배터리쪽으로 알아보았다.


하지만 니켈 수소 배터리는 고방전을 지원하는 녀석들 가격이 만만치 않았다.
그나마 적절한 가성비를 가진 녀석을 찾아 일단 질러버렸다. 그리고는 다음과 같이
스위치와 연결을 하였다. (사실 사진에 보이는 하네스 커넥터를 인터넷 주문을 했다가

배송이 늦어져 세운상가에서 직접 사왔는데...빨간선과 검은선 이 배터리와 반대로

끼워졌다. 결국 수축 튜브로 선 색을 바꿀 수 밖에 없었다는...ㅠ.ㅠ 아시는 분은 아시겠지만

하네스 커넥터는 2개의 선이 네모와 원모양으로 반대로 체결되지 못하게 되어있다.)



그리고 본체쪽도 배터리 연결 부위를 정리하였다. 아두이노 전원용 9V 배터리까지 모두...


그런데 이 배터리는 문제가 너무 무겁다는 것이다. 이제껏 시도한 배터리 조합을
비교해보자면 알카라인 건전지 6개를 직렬 연결하여 9V를 만들었을 때의 무게가
200g, 리튬 이온 배터리 2개를 직렬 연결하여 7.4V로 사용할 때 110g인데 반해
니켈 수소 배터리는 무려 280g이 나갔다. 결정적으로 새로 구입한 니켈 수소
배터리를 사용한 동작이 리튬 이온 배터리를 이용한 동작보다 하나도 나을 것이
없었다는 것이다…ㅠ.ㅠ




무엇이 문제인지 다시 한 번 생각해봐야 할 문제다. 다시 원점으로 돌아가 모터의
토크 문제일지, 아니면 모터와 빵판을 가느다란 점퍼선으로 연결하여 저항이 많이
걸린 것인지, 아니면 20C 이상의 배터리를 사용해 보아야 하는 것인지…


※ 그래도 니켈 수소 배터리쪽이 조금은 더 나은 성능을 보이는 것 같다. 움직이기
시작하면 여전히 주저앉기는 하지만 버티는 힘은 역시 니켈 수소쪽이 낫다.


※ 선무당이 사람 잡는다고…니켈 수소 배터리 전류 체크하다가 빵판 태워먹었다.
멀티 테스터기 10A에 놓고 대략 값이 11~12 왔다갔다 하는 것을 확인했는데 측정기
탐침 끝이 꽂힌 빵판이 백열전구 켜지듯이 빨개지는 것 같아 얼른 떼고 확인해보니
사진과 같이 타버렸다…



마무리


서두에서도 말했듯이 일단 어느 정도 동작은 하고 있기에 이제 나머지 동작들만 자연스럽게 움직이도록
구현하는데 중점을 두고 작업을 해야겠다. 그리고 동작 구현이 완료되면 다시 하드보드 노가다…
몸통 좀 멋들어지게 만들어주고 마지막으로 도색 한 번 해주고~^^ 우선 밑작업으로 전선 정리좀 해줬다.
뭐 정리라기 보다는 대충 케이블타이로 둘둘 묶어놓은 것이지만…-.-



그리고 모터의 힘이 딸리는 부분은 아무래도 괜찮은 RC 전문점에 찾아가서 자문을 좀 구해봐야
할 것 같다.


이제 스케치 소스좀 잘 정리해서 Season III에서는 소스 분석을 위주로 글을 올려보겠다.

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^


좌충우돌 로봇 만들기 Season II - 1 : 로봇아 다이어트좀 하자!


휴가도 있었고 회사 일도 바쁘다보니 포스팅이 늦어졌습니다.
물론 작업은 계속 진행을 했고 휴가 중에 외형은 거의 마무리가 되었네요.
하지만 외형 마무리 후 첫 기동을 하는데부터가 문제였습니다.
일단 각 관절을 모터 방향이 뒤바뀌는 바람에 소스를 좀 수정해야 했고
가장 중요한 것은 외형을 다 갖추었더니 크기와 무게가 상당해졌는데
이 때문인지 처음 전원을 키면 잘 서다가 움직이기 시작하면 주저앉아서 바닥을
빌빌 기고 마는 것이었습니다.


이 문제를 해결하기 위한 과정을 기록합니다.


하드보드와의 전쟁을 끝내다.


일단 가장 구하기 쉽고 저렴한 재료라서 하드보드로 로봇의 외장을 만들기로 결정은 했지만
그리 탁월한 선택은 아닌었던 것 같다. 자르기가 너무 힘들고 곡면을 만들 수가 없는데다가
잘못 힘을 받으면 겹이 일어아는 문제가 있었다. 큰 형태의 직선을 자르는 것은 어렵지 않았지만
서로 맞물리기 위한 요철을 자른다든지 하는 경우에는 정말 힘들었다. 나같은 경우 두께 3T(3mm 정도)
되는 하드보드를 사용하였는데 다음 같은 문제들이 있었다.


  1. 절단의 어려움 1 : 최소 4~6번은 칼질을 해야 잘린다. 손목과 손가락에 엄청난 무리가 간다…ㅠ.ㅠ
  2. 절단의 어려움 2 : 두께가 두껍다보니 잘린 단면이 직각이 아니다. 절단 과정에서 칼이 조금이라도
    비뚤어지면 이상한 각도로 잘린다. 이럴 경우 T자 형태로 접착을 하면 접착면이 딱 맞지 않아 잘 
    안붙는다.
  3. 엄청난 먼지 덩이 들 : 하드보드가 펄프를 압착해서 만든 것이다 보니 자르다보면 펄프 가루가 장난 
    아니다.
  4. 벌어짐 문제 : 하드보드가 합판과 비슷하게 여러겹을 겹쳐서 만든 것이다보니 조금 무리하게 힘이 
    들어가거나 목공풀이 발린 후 부풀어 오르거나 벌어지는 경우들이 종종 있다

하지만 대안을 찾은 시점은 이미 거의 완성 단계에 이른 때라서 그냥 하드보드로 작업을 진행 했다. 
이렇게 8절로 재단된 하드보드 8장을 자르고 붙여 드디어 몸통을 제외한 외관을 완성했다. 
처음 만든 형태는 아래와 같다. 그래도 다 만들고 나니 제법 모양새가 나는 것 같다.


잘라진 8장의 하드보드







문돌이의 한계 1 - 무게와 무게를 버티는 힘


하지만 다 만들고 나니 문제가 하나 생겼다.
사실 전체 설계를 꼼꼼하게 한 것도 아니고 또 모양에만 신경썼지 다른 부분들은 하나도 고려하지 않았다.
그래서 발생한 첫번째 문제는 몸통(바닥만 있는 상태지만)이 너무 얇다보니 몸통 외곽에 있는 제 1관절
무게를 버티지 못하고 휘청거리는 것이었다. 고민끝에 일단 바닥쪽에 대각선을 이루는 다리 를 잇는 지지대를
붙여 보완을 했고 적절한 효과를 보았다.

빨간 선이 지지대를 붙인 위치다.



물론 금속이나 플라스틱같은 적절한 강도를 가진 재료를 사용했다면 발생하지 않았을 문제이다.
하지만 분명 재질의 탄성이나 강도 그리고 각 부위의 무게등을 적절히 고려한 설계가 필요할 것이다.


문돌이의 한계 2 - 모터에 대한 상식


나는 그저 서보모터라는 것이 각도를 조절하고 그 정보를 피드백 받을 수 있는 모터라는 정도의 지식만을 가지고
작업을 시작하였다. 뭐 그정도로도 2관절로 움직이는 로봇을 만드는데는 큰 무리가 없었다.


하지만 덩치가 커지고 무게가 많이 나가게 되면서 모터의 힘에 대한 고려를 하지 않을 수 없었다.
흔히 토크(torque)라고 하는 힘이다. 쉽게 말해 모터의 회전하는 힘이며 이 힘에 대한 자세한 내용은
아래 링크로 대신하고 당장 필요한 내용만 정리하겠다.


https://ko.wikipedia.org/wiki/돌림힘


일반적으로 서보모터를 판매하는 곳에서는 스펙을 적으면서 토크를 표시할 때 다음과 같이 표시하는 경우가
많다.


stall torque : 9.4 kg/cm (4.8V), 11kg/cm (6V)


일단 kg/cm이라는 단위는 틀린 것이라 한다. 정식 단위는  9.4 kgf·cm와 같이 표시해야 한단다.
하지만 나같은 문돌이들이 이해하기에는 틀린 단위가 이해하기는 더 쉽다…^^;
자, 하나하나 알아보자.


일단 용어부터, stall torque란 움직임이 멈추면서 발생하는 토크다. 가장 큰 힘이 들어가는 시점이
이 때라고 한다. 따라서 (문돌이의 입장에서는) stall torque는 곧 최대 토크라고 봐도 무방하다. 하지만
실제로는 서로 다르니 오해가 없도록…


다음은 단위의 이해, 아주 단순하게 말해서 torque란 모터 축으로부터 움직여야 할 물체와의 거리와 움직여야 할
무게의 비율이다. 틀린 표현이 더 이해하기 쉽다는 것이 바로 이 때문이다. 즉, 9.4 kg/cm (4.8V)란 것은
”4.8V의 전압을 공급했을 때 1cm 거리에 있는 9.4Kg의 물체를 들어올릴 수 있다.”는 의미로 보면 된다.
문돌이의 수학 상식으로도 이정도는 이해할 수 있다. 분모가 거리이고 분자가 무게이므로 당연히 거리가
멀어질수록 torque는 작아질 수밖에 없다. 즉, 들어올릴 수 있는 무게가 작아진다는 의미다.



현재 사용중인 모터는 MG996R이라는 모터이고 이 모터의 경우 정식 라이센스를 받은 제품은 2만원 이상의
가격대를 형성하는 것 같은데 대부분의 업체에서는 중국산 카피 제품을 파는 듯하다. 중국산은 가격이 
5,000~7,000원 대에 형성되어 가성비는 최고가 아닌가 싶다.
위 예는 바로 이 모터의 스펙이다. 일단 1 cm 거리에서 적어도 9.7Kg을 들어올릴 수 있으니 상당한 성능이다.


그런데 아래 동영상을 보면 알겠지만 구동을 시키자 무게를 버티지 못하고 납짝 업드려 발발 기고만 있다…ㅠ.ㅠ
완성된 로봇의 전체 무게가 2Kg 남짓인데 문돌이의 상식에서는 도저히 이해가 안가는 상황이었다.




그래서 처음 생각한 것이 바로 이 토크다. 일단 문제점으로 판단한 것은 모터 축으로부터 무게 중심이 너무
멀리 있다는 것이었다. 그래서 몸통을 다시 구성하였다.



                                                   개선 전 형태                                                                                                           개선 후 형태        




                 개선 전 실제 모습                         개선 후 실제 모습 (접은 상태)                 개선 후 실제 모습 (펼친 상태)



산뜻하게 다이어트를 하고 다시 기동을 해보았지만 별다른 성과가 없었다…ㅠ.ㅠ


이렇게 첫 걸음마는 실패로 끝나고 말았다.
나는 계속해서 torque에만 신경을 썼고 그래서 torque 값이 높은 모터만을 검색하고 있었다.
하지만 현재 사용중이 모터보다 torque가 큰 모터는 대략 가격이 4만원대 이상을 형성하고 있었다.
돈도 돈이지만 만일 모터를 구입했는데 개선되지 않는다면? 지식의 부족은 결정을 망설이게 만든다.


그러던 중 새로운 측면으로 시점을 전환하게 되었다.
글이 길어진 관계로 오늘은 여기에서 마치고 다음 글에 그 내용을 적도록 하겠다.

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

좌충우돌 로봇 만들기 Season II - Prologue


사실 SEW-MK I 제작기는 조금 더 시간을 두고 시작을 하려고 했는데 한동안 쓰던 글을 
중간에 멈추려니 몸이 근질근질해서 외장 작업 과정을 정리해보려고 합니다.



머리 속에서는 아주 자유롭게, 그리고 너무도 쉽게 떠오르던 아이디어들을 실제로 구현하려니
마음만 앞서고 쉽지가 않네요…ㅠ.ㅠ


제목대로 그야말로 좌충우돌, 시행착오의 연속입니다.
하지만 이렇게 정리해놓으면 다음에는 좀 더 쉽게 작업이 가능하겠죠.^^


그럼 본론 시작합니다~


어떻게 연결할 것인가.


우선 외장 재로는 그나마 가공이 쉬울 것 같은 하드보드(두께 3mm)로 정했다.
3D 프린터라도 있으면 참 좋으련만 (물론 모델링을 못하니 공개된 도면을 찾아야
하겠지만…) 이가 없으니 잇몸으로 때울 수밖에. 결과적으로 확인한 바…하드보드 작업…
결코 쉽지가 않았다…ㅠ.ㅠ


이제 각 관절을 이루는 모터를 어떻게 결합하고 어떤 식으로 그 외관을 감쌀 것인가를
본격적으로 고민해야 할 때가 되었다. 구글링을 통하여 수많은 4족 또는 6족 로봇을 
찾아본아도 대체로 기성품으로 나와있는 프레임을 사용했거나 아니면 대부분 3D 프린터를
이용하여 만든 로봇들 뿐이었다. 그나마도 제작 과정을 상세하게 적은 내용들은 거의
전무해서 크게 도움이 될만한 내용을 찾지 못했다.


결국 진작부터 알고 있던 zoobotics의 ZURI를 모방하는 것이 가장 좋을 것 같다는
결론에 이르렀다.


zoobotics 사이트 : http://zoobotics.de


zoobotics 사이트에도 역시 도면을 제공하고 있지는 않은 것 같았다.
그래서 결국 눈짐작으로 대충 그 형태를 잡아나갈 수 밖에 없었다.
처음에는 동일한 형태로 진행을 하려 했으나 그래도 자존심은 있어서 제 2관절과 3관절에
사용될 모터를 연결하는 부분만 동일하게 만들고 몸통과 다리는 나름 달리 제작해보고자
하였다.


우선 2개의 모터는 다음과 같이 연결을 하였다.
두 개의 모터를 지지대 너트2개와 나사 4개로 아래 사진과 같이 연결을 하였다.


그리고 ZURI의 사진을 보고 하드보드에 도면을 그렸다.
얼핏 보면 그럴싸하지만 자세히 보면 사각형의 변끼리의 평행도 안맞고 길이도 들쭉날쭉해서
역시 문돌이의 기운이 느껴진다.



이렇게 해서 4쌍의 모터를 아래와 같이 연결하였다.
이 작업만 대략 8시간 정도 걸린 것 같다(매일 퇴근 후 집사람의 압력에도 굴하지 않고 1~2시간씩 꾸준히 만들었다).



다리 만들기


디자인 컨셉을 Steampunk로 잡았다.
컨셉을 잡고나서 과연 내가 이걸 할 수 있을까 하는 의구심이 들었고
아직도 그 의구심 속에서 작업을 진행하고 있다…ㅠ.ㅠ 


스팀펑크라 하면 녹슨 철, 철판을 이어붙인 리벳들, 얽히고 섥힌 파이프들이 떠오르는데
과연 그 효과를 어떻게 줄지가 고민이었다. 일단은 나사 못을 이용하여 최대한 근접한
효과를 내보자 하였는데…안타깝게도 내가 가진 나사의 대부분이 지름 5mm짜리였다.
이정도 두께는 웬만큼 구멍을 크게 뚫어놓지 않으면 하드보드지가 다 뭉그러져버린다.
아무래도 지름 2~3mm정도의 나사못을 새로 구해야 할 것 같다.


암튼 이런 저런 고민끝에 다리의 모양을 아래 그림과 같이 설계를 해보았다.
좀 더 다이나믹한 디자인을 해보고 싶었지만 역시 스킬의 한계가 있는만큼 우선은 가급적
단순하게 가고 나중에 외양을 덧붙여나가는 방식으로 진행하기로 하였다.



그리고 처음 설계와는 분위기가 좀 달라졌지만 샘플로 만든 첫번째 다리가 완성되었다.
한쪽 옆에 뭉개진 부분이 5mm나사를 끼우려다가 찢어진 것이다…ㅠ.ㅠ



그래도 만들어놓고 보니 나름 그럴싸하다…^^;;;
그리고 앞으로 이런 걸 3개나 더 만들어야 할 생각을 하니 앞이 캄캄하다…ㅠ.ㅠ


남은 작업 : 몸통 만들기와 다리 연결하기


그래도 일단 다리는 설계라도 마쳤으니 그리고 자르고 붙이면 되겠다. 힘은 들더라도…ㅠ.ㅠ
남은 것은 몸통을 어떻게 만들것이며 제 1관절 모터와 다리를 어떻게 연결할 것인가다.
앞에서도 말했듯이 ZURI의 연결형태가 참 마음에 들지만 자존심상 똑같이는 못하겠다.
일단은 정사각형 모양으로 연결하고 외부를 좀 꾸며볼 생각이다.


정말 문제는 몸통이다.
나름 멋들어지는 스팀펑크의 냄새를 풍겨보고 싶은데…
일단은 구글에서 스팀펑그와 관련된 로봇, 탱크 등의 이미지와 1차대전 당시의 탱크 사진 등을
열심히 검색해보고 있다.


문제는 시간이다.
다리 한짝 만드는데 날짜로 거의 1주일이 걸렸으니…ㅠ.ㅠ
암튼 블로그 글 한편정도 쓸 작업 분량이 되면 다음 글을 올리도록 하겠다.


그래도 이 작업 하느라 폭염을 그럭저럭 버틸 수 있는 것 같다.
이 글을 읽는 여러분들도 부티 여름 무더위에 건강 유의하시길~

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^


좌충우돌 로봇 만들기 5 - SEW-Prototype 개발 종료


문돌이의 좌충우돌 로봇 만들기를 처음 올린 것이 6월 20일 경이니…
약 한달여의 시간이 흘렀다.


그리고 이제 기본적인 움직임의 구현은 모두 마친 것 같다.
물론 아직도 갈길은 멀다.


이에 한 달여간의 결과는 간단하게 동영상으로 갈음하고 앞으로의 계획을 정리하면서
SEW-Prototype의 개발을 종료할까 한다.


일단 관절이 2개밖에 없는 관계로 부자연스러운 동작들이 있을 수 밖에 없다.
특히 Up/Down의 경우 사실상 Up은 없는 것이나 마찬가지다. (물론 각도를 조절하여
구현할 수는 있지만…)


그럼 동영상을 감상하시라~



SEW-MK I을 향하여


앞으로 다음과 같은 작업이 진행이 될 예정이다. 앞으로의 작업은 세부적인 튜닝이 될 것이기에
아마도 지금만큼 자주 결과물을 정리하지는 못할 것 같다.


  1. 제 3관절 추가 : 현재 각 다리의 관절이 2개씩이다보니 동작에 제약이 있다. 마지막
    관절을 붙일 것이다.
  2. 외장 추가 : 우선 동작 구현을 위주로 하다보니 외관이 너무 볼품이 없었다. 어느
    정도는 외관을 꾸며주어야 할 것 같다. 그래도 명색이 MK I 이니…
  3. 동작 다듬기 : 현재까지는 그저 생각나는대로 즉흥 구현을 하다보니 어설픈 부분이
    많이 보인다. 다른 패턴의 이동, 자연스러운 방향전환 및 회전 등을 구현해야 한다.
  4. 소스 리팩토링 : 역시 막코딩으로 일관하다보니 소스가 점점 길어지고 복잡해진다.
    라이브러리화 할 부분을 분리하고 소스를 좀더 간결하게 다듬어야 할 것이다. C 공부를
    제대로 해야 할 듯싶다.
  5. Analog 입력 처리 : Youtube 동영상을 보면 많은 사람들이 아날로그 조이스틱을
    이용하여 로봇을 제어하고 있다. 아무래도 아날로그 방식이다보니 동작이 좀 더 부드러운
    것 같다. 동작의 종류나 방향 뿐만 아니라 속도와 각도 역시 조이스틱으로부터 입력이
    되는 것 같은데…어떻게 구현을 해야할지 벌써부터 막막하다.

일단 이정도가 MK I에서 구현될 내용들이다. 앞으로 또 얼마만큼의 시간이 걸릴지 모르겠으나
칼을 뽑았으니 무 꼭지라도 썰어야지…-.- 그저 야금야금 만들어갈 생각이다.
마지막으로 이 허접한 로봇이 만들어져 가는 과정을 보아주신 분들께 감사드린다.


감사합니다~^^


추신 : 동영상의 배경음악은 우연히 아이들이 보고있던 '벼랑위의 포뇨' 배경음악이 삽입되었는데 그럴듯하네요^^;;

추신2 : 동영상 중간중간 비치는 무좀걸린 발톱은...죄송합니다...- -..._ _...- - 

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^



좌충우돌 로봇 만들기 4


일단 2관절 4족 보행은 조만간 마무리가 될 것 같습니다.
아직 손봐야 할 곳들이 좀 있지만 일단 가볍게 처리하고 넘어가야 할 것 같네요.
지난 번 잠시 말씀드린대로 집에 우환이 좀 있어 작업 속도가 더딥니다.
일단 7월 안에 마무리를 짓고 8월부터는 관절을 1개씩 더붙여 3관절 작업을
시작하고 하드보드나 골판지를 이용하여 옷도 좀 예쁘게 입혀줘야겠네요^^


오늘도 크게 특별한 내용은 없습니다. 동영상이나 감상하고 가시죠~ 


전/후/좌/우 이동 구현


대각선으로 마주보는 다리 (제 1관절)을 엇갈려 움직이는 방식은
제 2관절의 움직임을 제어하는 것 만으로 전진과 후진, 왼쪽과 오른쪽
움직임을 구현할 수 있다는 점에서 편하다.


제 1관절은 정해진 각도에서만 움직이면 된다.
나의 경우 45도를 기준으로 잡았다.
아래 그림을 참고해서 보면 1관절은 서로 대각선에 위치한 것들이 동시에
같은 방향으로 움직이며 이때 제 2관절이 움직이느냐 안움직이느냐에 따라
전진과 후진이 결정된다.
(참고) F : Front, R : Rear, L : Left, R : Right



즉, 한단 왼쪽 그림에서는 FR과 RL이 전진을 하고 FL과 RR은 후진을 한다.
이 때 전진하는 다리의 제 2관절을 들어주면 앞으로 이동하고 후진하는 다리의
제 2관절을 들어주면 후진을 한다.


이렇게 좀 쉽게 가나 했는데 제 2관절을 연결할 때 앞 뒤가 서로 대칭이 되도록
모터를 연결하였더니 올리는 각도가 서로 반대가 되어 계산하는데 골치가 좀
아팠다...역시 문돌이의 한계랄까...다음에는 같은 방향으로 연결해서 동일한
각도로 움직이게 해야겠다.


그리고 마지막으로 좌/우로의 방향 전환인데...
뭔가 동작 처리를 잘못 한 것 같다. 정방향으로 움직이지를 않고 각도가 자꾸
틀어진다. '전'에서 '좌'로, 또는 '우'에서 '후'로 등 방향 전환을 할 때 '좌향 앞으로 갓!'이
아니라 '줄줄이 좌로 갓!'의 느낌으로 삐딱하게 돌아간다...이 부분도 손볼 부분 중
하나다.


어쨌든 이제 회전과 트위스트, 그리고 업/다운 정도만 구현하면 기본적인 동작은
다 구현하게 되는 것이다. 일단 예상으로는 그리 어려울 것 같진 않은데...


아래는 이번 주 작업의 최종 결과이다.
그런데 이놈 이거...배터리 먹는 하마다.
현재 듀라셀 AA 배터리 4개를 직렬로 연결하여 사용하는데 주말에만 잠깐씩
돌리는데도 매주 배터리를 갈아줘야 한다...ㅠ.ㅠ
아무래도 고용량 배터리를 사야 할 것 같다.

그럼 다음 시간에~


최종 소스 : https://github.com/mazdah/BluetoothController



블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^