아트로봇에서 판매중인 지문인식기( GT-511C3) 제품을 PC와 연결 및 테스트 하는 방법의 요약 안내문입니다.

 

준비물

 

제품명을  제품 판매처 링크가 뜹니다.

지문인식기(GT-511C3)

지문인식기 소켓 케이블 (4가닥 묶음, 아트로봇 구매시 함께 제공)

 

FTDI USB to Serial 변환기 5V형 

mini USB 케이블

점퍼와이어 4가닥

브레드보드 (크기무관, 케이블을 직접 납땜 등의 방법으로 연결 하실경우 불필요)

 

 

 

연결방법 (Windows PC에서 제어시)

 

FTDI USB to Serial 5V형 제품으로 PC와 연결가능.

제품소개 페이지에 PC용 예제 프로그램이 링크되어 있으므로 다운로드하여 사용가능.

참고로, 아두이노에 직접 연결하여 제어하는것도 가능합니다만, 직접 프로토콜 학습하여 제어하셔야하므로 어렵습니다.

 

소켓 위에 세모표시 부분이 1번임

1번 TXO  (이핀을 FTDI 보드의 RXI에 연결)  

2번 RXI  (이핀을 FTDI 보드의 TXO에 연결)

3번 GND  (이핀을 FTDI 보드의 GND에 연결)

4번 VCC (이핀을 FTID 보드의 5V핀에 연결)

        (주의, 실제 5V형 FTDI USB Serial 변환기에는 5V 아닌 3V3으로 표기되어있음)

 

 

 

PC -> FTDI USB to Serial 변환기  ->  지문인식기  연결하면,

LED 불이 켜짐을 확인 하실수 있습니다.

 

 

FTDI 보드는 최초 설치시  COMx 번호가 부여되며 해당 COM번호를 기억합니다.

 

SDK_DEMO 프로그램을 실행합니다.

 

최상단에서  시리얼포트번호를  FTDI보드가 설치된 COM번호로 선택해줍니다. 

초기에 USB로 선택되어있음.

 

통신속도(Baudrate)을  115200으로 선택합니다.

 

 

Open 버튼을 눌러줍니다.

최하단 Result:란에  펌웨어 버전등의 정보가 뜨면 정상 연결된 상태입니다.

 

이제 지문을 등록하거나 확인하거나  지문이미지를 수신하는등의 테스트가 가능해집니다.

자세한 사용법은 직접 데이타시트나 동영상을 참고해주시기 바랍니다.

 

 

기타사항.

 

현재 제공되는 케이블의 1번전선이 검정색입니다. 

보통 관례상 검정색은 GND에 사용되지만,

본 케이블에서는 1번 핀은 GND가 아닌 시리얼통신 Tx핀이므로 색상은 무시하시면 됩니다.

 

 

지문인식기는 손가락으로 눌렀는지 여부를 파악할수 있습니다.

손가락을 누른상태와 안누른 상태에서 각각 "Is Press Finger"버튼을 눌러주면 감지 결과를 출력해줍니다.

 

지문인식기는 보통 불이 들어오지 않으며,

지문을 인식/확인하거나 지문 이미지를 전송할때마다 파랑불이 들어오게됩니다. (아래의 사진은 Live Image 전송중인 상태여서 파랑불과  FTDI보드의 Rx불이 계속 켜져 보이는 상태입니다.)

 

 

 

 

 

 

자매 품인 GT-511C1 제품을  아두이노 (UNO, MEGA 2560, ADK ) 보드에 곧바로 연결하는 방법을 소개한 아래의 튜토리얼 자료도 참고하시기 바랍니다. 

 

 

양단자를 손으로 꼭 잡으면 켜지는 스위치입니다.
놀라운 점은 한사람 뿐 아니라,  수십명이 손을 잡아서 장거리 회로를 구성해도 작동됩니다.
가장 기초적인 트랜지스터 활용예이면서 제법 재밌는 응용을 할수있는 회로입니다. 아래 회로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한개만 있으면 되므로 매우 저렴한 방법입니다.
특히 사람의 몸을 통하여 회로가 구성된다는 점이 알쏭 달쏭 요상한 재미를 더해주므로 여러명이서 재밌는 이벤트를 구성할때 활용하면 좋은 소재가 될 수 있습니다.

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

 

본 글을 통해 최근 동영상을 통해 알려드렸던 DIY 전자악기 만드는 법을 안내해 드리고자 합니다.

