본 글을 통해 최근 동영상을 통해 알려드렸던 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/


 

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

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

만드는 방법소개

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

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확장자로 저장되므로 꼭 업그레이드 하시기 바랍니다.


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


 

 

^^. 로보밥 얼뚱연구소에 또하나의 재밌는 제품이 들어왔습니다. 예전부터 이제품 찾는 분들이 많았는데 드디어 입수하게 되었습니다.
 자세한 소개이전에 일단 테스트 영상을 올려봅니다.

Adafruit Industries사의 아두이노용 웨이브 쉴드이며,  직접 납땜하여 조립하는 DIY형 제품입니다.
mp3플레이어의 경우 전용 하드웨어 코덱칩을 사용하곤 하는데요, 요제품은 걍 wav파일을 곧바로 DAC칩으로 재생해버리므로 코덱같은거 없습니다.  단점일수있지만 반대로 장점일 수 도있죠,
low level 의 wav데이타를 곧바로 DA로 변형후 OPamp로 증폭하여 출력합니다.
그리고, 사실 mp3 배우기 전에  wav부터 배우는게 순서가 맞을것 같습니다.
SD메모리 슬롯도 내장하여 용량문제없이 음악재생이 가능하고, SD메모리만 응용할 수도 있습니다.

아래의 예제는 sd메모리에 미리 넣어둔 wav파일 몇개를 지정된 키를 누를때마다 재생하는 예제입니다.
관련예제는 해당제품 안내페이지에서 모두 보실 수 있습니다.
기회가 되면 상세 리뷰도 소개해 드리겠습니다.

 

 

 

 

 

PCB와 조립용 부품이 제공되며 직접 납땜으로 완성시키는 DIY형 제품입니다.

 

오늘은 물라스틱(물 플라스틱 Plastic)을 소개해 드리겠습니다.
뜨거운 물로 녹여서 몇번이고 재가공하여 사용할 수 있는 무악취, 무독성의 DIY 프로토타입 제작용 플라스틱입니다.

플라스틱은 그 가공성이 뛰어나고 그 물성도 다양한 용도에 맞게 개발되어 그 어떤 재료보다 많이 활용되는 소재들의 대표명입니다.  하지만 보통 플라스틱 가공을 집에서 하는것은 여러가지 이유로 어렵습니다.  재료 입수도 어렵지만 제조방법 및 도구, 제조 중 발생하는 해로운 가스등의 문제로 개인이 자작용으로 사용하는것은 곤란합니다.

하지만, 일부 특수 플라스틱의 경우 온도만 적절히 높혀주면 쉽게 가공이 가능하고, 몇 번이고 재 가공이 가능한 경우도 있습니다.

드디어 로보밥 얼뚱연구소에서도 그중의 한 제품을 입수하여 테스트를 진행해봤습니다.  유사한 제품들이 해외에서 제조 판매되고 있지만, 제품마다 차이가 있을 수 있고 공식적인 한국어 명칭도 없는것 같아, 물로 녹여서 손쉽게 가공이 가능한 특징을 일컬어 물라스틱(물 플라스틱이란 의미로)이란 이름을 정해봤습니다.  일반적으로 유사기능의 플라스틱을 엔지니어링 플라스틱이나 써모플라스틱이란 용어로 칭하기도 하지만 조금 다른 의미이거나 소재의 차이에따라 큰 차이가 있으므로 마찬가지로 정확한 명칭이라 할 수는 없겠네요. 물라스틱~  제 느낌엔 나쁘지 않네요!

물라스틱 사용해보기

원 재료의 형상
본 글에서 소개해 드릴 제품의 경우,  쌀 알 크기의 흰색 알갱이 형태로 가공되어 있습니다.
60~70도 정도로 가열되면 투명해지며  말랑 말랑해져서 원하는 형태로 가공할 수 있게 됩니다.
보통은 뜨거운 물에 담가두고 기다리면 가공하기 좋게 변하지만, 원하면 다른 가열기구를 이용할 수도 있습니다.

[사진1] 물라스틱 알겡이들

준비물

  • 물라스틱 50g 
  • 가열기구
  • 가열용 용기
  • 집게(드라이버 등)
  • 온도계(없어도 될 듯)

물라스틱 요리 시작!

1. 물 데우기

몇 달전, 낡아서 버리려던 전열 냄비를 안버리고 남겨두길 잘했던것 같습니다.
전기 냄비? 비슷한 제품인데 어느정도 온도설정 기능도 있어서 물라스틱 가공용으로 적절한것 같네요
물을 넣어주고 가열해 봤습니다.

[사진2] 재사용 되는 물라스틱 부스러기들

