양단자를 손으로 꼭 잡으면 켜지는 스위치입니다.
놀라운 점은 한사람 뿐 아니라,  수십명이 손을 잡아서 장거리 회로를 구성해도 작동됩니다.
가장 기초적인 트랜지스터 활용예이면서 제법 재밌는 응용을 할수있는 회로입니다. 아래 회로1 상의 콜렉터(C) 점과 R1사이에 LED를 넣어주면 아두이노 없이도 LED를 On/Off 시켜볼수 있습니다. (단, R1은 330옴으로 변경요함)
아두이노에서 활용하려면 아래와 같이 연결하시면 됩니다.
 

 

 
회로1.이 기본회로입니다.
A와 B점을 양손으로 잡으면 트랜지스터 Base에 전류가 가해져서 C점의 전압이 강하(Low)하게됩니다.  A와 B간에 결합이 없어서 트랜지스터의 Base와 Emitter간의 전류가 흐르지 않게되면 C점의 전압은 거의 5V(High)로 유지됩니다.
아날로그입력핀으로 감지하면 이값(전압)의 변화를 확인 가능하며,  디지탈입력으로 감지하면 HIGH / LOW를 구분할 수 있게 됩니다. 회로1에서 R1은 꼭 필요하지만 R2는 A와 B가 쇼트될 가능성이 있어서 보호차원에서 넣은 저항입니다. 쇼트 시킬 일이 없다면 생략해도 됩니다.
 
트랜지스터는 유사품(범용 NPN형)으로 대체가능합니다.
위 경우엔 2sc1815를 사용한 예입니다.

회로1의 경우 예제소스는  아두이노 스케치에서 기본제공하는
File > Examples > Analog > AnalogInOutSerial 예제를 업로딩 후,
 시리얼모니터 창을 열어놓고  A,B점을 양손으로 꽉 잡아보시면 됩니다. 
접촉 상태에따라 A0핀으로 입력받는 전압 값의 변화 출력됩니다.


우측의 회로2. 는 저항을 모두 생략한 상태이며 R1을 생략하고 대신 아두이노 내부 풀업저항을 활성화 시킨 상태입니다. 즉, R1 역활을 하는 내부 저항을 활용하는 방법입니다.대부분의 마이크로콘트롤러칩들은 외부저항없이도 프로그램 세팅만으로 내부 풀업저항을 설정할 수 있는 기능이 있습니다.풀업저항 활성화를 위해선  핀모드를 입력모드로 전환 후, 해당핀을 HIGH로 세팅해주면 됩니다.  내부 풀업을 활성화 시키는 코드가 포함된 예제소스는 아래와 같습니다.
(참고. 쇼트 보호저항 R2은 넣어주시는것이 좋습니다.)
 
// 아두이노 디지탈입력핀 D2로 입력할 경우로 가정,  풀업저항 On

int ledPin = 13;      // 아두이노 내장 LED 사용

void setup() {
  pinMode(ledPin, OUTPUT);  
  pinMode(2, INPUT);   //가령, D2로 입력받을경우
  digitalWrite( 2, HIGH);   // D2핀의 풀업저항을 활성화시킴. (입력모드로 전환후 HIGH출력하면됨)

}

// A와 B점을 손으로 잡으면  아두이노 내장 LED가 켜지고 ,  놓으면 꺼집니다.
void loop() {     
  if( digitalRead(2)){
    digitalWrite(ledPin, LOW);   
  }else{
    digitalWrite(ledPin, HIGH);    
  }
  delay(100);
}
 

참고로,  5V 전원을 사용하므로 손으로 잡아도 감전 될 걱정은 안하셔도 됩니다.


활용예.
잘만 활용하면 터치센서 대체용으로 활용 가능합니다. 터치센서는 한극으로 작동 되지만, 러브스위치는 두접점을 동시에 눌러야 작동되는점이 차이점입니다.  TR한개만 있으면 되므로 매우 저렴한 방법입니다.
특히 사람의 몸을 통하여 회로가 구성된다는 점이 알쏭 달쏭 요상한 재미를 더해주므로 여러명이서 재밌는 이벤트를 구성할때 활용하면 좋은 소재가 될 수 있습니다.

알림. 위 회로와 소스로 테스트 결과 잘 작동됨을 확인하였습니다.  시간이 늦은 관계로 실제 이미지와 작동영상은 추후에 올리겠습니다.
 
 
 
 

 

로보밥 여름특집!!!   얼렁뚱땅 움직이면 쏘는 버블건을 제작했습니다.

아파트 계단이나 현관문에 많이사용되는 모션센서형 전등을 많이 보셨을 겁니다.   사람이 없을때는 미작동 되다가 다가오면 작동되므로 에너지 절약도 되고, 스위치 작동시키는 불편함도 없으므로 실생활에 매우 유용한 자동화 기기입니다.

이때 사용되는 센서가 PIR 근적외선 모션센서인데요 인체에서 방사되는 근적외선의 변화량을 감지하는 PIR센서가 들어있습니다. 아마도 많은 분들이 이를 응용하여 무언가를 만들고 싶어하실겁니다. 저도 마찬가지죠 ^^.   마침 며칠전 대형 할인점에 갔다가 버블건을 보고 좋은 응용예가 생각이 나서 만들어 봤습니다.