하드웨어 제작은  반제품의 쉴드를 아두이노에 결합하고 스위치를 몇개 장착하는게 전부이므로 매우 쉽습니다.  하지만 프로그래밍을 통해 제어를 하려면 MIDI 프로토콜을 이해해야 하는데 인터넷에 공개된 관련 글을 봐도 곧바로 이해하고 활용하기 쉽지 않았습니다.  결국, 정확한 신호 파악을위해 직접 마스터 키보드를 구입하여;;  건반을 누를때, 뗄때, 악기가 변경될때, 기타 콘트롤시 어떤 MIDI 신호가 출력되는지 분석을 한 후에야 대충 이해가 가더군요,,  하지만 많은 분들이 그럴 여유가 없으시죠;;;

우선은 이미 제조사에서 일련의 내장된 악기음을 순서대로 반복해주는 정도의 예제가 있으므로 참고가 되실 겁니다.
하지만, 위 소스만으로는 응용이 어려우신 분들도 많으시므로 실제 스위치(건반대응)로 연결하여 기초적인 악기를 구현한 예제(연결방법 + 소스코드)를 소개드리오니 참고하시기 바랍니다.  여러분의 좀더 멋진 DIY 악기 개발에 작으나마 도움이 되었으면 합니다

추가사항.  현재 화면상의 소스코드는 Sketch 0022 버전에서 테스트된 소스입니다.  최신 아두이노 개발환경(Arduino 1.0)용 소스코드도 첨부파일에 링크되어있으니 참고하시기 바랍니다.  첨부된 파일2개는 동일한 기능 두가지 버전입니다.)

.  -로보밥-


준비물

아두이노 UNO 1개
아두이노 용 USB케이블
MIDI 악기 쉴드 1개
재적측 가능한 헤더셋(아두이노용) 1세트
결합형 브레드보드 중형  4개
스위치 12개 (마이크로 스위치  , 5색칼라버튼)
점퍼케이블 1세트

하드웨어 준비

1. 재적층 가능 해더셋을 MIDI 악기쉴드에 납땜합니다. 여분의 헤더핀들을 아두이노에 결합 후 재적층 가능 헤더셋을 뒤집어 꽂은 상태로 납땜을 하면 수직(90도)상태로 납땜하기 용이해 집니다.
 
2. 아래의 이미지를 참고하셔서 MIDI 악기 쉴드에 아래와 같은 방식으로 스위치를 장착합니다. 버튼 3개만 보이지만 나머지 버튼들도 동일한 방법으로 연결하면 됩니다.  어떤 핀에 연결해야하는지는 소스코드에 나오는 버튼별 핀번호 정의부분을 보시면 됩니다.  싱겁게도 회로 연결 작업은 이것으로 끝입니다. ( 아직 MIDI쉴드를 아두이노에 장착하지 마세요!)

 

 



 아두이노 프로그래밍 준비작업

1. 아두이노에 내장된 기존 프로그램이 장착된 하드웨어와 맞지 않는 경우에 대비하기위해 첫프로그래밍시엔 쉴드를 제거한 상태에서 프로그래밍(업로딩) 하실 것을 권장드립니다.

2. 컴파일전에 NewSoftSerial 라이브러리를 설치 하셔야합니다. 아두이노 프로그래밍 방법 및 라이브러리 설치방법등을 모르시는 분들은 아두이노 해당 기초 학습을 완료 후 시도하시기 바랍니다.

3. 소스코드를 웹화면에서 복사하여 사용시 일부 문자가 누락되는 경우가 있습니다. 하단에 링크된 첨부파일(MusicArtRobot.pde)을 다운로드 받으셔서 사용하실것을 권장드립니다.


DIY 전자 악기 ( Music Art Robot )소스코드


