코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
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 |
아래의 코드를 아두이노에 업로드 합니다.
/*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
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!