이번 시간에는 조이스틱으로 서보모터의 각도를 조절해보도록 하겠습니다~


# 준비물


조이스틱 모듈, 서보모터, 아두이노



먼저 모터에는 구동방식에 따라 DC모터, 스텝모터, BLDC모터, 서보모터 등으로 나뉩니다.

그 중에서 서보모터(Servo Motor)는 지정된 각도 내에서,

원하는 각도로 움직일수 있게 제어가 가능한 모터입니다.


주로 0~180도의 움직임 각도를 가지며, 제어는 PWM 신호에 따라 각도가 바뀝니다.

PWM신호는 Pulse Width Modulation의 약자로, 

펄스 신호의 폭의 길이를 조절하는 신호를 통해 제어한답니다.



위 사진에서 보다싶이 모든 PWM 신호는 고정된 주기를 가지고 있으며,

유일하게 변하는 것은 한 주기 내에서 HIGH상태와 LOW 상태의 비율이 변하게 됩니다.


이러한 비율 변화가 각도의 변화가 되도록 서보모터 내부에서 신호처리가 된답니다~


그럼 이제 만들어봅시다!



먼저 저는 Adafruit사의 조이스틱 모듈을 구매해서 사용했습니다.



그리고 핀헤더를 수직으로 납땜하니 사용이 불편해서.. 이렇게 수평으로 납땜했어요~



회로는 위와같이 연결하시면 돼요!


조이스틱 모듈          아두이노

Vcc                       5V

 GND                     GND

Xout                       A0

Yout                       A1

Sel                         8


Xout은 X 축방향의 움직임 값을 나타내구요,

Yout은 Y 축 방향의 값을,

Sel는 눌렸을때 버튼 값을 의미합니다.

여기서 버튼 값의 경우는 단순히 연결한다고 끝이 아니라, Pull-up resistor 세팅을 해주셔야 합니다.

Pull-up resistor가 뭔지 궁금하시면 http://geronimob.tistory.com/19 참고!


  1. int Xval, Yval, Sel;

    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      pinMode(8,INPUT);

      //Digital input needs Pull-up resistor setting.
      digitalWrite(8,HIGH);
    }

    void loop() {
      // put your main code here, to run repeatedly:
      Xval = analogRead(A0);
      Yval = analogRead(A1);
      Sel = digitalRead(8);

      Serial.print(Xval);
      Serial.print('\t');
      Serial.print(Yval);
      Serial.print('\t');
      Serial.println(Sel);

      delay(100);
    }


위 코드를 업로드 하고나면 순차적으로 X값, Y값, 버튼 값 이 업데이트 될거에요!




자 그럼 이제 서보모터를 연결해봅시다.


먼저 서보모터는 위에서 언급했다싶이,

PWM신호로 제어가 된답니다.


때문에 Vcc, GND, Signal 이 세 핀이 필요하겠지요~


그럼 연결을 하고 코딩을 해봅시다.


위에 코드를 그대로 살리면서 추가합시다.

먼저 서보모터 함수를 사용하기위해 Servo.h를 불러옵니다.


그 다음 Servo 클래스를 선언하고, 셋업에서 3번핀에 서보를 할당합니다.

지금은 모터가 한개이므로,,, 한 축으로만 제어를 할게요;;


우선 서보모터를 움직이는 함수는 servo.write() 인데, 

안에 들어가야할 값은 0~180도 까지의 각도 값입니다.


하지만 analogRead를 통해 받아온 값은 0~1023의 값이 나오죠.


즉, 0~1023의 값을 0~180 사이의 값으로 맵핑을 해줘야 하는데,

바뀐 변수 = map(바꿀 변수, 바꿀 변수의 최소값, 바꿀 변수의 최대값, 바뀐 변수의 최소값, 바뀐 변수의 최대값)

으로 바꿀수 있습니다!


그리고 명령이 수행되는데 시간이 걸리므로 delay()함수를 넣어줍니다.


  1. #include <Servo.h>

    Servo servo;  // create servo object to control a servo

    int Xval, Yval, Sel,pos;

    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      pinMode(8,INPUT);

      //Digital input needs Pull-up resistor setting.
      digitalWrite(8,HIGH);

      //Servo setup with pin3
      servo.attach(3);
    }

    void loop() {
      // put your main code here, to run repeatedly:
      Xval = analogRead(A0);
      Yval = analogRead(A1);
      Sel = digitalRead(8);

      Serial.print(Xval);
      Serial.print('\t');
      Serial.print(Yval);
      Serial.print('\t');
      Serial.println(Sel);

      pos = map(Xval,0,1023,0,180);
      servo.write(pos);              // tell servo to go to position in variable 'pos'

      delay(15);
    }


그럼 위와같은 코딩이 되지요!



구동을 하면 스틱 움직임의 각도에 따라 모터도 움직여요~


아무래도 조이스틱의 축이 2개니, 모터를 2개써서 제어도 가능하겠지요?


그리고 버튼값을 잘 이용한다면 위치 고정(Lock)과 같은 기능도 넣을수 있을듯 하네요ㅋㅋ


궁금한 점은 댓글로 남겨주세요!


이번엔 실루엣 포트레이트 제품에 대해 보겠습니다~

실루엣 포트레이트(Silhouette Portrait)란 도면 재단을 위한 프린터로,

기존 프린터의 잉크 카트리지 대신에 칼날이 삽입되어

원하는 형태로 종이나 시트지 등을 자르는 프린터 입니다.



현재 구매한 모듈을 포트레이트로, A4 사이즈 크기의 종이를 자를수 있고

무게도 1.6kg 정도라 들고다니기도 편합니다~


사실 원래 사려고 했던 기종은 실루엣 카메오 제품으로,

추가적인 기능이 상당히 많이 들어가있어요!

무선으로 프린팅할수도 있고, 칼날이 소프트웨어에 따라 자동조정되고,

프린팅 크기도 꽤 커요ㅋㅋ


그치만 그만큼 기능들이 필요없고, 단순 반복작업을 할것 같아

포트레이트로 결정했답니다.


다만 아래처럼 칼날을 세팅하는게 조금 귀찮고, 

용지에 따라 적정값을 찾는게 힘들지요..



요 칼날이 기본 수동 조절 칼날입니다.

카메오3부터는 자동조절 칼날은 별도 판매를 한다네용~



우선 동봉된 칼날 조절기(?)로 원하시는 깊이의 칼날을 설정해줍니다.