/*
 Music Art Robot v0.1(2012.Feb.4)
 ---------------------------------------------------------
 아두이노 + MIDI악기쉴드 이용한 DIY 건반악기 예제소스
 ---------------------------------------------------------
https://robobob.tistory.com/
 재배포시, 위 URL 유지부탁드리고요, 자유롭게 사용해주세요!
 ---------------------------------------------------------
 
 아두이노 D3,D4핀은 MIDI악기쉴드 제어용이므로 다른용도로 사용하지 마세요
 아두이노 D3핀을 통해 MIDI악기쉴드에 MIDI신호를 전송합니다.(NewSerailSoft 라이브러리 필요함)
 D2핀도 SoftSerial 수신용으로 선언은됐지만, 재세팅하고 버튼 입력용으로 사용됩니다.

 버튼1 ~ 8 : 도/레/미/파/솔/라/시/도  임의 note(음계)로 변경하시면 됩니다.
 버튼9: 다른 악기 선택(현재 악기번호 + 1)  0~127
 버튼10: 다른 악기 선택(현재 악기번호 - 1)  0~127
 버튼11: 악기를 드럼셋으로 설정.
 버튼12: defaultPatch 에 정의된 악기로 변경

 외부스위치 연결방법:
 버튼의 양쪽선 중 한쪽은 아두이노 해당 핀에 연결하고, 나머지 한쪽은 GND에 공통 연결하면 끝.
 
 참고사항, 전원을 켠 후 소리가 나지않을 경우 리셋버튼을 눌러서 초기화 해주면 작동됩니다.


 MIDI악기쉴드에 대한 아래의 영문정보도 참고하세요.
 
 This code works with the VS1053 Breakout Board and controls the VS1053 in what is called Real Time MIDI mode.
 To get the VS1053 into RT MIDI mode, power up the VS1053 breakout board with GPIO0 tied low, GPIO1 tied high.
 
 I use the NewSoftSerial library to send out the MIDI serial at 31250bps. This allows me to print regular messages
 for debugging to the terminal window. This helped me out a ton.
 
 5V : VS1053 VCC
 GND : VS1053 GND
 D3 (SoftSerial TX) : VS1053 RX
 D4 : VS1053 RESET
 
 Attach a headphone breakout board to the VS1053:
 VS1053 LEFT : TSH
 VS1053 RIGHT : RSH
 VS1053 GBUF : GND
 
 When in the drum bank (0x78), there are not different instruments, only different notes.
 To play the different sounds, select an instrument # like 5, then play notes 27 to 87.
 
 To play "Sticks" (31):
 talkMIDI(0xB0, 0, 0x78); //Bank select: drums
 talkMIDI(0xC0, 5, 0); //Set instrument number
 //Play note on channel 1 (0x90), some note value (note), middle velocity (60):
 noteOn(0, 31, 60);
 
 */
 
#include <NewSoftSerial.h>
#define btn1  11    // 버튼1의 아두이노 핀번호 정의
#define btn2  10    // 버튼2의 아두이노 핀번호 정의
#define btn3  9        // 버튼3의 아두이노 핀번호 정의
#define btn4  8        // 버튼4의 아두이노 핀번호 정의
#define btn5  7        // 버튼5의 아두이노 핀번호 정의
#define btn6  6        // 버튼6의 아두이노 핀번호 정의
#define btn7  5   // 버튼7의 아두이노 핀번호 정의
// 3:midi rx , 4:midi reset  아두이노 핀 3번 4번은 이미 사용중
#define btn8  2   // 버튼8의 아두이노 핀번호 정의
                  //(SoftSerial에서 Rx핀으로 선언되지만 재 세팅 후 버튼용으로 사용)
#define btn9 A5   // 버튼9의 아두이노 핀번호 정의
#define btn10 A4  // 버튼10의 아두이노 핀번호 정의
#define btn11 A3  // 버튼11의 아두이노 핀번호 정의
#define btn12 A2  // 버튼12의 아두이노 핀번호 정의

#define defaultPatch 15 //악기 초기화 버튼 설정 악기번호

NewSoftSerial mySerial(2, 3); //SW시리얼핀 정의 D3이 MIDI신호 전송용,  D2는 미사용

byte note = 0; //The MIDI연주될 note(음계)
byte resetMIDI = 4; // VS1053 Reset용 핀
byte ledPin = 13; //MIDI 트래픽 표시용 LED
 
boolean bs1 = false;  // 버튼1의 현재상태(눌림 or 안눌림)
boolean bs2 = false;  // 이하, 위와 유사
boolean bs3 = false;
boolean bs4 = false;
boolean bs5 = false;
boolean bs6 = false;
boolean bs7 = false;
boolean bs8 = false;
boolean bs9 = false;
boolean bs10 = false;
boolean bs11 = false;
boolean bs12 = false;

boolean br1;  // 버튼1 상태 확인용 입력값 임시저장용
boolean br2;  // 이하, 위와 유사
boolean br3;
boolean br4;
boolean br5;
boolean br6;
boolean br7;
boolean br8;
boolean br9;
boolean br10;
boolean br11;
boolean br12;

