코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-08-06 10:50:56
본 예제에서는 DC모터를 연결해서 돌려볼 것입니다.
DC모터는 주로 RC car에 많이 사용됩니다.
출처 : arduinoarts.com / arduinoarts.com
그 외에 프로펠러, 간단하게는 선풍기에도 사용할 수 있습니다. 움직이는 탁자 등 다양하게 응용해보세요.
출처 : erutaso.tistory.com / www.tinkerkit.com
출처 : letsmakerobots.com
DC 모터를 사용하기 위해 트랜지스터, 다이오드도 함께 연결해 볼 것입니다.
또, 시리얼 모니터를 통해 입력 받은 숫자로 DC 모터의 속도를 조절해 봅시다.
NO | 부품명 | 수량 | 상세설명 |
1 | 아두이노 우노 R3 | 1 | |
2 | 브레드 보드 | 1 | |
3 | 트랜지스터 | 1 | 여기서 사용된 트랜지스터는 KSP2222A입니다. 다른 트렌지스터를 사용할 경우 연결방법이 다를 수 있습니다. COLLECTOR / BASE / EMITTER 핀 위치를 확인하고 연결하세요. |
4 | 다이오드 | 1 | |
5 |
DC 모터 |
1 | |
6 | 점퍼 케이블 | 5 | |
7 | 330Ω 저항 | 1 |
부품명 | Arduino Uno R3 | Breadboard | Transistor | Diode | DC Motor |
파트 | x1 | x1 | x1 | x1 | x1 |
부품명 | Wire | 330Ω Resistor |
파트 | x5 | x1 |
트랜지스터 핀 | 연결 |
COLLECTOR | 다이오드와 연결 |
BASE | 저항과 연결 |
EMITTER | GND |
* 주의사항
여기서 사용된 트랜지스터는 KSP2222A입니다.
브레드 보드 레이아웃에 연결된 위치 그대로 위에서 부터 COLLECTOR / BASE / EMITTER 순입니다.
위 순서는 트랜지스터 별로 약간 다릅니다.
사용하시는 트랜지스터의 핀을 확인 해주시고 연결하세요. (구글검색, 데이터시트 참고)
아래의 코드를 아두이노에 업로드 합니다.
/* DC 모터 돌리기 */ const int motorPin = 9; //상수 선언 : 모터와 연결된 핀 번호 저장 void setup() { pinMode(motorPin, OUTPUT); //9번핀을 출력용으로 설정 Serial.begin(9600); //시리얼 초기화 } void loop() { spiningMotor(); //모터 작동시키는 함수 호출 } /* 모터 작동시키는 함수 : 입력받은 값을 시리얼 포트를 이용해 보내고 그에 맞는 속도로 모터가 돕니다. */ void spiningMotor() { int speed; //변수 선언 : 입력된 속도 저장 Serial.println("Write speed : 0 ~ 255 and click send"); //속도 입력하고 send 버튼을 클릭하라고 알려줌 while(true) //무한반복 { while (Serial.available() > 0) //입력된 문자가 있으면 { speed = Serial.parseInt(); //문자를 숫자로 변환하고 변수에 저장 speed = constrain(speed, 0, 255); //속도를 PWM 출력 값 범위로 고정 analogWrite(motorPin, speed); //speed만큼으로 모터 돌리기 //speed : 값을 출력 Serial.print("speed : "); Serial.println(speed); } } }
pin으로 내보내는 전류는 모터를 돌리기에 약합니다. 그래서 이 전류를 큰 전류로 변환해주는 트랜지스터를 사용합니다.
모터가 돌다가 갑자기 멈출 경우 일어난 spike에서 트랜지스터를 보호하기 위해 다이오드를 사용합니다.
while (Serial.available() > 0) //입력된 문자가 있으면 { speed = Serial.parseInt(); //입력된 값을 변수에 저장 speed = constrain(speed, 0, 255); //속도를 PWM 출력 값 범위로 고정 analogWrite(motorPin, speed); //speed만큼으로 모터 돌리기 //speed : 값을 출력 Serial.print("speed : "); Serial.println(speed); }
입력한 값을 시리얼 포트를 통해 아두이노에게 전달하는 부분입니다.
availavble()이라는 함수를 사용해서 입력된 값이 있는 지 확인합니다.
만약 입력된 값이 있다면 parseInt()함수를 통해서 얻은 후 사용할 수 있습니다.
맨 처음에 50 이하를 입력할 경우 잘 작동하지 않을 수 있습니다.
멈춘 모터가 돌기 위해서는 50보다 큰 값이 필요합니다.
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!