Stepper Motor에 대해 상상하다.(아두이노)

in #kr-arduino6 years ago (edited)

Stepper Motor에 대해 상상하다.(아두이노)



Steem.js에 재미를 붙여서 실험하고 있어서 아두이노 post가 늦어지고 있네요. 지난주의 Stepper Motor 제어를 집중적으로 다뤘는데 오늘 post는 실제 구현은 안해 봤지만 상상한 내용을 post에 담아 이야기를 하고자 합니다. Stepper Motor는 각도를 제어하는 Motor 입니다. 각도를 제어 한다는 것은 회전을 프로그래머가 설계한 방향으로 회전을 시킬 수 있다는 의미입니다. 원하는 위치로 회전을 시킬 수 있고 회전 된 각도의 값을 알 수 있다면 이것을 이용하여 많은 것들을 표현 할 수 있습니다.

원하는 각도로 회전 시킨다는 것은 정방향 100도 회전 시킬 수 있고, 역방향 -500도로 회전 시킬 수 있으며 회전하면서 회전 각도를 저장해 놓으면 현재 Stepper Motor가 어느 방향으로 몇도 회전 되어 있는지 알 수 있습니다. 이 정보로 우리들은 뭘 할 수 있을까요. 산업 현장에서는 산업 로봇이 자동으로 나사를 조이고 용접하고 물건을 나르는 등의 움직임을 제어하는 데 사용 됩니다. 조립을 하는 과정에서 나사를 몇 바뀌 회전 시켜야 하는지 각도값으로 제어할 수 있습니다. 그리고 산업 로봇팔이 용접을 할 때 용접 할 위치로 산업 로봇팔의 관절이 회전하면서 해당 위치로 이동하겠죠. 즉, 움직임을 표현하는데 각도제어 Motor가 사용 되고 각도를 제어를 할 수 있는 Stepper Motor는 많은 것들을 할 수 있게 됩니다.

오늘 다룰 내용은 움직임을 각도로 나눠서 초음파 센서로 거리를 측정하고자 합니다. 이렇게 얻은 거리 정보를 토대로 초음파 센서에서 감지된 대상의 좌표 (x,y,z) 꼭지점을 구하고자 합니다. 그리고 구한 꼭지점을 processing으로 시각화 하는 상상을 해 보았습니다. 실제 구현은 못해 봤습니다. 사실 딴거에 빠져서 구현은 안했습니다. 그냥 상상한 내용을 담아 이야기 하고자 합니다.

1. 거리 측정 회로도


  • 준비물 : 스템모터, 모터드라이버, 초음파센서, 아두이노우노

대충 위와 같은 형태로 구성한다고 상상을 해 봤습니다. 이렇게 하면 Stepper Motor가 1도씩 회전을 한다면 어떻게 될까요. 각도에 따른 거리를 측정 할 수 있게 됩니다.

위 그림처럼 원통에 거리 측정기를 넣고 측정을 시작한다고 가정을 해 봅시다. 그러면 원통의 벽면까지의 거리값을 구할 수 있겠죠. 여기서, 360도를 1도씩 회전하면서 거리를 측정한다고 상상을 해보세요. 측정되어 나온 원통까지의 거리값을 이용하여 꼭지점(x,y,z)를 구할 수 있습니다. 그 꼭지점을 연결하면 단층 이미지를 만들어 낼 수 있습니다. 이 단층 이미지가 여러장이 쌓이면 3D Rendering 을 통해서 실제 원통 모양으로 이미지를 만들어 낼 수 있겠죠.

오늘 실험은 얻어진 좌표 (x,y,z) 꼭지점을 연결하여 processing에 배치시켜 3D 단층 이미지를 만드는 과정을 상상을 해보고자 합니다. 그 과정을 이제부터서 진행 하겠습니다.

2. 거리 측정에 따른 좌표 꼭지점 구하기


위 x,y,z 좌표계가 있다면 원점은 Stepper Motor의 회전하는 중심 지점이 되겠죠. (x,z)축의 평면 방향으로 초음파 센서가 1도씩 회전을 한다면 위 그림처럼 360도의 360개의 좌표 지점을 만들어 낼 수 있게 됩니다. y축은 아두이노의 초음파가 붙어있는 위치가 되며 초음파가 측정하는 각도에 방향에 따라 (x,z)축의 거리 꼭지점을 아래의 공식에 의해서 구할 수 있습니다.