int patch = 0; //악기 대응, 연주될 악기 종류 (0~127: 기본 128 가지 선택가능)

int bn1 = 60; //버튼1의  note(음계)  가령 "도"  0~127까지 지정가능 (정확한 음계 설정은 MIDI관련정보참고)
int bn2 = 62; //버튼2의  note(음계)  가령 "레"
int bn3 = 64; //버튼3의  note(음계)  가령 "미"
int bn4 = 65; //버튼4의  note(음계)  가령 "파"
int bn5 = 67; //버튼5의  note(음계)  가령 "솔"
int bn6 = 69; //버튼6의  note(음계)  가령 "라"
int bn7 = 71; //버튼7의  note(음계)  가령 "시"
int bn8 = 72; //버튼8의  note(음계)  가령 "도~"

byte byteData;

void setup() {
  Serial.begin(31250);

  //Setup soft serial for MIDI control
  mySerial.begin(31250);
//  mySerial2.begin(57600);
 
  //Reset the VS1053
  pinMode(resetMIDI, OUTPUT);
  digitalWrite(resetMIDI, LOW);
  delay(100);
  digitalWrite(resetMIDI, HIGH);
  delay(100);
 
  pinMode( btn1, INPUT);      // 버튼1 입력용 핀모드를  입력모드로 전환
  digitalWrite( btn1, HIGH);  // 내부 PullUp 설정, 스위치의 나머지 한선은 GND에 물리면 됩니다.(초간단)

  pinMode( btn2, INPUT);      // 이하, 위와 유사
  digitalWrite( btn2, HIGH);
 
  pinMode( btn3, INPUT);
  digitalWrite( btn3, HIGH);
  pinMode( btn4, INPUT);
  digitalWrite( btn4, HIGH);
  pinMode( btn5, INPUT);
  digitalWrite( btn5, HIGH);
  pinMode( btn6, INPUT);
  digitalWrite( btn6, HIGH);
  pinMode( btn7, INPUT);
  digitalWrite( btn7, HIGH);
  pinMode( btn8, INPUT);
  digitalWrite( btn8, HIGH);
 
  pinMode( btn9, INPUT);
  digitalWrite( btn9, HIGH);
  pinMode( btn10, INPUT);
  digitalWrite( btn10, HIGH);
  pinMode( btn11, INPUT);
  digitalWrite( btn11, HIGH); 
  pinMode( btn12, INPUT);
  digitalWrite( btn12, HIGH); 

}

void loop() {
    br1 = digitalRead(btn1);
    br2 = digitalRead(btn2);
    br3 = digitalRead(btn3);
    br4 = digitalRead(btn4);
    br5 = digitalRead(btn5);
    br6 = digitalRead(btn6);
    br7 = digitalRead(btn7);
    br8 = digitalRead(btn8);
    br9 = digitalRead(btn9);
    br10 = digitalRead(btn10);
    br11 = digitalRead(btn11);
    br12 = digitalRead(btn12);   
   
   if( !bs1 && !br1 ){
     noteOn(0, bn1,100);
     bs1 = true;
   }else if(bs1 && br1){
     noteOff(0, bn1,0);  
     bs1 = false;
   }
   if( !bs2 && !br2 ){
     noteOn(0, bn2,100);
     bs2 = true;
   }else if(bs2 && br2){
     noteOff(0, bn2,0);  

     bs2 = false;
   }  
   if( !bs3 && !br3 ){
     noteOn(0, bn3,100);
     bs3 = true;
   }else if(bs3 && br3){
     noteOff(0, bn3,0);  
     bs3 = false;
   }
   if( !bs4 && !br4 ){
     noteOn(0, bn4,100);
     bs4 = true;
   }else if(bs4 && br4){
     noteOff(0, bn4,0);  
     bs4 = false;
   }
   if( !bs5 && !br5 ){
     noteOn(0, bn5,100);
     bs5 = true;
   }else if(bs5 && br5){
     noteOff(0, bn5,0);  
     bs5 = false;
   }  
   if( !bs6 && !br6 ){
     noteOn(0, bn6,100);
     bs6 = true;
   }else if(bs6 && br6){
     noteOff(0, bn6,0);  
     bs6 = false;
   }  
  
   if( !bs7 && !br7 ){
     noteOn(0, bn7,100);
     bs7 = true;
   }else if(bs7 && br7){
     noteOff(0, bn7,0);  
     bs7 = false;
   }  
   if( !bs8 && !br8 ){
     noteOn(0, bn8,100);
     bs8 = true;
   }else if(bs8 && br8){
     noteOff(0, bn8,0);  
     bs8 = false;
   }  
  
   if( !bs9 && !br9 ){ //patch up (max:127)
     patch++;
     if(patch >127) patch = 0;
     talkMIDI(0xc0, patch, 0);    
     bs9 = true;
   }else if(bs9 && br9){
     bs9 = false;
   }  
   if( !bs10 && !br10 ){ //patch down (min:0)
     patch--;
     if(patch < 0) patch = 127;
     talkMIDI(0xc0, patch, 0);      
     bs10 = true;
   }else if(bs10 && br10){
     bs10 = false;
   }  
  
   if( !bs11 && !br11 ){
     //bank 0x78(drum)
     talkMIDI(0xb0, 0, 0x78);
     talkMIDI(0xb0,20, 0);
     talkMIDI(0xc0, patch, 0);    
     bs11 = true;
   }else if(bs11 && br11){
     bs11 = false;
   }  
  
   if( !bs12 && !br12 ){
     //bank MSB 0, default instruments
     patch = defaultPatch;
     talkMIDI(0xb0, 0, 0);
     talkMIDI(0xb0,20, 0);
     talkMIDI(0xc0, patch, 0);      
     bs12 = true;
   }else if(bs12 && br12){
     bs12 = false;
   }  
           

  //*************** MIDI LOOPBACK ******************//
  if(Serial.available() > 0)
  {
    byteData =  Serial.read();
    mySerial.print(byteData, BYTE);
  } 
    

}

