놀라운 점은 한사람 뿐 아니라, 수십명이 손을 잡아서 장거리 회로를 구성해도 작동됩니다. 가장 기초적인 트랜지스터 활용예이면서 제법 재밌는 응용을 할수있는 회로입니다. 아래 회로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로 세팅해주면 됩니다. 내부 풀업을 활성화 시키는 코드가 포함된 예제소스는 아래와 같습니다.
// A와 B점을 손으로 잡으면 아두이노 내장 LED가 켜지고 , 놓으면 꺼집니다. void loop() { if( digitalRead(2)){ digitalWrite(ledPin, LOW); }else{ digitalWrite(ledPin, HIGH); } delay(100); }
참고로, 5V 전원을 사용하므로 손으로 잡아도 감전 될 걱정은 안하셔도 됩니다.
활용예. 잘만 활용하면 터치센서 대체용으로 활용 가능합니다. 터치센서는 한극으로 작동 되지만, 러브스위치는 두접점을 동시에 눌러야 작동되는점이 차이점입니다. TR한개만 있으면 되므로 매우 저렴한 방법입니다. 특히 사람의 몸을 통하여 회로가 구성된다는 점이 알쏭 달쏭 요상한 재미를 더해주므로 여러명이서 재밌는 이벤트를 구성할때 활용하면 좋은 소재가 될 수 있습니다.
알림. 위 회로와 소스로 테스트 결과 잘 작동됨을 확인하였습니다. 시간이 늦은 관계로 실제 이미지와 작동영상은 추후에 올리겠습니다.
오늘은 울트라 하이테크놀로지의 결합체인 디지탈 카메라를 만들어봤습니다. "정말 피눈물나는 노력을 통해 완성한 나만의 아두이노 호환 똑딱이입니다." 라고 말씀드리면 거짓말이고요, 사실 제가 한 일이라곤 촬영된 이미지를 JPEG 포멧으로 시리얼통신을 통해 전송해주는 카메라와 이값을 수신하여 microSD메모리에 저장해주는 역활을 해주는 JPEG Trigger 아두이노 호환보드를 단순히 조립해주고 버튼한개 달랑 단것이 전부입니다. 아, 그리고 휴대용 카메라의 역활을 다할 수 있도록 3.7V Lipo충전지도 장착해줬습니다. 성능은 최신 카메라에 비길수 없겠지만 그래도 좋은건 센서연동 및 자유로운 제어가 가능한 아두이노 호환형 디지탈 카메라 시스템이라는 점입니다.
시리얼통신 JPEG 카메라가 무엇인가? 시중에서 많이 구경할 수 있는 카메라들과 달리 촬영된 이미지를 JPEG 이미지 포멧으로 압축하여 시리얼 통신(TTL 레벨)으로 전송해주는 특수 카메라입니다. 즉, 시리얼 통신이 가능한 모든 기기에서 압축된 디지탈 이미지 데이타를 수신할 수 있습니다.(일반적인 video 신호 출력도 지원) PC의 경우엔 FTDI USB시리얼 변환보드를 경유하여 카메라를 제어하고 이미지를 수신해 볼 수 있습니다. (
관련글 - 시리얼통신 카메라 PC연결하기
) 그리고 무엇보다도 아두이노같은 8bit 저속 MCU 보드들에서도 시리얼통신으로 촬영된 이미지를 수신할 수 있게 되어 유용한 카메라입니다. 물론 압축된 이미지(JPG) 데이타라도 아두이노에서 실시간 처리를하는 것은 무리가 있습니다. 하지만 데이타를 SD메모리에 저장하고 참고하는 형태의 응용이라면 충분히 제 역활을 할수 있게되는데요, 이 역활을 하는 전용 보드(JPEG Trigger)가 있어 함께 사용하면 손쉽게 디지탈 카메라 기능 구현이 가능해집니다.
JPEG Trigger 보드 본 제품은 JPEG Camera와 짝을 이뤄 사용하도록 최적화된 아두이노 호환 보드이지만 몇가지 특수 기능을 갖쳐서 프로그램을 바꿔서 다른 용도로 사용하는것도 좋을 것 같습니다. JPEG 이미지 저장용 microSD 메모리 인터페이스와 1V~ 5V 사이의 전원을 입력해주면 내장된 승압회로를 통해 5V전원으로 작동되도록 설계되어 건전지(1.5V or 3V)나 Lipo(3.7V) 충전지 하나만으로 작동이 가능합니다. 야호! 더불어 총 6개의 범용 IO핀( 아두이노 D2,D3,D4,A0,A1,A2) 홀이 제공되어 트리거(Trigger, 셔터눌러주기) 용도 및 기타 IO기능으로 사용이 가능합니다.
오픈 소스 하드웨어 공개된 소스코드와 라이브러리를 설치해주면(이미 프로그램되어 있음) 원하는 방식으로 카메라 구현이 가능하므로 응용범위가 무궁무진해 집니다.
사진. 초간단 디지탈 카메라 구현 연결이미지 카메라 + 보드 + Lipo충전지 + 버튼 을 연결해주기만 하면 프로그래밍 없이도 바로 작동합니다.
동영상. 결합상태 확인 및 사진촬영 테스트
동영상 내용 소개 보드, 카메라, 충전지, 버튼이 연결된게 보입니다. 스위치를 켜주면 상태점검 후 상태 LED가 켜집니다. 이게 안켜지거나 깜빡거리면 카메라나 메모리에 문제가 있는것입니다. 초기상태의 경우 D2,D3,D4 버튼중의 하나를 GND에 연결하는 순간 카메라 셔터가 작동(촬영)되고 JPEG으로 압축된 이미지가 시리얼 통신으로 보드에 전달되고 이 정보가 SD메모리에 저장됩니다. 마침 네모로봇 군이 옆에 있어 버튼을 눌러 촬영을 해봤습니다. 이미지가 저장되는 중에 상태 LED가 깜빡거리는게 보입니다. 저장이 완료되면 상태 LED가 다시 켜집니다. 저장된 이미지는 PC에 연결하여 (변환과정 없이) 볼 수 있습니다. (단, 초기 프로그램된 상태에선 확장자가 txt로 저장이되는 문제가 있어서 이를 PC에서 jpg 확장자로 변환해야 볼 수 있습니다. 신규 소스로 업로드하시면 이문제는 해결됩니다.)
사진. 촬영된 이미지 예
카메라와 보드 연결 JPEG카메라 <-> JPEG트리거보드 VCC -- 5V GND -- GND TXD -- D5(Rx) 주의. 카메라측 송신(Tx)단자가 트리거보드 측 수신(Rx)에 (교차)연결됩니다. RXD -- D6(Tx) 주의. 카메라측 수신(Rx)단자와 트리거보드 측 송신(Tx)에 (교차)연결됩니다. TV(미연결) 일반적인 video 신호출력선입니다. 본 예제에서는 사용안함.
전원 배터리 단자에 3.7V 정도의 Lipo충전지를 연결하여 사용하거나, 배터리 단자 옆에있는 GND와 1~5V 핀에 1~5V 전원을 연결해줍니다. (입력된 전원은 5V승압회로를 통해 5V로 승압되어 공급되게됩니다.) (FTDI USB시리얼 보드 연결시엔 usb 전원이 상시 연결됩니다.)
스위치 기능 배터리 입력전원을 승압회로에 연결여부를 선택해준다.(회로도를 꼭 참고하세요) 배터리 사용시 보드 ON/OFF 기능으로 사용됩니다. (FTDI USB시리얼 보드 연결시엔 usb 전원이 상시 연결됩니다.)
사용법 카메라와 FAT 포멧된 메모리를 장착후 전원을 켜주면 LED가 ON된다. 메모리가 없거나 포멧상태 문제등으로 초기화가 안되면 LED는 깜빡인다. 카메라가 연결되지않은경우 LED가 안켜진다. (단, 상태LED 모드는 펌웨어에 따라 다를수있으므로 해당 소스 상단 주석을 확인바랍니다.)
입출력핀 카메라 촬영신호를 받거나 I/O용으로 아래의 6개핀을 사용할 수 있습니다. 아두이노 디지탈핀 D2,D3,D4와 아두이노 아날로그핀 A0,A1,A2를 입출력 보드에는 손쉽게 전원활용을 할수있도록 각 입출력핀마다 GND,5V 홀(구멍)이 함께 있어서 총 18개의 구멍이 있습니다. 이때 GND, 5V 구멍이 안쪽에 있고 바깥쪽이 D2,D3,D4,A0,A1,A2 핀이므로 주의바랍니다.
카메라 촬영법 초기 제공되는 펌웨어(소스참조)의 경우 D2,D3,D4 핀을 GND에 연결하거나 (내부 Pullup되므로 별도 저항없어도 됩니다) A0,A1,A2 핀을 5V에 연결하는 순간 카메라 촬영이 되고,이미지가 메모리에 저장됩니다. 이때 LED가 깜빡거리고, 저장이 끝날때까지는 재촬영이 안됩니다.
저장된 JPEG이미지 초기 제공되는 펌웨어의 경우, 저장된 이미지는 001.TXT 와 같이 확장자가 TXT로 저장되는 문제가있으며 이를 PC에서 JPG로 변경하셔야 이미지 확인이 가능합니다. 하지만 새로 제공되는 소스코드로 재프로그래밍 하시면 JPG확장자로 저장되므로 꼭 업그레이드 하시기 바랍니다.
주의사항: 보드가 켜있는 상태에서 메모리카드를 뽑지 마세요! 메모리 상태 및 보드 펌웨어 상태가 손상될 수 있습니다. 이경우 보드 펌웨어를 재프로그래밍하고 메모리를 재 포맷해야할 수 있습니다.
아파트 계단이나 현관문에 많이사용되는 모션센서형 전등을 많이 보셨을 겁니다. 사람이 없을때는 미작동 되다가 다가오면 작동되므로 에너지 절약도 되고, 스위치 작동시키는 불편함도 없으므로 실생활에 매우 유용한 자동화 기기입니다.
이때 사용되는 센서가 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); }
소스 소개 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를 공통 함께 연결해주시기 바랍니다.