0이 가장 얕은칼날, 10이 가장 깊은 칼날입니다~



보통 시트지의 경우 1~2정도 놓고 쓰시면 뒷면의 비닐은 잘리지 않고

윗면의 접착면만 잘리게 됩니다.

세팅을 하셨으면 홀더에 넣어주시고,



벨브를 돌려서 고정해줍니다!



그리고 동봉된 접착 커팅매트에 종이를 올려두시고,

맨 위에 눈금 커팅매트 삽입 버튼을 눌러주세요!



그리고 실루엣 스튜디오를 이용해서 원하는 문양을 컷팅하면 끝~!


확실히 반듯하게 인쇄가 되니 엄청편합니다ㅋㅋㅋ

아직까진 많이 사용하진 않았지만,

칼날도 오래간다고 하니 기대하고 써봐야겠습니다!


삼성 갤럭시 S8 구매!


이번에 좋은 기회가 생겨 갤럭시 S8을 사전예약하여 구매하게 되었습니다.



두둥,,!!



구성품은 단순합니다~

설명서와 설명서 아래 USIM칩 슬롯을 뽑을수 있는 핀이 있구요,

커널 이어폰, 충전기, 케이블 등이 있습니다.


아참 캐이블은 USB-C 랍니다!



아이폰 7을 사용중이었지만,

이걸 보다 보니 오징어네요ㅠㅠ


아무래도 갤럭시 S8이 배젤이 거의 없어서 그런 느낌이 드나봅니다~


다만 떨구면 정말정말정말정말 큰일나게 생겼어요...ㅋㅋㅋㅋㅋ


그럼 몇가지 기능과 사전예약 혜택에 대해 볼게요!


1. 홍채인식, 안면인식

2. 사전예약 사은품(레벨 박스 or 덱)

3. KT샵 10% 할인 쿠폰

4. 리니지 쿠폰



#1 홍채인식 및 안면인식


기본 핸드폰 잠금해제는 얼굴 인식으로 설정했었는데,

삼성페이도 보안을 설정하라고 뜹니다.

그래서 삼성페이는 홍채인식으로 세팅했지요ㅋㅋ



설정하는 방법입니다.



그냥 폰을 정면으로 바라보시고, 두개의 동그라미에 눈을 맞춰서 넣어주시면,

옆에 빨간 홍채인식 LED가 켜지면서 인식이 됩니다!


그러면 끝ㅋㅋ

생각보다 간편한 세팅에, 높은 인식율로, 쓰기 편할듯 하네요!


#2 사전예약 사은품



사전예약 구매를 진행하셨다면,

추가로 사은품을 받을 수 있습니다!


    


S8+ 128G 를 구매하신 분은 삼성 덱스(EE-MG50)를 사은품으로 받을 수 있구요,

그 외 분들은 블루투스 스피커인 레벡박스(EO-SG930)을 받으실 수 있어요~!


   


아마 사전 예약을 하셨다면 문자를 받으셨을텐데, 이때 사전 사은품 신청을 하셨다면,

사은품 쿠폰 사전 신청을 하셨으면, 삼성 맴버스 앱의 개인 쿠폰조회를 하시면 확인 가능합니다!


 


혹시나 신청 안하셨다면, 추가신청이 가능하니 당황하지 마세요ㅋㅋ

위에보시다싶이 삼성맴버스로 들어가면 팝업창이 뜬답니다!


다만 쿠폰 발급조건은 새 회선의 최초 발신 및 수신 통화기록이 있어야 발급이 된다하니, 이점 유의해주세요!


#3 KT샵 10% 할인 쿠폰


제 통신사가 KT라서,,


KT로 개통하신 분들은 추가로 10% KT 액세서리샵 할인쿠폰을 발급받으실 수 있습니다!



다만 이미 할인을 하고있는 물품의 경우는 중복사용이 안되기때문에,

크게 의미가 없을수도 있어요ㅠㅠ


#4 리니지 레볼루션 쿠폰



약 10만원 상당의 리니지 레볼루션 아이템 쿠폰이 지급된다고 합니다!

약 10만원 상당...?!?!


#쿠폰내용
축복받은 강화주문서 선택상자 8개
마프르의 가호 1개


저는 게임을 잘 안해서... 중고로 파시면 꽤나 쏠쏠할듯 합니다~



그 외에도 이런저런 혜택들이 많으니 요기 아래 가셔서 한번 확인 해보세요~!ㅎㅎ


http://local.sec.samsung.com/comLocal/event/promotion/eventList.do?eventId=13640







살면서 한 번쯤 해보고 싶었던 자전거 여행!


이번에 제주도에서 짧게나마 즐길수 있는 기회가 생겨서 다녀왔습니다ㅋㅋ


김해공항에서 금요일 저녁 비행기로 갔다가

화요일 오전 비행기로 돌아오는 일정이었어요~



저가항공으로 티켓을 끊다보니 저녁시간에 출발이었는데,

이 시간에 제주도 가기는 첨이네요ㅋㅋㅋㅋ


첫날을 제주 공항에 도착하고나서 늦었으니 바로 숙소로 갔어요~


숙소는 용담 사거리에 있는 미르 게스트하우스 (Mir Guest House)!

독특한 건축물로 상당히 인기있는 게스트하우스랍니다


공항에서 가는법은 500번 버스를 타시고 용담 사거리로 가시면 되는데, 

방향을 잘 보고 타세요!


제주공항은 양 방향 버스가 모두 같은 위치에서 탑승하게 되어있으니,

모르실 경우는 물어보고 타셔야해요ㅋㅋ


밤 10시 이후에는 심야버스 2400번도 있으니 참고하세요~



요기가 미르 게스트하우스 입구랍니다.

뒤로 돌아서 들어갈 수 있어요~





요기는 내부 침실 공간인데, 열쇠로 잠글수 있는 보관함도 있고,

침대는 2층으로 되어있어요~


단, 2층에서 자보니 사다리가 불편하게 돼있어서,

위험할수도 있어요ㅠ



여기는 공용 공간으로, 10시까지 열려있는데, 좀 늦어도 별 말씀 안하셔요ㅋㅋ

오히려 늦어도 괜찮으니 방에 있는 사람들끼리 잘 놀다 가라고 하십니다!



같은 방을 쓰는 분 중에 입대를 앞둔 분이 계셔서 맥주 한잔 하면서 이런저런 얘기를 했지요ㅋㅋㅋ



아침엔 샌드위치와 주스, 커피로 간단하게 요기하면 됩니다~