//Send a MIDI note-on message.  Like pressing a piano key
//channel ranges from 0-15
void noteOn(byte channel, byte note, byte attack_velocity) {
  talkMIDI( (0x90 | channel), note, attack_velocity);
}

//Send a MIDI note-off message.  Like releasing a piano key
void noteOff(byte channel, byte note, byte release_velocity) {
  talkMIDI( (0x80 | channel), note, release_velocity);
}

//Plays a MIDI note. Doesn't check to see that cmd is greater than 127, or that data values are less than 127
void talkMIDI(byte cmd, byte data1, byte data2) {
  digitalWrite(ledPin, HIGH);
  mySerial.print(cmd, BYTE);
  mySerial.print(data1, BYTE);

  //Some commands only have one data byte. All cmds less than 0xBn have 2 data bytes
  //(sort of: http://253.ccarh.org/handout/midiprotocol/)
  if( (cmd & 0xF0) <= 0xB0)
    mySerial.print(data2, BYTE);

  digitalWrite(ledPin, LOW);
}





소스코드 파일 다운로드:
(순서대로 스케치 구버전용 pde 파일, 아두이노 1.0 포팅된 ino 소스)

 

로보밥

..

robobob.tistory.com

 

로보밥

..

robobob.tistory.com

 

MusicArtRobot.pde
다운로드

 

MusicArtRobot10.ino
다운로드


후기
MIDI 용어문제:  관련 용어 파악이 어려운것 같습니다. 가령 악기와 대응되는 용어만 instrument, patch, program 이 있네요.

아두이노 1.0용 소스 추가 안내. 2012년 5월 30일
많은분들이 Arduino 1.0 스케치용으로 포팅된 소스를 요청하셨는데요  변환된 파일을 이제야 올려드렸습니다. 2번째 첨부파일을 참고하시기 바랍니다.  바뀐것이라곤   NewSoftSerial.h 대신  기본제공되는 시리얼 라이브러리를 사용하기위해  SoftwareSerial.h 헤더선언을 변경한것과   Serial.print( val, BYTE)  함수를  Serial.write( val ) 로 변경한것 뿐입니다.  어렵지 않으니 직접 한번 수정(포팅)해보시고 성취감을 맛보시는것도 좋으실 것 같습니다.


관련자료 링크
http://www.midi.org/aboutmidi/tutorials.php (해당페이지에 pdf 문서 추천)
http://253.ccarh.org/handout/midiprotocol/


 

