중급 예제

약간은 익숙하시거나 익숙해지셨나요? 그렇다면 조금더 깊이 다뤄볼까요?

모터연동 가변저항 x 모터쉴드 x 조이스틱 모듈

2014-10-09 00:47:09

개요

가변 저항은 알고 있거나 사용해 본적이 있지만,
모터 연동 가변저항이라고 하면 다소 생소합니다.

모터 연동 가변저항은 보통,

출처 : 모터연동 가변저항 (Motorized Slider/Fader) - ebay

이와 같이 작은 DC모터에 고무로 만들어진 타이밍벨트(톱니모양의 고무띠)를 연동하여
'슬라이더' 같은 선형 가변저항을 연결하여 만들어 집니다.

기본적으로 가변저항의 기능을 지니면서,
이 가변저항의 위치를 DC모터로 제어할수 있는것입니다.
아래의 영상을 통해 어떻게 작동하는지 살펴보겠습니다. 


영상에 나오는 기기는 음향콘솔로 공연장이나 녹음실에서 음향의 제어를 위한 기계로,
여기에 모터 연동 가변저항이 많이 사용되고 있습니다.

그 원리를 살펴보면, DC 모터는 기본적으로 회전운동이지만
회전운동을 직선운동으로 바꾸어 주는 톱니가 달린 타이밍 벨트가 있어, 
가변저항이 이 벨트와 맞물려 움직이게 되는것입니다.


출처 : 모터의 기어와 타이밍 벨트 - www.newport.com

이번 예제에서는 모터 연동 가변저항에 대해서 알아보고,
모터쉴드를 이용하여 2개의 모터 연동 가변저항을 제어해 보겠습니다.

미리보기 동영상

부품목록

NO 부품명 수량 상세설명
1 오렌지 보드 1 아두이노 호환보드
2 모터연동 가변저항  2 모터연동 가변저항
3 모터 쉴드 1 모터 쉴드
4 12-24v 외부 전원  1 외부 전원
5 조이스틱모듈 1 조이스틱모듈
6 점퍼케이블 4 '암-수' 핀 점퍼케이블 필요
부품명 오렌지 보드 모터 쉴드 모터 연동 가변저항 12-24v 외부 전원  조이스틱 모듈
파트 x1 x1 x1  x1 x1
부품명 점퍼케이블
파트 x4

하드웨어 Making

회로도

브레드보드 레이아웃

소프트웨어 Coding

아래의 코드를 아두이노에 업로드 합니다.

/*www.kocoafab.cc*/

int motor1 = 12; //1번 모터슬라이드의 방향을 제어하는 채널 A는 12번 핀에 연결되어 있습니다.
int motor2 = 13;//2번 모터슬라이드의 방향을 제어하는 채널 B는 13번 핀에 연결되어 있습니다.

int speed1= 3;//1번 모터슬라이드의 속도를 제어하는 핀은 3번 핀에 연결되어 있습니다.
int speed2 = 11;//2번 모터슬라이드의 속도를 제어하는 핀은 11번 핀에 연결되어 있습니다.

int range = 12;//조이스틱의 범위를 '12'로 설정하기 위한 변수를 선언합니다.
int center = range / 2;//조이스틱의 중간값을 설정합니다.
int threshold = range / 4;//조이스틱의 한계점을 설정합니다.

void setup(){
  pinMode(motor1, OUTPUT);//12번핀을 출력으로 설정합니다.
  pinMode(motor2, OUTPUT);//13번핀을 출력으로 설정합니다.
 
   pinMode(speed1, OUTPUT);//
   pinMode(speed2, OUTPUT);
}

void loop(){
  int xReading = readAxis(A2);
  int yReading = readAxis(A3);
  
  if(xReading > 0){
    digitalWrite(motor1, HIGH);
    analogWrite(speed1, 120);
  }
  else if(xReading == 0){
    analogWrite(speed1, 0);
  }
  else if(xReading < 0){
    digitalWrite(motor1, LOW);
    analogWrite(speed1, 120);
  }
  
  if(yReading > 0){
    digitalWrite(motor2, HIGH);
    analogWrite(speed2, 120);
  }
  else if(yReading == 0){
    analogWrite(speed2, 0);
  }
  else if(yReading < 0){
    digitalWrite(motor2, LOW);
    analogWrite(speed2, 120);
  }
}
  
  
  
int readAxis(int thisAxis) { 
  //아날로그 입력값을 읽습니다.:
  int reading = analogRead(thisAxis);

  // 아날로그 입력값을 출력값의 범위로 재설정합니다.:
  reading = map(reading, 0, 1023, 0, range);

  // 만약 범위를 초과하면
  // 휴식상태(입력이 없는 상태)를 확인합니다:
  int distance = reading - center;

  if (abs(distance) < threshold) {
    distance = 0;
  } 

  // 해당축의, 거리를 반환합니다.:
  return distance;
}

 

 

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

모터쉴드, 가변저항, 아두이노, 오렌지보드