버블건의 원리는 모터의 회전시 물펌프로 비누액체를 뿜어올려주면서 동시에 팬으로 바람을 불어 비누방울을 날려주는 것입니다.  헉;;;  이 가격에 이런 기계를 만들어내는 분들에게 감사의 인사를 드리고 싶습니다 ^^.

모터 하나로 물펌프와 송풍용팬을 동시에 작동시키는 구조인데요, 보통 모터를 제어하려면 모터 드라이버를 사용하거나 릴레이를 사용하는게 정석일테지만,  이 버블건은 모터만 켜주면 되는건 아니고 방아쇠와 연결된 핸들이 비누액을 버블홀에 골고루 발라주는 역활을 하므로 반드시 방아쇠를 잡아 당겨줘야하는 구조였습니다.

음,,,   결국  서보모터 하나로 해결이 되었습니다.  그냥 손가락으로 당기듯이 서보모터를 작동시키는 방법입니다.
 단, 방아쇠의 스프링 장력이 좀 쌘것같아서 일부를 절단한 상태입니다.

버블건도 전등같이 하루 종일 켜져 있으면 효율적이지 않겠죠?!
항상 켜져있는것보다 사람이 곁에 있을경우에만 작동시킬 수 있으므로 효율적이며,  모르고 다가온 사람에게 놀라움을 선물할 수 도 있게됩니다. 


 

 

 





구현TIP
PIR 모션센서는 5V~12V에서 작동됩니다만,  9V이상의 전압에서 더 반응성이 좋습니다.  가령, 5V전원으로 사용시 감지된 뒤에 한동안 재 감지가 잘 되지 않는 현상이 있습니다.  9V전원을 사용후 이증상이 없어지는것을 확인했습니다.  즉, 수시로 감지되는 경우 9V이상의 전압으로 작동하시기 바랍니다.  단, 신호출력선은 아두이노에 입력해야 하므로 9V에 연결하시면 안되고 5V전원선과 10K옴 저항으로 연결해주셔야 합니다.


 

회로 연결 방법


아두이노 스케치 소스
#include <Servo.h>

const int ledPin = 13;
const int inputPin = 2;
const int posA = 90;
const int posB = 60;
Servo myservo;
unsigned long lastShotTime;

void setup(){
  pinMode(ledPin, OUTPUT);
  pinMode(inputPin, INPUT);
    myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  lastShotTime = millis();
  Serial.begin(9600);
}

void loop(){
  int val = digitalRead(inputPin);
 // Serial.println( val);
   delay(500);
   if(val){
     myservo.write(posA);
     digitalWrite( ledPin, LOW);
   }else{
    digitalWrite( ledPin, HIGH);   
    trigger();
   }
}

void trigger(){
  if((lastShotTime + 20000UL) < millis() ){
    readyShot();
  }
  longShot();
  lastShotTime = millis();
  Serial.println( lastShotTime);
}

void readyShot(){
  myservo.write(posB);
  delay(500);
  myservo.write(posA);
  delay(500);
  myservo.write(posB);
  delay(500);
  myservo.write(posA);
  delay(500);
  myservo.write(posB);
  delay(500); 
  myservo.write(posA);
  delay(500);   
}

void longShot(){
  myservo.write(posB);
  delay(3000);
  myservo.write(posA);
}

소스 소개
PIR 센서에서 움직임이 감지되면, 출력선의 전압신호가 High에서 Low로 떨어집니다. 이를 디지탈핀에서 감지하여 서보모터를 회전시켜서 버블건을 작동시키게 됩니다.   지정된 시간(20000ms, 20초)동안 미작동상태에서 작동될 경우, 초기 거품 생성을 위해 3회를 짧게 작동시킨 후 지정된 시간(3000ms, 3초)동안 작동 되도록 프로그램 되었습니다.


재료:
1. 버블건 4,000원 ~ 10,000원 정도 (문방구, 대형할인점)
2. 아두이노(Arduino) 
3. PIR 근적외선 모션센서 
4. 서보모터
5-1. 휴대형 전원 => 9V 배럴잭 + 9V 건전지 (알카라인 고급형)
5-2. 실내형 전원 => 9V 아답터 전원 

( 9V 전지는 알카라인 고급형을 사용하셔야 잘 작동됩니다. 저가 9V 망간전지로는 서보모터 작동이 잘 안되네요)

 

연결법 안내 사진추가(2012.6.10)
안내해드린 모션센서가 5V에서 작동시엔 감이 너무 느려서 답답하며 9V ~12V 전원을 사용해야 정상 작동이 됩니다. 이때 어떻게 연결을 해야하는지 문의가 많으셨는데요...  늦게나마  아래의 사진을 올려드리오니 참고하시기 바랍니다. 아두이노 전원이 9~12V 정전압 전원인경우 아래 그림과 같이 아두이노에 있는 Vin 단자로부터 전원출력이 가능하므로 편리합니다. 별도의 전원을 사용하실때는  Vcc와 GND에 별도전원을 연결하시고  꼭  아두이노+센서+전원의 GND를 공통 함께 연결해주시기 바랍니다. 



 

+ Recent posts