RGB LED는 오색 찬란 무지개 색상을 자유롭게 표현할 수 있는 재료입니다. 하지만 여러개를 사용하기위해서는 회로나 프로그래밍이 복잡해져서 직접 제작하기엔 부담이 큽니다.  이를 위해 지금 소개해 드릴 20개단위로 LED 체인으로 구성된 제품을 사용하면 손쉽게 독립제어되는 다수의 RGB LED 사용이 가능해집니다.  관련제품 사용법을 알려드리겠습니다.

손쉽게 사용가능하도록 라이브러리와 아두이노 예제 소스가 제공됩니다.  한줄 만 수정하면 그대로 이용 가능합니다.
관련 동영상을 보신 후, 아래의 상세과정을 참고하시기 바랍니다. ^^.

- 이하 사용법 안내 -

라이브러리 설치 방법
1.압축해제후,
2. WS2801.cpp 등의 파일이 들어있는 폴더를 아두이노 설치폴더의 Libraries 폴더에 복사후,
3. 폴더명을 WS2801으로 변경하시기 바랍니다.
4. 아두이노 스케치를 재 시작합니다.

 

예제소스 및 수정
소스코드 폴더를 보시면 Example 폴더에 예제파일이 있습니다.
소스코드 상단주석과 설명을 보시면 설명이 되어있습니다.
해당 소스코드에서 통신용(data선, clock선)으로 사용되는 핀 2개의 번호를 확인하셔서 해당핀에 케이블을 연결하시면됩니다.
본 제품은 모듈(pixel)의 수가 20개이므로, 기본 25개로 되어있는 부분을 20으로 수정하시면 됩니다.

 int dataPin = 2;   // 데이타 전송용 데이타 핀번호 ( 다른핀으로 변경 가능)
int clockPin = 3; // 데이타 전송시 클럭용 핀번호 ( 다른핀으로 변경 가능)

WS2801 strip = WS2801(20, dataPin, clockPin);   //LED모듈 개수 25를 20으로 변경한 예

즉,  위 코드 한줄만 바꿔주시면 끝입니다.   20개 모듈체인 2세트를 연결시엔 40으로 변경해야겠죠

 

케이블 단자 안내 (시작 모듈 기준)

 

 BLUE  Clock
 GREEN  Data
 RED  VCC ( 5V전원입력선)
 WHITE (2라인)  GND (아두이노 및 외부전원 GND와 연결)

    (주의. 색상은 시작모듈 기준입니다, 두번째 모듈부터는 시작모듈 기준 배치와 동일하며 케이블 색상은 바뀔수 있으니 잘라서 사용시 주의하시기 바랍니다.아래 그림 참조)

 

  VCC -->   --> VCC 
  GND -->  RGB --> GND 
  DATA-->  모듈 --> DATA 
  CLK -->   --> CLK  

 

 

 

시작모듈/끝모듈 구분법
어디가 시작이고 어디가 끝인지를 구분하시기 위해 모듈 밑면에 있는 화살표를 참고하시면 됩니다.
시작모듈에 케이블을 연결하시면 됩니다.

 

관련제품

RGB LED 독립 색상 제어 20개 연결형
정전압 아답터 5V 2000mA SMPS
점퍼 와이어 M/F 10개형
아두이노 UNO
브레드보드 점퍼 케이블 ( Solderless Breadboard Jumper Wire 75 pcs )
브레드보드 호환형 DC 잭 아답터 (DC Barrel Jack Adapter - Breadboard Compatible)




 

 

 

 

 

 

 

 

아두이노와  GND,  CLOCK, DATA  핀  3개만 연결해주시면 됩니다.

 

 

 

아두이노와 Clock, Data 신호가 연결되는 시작모듈 을 찾기 위해서 모듈 뒷면을 보시면 화살표시가 있습니다.

 

 

 

Male/Female 점퍼 케이블을 이용하시면 케이블 작업이 손쉬워 집니다.

 

 

 

20개 묶음을 2세트(총 40개) 연결한 장면입니다. (단, 전원은 힘 좋은 녀석 사용이 필수겠죠 ^^.)

 

 

Tip. 기본 20개 체인형 제품이지만, 2세트를 묶어 40개를 연결하거나  1개나 N개 단위로 잘라서 사용도 가능한 .... 기특한 녀석입니다.

다양한 MIDI 작곡 프로그램들에서 MIDI 신호 출력을 지원합니다.  PC의 경우 SW적인 음원으로 연주하는것도 가능합니다만, MIDI 신호를 PC 외부에 있는 전용 사운드모듈(악기,음원모듈)로 보내서 연주시킬 수 도 있습니다.   MIDI 악기 쉴드로 이 신호를 받아서 연주가 되도록 해봤습니다.

