본문 바로가기
아두이노_프로세싱/아두이노+프로세싱

프로세싱 + 아두이노 서보모터 제어

by 돌돌쌤 2012. 8. 23.

프로세싱 + 아두이노 서보모터 제어


프로세싱을 통해 마우스값을 아두이노로 넘겨

LED를 제어해 보았다. 

(이전글 http://eskelt.tistory.com/65  )


그와 비슷하게 이번에는 서보 모터를 제어해보자.

(서보모터제어 이전글  http://eskelt.tistory.com/8 )


일단 프로세싱에서 마우스X 값을 아두이노로 넘기고

아두이노에서 서보 라이브러리이용하여

서보모터를 동작하도록 한다.


예제에서 마우스의 움직임과 마우스의 좌표값을 

화면에 표현하기 위한 폰트를 사용하였다.

공부한 내용을 정리한 것으로

폰트 부분과 마우스의 위치를 화살표로 표시하기 위한

부분은 삭제하면 스케치는 간단하다



프로세싱 스케치

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

import processing.serial.*;   // 아두이노와 통신을 위한 시리얼 라이브러리 사용

Serial myport;                      // 시리얼통신 선언


PFont font;                         // 폰트선언


int x;

int offset = 10;                     // 마우스의 위치를 화살표로 그리기 위한 값


void setup(){

  size(256,150);

  myport = new Serial(this,Serial.list()[2],9600);     //연결된 3번째 시리얼통신 사용

  font = loadFont("Arial-Black-48.vlw");                 //폰트적용

  textFont(font,15);                                              //폰트속성

}


void draw(){

  background(204);

  line(x,0,x,150);                    // 임의의 x좌표의 수직선

  if(mouseX>x){x+=1; offset = 10;}              // 마우스가 x좌표보다 오른쪽에 있으면 offset를 10으로하고

                                                             // x값을 증가시켜 마우스값으로 이동

  if(mouseX<x){x-=1; offset = -10;}            // 마우스가 x좌표보다 왼쪽에 있으면 offset를 -10으로하고

                                                             // x값을 감소시켜 마우스값으로 이동

  fill(0);   // 글씨색

  text(x,x,145);                                         // 현재 x 값을, 좌표 (x,145) 지점에 표시 

                                                             // x값에 따라 이동하는 글씨

  text(mouseX,mouseX,mouseY-15);          // 마우스의 좌표값을 (mouseX,mouseY-10) 지점에 표시

                                                             // 마우스 포인터 보다 약간 위쪽에 마우스X좌표 표시

  line(mouseX,mouseY,mouseX+offset*3,mouseY);       // 마우스의 위치를 화살표로 표현

  line(mouseX,mouseY,mouseX+offset,mouseY-10);     // 마우스의 위치를 화살표로 표현

  line(mouseX,mouseY,mouseX+offset,mouseY+10);     // 마우스의 위치를 화살표로 표현


  myport.write(mouseX);                 // 아두이노로 마우스의 X값 보냄

}

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



아두이노 스케치

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

#include <Servo.h>   // 서보 라이브러리 사용

    

int x ;   

Servo servoA;   // 서보 선언

void setup(){

  Serial.begin(9600);   //시리얼 통신 시작

  servoA.attach(10);    // 서보 신호핀 10번

}


void loop(){

  if(Serial.available()>0){

    x=Serial.read();

    x = map(x,0,255,0,179);   // 데이터 값을 0~179로 범위 지정

    servoA.write(x);    // 서보 작동

  }

}

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



작동 영상