대부분 ㅔ스트하우스가 8~9시가 조식 시간이더라구요


그 외에 공용 샤워실이나 화장실은 정말 깔끔하게 잘 돼있습니다ㅋㅋ


둘째날엔 걸어서 근처 자전거 랜탈샵인 '제이바이시클'로 걸어가서 

하이브리드 자전거를 빌렸어요~


미리 예약하시면 하루에 \15,000원으로 빌릴수 있답니다ㅋㅋ

혹시나 헬멧을 주시면 받아가세요!

안전도 안전이지만, 바람때문에 머리가 감당안될정도로 날려요...


그리고 한바퀴를 못돌고 중도에 반납하시게 되면 

추가금이 있을수도 있고 없을수도 있어요~

저희는 반바퀴 돌고 반납해서 2만원 추가금을 냈습니다ㅋㅋ


자전거 코스는


# 1일차


용두암-해녀잠수촌(아침식사)[6.59km]-이호테우 해변[6.54km]-하귀2리[7.85km]-애월읍[4.54km]-곽지과물해변[11.61km]-협재해수욕장[18.87km]-웅담(점심식사)-수월봉[15.28km]-모슬포항-미영이네(저녁식사)-늘푸른게스트하우스


# 2일차

모슬포항-송악산[4.95km]-산방산[4.85km]-안덕계곡[6.86km]-중문관광단지[8.07km]-강정마을[8.01km]-김만복(점심식사)-제1청사[6.88km]


처음에는 위미항까지 가려했지만, 맞바람이 너무 심해서 자전거를 탈수가 없었어요...

남부 해안가쪽은 특히나 맞바람이 심하니 자전거 여행하실때 참고해두세요~!



첫날 일정을 위한 용두암!



저 바위에 하얀게 다 새똥이랍니다ㅋㅋㅋ

저걸 치워야하냐 말아야하냐는 논쟁이 있다고 합니다ㅋㅋ



길따라 달리다보면 장관이 펼쳐져요~

비행기가 거의 5분에 한대꼴로 계속 내려온답니다ㅋㅋ



용두암에서 한 20분? 정도 가다보니 아침식사 지점인 '해녀 잠수촌' 에 도착했습니다~

여기는 가격도 저렴하고 아침식사까지 되는 곳이라 좋아요ㅋㅋ


저희는 전복 뚝배기와 회덮밥을 시켜먹었어요

고등어는 원래 밑반찬이고, 특이하게 보리빵을 준답니다!


든든히 밥을 먹고 이제 1차 목표지점인 이호테우 해변으로~



이호테우 해변에는 특이한 등대가 있어요


'제주 목마 등대' 라고 불리는데,

트로이 목마처럼 흰 등대와 빨간 등대 이렇게 두개가 나란히 있답니다ㅋㅋㅋ



요기는 빨간등대! 


여기 이호테우 해변 뒤로는 숲(?) 같은곳에 텐트장도 있어서

여름에 오면 재밌을것 같아요ㅋㅋ




길가다 멈추면 어디든 절경...ㅋㅋㅋㅋ

그치만 날씨가 흐려서ㅠㅠ



저희가 달렸던 길은 '제주환상 자전거길' 이라고 해서,

자전거 여행하시는 분들을 위해 만든 도로라고 합니다만...!!


생각보다 차도랑 구분이 없어서 위험한 곳도 많아요ㅠ



그래도 잘해놓은건 포인트 포인트 마다 지루하지 않게,

가까운 포인드까지 남은 거리도 알려주고,

포인트에 도착하면 '인증센터' 라고 해서

도장을 찍는 곳이 있답니다ㅋㅋㅋ



달리다 다리아파질때쯤 도착한 '곽지과물 해수욕장'

제주도 해변은 다들 모래 유실을 막기위해서 

이런 비닐이나 천막들을 모래사장에 덮어둔다고 하더라구요!


첨엔 무슨 전시회같은걸 하나 싶었네요ㅋㅋㅋ



옆에보면 노천탕도 있어요ㅋㅋㅋㅋ

여름에 오면 재밌을법 하겠네용~


해변앞에서 자전거와 함께 인증샷!



여기는 점심식사장소로 정했던 웅담!

보말요리전문 이라고 적혀있었는데,

보말이 뭔가 싶어서 찾아봤더니

골뱅인데, 바다에서 보는 바다골뱅이 랄까요....???ㅋㅋㅋㅋ


보말칼국수랑 보말물회를 시켰는데,

칼국수가 정말 맛있었어요ㅋㅋㅋ

물회도 새콤달콤해서 좋았어요!



가격도 저렴한 편이어서 괜찮은 점심이었습니다!



밥을 먹고 나왔는데 아직 절반도 제대로 못와서 죽어라 밟았습니다ㅋㅋ

요기는 협재해수욕장으로, 

이곳 역시 모래유실 방지를 위해 비닐로 덮어두었더라구요~


이때쯤 부터는 아마 사진찍기를 포기했었던것 같아요ㅜ



요기는 수월봉 입니다.

산이라기 보다는 조금 높은 오름? 이랄까요...?

생각보다 휑해서 깜짝놀랐어요ㅋㅋ


옆에는 기상관측센터가 있어서 함부로 못들어가게 되있지만,

계단으로 위로 올라가면 정자가 있어서 전망을 보기에는 좋아요~


올라갈때는 도로를 통해 올라갔는데,

내려갈때는 같은길로 가니 좀 돌아가더라구요;;


그래서 저희는 기상관측센터 옆으로 나있는 올래길로

자전거를 끌고 나름 지름길이라고ㅋㅋㅋ

끌고 내려왔는데, 시간도 줄이고 안전하고 좋더라구요!



그리고 대망의 저녁식사!


친구가 꼭 가봐야 하는 로컬 맛집이래서 엄청 기대했습니다ㅋㅋ



이 집은 메뉴가 고등어회 소,대 밖에 없답니다ㅋㅋ

그치만 맛은 정말 일품!!


두세명이면 소자 드셔도 충분할것 같아요~



정말 고등어도 고등어지만, 저 양파무침도 진짜 맛있답니다~

김에 같이 싸먹으면 녹는맛...ㅠㅠㅠ



그리고 먹고나면 탕까지 주셔서 엄청 배부르답니다ㅋㅋㅋ

세명에서 소자 하나 시키면 딱 맞을것 같아요~