2. 재료넣고 보글 보글 조리하기^^.

보글 보글 끓는 물에 물라스틱 알겡이들을 넣어주고 드라이버로 휘졌는 느낌이 마치  요리하는 기분이네요 ^^.
[사진2]은 이미 한번 가공되었던 재료 부스러기를 녹여서 재사용하는 장면입니다.(녹여서 재 가공이 정말 가능하네요)
처음엔 제빵용 비스킷 틀에서 재료를 녹이려했지만, 그냥 냄비에 넣고 녹이는게 반응이 빨라서 좋더군요
온도만 적절하면 1분도 안되어 흰색이 없어지고 투명해지며 서로 엉겨붙는 상태가 됩니다.

[사진3]가열되어 투명해진 물라스틱

이제 집게를 이용하여 재료를 꺼냅니다.
이상하게 제 경우엔 꺼내자 마자 손으로 만져도 그다지 뜨겁지는 않더군요
하지만 화상에 주의하시기 바랍니다.

 

이렇게 투명하고 말랑거리다가

 

식으면 흰색으로 변하면서 단단해집니다.

 

PET병 사용하시면 안되십니다!

 

왜냐하면 들러붙습니다;;

주의. 처음엔 마땅한 작업 용기가 생각나지 않아 생수통(PET)에 데운물을 넣고 재료와 혼합하는 방법을 썼었는데요
어떻게 되었을까요?  여러분은 이러시면 아니되옵니다.
PET와 물라스틱이 서로 좋다고 들러붙어서 어지간해서는 떨어지지 않네요 ^^.
이 녀석들 떼어 놓으려고 시간좀 소비했습니다. ;;  

참고로 아무리 무독성이라고는 하지만, 음식 조리용 기구를 이용하는건 비추천드립니다.
물라스틱을 녹이면서 별다른 냄새나 불쾌함은 없었지만, 그래도 안전을 위해 사용하지 않는 기구들을 이용하시기 바랍니다.
물론 입에 넣는것도 삼가하시고요, 아이들에게는 주지 마세요;;  제가 성분 조사를 한건 아니니까 먹어도 안전하다고 보증 할 수는 없네요

3. 모양 만들기

이제 말랑 말랑해진 물라스틱을 원하는 모양으로 가공합니다.
제가 화학약품 냄새에 민감해서 화장품냄새만 맡아도 머리가 아픈경우가 많은데요
보글보글 끓이고 손으로 만지작 거려 봤지만 불쾌한 냄새같은건 나지 않았습니다.
그리고 손에도 들러붙거나 색이 묻어 나는일도 없는 정말 깔끔한 재료네요
왁스나 기타 조형용 점토들의경우 냄새와 끈적임등으로 사용감이 별로 좋지 않았던 기억이 있습니다.

글루건 등으로 부분 가열하여 모양을 잡을 수 도 있으며,
케스팅 틀에 녹여넣어서 형태를 만들 수 도 있습니다.

제경우 아직 별다른 디자인이 없이 만지작 거리다가 30 x 30 x 30 mm 크기의 큐브와 두개의 연결된 고리를 만들어 봤습니다.
총 사용된 재료량은 50g 정도입니다.  큐브는 별다른 용도가 없고;;, 플라스틱 고리는 만들어 놓고 보니
플라스틱 물성 측정용으로 좋을것 같아서 테스트를 해봤습니다. 생각 이상의 결과를 보고 저도 놀랐습니다.
아래에 플라스틱 고리 테스트를 참고하시기 바랍니다.

[사진4] 50g으로 만든 큐브와 연결고리


[사진5] 내구성 테스트에 사용된 물라스틱 고리

4. 물라스틱의 인장력 테스트

만들어 놓은 물라스틱 고리를 보고 생각 난 것이 이 고리가 얼마나 무게를 지탱할 수 있을까? 였습니다.
그래서 손으로 힘껏 당겨봤더니 끄떡도 안하더군요, 그래서 좀더 구체적인 실험 결과를 얻기위해
삼다수 12Liter(약 12Kg)들이 팩을 고리로 들어올려 봤습니다.
멀쩡하네요...  흔들어 봐도 마찬가지였습니다.
그 이상의 무게도 버틸것 같네요  아마도 제 몸무게정도는 무리없이 버틸 기세였습니다.
참고로, 굵기가 10mm가 안되는 고리였으며 얼마의 힘까지 버티는가? 는  안해봐서 모르겠습니다.;;


[사진5] 인장력 테스트에 사용된 물라스틱 고리와 12L생수팩

[]12Kg 무게 지탱 테스트 장면


[동영상] 삼다수 고리 테스트

 

 

 

 

 

 

 

 

 