PC용 SW는  MIDI 파일을 단순 연주해주는 Sweet MIDI Player 프로그램을 사용했습니다.
물론 기타 전문가용 MIDI 작곡 프로그램도 마찬가지로 연결해서 사용이 가능합니다.  출력되는 MIDI 신호는 모두 동일합니다.

아래의 동영상을 참고하시기 바랍니다.

미션임파서블 등 MIDI 신호로 연주 테스트 동영상





보통 마스터 키보드는 음원내장이 되지 않아 자체적으로 연주가 불가하고, 외부 사운드 모듈(SW 또는 HW)이 필요합니다.  고가의 사운드카드의 경우엔 모르겠지만  보통의 메인보드 내장형 사운드 카드로  SW 사운드 음원을 대체하여 사용한경우,  키보드로 연주시 엄청난 딜레이가 있네요...  건반을 누르고 소리가 날때까지 수백mSec 지연은 있는것 같습니다. (제경우 연주용으로 사용이 불가한 수준이라고 생각됩니다.) 

하지만 MIDI 악기 쉴드에 키보드 MIDI출력 신호를 곧바로 입력시켜 연주를 해본 결과 딜레이를 느낄 수 없었습니다.   고품질의 음원이 필수적이지 않다면 MIDI 악기 쉴드를  외장 악기음원(Sound Module)로 활용하는것도 좋을것 같습니다.

아래의 관련 동영상을 참고하시기 바랍니다. 









ATMega 328 칩이 사용되는 아두이노(Arduino)보드에 MIDI 악기 쉴드(MP3/MIDI 지원 VLSI칩 내장)를 결합한 뒤 반나절만에 만든 전자악기입니다. 허접한 모양새와 달리 소리는 제법 쓸만합니다.( 화음까지 지원)

사운드 카테고리에 소개된 MIDI 악기 쉴드 활용 연관 동영상도 참고하시기 바랍니다.

만드는 방법소개

위 동영상에서 보여드렸던 건반악기 제작법과 소스코드를 아래의 링크에서 참고 가능하십니다!

DIY 전자악기 만드는법 소개 ( 연결방법 + 소스코드 공개)

공식 아두이노의 최신 표준보드 UNO의 R3버전이 나왔습니다.(2011년 12월)

보통 UNO 하면 마이크로콘트롤러 칩 타입에따라 SMD타입과 DIP타입 두 가지가 있었지만, 이제 형제가 더 많아졌네요, 아직 R3버전의 SMD타입은 공개되지 않은것 같으므로 현재 아래와 같은 3종류의 UNO가 있습니다.
UNO R2 DIP형
UNO R2 SMD형
UNO R3 DIP형


[]R2와 R3의 차이점 요약
일단, R2나 R3나 주 마이크로콘트롤러는 ATMega328 칩을 사용하므로
프로그래밍 가능용량이나 제어핀의 개수와 사용방법이 모두 동일합니다.
다만, USB 인터페이스칩이 변경되었고 헤더핀의 개수가 3개 추가되었습니다.
그렇다고 기본성능이 업그레이드 된것도 아니어서 기존 R2와 동일하게 사용하시면 됩니다.


[]변경된것
1.USB 인터페이스칩이 atmega8u2에서 atmega16u2로 변경됨:
단, (주콘트롤러칩은 R2와 동일하므로) 이것이 아두이노 프로그래밍 가능용량의 증가를 의미하지는 않습니다.
단, USB제어칩을 개조하여 사용할 경우 유용할수있음.

2. 노출 헤더 구멍이 3+1개 추가됨:
AREF핀옆에 I2C 헤더소켓 2구가 추가되었음.
단, 여분의 i2c핀이 새로 추가된것이 아니고 기존의 i2c핀(Analog 4번 5번)에 중복 연결된것입니다.
(차후 Mega시리즈 같은 다른 아두이노 보드와의 쉴드 호환성을 위한 고려로 여겨짐)
더불어 IOREF 노출 헤더소켓 1구가 Reset핀 옆에 추가되었습니다.
(이는 쉴드에서 보드의 작동전원을 파악하는 용도로 사용될 것으로 여겨짐)
물론 이핀도 power pin의 노출 헤더출구 1개가 추가된 것일뿐 없던 제어핀이 새로추가된것은 아닙니다.
나머지 1 구는 미사용 예비용이라네요;;