이렇게 맛나게 먹고는 늘푸른 게스트하우스에서 취침을 하고 하루를 보냈습니다


둘째날은 다음 포스팅에서!


얼마전에 구매했던 아이로드 i7의 야외 주행에 대해서 알려드리겠습니다~


구매하고나서 한동안은 학교 캠퍼스나 실내를 주행했었는데

상당히 안정적이고 속도도 5인치 타이어로 설정해두면 28~30까지는 나오더라구요ㅎㅎ


어느정도 주행에 익숙해지고 밖에서도 주행을 해봤습니다ㅋㅋ

버스를 탈때는 손잡이를 빼고 접어서 타니 탈만 했습니다~



여기는 울산 로컬분들이 봄날에 벚꽃보러 많이 오시는 무거천 입니다!

강변을 따라 자갈 길과 포장길이 있었는데,

아무래도 타이어가 작으니 자갈길은 무리였고...

포장길로 달려봤는데,

쇼바가 있어서 그런지 승차감이 나쁘진 않았어요~




세워놓고 한 번 찍었어요ㅋㅋㅋ



디스플레이에 비닐을 아직 안벗겨서 붙혀뒀는데,

저정도로 우둘투둘한 평지도 무난히 달릴수 있습니다~



한 높이가 수 센티미터 내외인 턱들은 쉽게 올라 갑니다ㅋㅋ


그렇게 첫 주행을 마치고 며칠 안되서

서울에 올라가서도 한 번 타봤어요ㅋㅋㅋㅋ


한강 뚝섬 유원지도 달려보고 중량천 따라 나있는 산책로를 따라 달려봤는데,

아무래도 길에 따라 승차감에 차이가 있긴 합니다.


우레탄으로 된 곳은 정말 조용하게 달리지만,

보도블럭으로 된 곳은 달릴만 한데 

상대적으로 조금 덜덜 거리는 느낌이 있어요ㅋㅋ



그래도 가장 좋은점은 다른 제품들에 비해 들고다니기는 정말 수월하다는 것!

지하철에 들고타도 세워놓으면 충분히 들고 다닐만 합니다ㅋㅋ



다만 저렇게 발로 좀 받쳐줘야 한다는....??ㅋㅋㅋㅋ

다음 버전에서는 이렇게 접었을때

바퀴에 락을 걸고 풀 수 있는 장치가 있으면 좋을듯 합니다!


그래도 타기종에 비해 눈치 덜보고 들고다니고, 타기에 좋은것 같아요~

외발 세그웨이를 타고 다니기엔 아직... 인식이...ㅋㅋㅋㅋㅋㅋ

너무 시대를 앞서 달리는 사람같은 느낌이랄까요...;;


아무튼! 그렇습니다


좋아요!ㅋㅋㅋ

이번엔 아두이노를 이용한 간단한 신호처리에 대해 알아보겠습니다.


보통 아두이노를 사용하게 되면, 


Analog Input

Digital Input / Output 


이 기능들을 주로 사용하게 되고,

보통 아두이노를 사용하시는 분들을 보면


위 사진처럼


아두이노에서 받아온 데이터(Raw Data)는 통신(시리얼통신 or SPI 통신) 을 통해 PC로 전송하게 되죠.


전송된 데이터는 PC상에서 연산이 되어서 다시 아두이노로 데이터(Processed Data)를 전송하게되고,

아두이노는 이에 따라 반응하게 됩니다.


하지만 이런 구조의 주된 문제점은 아무래도,

시스템의 구조가 커질 수 밖에 없다는 것이죠


아두이노와 센서만 있는다고 되는게 아니라, pc까지 있어야 하니 말이죠


이런 문제를 해결해 주는 몇몇 보드들이 바로 라즈베리파이, 비글본 블랙, 아두이노 윤, 등등

리눅스(Linux) OS 가 설치되어있는 보드들이랍니다.


이들은 보드 하나에 아두이노와 리눅스가 붙어있어서 상당히 간편하게 사용할 수 있지만, 

다루기가 쉽지않아서 처음 이용하시는 분들에게는 쉽지 않습니다.


그래서 이번시간엔 아두이노만 이용해서

데이터 입출력 및 프로세싱을 해보도록 하겠습니다~


#1 푸리에 변환 (Fourier Transform)


먼저 신호분석에서 가장 흔하게 사용하는것이

푸리에 변환 (Fourier Transform) 일겁니다.

푸리에변환은 시간영역의 신호를 주파수 영역의 신호로 변환 시켜주는 함수에요.


좀 더 구체적으로 설명하기위해 '소리'에 대해 봅시다.

소리신호를 녹음해서 보면 빨간 박스에서 보이는것 처럼 지글지글한 신호로 보이죠?


근데 저 신호만 봐서는 이 소리신호의 음 높이가 '도' 인지, '파' 인지 알수가 없죠.

근데 자세히 보면 빨간 박스의 그래프는 x축이 시간(time)이랍니다.

즉, 시간에 따라 신호가 어떻게 흘러가는지만 볼 수 있을 뿐,

음의 높낮이 정보인 주파수(Hz)는 알 수가 없습니다.


이를 알 수 있게 해주는 것이 바로 푸리에 변환.


빨간 박스의 정보를 푸리에 변환을 하게되면

파란 박스에 있는 정보처럼 이상한 형태의 신호가 나옵니다.

하지만 파란 박스를 자세히 보면 x축이 시간이 아닌 주파수(Frequency)가 됩니다.


즉, 주파수 정보인 음의 높낮이를 파악할 수 있다는 거죠.


그럼 다른 사람이 같은 음을 내더라도 목소리가 다른건 어떻게 알 수 있을까요?

목소리는 '음색'이라 표현하기도 하며, 푸리에 변환을 하게되면 주파수 영역에서 다른 형태를 보입니다.


위 사진은 4옥타브 도 (C4, 261.6Hz)를 각 악기별로 연주할 때 나타나는 신호입니다.

[피아노(a), 트럼펫(b), 바이올린(c), 플룻(d)]


보시다싶이 주파수별로 나타나는 형태가 조금씩 다르죠?

저런 특성들을 이용해 음색을 분별 할 수도 있답니다.


아무튼 푸리에 변환은 기존 신호에 숨어있던 정보들을 뽑아낼 수 있는 기능을 가졌지만,

연산량이 상당하기때문에 일반 컴퓨터로도 큰 데이터의 푸리에변환은 쉽지않답니다.



#2 아두이노를 이용한 푸리에 변환