그러면 (x,z)축으로 펼쳐서 보면 위 그림 처럼 나타나고 Stepper Motor의 회전 angle이 되고 초음파 측정 거리는 r이 되어 이 r과 angle의 값을 기준으로 꼭지점 (x,z)를 구할 수 있습니다. 오랫만에 접하는 수학이라서 기억도 안나고 손 놓은지가 정말 오래만이라 공식도 기억 안나서 인터넷에서 찾았네요. 이제 이런것들을 수학적으로 계산하기에는 너무 벅차네요. 중학교 수준이지만요. 요즘 초등학생들이 배우는 수학인 것 같은데 잘 모르겠네요. 이정도 수학도 이제 벅차네요.

이렇게 해서 y축은 초음파의 고정 위치이니깐 고정 y꼭지점에서 Setpper Motor가 회전하는 angle에 따른 초음파의 거리(r)을 통해 x,z 꼭지점을 구하면 원점에서 1도씩 회전 할때마다 좌표 (x,y,z)의 꼭지점을 구할 수 있게 됩니다.

좌표 (x,y,z)의 꼭지점 선으로 연결하면 이런 평면 이미지가 그려지겠죠.

3. processing으로 측정된 좌표를 연결


위에서 구한 좌표(x,y,z)의 꼭지점을 구하게 되면 processing으로 표현 한다면 어떤 느낌일까요.

다음과 예제를 보시기 바랍니다.

void setup() {  
    
    size(600,600,P3D); //창사이즈
    noStroke();  //테두리없음
} 

void draw() {  
    background(0); //배경색
    lights();  //조명

    pushMatrix();  //Start
    translate(300,270,300); //이동
    shape();
    popMatrix(); //End
}
void shape(){
  fill(0,255,0); //채우기
  beginShape();
  for(int i=0;i<=360;i++){
      vertex(cos(i)*100, 0, sin(i)*100);   
  }
  endShape(CLOSE);
}

위 예제는 for문을 유심히 보시기 바랍니다. 위 소스는 processing 3D 도형 제어 (아두이노) Post의 소스 수정을 최소화하여 표현 했습니다.

아두이노에서 processing과 시리얼통신을 할 수 있다고 했죠. 그러면 Stepper Motor가 1도씩 회전하면서 초음파 센서가 측정한 좌표 지점을 구한 (x,y,z) 꼭지점을 시리얼통신으로 전송한다면 그 값으로 beginShape()~endShape(CLOSE) 사이의 vertex(x,yz) 값을 시리얼통신으로 얻은 (x,y,z) 꼭지점으로 대체한다면 360도 회전할 때 360개의 꼭지점을 그리게 되면 평면 이미지를 만들 수 있게 됩니다.

위 소소는 100이라는 초음파 거리를 고정으로 초음파 거리 (r)에 대한 Stepper Motor 회전(angle)을 가상으로 주어진 상태에서 가상으로 이미지를 그리는 예제입니다.

4. processing으로 측정된 좌표 이미지 결과


위 결과는 가상 데이터 (x,y,z)의 값을 기준으로 그렸기 때문에 원형의 이미지를 얻었습니다. 실제로 구현을 한다면 불규칙적인 평면의 이미지를 얻을 수 있겠죠.

5. 이것로 뭘 만들까?


순간 떠오르는 생각을 상상력으로 구현은 안했지만 글로써 표현을 했습니다. 이걸로 뭘 만들 수 있을까요. 일상에서 이런 표현들이 뭐가 있을까요. 이 글을 쓰는 순간에 떠오르는 생각은 자율주행에서 360도 회전하는 센서에 주변 사물을 감지하는데 적용하게 좋겠죠.

그럼 또 뭘 할 수 있을까요. 거리측정센서로 3D 랜더링을 할 수 있을까? post에서 이야기한 3D 랜더링에 적용할 수 있습니다. 위 실험에 대한 상상한 내용은 하나의 평면 단층 이미지를 만들 수 있습니다. 그러면, 초음파 센서가 일렬로 여러개가 연결되어 있으면 여러장의 단층 이미지를 얻을 수 있겠죠. 아니면 Stepper Motor를 하나 더 제어해서 y축 회전 시켜서 y축 위치를 변경해 가면서 x,z 축의 단층 이미지 데이터를 얻을 수 있겠죠. 이렇게 여러개의 단층 (x,y,z)의 값을 얻을 수 있으면 이 데이터들을 서로 연결하면 3D 모형의 이미지 형태로 랜더링을 할 수 있습니다. 위 실험 자체만으로도 3D 좌표 평면 이미지로 표현 되었지만 좀더 Volume Rendering을 하려면 여러장의 이미지 데이터가 필요 합니다.