봐서 남는것보다 보는시간으로 소비하는 시간이 아까운 경우가 많아서 저는 TV를 거의 보지 않습니다. 따라서 제 집엔 TV가 없고 가끔 부모님집에 가면 봅니다.  오랜만에 보면, 광고만 봐도 재밌습니다.  ㅎㅎㅎㅎ
헌데 문제는 케이블방송이 채널은 많지만 입맛에 맞는 프로그램들은 별로 없다는것.  수십개 채널을 돌리가다 주로 선택을 받는 채널이 바로 디스커버리(Discorvery)입니다.   왠지 보고나면 뭔가 남는게 있을것같은 느낌이 들거든요..
그중에 하나, 현란한 주제들로 제 호기심을 마구 찔러대는 프로그램이 바로 미쓰버스터즈(Mythbusters)입니다.

며칠전 미쓰버스터즈의 인터넷판 or 잡지판 정도되는 녀석을 발견하게되어 몇자 적어봅니다.

바로, Make: Magazine ( Makezine.com )



오라일리(발음 맞나요???) 출판사에서 만든 DIY 자작 전문 잡지 정도 되는 녀석인데요, 그냥 잡지가 아니고 무크지라고 부르나 봅니다. 즉, 정기간행물이아니고, 분기별로 좀더 단행본스러운 완성도를 갖춘형태로 출판되는 단행본+잡지 혼성출판물입니다.
매달 시간에 맞쳐 뚝딱 찍어내고 출판후 1개월후면 과월호라는 무서운 이름을 뒤집어 쓰는 잡지보다는 좀더 주제가 있는 컨텐츠를 담을 수 있으며, 잡지의 1개월이라는 유효기간으로부터도 자유로울 수 있는 형태의 저작물입니다.
오라일리는 한국에선 한빛미디어에서 출간된 많은 번역서들로 알려진 출판사이며, 저도 그럭저럭 오라일리 동물책들을 몇권 키우고 있을정도니 꽤 영향력이 있는 미디어사인것 같습니다. 

실은 저도 아직 잡지 구경은 못해봤지만, 사진 몇장만 봐도  딱~ 마음에 드는걸 봐서는 저와 여러분들께도 꽤 필요한 영양분같은 저작물이 아닐까 생각되네요.  먹고나면 든든한 영양소같아 보입니다. 헌데, 영문잡지란게 아무래도 친해지기 쉽지 않습니다.  서점에 가보면, 영어로된 더불어 몸값 비싼 보기좋은 물건으로 빤짝빤짝 투명비닐에 꼭꼭 감싸여있는 고귀한 녀석들인지라 그냥 무시해버리곤 한답니다. 메니아라도 되면 모를까,,  전 손이 안가네요

어쨌든 좋은소식인가요?   한빛미디어에서 아마도 이 잡지를 한국어판으로 출간할듯한 조짐을 보이고 있습니다.
몇 달전엔 구인광고를 내시더니,  12월24일엔 makezine.co.kr 도메인을 등록하셨네요
지금은 방문해도 아무것도 없는데요, 아마도 몇 달 내로 뜨지 않을까???  예상을 해봅니다.

기사제목으로 한다면, 

Make Magazine. 한국어판 출시임박???  정도 될까요 ^^

뉴스에도 안나온 정보를 정황자료를 바탕으로 미리 예상하고나니  꽤 흥미진진해지네요

부디 나오게 되면,  합리적인 가격, 오리지날을 상회하는 퀄리티(너무 기대가 큰가요? )
그리고 무엇보다도 한국실정에 맡는 컨텐츠 보강이 꼭 이뤄졌으면 하는 생각이 듭니다.

혹시 Make 잡지도 previewer 같은걸 모집한다면, 저도 꼭 참여해보고 싶네요.

이미 비슷한? 주제를 갖는 고전적인 잡지들이 있지만, 아직도 많이 부족하다는 생각이 듭니다.
부디 단순히  "한국어번역본+한국어광고" 잡지가 아닌, 진정한 한국의 Maker들을 위한 Makezine이 탄생하길 기대해봅니다.

아니면,,,  누군가 만들어야겠죠  여러분 or 제가?


무크지:
잡지를 뜻하는 매거진(Magazine)과 단행본을 뜻하는 북(book)이 결합된 합성어로, 잡지와 단행본의 성격을 가진 부정기적인 간행물을 지칭하는 용어. 1971년 런던에서 열린 국제 잡지 협회의 제 18차 회의에서 제출된 보고서에서 처음 사용되었으며 미국에서는 매거북(Magabook), 부커진(bookazine)이라고도 부른단다. (내용출처)


+ Recent posts