자 이제 이러한 푸리에변환을 빠르게는 못하지만,

아두이노를 이용해 신호처리의 흉내를 내보도록 하겠습니다.


사실 컴퓨터로 푸리에변환을 할때에는 수식적으로 적분을 계산하는 것이 아니라,

다른 방법을 통해서 간접적으로 빠르게 구하는 Fast Fourier Transform(FFT) 를 주로 사용한답니다.


아두이노에서는 공식적으로 FFT함수가 따로 없기때문에, 사용자가 만든 함수를 사용합니다.


제가 알려드릴 함수는 크게 두가지 입니다.


1. C언어로 구성된 라이브러리 (쉬움, 하지만 느림)

arduinoFFT-master.zip



  1. /* Arduino Code */

  2. #include "arduinoFFT.h"

    arduinoFFT FFT = arduinoFFT(); /* Create FFT object */
    /*
    These values can be changed in order to evaluate the functions
    */
    const uint16_t samples = 128; //This value MUST ALWAYS be a power of 2
    double signalFrequency = 1000;
    double samplingFrequency = 5000;
    uint8_t amplitude = 100;
    /*
    These are the input and output vectors
    Input vectors receive computed results from FFT
    */
    double vReal[samples];
    double vImag[samples];

    #define SCL_INDEX 0x00
    #define SCL_TIME 0x01
    #define SCL_FREQUENCY 0x02

    #define Theta 6.2831 //2*Pi

    void setup()
    {
      Serial.begin(115200);
    //  Serial.println("Ready");
    }

    void loop()
    {
      for (uint8_t i = 0; i < samples; i++)
      {
        vReal[i] = analogRead(A0);
        delayMicroseconds(100);
        vImag[i] = 0;
      }
      FFT.Windowing(vReal, samples, FFT_WIN_TYP_HAMMING, FFT_FORWARD); /* Weigh data */
      FFT.Compute(vReal, vImag, samples, FFT_FORWARD); /* Compute FFT */
      FFT.ComplexToMagnitude(vReal, vImag, samples); /* Compute magnitudes */
      PrintVector(vReal, (samples >> 1), SCL_FREQUENCY);
    }

    void PrintVector(double *vData, uint8_t bufferSize, uint8_t scaleType)
    {
      for (uint16_t i = 2; i < bufferSize; i++)
      {
        uint8_t val_temp = map(vData[i],0,1000,0,255);
        Serial.write(val_temp);
      }
      Serial.write('\n');
    }


  1. /* Processing code */

    import processing.serial.*;

    Serial myPort;        // The serial port

    int[] val = new int[64];

    void setup () {
      // set the window size:
      size(1024, 1024);

      String portName = Serial.list()[2];  // Set your port correctly
      myPort = new Serial(this, portName, 115200);
      
      // don't generate a serialEvent() unless you get a newline character:
      myPort.bufferUntil('\n');

      // set inital background:
      background(255);
      rect(0, 0, 1024, 1024);

      // set stroke line color to red.
      stroke(255,0,0);
      
      //delay for arduino serial reboot.
      delay(2000);
    }

    void draw () {
        //Clear background for re-drawing.
        background(255);

        //Draw stroke for each frequency 
        for (int i =0; i<64; i++){
          line(i*16 +1,height,i*16 +1,height-val[i]*4);
        }
    }


    void serialEvent (Serial myPort) {
      try{
        
          //Create buffer for data saving
          byte[] inByte = new byte[200];
          
          //Put data into buffer
          myPort.readBytesUntil('\n',inByte);
          
          // convert to an int and map to the screen height:
          for(int i = 0; i<64; i++){
           val[i] = int(inByte[i]);      
          }

      }catch(Exception e){
        println("Err");
      }
    }




2. AVR로 구성된 라이브러리(어려움, 하지만 빠름)


그리고 아두이노 우노에서만 동작합니다!!


아무래도 레지스터를 건드리다보니, 물리적으로 칩이 우노에 사용되는 ATMEGA328P이 아니면

동작이 안된답니다...!


ArduinoFFT3.zip



  1. /* Code for Arduino */
  2. /*
    fft_adc_serial.pde
    guest openmusiclabs.com 7.7.14
    example sketch for testing the fft library.
    it takes in data on ADC0 (Analog0) and processes them
    with the fft. the data is sent out over the serial
    port at 115.2kb.
    */

    #define LOG_OUT 1 // use the log output function
    #define FFT_N 256 // set to 256 point fft

    #include <FFT.h> // include the library
    #include <avr/io.h>
    #include <avr/interrupt.h>

    void setup() {
      Serial.begin(115200); // use the serial port
      TIMSK0 = 0; // turn off timer0 for lower jitter
      ADCSRA = 0xe5; // set the adc to free running mode
      ADMUX = 0x40; // use adc0
      DIDR0 = 0x01; // turn off the digital input for adc0
    }

    void loop() {
      while(1) { // reduces jitter
        cli();  // UDRE interrupt slows this way down on arduino1.0
        for (int i = 0 ; i < 512 ; i += 2) { // save 256 samples
          while(!(ADCSRA & 0x10)); // wait for adc to be ready
          ADCSRA = 0xf5; // restart adc
          byte m = ADCL; // fetch adc data
          byte j = ADCH;
          int k = (j << 8) | m; // form into an int
          k -= 0x0200; // form into a signed int
          k <<= 6; // form into a 16b signed int
          fft_input[i] = k; // put real data into even bins
          fft_input[i+1] = 0; // set odd bins to 0
        }
        fft_window(); // window the data for better frequency response
        fft_reorder(); // reorder the data before doing the fft
        fft_run(); // process the data in the fft
        fft_mag_log(); // take the output of the fft
        sei();
        Serial.write(fft_log_out, FFT_N/2); // send out the data
        Serial.write("\n");
      }
    }



  1. /* Processing code */
    import processing.serial.*;

    Serial myPort;        // The serial port

    int[] val = new int[128];

    void setup () {
      // set the window size:
      size(1024, 1024);

      String portName = Serial.list()[2];
      myPort = new Serial(this, portName, 115200);
      
      // don't generate a serialEvent() unless you get a newline character:
      myPort.bufferUntil('\n');

      // set inital background:
      background(255);
      rect(0, 0, 1024, 1024);
      stroke(255,0,0);
      noLoop();
      delay(2000);
    }

    void draw () {
        background(255);

        for (int i =0; i<128; i++){
          line(i*8 +1,height,i*8 +1,height-val[i]*4);
        }
    }


    void serialEvent (Serial myPort) {
      try{
          byte[] inByte = new byte[200];
          
          myPort.readBytesUntil('\n',inByte);
          
            // convert to an int and map to the screen height:
            for(int i = 0; i<128; i++){
             val[i] = int(inByte[i]);      
            }
            redraw();

      }catch(Exception e){
        println("Err");
      }
    }


