진동모터(Vibration Motor) 제어(아두이노)
진동모터(Vibration Motor) 제어(아두이노)
- 온라인 가상시뮬레이터 : https://www.tinkercad.com
- 공개회로도 : https://www.tinkercad.com/things/j8FgQLQ93wa
오늘은 가상시뮬레이터에 제공되는 부품 중 한가지 진동모터 부분을 빼먹은 것 같아서 진동모터에 대해서 이야기를 하고자 합니다. 진동모터는 모터에서 진동을 일으키는 모터입니다. DC모터는 모터가 회전하는 반면에 진동모터는 회전이 아닌 진동입니다. 제어하는 방식은 DC모터와 동일하며 전류가 공급되면 진동이 발생하고 전류의 세기에 따라서 진동의 세기가 달라집니다. 따로 알아야 할 부분은 없으면 가볍게 진동모터에 대해서 이야기 하고자 합니다.
1. 진동모터(Vibration Motor)
진동모터는 모터의 진동을 발생하는 부품입니다. 진동을 발생은 인간에게 촉감으로 느끼게 하는는 부품이라고 할 수 있습니다. 대표적인 예로 스마트폰은 전화나 문자가 올 때 사운드(음악소리)로 기본적으로 알립니다. 여기서 진동모드로 바꾸면 사운드가 아닌 스마트폰의 진동으로 전화나 문자가 온 걸 알려주게 됩니다. 이처럼 소리가 아닌 진동으로 인간에게 특정한 상황을 알릴 수 있습니다. 즉, 진동응 인간이 촉감으로 느낄 수 있는 출력부품으로 어떤 상황을 진동으로 감지할 수 있게 하는 출력부품이라고 생각하시면 됩니다.
그리고 진동모터는 상상하실 때 이렇게 생각하시면 됩니다. LED, 스피커 등과 같은 다양한 출력 부품들의 표현들을 진동모터로 대신하여 표현 할 수 있기 때문에 진동모터로 순순하게 상상하실 필요 없이 기존의 다양한 출력 부품들을 진동모터로 대체하고 응용상상을 하시면 됩니다.
가상시뮬레이터에서 제공되는 진동모터는 5V 입니다. 일반적인 DC모터를 제어하던 방식과 비슷합니다.
실제 실험에 사용하는 진동모터는 소형진동모터로 모터의 종류에 따라서 필요 전압이 다릅니다. 아두이노우노는 3.3V와 5V를 공급해줍니다. 아두이노우노 핀에서 출력 전압이 5V인데 만약 3V대 진동모터라면 아래와 같이 저항을 붙여 줘야 겠지요.
여러분들이 구매하신 진동모터가 몇V인지를 꼭 확인하시고 회로도를 구성하시면 됩니다.
참고로 아두이노우노는 PWM 핀은 아날로그 출력을 0~255(0~5V)을 출력 제어할 수 있습니다. 즉, 아날로그 출력값에 따라서 진동의 세기를 조절 할 수 있습니다. 위 두개의 의 그림을 보시면 5V일 때 진동모터는 진동 이미지로 3개의 띠를 보여주지만 저항이 붙은 진동모터는 2개의 띠가 희미하게 보이실 꺼에요. 이처럼 V값에 따라서 진동의 세기가 달라집니다.
진동모터를 구매하실 때 진동모터 사양을 꼭 확인하시기 바랍니다. 소형진동모터는 대개 약3V정도 인 것 같더군요.
참고로 가상시뮬레이터에 있는 위 그림 형태의 진동모터를 제공합니다. 이것을 가지고 회로도를 구성한다면 아래와 같겠죠.
void setup(){
pinMode(3, OUTPUT);
}
void loop(){
analogWrite(3, 255); //진동세기 임의의 값
delay(1000);
analogWrite(3, 0);
delay(1000);
}
이렇게 가상시뮬레이터에서 돌리면 전압이 너무 낮아서 진동하지 않네요. 뭔가 잘못된 건가 하고 실제 구현하신분들의 영상을 보면 정상적으로 동작하더군요. 가상시뮬레이터에서는 진동모터가 5V라서 아두이노 핀에서 출력되는 전압이 낮고 해서 진동이 발생하지 않았습니다. 잘못되었다기 보다는 진동 전압이 낮기 때문에 진동을 가상시뮬레이터에서 발생시키지 못하더군요. 저항을 제거하고 실험하셔도 전압이 낮더군요. 디지털핀에서 제공되는 전압에서는 모터가 가상시뮬레이터에서 반응이 없습니다. 아래 3.3V와 5V에서는 진동이 전상적으로 발생하지만 디지털 핀에서의 전원공급에는 좀 문제가 있습니다. 사실 디지털핀으로 전원을 공급한다는 설계 자체가 좀 문제가 있습니다. 진동모터도 모터의 일정인데 디지털핀에서 모터의 전원을 공급한다는 설정은 좀 그렇죠. 아무리 낮은 전압이라도 모터는 모터이기 때문에 될 수 있으면 디지털 핀같은 곳에서 모터의 전원을 공급하는 설정은 추천하지 않습니다. 제가 post에서 실험한 내용은 단지 예를 든 실험입니다.
아무튼 아래 그림처럼 가상시뮬레이터에서 이렇게 결과가 나오네요.
전압이 낮은 진동모터였다면 동작을 했겠죠. 위 그림처럼 실험 할 시에 저항은 진동모터 전압에 맞는 저항을 붙여줘야 합니다. 최대 진동을 기본으로 맞추고
analogWrite(3, 255); //진동세기 임의의 값
이렇게 255가 되었을 때 최대 진동이고 0~255사이의 값을 줌으로서 진동의 세기를 조절 할 수 있게 됩니다. 최소 전압도 필요하기 때문에 너무 낮은 값으로 출력하면 진동모터가 동작 안할 수 있습니다. 가상 시뮬레이터는 전압이 5V 진동모터라 아두이노에서 출력되는 전압이 약4.7V에다가 저항에 따라서 1.92V정도 나왔네요. 그래서 진동을 가상시뮬에터에서 발생하지 않지만 실제는 다릅니다.
참고로, 저항없이 바로 PWM(3번)핀에 연결하시면 됩니다. 그럴 경우는
analogWrite(3, 100); //진동세기 임의의 값
진동 세기값으로 실험하는 진동모터의 최대값 수치가 예를 들어 100이라고 가정하면 100이상만 안넘기게만 하면 됩니다. 위 진동모터는 고려해야 부분이 몇가지 있네요.
아래 사진처럼 모듈형태의 진동모터도 제공되고 고려할 부분은 모듈 전압만 확인 하시면 됩니다. 회로도 연결은 간단합니다.
모듈형태의 진동모터는 제어가 훨씬 편합니다. SIG, VCC, GND 핀으로 구성되어 있고 SIG핀은 아두이노 PWM핀에 연결하여 값만 넣으시면 됩니다.
예) SIG (3번핀) 연결 되었을 경우
void setup(){
pinMode(3, OUTPUT);
}
void loop(){
analogWrite(3, 200); //진동세기 임의의 값
delay(1000);
analogWrite(3, 0);
delay(1000);
}
대충 이런식으로 제어를 할 수 있겠죠.
이제는 가상시뮬레이터에서 동작하게끔 변형 시켜서 실험을 해보도록 하겠습니다.
2. 진동모터 회로도
준비물 : NPN트렌지스터, 저항 1k옴 1개, 진동모터 1개, 아두이노우노
내용 : 3번핀을 진동모터 핀으로 이용해 봤네요.
위 그림에서 다이오드와 캐피시터를 달아야 하는데 생략 했네요.
실제는 아래 그림처럼 해도 동작할 꺼에요.
위 처럼 가상시뮬레이터에서 실험하면 움직이지 않습니다. 문제가 있는가 하고 인터넷 실험 영상을 찾아보니깐 동작에는 문제가 없어 보이더군요. 전류를 살펴보니 너무 낮은 전압이라서 동작을 안한 것이더군요. 아무튼 실제로 하실 때는 .트렌지스터 사용하지 않고 간단히 표현하셔도 아마 될 듯 싶네요.
3. 코딩
PWM핀을 이용하는데 analogWirte()함수를 이용하셔도 되지만 그냥 기본 digitalWrite()함수를 이용하셔도 됩니다. 가상시뮬레이터에서는 digitalWrite()함수를 이용했습니다.
void setup()
{
pinMode(3, OUTPUT);
}
void loop()
{
digitalWrite(3, HIGH);
delay(1000);
digitalWrite(3, LOW);
delay(1000);
}
4. 결과
위 회로도를 보시면 어디서 많이 본 듯한 회로도이지 않나요. 예전에 DC Motor에서 다뤘던 회로도 입니다.
- 참고 : DC MOTOR 제어 (아두이노)
참고 post의 회로도에 약간 다른 방식으로 디자인 해 봤네요. DC MOTOR편을 보시고 참고하셔서 회로도를 디자인을 하셔도 됩니다.
마무리
위에서 표현한 방식으로 표현하실 필요는 없습니다. 실제로 실험 하실 때는 진동모터의 사양을 보시고 필요 전압이 몇인지에 따라서 아두이노에 직접 연결하실 때 저항을 붙여서 연결하시든지 아니면 그냥 연결하시고 나서 PWM핀에 analogWirte()함수를 이용하여 진동 모터의 세기 전압만 맞추셔도 됩니다.
간단한 진동모터를 좀 복잡하게 설명한 것 같네요. 아무튼 진동모터로 할 수 있는 것들이 뭐가 있는지 한번 여러분들이 찾아보시고 뭘 할 수 있을지 상상해 보세요.
한번 읽어서는 잘 모르겠어서 몇 번 읽게 되는 코딩맨님 포스팅들, 늘 무슨일 하시는 분일까 궁금하기도 합니다^^
전 스트레스가 쌓이면 코딩으로 스트레스를 해소해요.
제 post는 과거의 공부했던 것 정리하고 새로운 것을 발견하면 학문적으로 탐구하는 것을 좋아해요.^^
더운데 잘 지내시죠. 전 더위를 먹었는지 냉방병인지 컨디션이 너무 안좋았어요. 그냥 그늘에 나와 있으니 좀 낳네요. 건강 조심^^
연일 폭염으로 무지 힘드네요.
더위 안먹게 조심하세요 ^^