[]변경되지 않은것
1. 모든 UNO(R2 R3)는 프로세서 속도 및 기억 용량이 동일합니다.
2. 제어가능한 핀의 개수도 동일합니다.
3. 보드 크기와 모양도 그대로 유지
4. 쉴드호환성 동일( R1 R2용 쉴드를 R3에서도 그대로 호환사용가능)
5. 드라이버도 동일
6. 업로딩속도도 동일 (스케치에서 보드 종류를 UNO로 선택하면됩니다.)

참고원문링크:

http://www.ladyada.net/library/arduino/unofaq.html



이하 영문 제품자료

Description: This is the new Arduino Uno R3. In addition to all the features of the previous board, the Uno now uses an ATmega16U2 instead of the 8U2 found on the Uno (or the FTDI found on previous generations). This allows for faster transfer rates and more memory. No drivers needed for Linux or Mac (inf file for Windows is needed and included in the Arduino IDE), and the ability to have the Uno show up as a keyboard, mouse, joystick, etc.

The Uno R3 also adds SDA and SCL pins next to the AREF. In addition, there are two new pins placed near the RESET pin. One is the IOREF that allow the shields to adapt to the voltage provided from the board. The other is a not connected and is reserved for future purposes. The Uno R3 works with all existing shields but can adapt to new shields which use these additional pins.

Arduino is an open-source physical computing platform based on a simple i/o board and a development environment that implements the Processing/Wiring language. Arduino can be used to develop stand-alone interactive objects or can be connected to software on your computer (e.g. Flash, Processing, MaxMSP). The open-source IDE can be downloaded for free (currently for Mac OS X, Windows, and Linux).

Features:

  • ATmega328 microcontroller
  • Input voltage - 7-12V
  • 14 Digital I/O Pins (6 PWM outputs)
  • 6 Analog Inputs
  • 32k Flash Memory
  • 16Mhz Clock Speed

Documents:

이미 소개해 드렸던 촬영된 이미지를 JPEG 포멧으로 압축하여 시리얼통신으로 전송해주는 카메라를 PC와 직접 연결하여 테스트해봤습니다.  시리얼 통신으로 촬영된 데이타를 전송해주므로  시리얼통신을 지원하는 모든 기기에 연결 가능합니다. 게다가 JPEG 이미지 포멧으로 압축하여 전송을 해주므로 저장만 해주면 PC에서도 그대로 확인이 가능해집니다.
본 동영상에서는 USB to 시리얼 변환기를 통해 PC와 연결한 뒤,  기본 제공되는 PC 용 테스트 프로그램을 이용하여  실시간 이미지 전송과 Single Shot(한장촬영) 기능을 테스트 및 해상도와 전송속도 조절기능도 사용해봤습니다. 

 

 

PC와 연결 구성

   PC USB포트<-> USB 케이블 <-> USB to Serial FTDI 변환기 <-> TTL Serial JPEG Camera

 

 

 

 

 

 

관련제품
 JPEG 시리얼통신 카메라
 USB to Serial 변환기 5V형

관련글 링크
 DIY 자작 휴대형 디지탈 카메라 만들기

오늘은 울트라 하이테크놀로지의 결합체인 디지탈 카메라를 만들어봤습니다.  "정말 피눈물나는 노력을 통해 완성한 나만의 아두이노 호환 똑딱이입니다." 라고 말씀드리면 거짓말이고요,  사실 제가 한 일이라곤 촬영된 이미지를 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 전원이 상시 연결됩니다.)

보드테스트
(카메라 및 메모리)아무것도 장착하지 않은상태에서
스위치 off상태에서 Lipo단자에 Lipo배터리 연결후, 스위치 on하고 몇초후 LED가 깜빡거려야함.


스위치 기능
배터리 입력전원을 승압회로에 연결여부를 선택해준다.(회로도를 꼭 참고하세요)
배터리 사용시 보드 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확장자로 저장되므로 꼭 업그레이드 하시기 바랍니다.


주의사항:
보드가 켜있는 상태에서 메모리카드를 뽑지 마세요! 메모리 상태 및 보드 펌웨어 상태가 손상될 수 있습니다.
이경우 보드 펌웨어를 재프로그래밍하고 메모리를 재 포맷해야할 수 있습니다.


 

 

+ Recent posts