각 구성을 보시고 본인 쓰기에 편하신 라이브러리로 쓰시면 됩니다!


아래 이미지는 프로세싱을 통해 모니터링한 결과입니다.


각각 코드를 돌려보면,


1번 결과



2번 결과



데이터의 갯수와 샘플링 속도차이가 조금 있긴하지만, 첫번째 코드는 깔끔한 반면 느리고 신호가 불안정합니다.


하지만 두번째 경우, 신호가 깔끔하고 안정적이지만, 코드가 복잡합니다.


어떤걸 쓰게 될지는 센서의 성능에 따라 결정하시는게 좋을듯 합니다ㅎㅎ



도움이 되셨다면 공감 한번만 꾹! 눌러주세요^^


이번 시간에는 Advancer Technology 사에서 만든 근전도 신호를 측정하는 모듈에 대해 알아보겠습니다.


먼저, 근전도 신호(Electromyography, EMG)란 근육에서 발생하는 신경신호를 의미하고, 

이는 피부 표면에서도 측정할 수 있답니다.


신기하죠? 몸 안쪽에 있는 신경세포의 신호가 감지된다니..!


이러한 근육신호는 세 개의 전극으로 측정이 된답니다.

하나는 기준 전극(Reference),

또 하나는 + 전극, 다른 하나는 - 전극이겠지요~


보통 이러한 생체신호 센싱 모듈의 경우 전압으로 신호가 발생되는데요,

전압은 흔히 상대적인 전위 차이라고 말하죠?


때문에 생체 신호가 얼마만큼의 전위를 가지고 있는지 알기 위해서는

Reference전극, 말 그대로 신호의 기준 전위를 잡아줘야 하는 것입니다.


자 그럼 +와 -전극은 어떤 역할을 할까요?


여러 이유가 있겠지만,

+ 신호와 -신호의 차이를 구함으로써 노이즈를 제거하기 위한 목적이 크답니다.

자 이제 한번 만들어 봅시다.


센서를 꺼내보면 두개의 전극(+, -) 과 까만 전선에 달린 전극(Reference)이 있습니다.



우선 양 옆단에 핀헤더를 3개씩 납땜을 해줍니다!

왜 양쪽인지는 뒤에서 알려드릴게요~


양쪽에서 나오는 신호가 조금 다르기 때문이에요.



자 이제 납땜을 하셨다면 몸에 부착을 해야하는데,

그냥 떨렁 쇠로 된 전극을 몸에 붙이면 고정이 안되기 때문에

EMG전용 전극이 필요하답니다~


위 사진처럼 연결을 해주시면 사용 준비는 끝!


이제 이걸 어떻게 사용하는가가 관건일텐데,

그냥 막 붙히면....

막 신호가 안나와요ㅠㅠ


붙일때도 방법이 있습니다.



위 사진은 Advancer Technology 사에서 제공해주는 설명서에 있는것인데요,

센서를 부착할 때는


1. 근육의 결방향과 같은 방향으로 센서를 부착


2. 근육의 끝부분(인대 부분)이 아닌 근육의 중심부에 부착


이 두가지를 맞추지 않으면 올바른 신호가 측정이 안됩니다!!



이런 식으로 결방향으로 붙혀주시고,

기준전극은 같은 근육이 아닌 다른 부분이 붙혀주시면 되요~



그리고 힘을 주면 신호가 나온답니다ㅋㅋㅋ

이 모듈의 경우 힘을 주면 LED가 밝게 빛나도록 설정도 되어있네요!


힘을주면 올라가는 신호가 보이시죠?ㅎㅎ



자 그럼 이번엔 다른쪽에서 나오는 신호를 한번 측정해볼게요



아까 신호와는 조금 다른걸 느낄수 있나요?


조금더 신호가 지직지직(?) 하게 보이죠?

사실 이 신호가 원래 EMG신호입니다.


아무런 데이터 수정이 안된 날것의 데이터 (Raw Data) 지요!


그럼 왜 두개가 있을까요?


바로 EMG신호의 분석시에 사용하는 방법이 여러가지가 있기 때문입니다.


근전도(EMG) 신호를 분석할때는 크게


  1. 단순히 크기를 이용한 분석


2. Raw Data의 주파수 특성 분석
(Fourier Transform을 이용한 분석)


이 있답니다. (확실하진 않아요...!)


복잡한 경우가 아니라면 크기를 이용한 분석 만으로도 많은 것을 할 수 있습니다.


하지만 문제는 Raw Data를 크기 성분의 신호로 변환하는데는 상당히 많은 절차가 들어가기때문에,

아두이노와 같은 계산속도가 늦는 MCU의 경우에는  Raw Data를 분석하기가 버겁답니다.


때문에 근전도(EMG) 센서 모듈 내에서 Raw Data를 크기 신호로 변경하여 보내준다면

아두이노에서 훨씬 수월하게 작업을 할 수 있겠지요?


데이터 프로세싱은 또다른 학문분야이기 때문에 여기서 다루기에는 너무 어려울듯 합니다.




혹시나 궁금한점이나 잘못된 부분이 있다면 알려주세요~^^


이번시간에는 서피스 프로4 사용시에 자주 발생하는 CPU 문제에 대해 해결해보겠습니다.


종종 서피스를 껐다가 켜면 CPU점유율이 몇분동안 100%가 될 때가 있습니다.

처음에는 서피스 자체가 문제인건가.. 싶었는데 

작업 관리자(ctl+shift+ESC)을 켰더니 'Microsoft compatibility telemetry' 라는 놈이 가장 큰 비율을 차지하고 있더군요ㅋㅋㅋ



Microsoft라 적혀있으니 뭔가 나쁜놈은 아닌것 같지만 그래도 너무 많은 리소스를 잡아먹어서 확인을 해봤더니

현재 사용중인 윈도우에 대한 정보들을 Microsoft로 보내는 프로세스라고 하더라구요~


하지만 전 별로 정보를 주고싶지도 않고, 발열이 너무 심해져서 프로세스를 껐더니