그외도 이야기를 하자면 끝도 없습니다. 오늘 제가 post한 내용들이 바로 상상 코딩입니다. 왜! 제가 post를 끝날 때마다 상상의 나래를 펼쳐 보라는 이유가 오늘 post의 담겨져 있습니다. 실제 구현을 안하더라도 우리는 일상의 사물을 보면서 또는 영화 속 SF장면을 떠올리면서 많은 상상을 할 수 있습니다. 그 상상이 아두이노의 소재가 되는 것이고 그 아두이노로 상상한 것들을 비슷하게 구현해 낼 수 있습니다.

실제로 구현을 안하더라도 가상으로 이렇게 상상 코딩을 할 수 있습니다.

마무리


여러분들도 상상 코딩을 생활화 해보세요. 뭔가 프로그램 언어를 배우고 정석으로 깊게 파고드는 것도 중요하지만 무엇보다 중요한 것은 상상 코딩입니다. 정석으로 전문 코딩을 하는 것은 엔지니어이지 개발자나 창작자가 아닙니다. 다소 코딩이 부족하더라도 뭔가에 대해서 상상하는 사람이 진정한 개발자이나 창작자입니다.

엔지니어는 반복학습하면 누구나 다 될 수 있지만 개발자나 창작자는 상상을 하지 않으면 되지 못합니다. 여러분들도 처음에 코딩을 전문적으로 정석 코스로 깊게 배우는 싶은 분들도 많을 꺼에요. 하지만 상상하지 않으면 의미가 없습니다.

마지막으로 여러분들도 위 내용이 아니더라도 아두이노 관련 부품이나 누가 표현한 원리 중 하나를 찾아서 그 원리를 다른 쪽으로 응용하여 상상해보는 시간을 가졌으면 합니다.

Sort:  

"엔지니어는 반복학습하면 누구나 다 될 수 있지만 개발자나 창작자는 상상을 하지 않으면 되지 못합니다. "
그럴 것 같아요..

문제는 사회는 개발자나 창작자보다는 엔지니어를 원하는 것이 현실이지요.
초기 프로그램이 한국에서 개발되지 못하는 근본적인 이유이기도 하죠.

pairplay 가 kr-dev 컨텐츠를 응원합니다! :)

응원에 감사합니다.

코딩교육이 초등학교부터 시작될 거라고 하던데... 일반인도 배우면 도움이 많이 될거라 생각합니다.

내년부터서 초등5~6학년부터 의무교육으로 시작 돼요.
원래 올초로 알고 있었는데 내년부터서 시행한다고 하는데 내년 되봐야 확실할 듯요.
스크래치 & 엔트리 중 둘중 하나가 초등학교에서 수업을 아마 진행 될 꺼에요.
그리고 아두이노가 어느선까지 진행 할 지는 모르겠지만요.
비전공자분들도 아두이노를 접목한 활동을 하는 분들도 많아요
어른들 장난감으로 아두이노를 배우시는 것도 괜찮을 듯 싶네요

짱짱맨 호출에 출동했습니다!!

짱짱맨 방문 감사합니다.

엔지니어도 20~30년 일하면 괴물이 된다는 사실을 이번 대회 하면서 느꼈습니다. ㅎㅎㅎ 엔지니어링을 쓸 수 있으면 훨씬 더 강력해질텐데 탐나는 기술입니다. 저도 엔지니어링 잘 하고 싶어요.

엔지니어의 경우는 해당 분야쪽으로 엄청난 실력을 발휘하는데 너무 깊게 들어가기 때문에 사실 시야가 그리 넓지 못해요. 특수한 곳에 특화된 능력이라고 보시면 돼요.
특화된 곳에서는 괴물이지만 융합된 곳에서는 사실 시야가 좁아서 상상력에 제약이 따른다고 생각되네요.

하긴 그건 그렇죠. 하지만 그래도 엔지니어링 능력도 탐납니다. 그것도 얼른 배우고 싶습니다. ㅎㅎㅎ 특화, 특수도 잘만 활용하면 정말 쓸만한 것 같아요. ㅎㅎ

Coin Marketplace

STEEM 0.32
TRX 0.12
JST 0.034
BTC 64664.11
ETH 3166.18
USDT 1.00
SBD 4.11