솔레노이드(Solenoid) 모터, 밸브 (TIP120 트랜지스터)
1. 솔레노이드(Solenoid) 모터
솔레노이드란 원통형으로 감은 전기 코일을 의미합니다. 원통형으로 코일을 감으면 원통 내부에 자기장이 형성되는데 여기에 철과 같은 자성 물질을 접근시키면 원통의 축 방향으로 이동하게 됩니다. 즉, 코일에 전기를 넣으면 왕복 운동을 만들 수 있습니다. 일반적인 전기 모터가 전기에너지를 회전 운동으로 변환시켜 주는 것과 기본 원리는 비슷합니다.
솔레노이드 모터는 의외로 다양한 곳에 사용이 됩니다. 집에서 사용하는 도어락이나 원격으로 자동차 문을 제어하는 데에도 사용됩니다.
솔레노이드 모터를 응용한 것이 솔레노이드 밸브입니다. 솔레노이드 밸브를 통해 수족관에 들어가는 물의 양을 제어하거나 칵테일 기계, 커피머신 등등 유체를 제어하는 곳에 사용이 가능합니다.
일반적으로 솔레노이드 모터는 비교적 많은 전기에너지를 필요로 하기 때문에(5~60V) 아두이노 자체의 전력으로는 감당이 안됩니다.(아두이노는 핀당 5v – 40mA 정도만 출력) 그래서 별도의 외부 전원을 사용해야 하고, 솔레노이드 모터로 들어가는 이 외부 전원을 아두이노에서 제어해야 합니다. 이런 역할을 하는 것이 트랜지스터, 여기서는 특히 TIP120 Darlington Transistor 를 사용합니다. 트랜지스터에 대한 내용은 저도 잘 모르고 내용이 방대해질 수 있으므로 특정 트랜지스터를 사용하는 방법만 기술합니다. 자세한 내용은 구글링하세요!! (BD651 과 같은 NPN darlington transistor 도 여기서 사용한 방법과 같은 방법으로 사용이 가능하다고 하니 참고하세요.)
TIP120 트랜지스터는 위 그림처럼 생겼습니다. 3개의 핀이 있는데, base pin(B) 을 작은 전압으로 제어하면 collector pin(C) -> emitter pin(E)으로 흐르는 높은 전압을 제어할 수 있습니다. 전자식 스위치라고 할 수 있습니다. base pin 을 아두이노의 디지털 핀에 연결하고 여기에 HIGH, LOW 등의 신호를 주면 제어가 됩니다! 참 쉽죠.
2. 연결 방법
여기서 사용된 트랜지스터는 전압이 아닌 전류로 제어가 됩니다. 그래서 아두이노에서 base pin 으로 들어가는 전류가 특정 크기 이내로 제한이 되도록 하기 위해 R1 (2.2kohm) 저항을 달아줍니다. base pin 은 아두이노의 디지털 핀 어느 것에나 연결하면 됩니다.
그림을 유심히보시면 모터의 하단 +, – 라인에 다이오드가 달려 있는 것이 보이실겁니다. 릴레이, 솔레노이드, 모터와 같이 코일을 사용하는 모듈에는 다이오드를 반드시 사용해야하고 다이오드 없이 집을 비워서는 안됩니다! 이런 모듈들은 전원이 차단 될 때 수백 볼트에 이르는 역전압(reverse voltage)이 순간적으로 발생해서 트랜지스터를 먹통으로 만듭니다. 다이오드는 전류가 한 방향으로만 흐르도록 함으로써 역전압이 코일로 다시 돌아가도록 하고 트랜지스터를 보호합니다.
다이오드는 이런 현상에 대응할 만큼 충분히 빠르고 부하를 견딜만한 용량을 갖추어야 합니다. 1N4001 or SB560 과 같은 rectifier diode 가 적당하다고 하네요.
다이오드는 띠가 있는 쪽이 솔레노이드의 전원 입력쪽(V+)를 향하도록 해야합니다.
주의 : TIP120 트랜지스터는 높은 전압을 제어하는데 유용하게 사용될 수 있지만 DC 전원에만 해당합니다. AC 전원은 제어할 수 없으니 시도하지 마세요. 트랜지스터는 제어가능한 전압, 전류의 범위해 대한 정격 용량이 정해져 있습니다. TIP120의 경우 5~60V, 5A 또는 300us의 8A pulse 까지 입니다. 이 이상의 용량이나 AC 전원을 제어하고 싶으시다면 릴레이(Relay)를 사용하시기 바랍니다.
3. 소스코드 (스케치)
int valvePin = 4; // Solenoid valve control pin int buttonPin = 5; // Button pin int buttonInput = 0; void setup() { pinMode(valvePin, OUTPUT); // sets the valve pin as output pinMode(buttonPin, INPUT); // sets the button pin as input } //===========Functions=====================// void getButton() { buttonInput = digitalRead(buttonPin); // Read the button input } void openValve(){ digitalWrite(valvePin, HIGH); } void closeValve(){ digitalWrite(valvePin, LOW); } //=================Main Loop===================// void loop() // run over and over again { getButton(); if( buttonInput==1 ) { openValve(); } else { closeValve(); } }
예제 코드에서는 아두이노에 버튼을 달아서 제어하도록 했습니다. 버튼은 직접 연결해보세요~
4. 꿀팁
아두이노의 디지털 핀 중 PWM 핀을 기억하실겁니다. 아날로그 출력 함수 (analogWrite)를 사용해서 PWM 출력(0V~5V)을 하지만 실제로 아두이노가 아날로그 출력을 하는 것이 아니라 짧은 시간동안 on/off 를 반복해서 평균 전압이 0V~5V 사이에서 유지되는 효과를 냅니다.
그런데 트랜지스터도 PWM 신호와 같은 빠른 on/off 신호에 따라 동작이 가능합니다. 위 예제의 디지털 핀을 PWM 핀에 연결하고 analogWrite(pwmPin, signal); 과 같이 PWM 신호로 제어할 수 있습니다. 아래 영상은 일반적으로 집에서 사용되는 전구인 15W 12V DC light 를 위 회로대로 연결하고(이 경우 전구는 다이오드가 필요없음) PWM 핀을 이용해서 dimming 하도록 한겁니다.
Breathing Light from Adam Meyer on Vimeo.
출처 : http://opensource-torchris.blogspot.ca/2009_03_01_archive.html, http://bildr.org/2011/03/high-power-control-with-arduino-and-tip120/
솔레노이드 모터/밸드 (Ebay.com) : http://www.ebay.ca/sch/sis.html?_nkw=1%204%20Electric%20Solenoid%20Valve%2012%20volt%20Air%20Water%20BBTF&_itemId=300296128000