좀비같이 또 살아납니다ㅋㅋㅋㅋㅋㅋㅋㅋ



그래서 방법을 찾다보니 두가지 방법이 있습니다.



# 1 윈도우 설정에서 변경하기


원래는 시작(윈도우 모양) -> 설정 -> 개인정보 -> 피드백 및 진단 으로 가세요.








그 다음에 Windows에서 내 피드백 요청 / Microsoft에 장치 데이터 보내기를 '안 함' 과 '기본' 으로 설정해주시면 됩니다.


하지만 이 세팅은 전송을 막는것이 아니라 전송량과 빈도를 줄이는것 뿐이랍니다~!



# 2 레지스트리값 변경하기


레지스트리를 변경하려면 먼저 레지스트리 편집기를 열어야 합니다.



실행 -> Regedit -> HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DataCollection



여기서 변수 하나를 생성해서 DWORD(32비트) 값 으로 설정해 주시고,



이름을 AllowTelemetry 라고 변경해주시고, 값은 0 으로 주시면 됩니다.



그 뒤에 Ctrl + Shift + ESC를 눌러서 작업관리자 창을 켜시고,

서비스 탭을 클릭하고 왼쪽 아래에 있는 서비스 열기를 눌러주세요~!


그리고난 뒤 서비스에서 


 'Diagnostics Tracking Service'

또는

' Connected User Experiences and Telemetry'


'dmwappushsvc'


요 두가지를 중지해주시면 됩니다!


이 모든걸 세팅하셨다면 재부팅 해주시면 깔끔하게 마무리가 됩니다^^


첫째날

# 대영박물관 -> 코벤트가든/쥬빌레 마켓 -> 트라팔가 광장 -> 내셔널 겔러리 -> 런던아이 -> 빅벤 -> 숙소


둘째날

# 셜록홈즈 박물관 -> 포토벨로 마켓 -> 하이드파크 -> 해롯 백화점 -> 버킹엄 궁전 -> 웨스트민스터 성당

-> Hawksmoor -> 숙소


셋째날

# 세인트폴 대성당 -> 스카이가든 -> 런던탑 -> 타워브릿지(템즈 강) -> 에미레이트 스테디움 -> Poppies Fish&chips 

-> 타워브릿지 -> 숙소


넷째날

# 빅토리아 역(옥스포드 튜브) -> 커버드 마켓 -> 크라이스트 처치 -> 엘리스 샵 

-> University Church of St. Mary the Virgin -> Radcliffe Camera ->  Nando`s -> 방황 -> 런던 -> 숙소





# 세인트폴 대성당 -> 스카이가든 -> 런던탑 -> 타워브릿지(템즈 강) -> 에미레이트 스테디움 -> Poppies Fish&chips 

-> 타워브릿지 -> 숙소


셋째날 아침, 빡빡한 일정을 확인하고 일찍부터 바쁘게 움직였습니다.


첫 목적지는 세인트폴 대성당으로, 

때마침 이날이 일요일이였기때문에 나름 기대를 하고 갔었습니다ㅋㅋ


버스를 타고 'Royal court of Justice' 정거장에서 내려서 조금만 걸어가면 나온답니다



요 건물은 'Australia high commission' 이라는 건물이었는데, 굉장히 런던 스럽죠?ㅋㅋㅋ

대사관은 아니고 무슨 법무 사무소 같은....?



5분도 안걸어서 세인트폴 대성당의 측면 모습을 볼 수 있었습니다~

저 돔 형태의 지붕에서 종소리가 울렸던거같아요ㅋㅋ


때마침 미사 시작을 알리는 종소리가 울려서 운이 좋게 들었어요!



실내 사진은 'No Photos' 라고 되어있어서 찍지를 못했네요ㅋㅋㅋ


성당 바로 옆에 걷다보시면 쇼핑센터가 하나 있어요~

꽤나 큰 쇼핑센터인데, 쇼핑센터 위층에서 성당을 찍으면 이쁘다고 합니다만...

일요일엔 쇼핑센터가 문을 닫아버려서 정면사진밖에 없답니다ㅠㅠ



# 세인트폴 대성당 -> 스카이가든 -> 런던탑 -> 타워브릿지(템즈 강) -> 에미레이트 스테디움 -> Poppies Fish&chips 

-> 타워브릿지 -> 숙소




사실 성당보다 좀 더 기대했던 스카이 가든!!

친구가 미리 예약해둔 덕분에 일정에 넣을수 있었어요ㅋㅋ


저 멀리 마자용(?) 처럼 보이는 높은 건물이 바로 스카이 가든 이랍니다


다들 갈때 여권이나 신분증이 필요하다고 하셨는데,

미리 스카이가든 입장을 신청하셨다면 신분증 필요없이 예약확인 종이만 있으면 입장이 가능합니다~


대신 들어가기전에 짐검사는 꽤나 철저히 진행이 되니, 짐은 되도록 적게 해서 다니세요!







엘리베이터를 타고 쭉 올라가면 맨 꼭대기층에 내려줍니다!

이름이 '가든(Garden)' 답게 정원처럼 잘 꾸며져있답니다ㅋㅋ


또 카페가 있어서 브런치를 즐기는 사람들도 엄청 많았어요~



이 스카이가든에 오는 주 목적은 바로 전망대 때문인데요,

여기서 어지간한 건물들은 다 볼수 있어요!

런던아이, 런던탑, 타워브릿지, 빅벤 등등...



여기서 보이는 건물은 The Shard 라는 건물이에요!

유럽연합중에서 가장 높은 빌딩이면서,

수지-이민호 커플이 지내고 가면서 더 유명해진!!


하지만 런던 스모그때문에ㅠㅠㅠ

도저히 기다려도 앞을 볼 수가 없을것 같아 포기!



이건 엘리베이터 내부 사진인데요, 층수 버튼이 몇 없죠??ㅋㅋㅋ

근데 과연 중간층들은 어떻게 사용되는지 괜히 궁금해요....ㅋㅋ



요고는 떠나면서 뒤돌아 찍어본 사진!

때마침 런던 버스가 지나가서 잘 찍으려 했으나,

그림자가 너무 찐하네요ㅠㅠ



# 세인트폴 대성당 -> 스카이가든 -> 런던탑 -> 타워브릿지(템즈 강) -> 에미레이트 스테디움 -> Poppies Fish&chips 

-> 타워브릿지 -> 숙소



스카이 가든에서 조금만 걸어가면 런던타워 & 타워브릿지를 볼 수 있습니다.

처음에 런던타워가 타워브릿지인줄 알았는데, 

전~~~혀 다르답니다ㅋㅋㅋ



여기에 보이는게 런던타워인데, 느낌이 중세시대 성 같죠?


실제 중세시대에 성의 터로, 보시면 중간중간 원통처럼 생긴 탑들이 보이죠?

저 탑들은 각자 이름이 다 다르답니다ㅋㅋㅋ


디테일하게 보려면 입장료를 내고 들어가서 보셔야해요~


하지만 우리는 별 감흥이 없어서 패쓰!!ㅋㅋㅋ


# 세인트폴 대성당 -> 스카이가든 -> 런던탑 -> 타워브릿지(템즈 강) -> 에미레이트 스테디움 -> Poppies Fish&chips 

-> 타워브릿지 -> 숙소




런던탑을 지나서 쭉 가다보면 바로 타워브릿지가 나타난답니다~!

아주 작은 공원처럼 꾸며져있는데,

역시 관광객들이 대부분이더라구요ㅠㅠ



요 사진은 나뭇가지와 타워브릿지가 절묘하게 잘 배치되서

 종종 노트북 배경사진으로 쓴답니다ㅎㅎㅎ



이제 타워브릿지를 한번 건너볼까요~?



지난번에도 말씀드렸다싶이, 

겨울철에는 해가 눈이 부실정도로 낮게 뜨기때문에 

움직이는 동선을 남쪽 -> 북쪽으로 이동하도록 짜시길 추천합니다.


위의 사진은 다리를 건너 반대쪽에서 찍은 사진입니다ㅎㅎ



다리를 건너고 나면 아래쪽으로 내려갈 수 있는 길이 있어요~

바로 사진 스팟이지요ㅋㅋㅋ

시간대만 잘 맞추면 그림자 없이 멋진 사진을 찍을 수 있을겁니다ㅋㅋ







# 세인트폴 대성당 -> 스카이가든 -> 런던탑 -> 타워브릿지(템즈 강) -> 에미레이트 스테디움 -> Poppies Fish&chips 

-> 타워브릿지 -> 숙소


이날의 대망의 일정!!


바로 에미레이트 스테디움에서 진행되는 축구경기 관전!!


아스널 VS 번리


버스타고 내리자마자 아스날 팬들이 엄청나게 몰려다녔어요ㅋㅋㅋ







이까지 왔는데 빈손으로 갈 순 없죠!


기념품 샵에 들려서 저분이 매고계신 목도리를 샀습니다ㅎㅎ

팬부심도 있었지만, 사실 날씨가 너무 추워서 샀어요...ㅋㅋㅋㅋ





구장을 들어갈때는 위 사진처럼 생긴 닭장(?) 입구로 들어가야하는데요,


시즌 맴버쉽을 등록하시면 카드하나를 받으실텐데

카드가 있으면 종이 티켓을 인쇄할 없이 찍고 바로 입장이 가능합니다~!







보이시나요...

경기를 마치고 나오는 미친듯한 인파ㅋㅋㅋㅋㅋ

한눈팔면 깔려죽을거에요ㅋㅋ


슬슬 배도 고프니 저녁을 향해 걸어갑니다!


# 세인트폴 대성당 -> 스카이가든 -> 런던탑 -> 타워브릿지(템즈 강) -> 에미레이트 스테디움 -> Poppies Fish&chips 

-> 타워브릿지 -> 숙소




드디어 도착한 Poppies Fish & Chips !!


여기가 아마 음식 경연대회에서 수상했던 가게로 알고있어요ㅋㅋ

경기를 보고 약간 이른 시간에 왔는데도 딱 2자리만 남아있었어요~



앉아서 주문하는데 음료수는 제가 좋아하는 Ginger!

사과랑 섞인 음료수인데 느끼한 피위앤칩스와 잘 어울렸어요ㅋㅋ



드디어 나온 메인디쉬~


감자 두깨가 보이시나요ㅋㅋㅋㅋㅋㅋ

처음에 우와우와 하면서 먹는데...


반만 먹고나면 사실 느끼함이 부글부글 올라와요..


뭐 그래도 이때 아니면 언제 이런걸 먹어보겠습니까ㅋㅋㅋ


그래도 확실히 생선은 업청 촉촉하게 잘 튀겨져 나왔어요!


# 세인트폴 대성당 -> 스카이가든 -> 런던탑 -> 타워브릿지(템즈 강) -> 에미레이트 스테디움 -> Poppies Fish&chips 

-> 타워브릿지 -> 숙소




Pppies에서 배 꺼뜨린다고 30분을 걸었던거 같아요...

정말 터질것 같은 다리를 끌고 다시 찾은 타워브릿지~

생각보다 밤에도 사람들이 많이 옵니다ㅋㅋ

추운데 걸어가니 너무 힘들더라구요ㅠㅠㅠ



볼거도 봤겠다, 그냥 사진만 찍고 바로 숙소로 갔답니다ㅋㅋㅋㅋ





마무리는 낮과 밤의 타워브릿지!ㅎㅎ


다음 포스팅은 런던 근교 옥스포드를 다녀온 내용으로 봬요~!



지난번에 i7을 사고나서 조금 불편했던점이 있었어요.


다름이 아니라 접고나서 보관이 문제였는데, 눕혀놓자니 현관에 공간을 너무 많이 차지해서 신발 위에 얹어뒀었습니다.


너무 불편해서 뭔가 액세서리가 없나 살펴봤는데 아이로드 i7/잭핫 전용 스탠드가 있더라구요!ㅋㅋㅋ




그래서 구매하려 했더니 2만원 씩이나 한다네요...ㅠㅠㅠ


저 쪼꼬만한 플라스틱 덩어리가 무슨 2만원인가 싶어서 그냥 만들기로 했답니다!!


치수를 재고나서 판매하는거랑 얼추 비슷하게 만들었더니 나름 괜찮네요ㅋㅋ 




좌우로는 넘어질수도 있어서 좀 넓게 잡고, 세웠을때 힌지 부분이 받쳐질수 있게 한쪽은 살짝 높게 만들었어요^^



실제 3D 프린터로 뽑아서 세워봤더니 딱 맞습니다ㅋㅋ



가까이서 보면 바퀴는 잡혀있고 힌지는 받쳐지고 있지요?



알맹이는 요롷게 생겼습니다~


필요하신 분들은 메일 적어주시면 보내드리도록 할게요^^


+ Recent posts