오픈소스 IOSignal과 리모컨앱으로 IoT 직접 만들어보세요
안녕하세요
IoT 아두이노 관심있는분들은 꼭 체험해보세요~
IoT리모컨 앱
오픈소스 IOSignal 아두이노, JS 라이브러리
오픈소스 IOSignal과 리모컨앱으로 IoT 직접 만들어보세요
안녕하세요
IoT 아두이노 관심있는분들은 꼭 체험해보세요~
IoT리모컨 앱
오픈소스 IOSignal 아두이노, JS 라이브러리
아트로봇에서 판매중인 GT-511C1 제품을 아두이노 (UNO , Mega2560 or ADK) 보드에 연결하여 테스트 작동시키는 방법과 소스코드를 소개드립니다.
준비물 클릭하시면 제품 판매처 링크가 뜹니다.
아두이노 UNO 또는 Mega 2560 (or ADK) 보드
지문인식기(GT-511C1)
지문인식기 소켓 케이블 (4가닥 묶음, 아트로봇 구매시 함께 제공)
점퍼와이어 4가닥
브레드보드 (크기무관, 케이블을 직접 납땜 등의 방법으로 연결 하실경우 불필요)
연결방법
a. Mega 2560 보드나 ADK 보드를 사용하는 경우
D19 (시리얼1 RX) -> 지문인식기의 Tx핀 (1번선), 소켓위에 세모표시가 보이는곳이 1번핀임
D18 (시리얼1 TX) -> 지문인식기의 Rx핀 (2번선)
GND -> 지문인식기의 GND핀 (3번선)
5V -> 지문인식기의 전원핀 (4번선)
Mega 시리즈는 시리얼포트가 여러개여서 PC와 연결시 Serial 을, 지문인식기와의 연결은 Serial1 을 사용합니다.
b. UNO보드의 경우
D2 (swRX) -> 지문인식기의 Tx핀 (1번선), 소켓위에 세모표시가 보이는곳이 1번핀임
D3 (swTX) -> 지문인식기의 Rx핀 (2번선)
GND -> 지문인식기의 GND핀 (3번선)
5V -> 지문인식기의 전원핀 (4번선)
UNO 보드의 경우 시리얼포트가 하나 뿐(D0,D1)이며, PC와의 시리얼통신(모니터링용)용으로 사용시 다른 시리얼통신기기 연결이 불가하므로, SoftwareSerial 을 사용하여 임의의 미사용되는 핀(여기서는 D2, D3을 사용하기로함)을 시리얼통신용도로 설정하여 사용하게됩니다.
예제소스코드
a. Mega 2560 or ADK 보드는 아래의 사이트에서 다운로드하여 사용하시면됩니다.
메가 시리즈용 소스코드: https://github.com/mlaws/GT-511C1_Mega
b. UNO 보드의 경우, 위 소스코드를 UNO 보드용으로 수정한 아래에 첨부된 파일을 사용하시면됩니다.
모니터창 열고 명령 전송하여 작동 테스트
위 예제소스를 아두이노 SW 에서 컴파일 및 업로딩 합니다.
시리얼 모니터 창을 엽니다. (다른 시리얼 터미널 프로그램을 사용하셔도 됩니다.)
모니터창 하단에 있는 전송 모드설정을 "No line ending"으로 선택합니다.
명령의 종류와 기능은 아래의 페이지에 안내되어 있습니다.
https://github.com/mlaws/GT-511C1_Mega
가령 Open 명령은 모니터창 상단 입력칸에 O0 (알파벳 '오'와 숫자 '영')를 치고 엔터 또는 send 를 눌러주시면 전송됩니다.
명령이 전송될때 마다 특정 값이 되돌아오게 됩니다.
가장 눈에 띄는 피드백을 할 수 있는 명령은 지문인식기의 인식창에 내장된 Blue LED를 켜고 끄는 명령입니다.
L1 을 입력하면 파란색 LED 가 켜지게 됩니다. 멋져 보이네요 ^^.
L0 을 입력하면 LED가 꺼집니다.
아래에 첨부된 사진들을 보시면 인식창에 불이 켜질때와 꺼질때의 모습을 확인 가능하십니다.
"No line ending" 설정을 안하면 명령 인식이 잘 안될 수 있으므로 꼭 정확히 설정해주시기 바랍니다.
LED 제어까지 되셨다면 성공입니다.
데이타 시트와 예제소스를 참고하셔서 지원되는 명령들을 활용하여 자신의 용도에 맞게 소스코드를 변경하여 활용하시면됩니다.
Mega ADK 보드로 연결한 경우 (Mega 2560 보드도 동일)
UNO 보드에 연결한 상태
UNO 보드에 연결한 상태 ( L1 명령으로 인식기 내부 Blue LED 가 켜진 상태)
지문인식기 PC 연결방법 안내 (0) | 2014.04.16 |
---|---|
다정하게 손 꼭 잡으면 켜지는 러브러브 스위치 - 아두이노 응용편 (0) | 2012.04.17 |
IR 적외선 무선통신 기초회로 및 로봇 원격 제어하기 실습 (18) | 2011.07.26 |
피에조 센서로 LED 불켜기 (Piezo element LED lighting) (4) | 2011.06.09 |
아두이노(Arduino)에 거리센서 연결하여 시리얼통신으로 PC에 전달하는 예제 (1) | 2010.11.08 |
아트로봇에서 판매중인 지문인식기( 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 ) 보드에 곧바로 연결하는 방법을 소개한 아래의 튜토리얼 자료도 참고하시기 바랍니다.
지문인식기 아두이노에 연결하여 테스트 작동하기 (3) | 2014.04.17 |
---|---|
다정하게 손 꼭 잡으면 켜지는 러브러브 스위치 - 아두이노 응용편 (0) | 2012.04.17 |
IR 적외선 무선통신 기초회로 및 로봇 원격 제어하기 실습 (18) | 2011.07.26 |
피에조 센서로 LED 불켜기 (Piezo element LED lighting) (4) | 2011.06.09 |
아두이노(Arduino)에 거리센서 연결하여 시리얼통신으로 PC에 전달하는 예제 (1) | 2010.11.08 |
사용하기 쉽고 응용처가 많은 NeoPixel(이하 RGB 칼라픽셀로 칭함) 제품의 사용법을 간단히 정리해보겠습니다. 이미 상점 간판을 돋보이는 용도로 RGB LED가 많이 사용되고 있습니다만, 많은 경우 단색이거나 모든 LED가 하나의 색상으로 켜지는 제품이 대부분입니다. 여기서 안내드리는 칼라픽셀 제품들은 RGB LED 하나당 전용 드라이버칩이 하나씩 내장되어 있고, 여러개의 LED모듈이 하나의 신호선을 통해 직렬로 연결되어 있어서 하나의 데이터 신호선으로 수십개 이상의 칼라픽셀을 개별 색상 제어할 수 있는 제품입니다.
이미 제조사에서 매우 잘 정리해 놓은 튜토리얼 페이지가 있습니다만 내용이 너무 많거나 영어 자료가 익숙하지 않으신 분들은 본 요약 안내글을 먼저 보시고 제조사 튜토리얼을 참고하시면 도움이 될것 같습니다.
현재 이글을 통해 소개중인 제품은 30개 모듈이 스트립형으로 연결된 제품입니다.
주요 재료
아두이노 UNO, USB케이블
전선 4가닥(조금 두꺼운 단선 또는 점퍼와이어 가능, 단선으로 된 랜케이블도 가능)
전원커넥터 스크류타입 (또는 기본형 , 브레드보드형 등)
정전압 아답터 5V 2A 형
RGB 칼라픽셀( NeoPixel 30 RGB Strip형)
프로그래밍
1. 라이브러리와 예제소스를 다운로드합니다. (제조사 튜토리얼 해당 페이지에서)
http://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library 페이지 에서 아래 링크 다운로드
2. 압축파일을 해제 및 폴더명 변경
압축해제된 폴더중 *.cpp *.h 파일이 포함된 폴더의 폴더명을 Adafruit_NeoPixel 로 변경합니다.
3. 라이브러리 설치
최근 아두이노 1.0.5 프로그램에서는 라이브러리 복사 과정을 대신해주는 기능이 지원되므로 아래의 메뉴를 선택하여 위 폴더를 선택해주면 라이브러리가 설치됩니다.
메뉴> 스케치 > 라이브러리 가져오기 > Add Library… 선택후 해당 폴더 선택
참고사항. 구 버전 아두이노 SW 에서는 위 폴더를 아두이노 라이브러리 폴더에 직접 복사해야합니다. (구 버전을 사용하시는 분들은 라이브러리 설치 관련 자료를 참고하시기 바랍니다.)
4. 아두이노 SW를 종료후 다시 실행합니다.
5. 라입러리 및 예제소스 설치 확인
라이브러리가 정상적으로 설치된 경우,
메뉴 > 파일 > 예제 리스트를 살펴보면 Adafruit_NeoPixel 폴더가 보입니다.
관련 예제가 두개 있는데 strandtest 예제를 선택하시면 됩니다.
6. 소스 수정.
제품종류나 칼라픽셀의 개수에 따라 NeoPixel 선언부에 설정되는 값이 변경되어야합니다.
Adafruit_NeoPixel strip = Adafruit_NeoPixel(30, PIN, NEO_GRB + NEO_KHZ800);
우리가 사용중인 제품은 픽셀 개수만 변경해주면 됩니다. 첫번째 인수가 픽셀의 개수이며 60으로 되어있는 값을 30으로 변경하기만 하면 됩니다. (주석을 보면 어떤 내용인지 확인 가능)
7.아두이노 보드 종류와 COM번호 설정후 업로드한다.
참고로 데이타 전송용 핀번호는 6번으로 설정되어 있습니다. 이 값은 소스 상단에 있는 define 부분에 정의되어 있으며 필요시 다른 핀번호로 변경 가능합니다.
참고사항. 프로그램 업로딩은 항상 제품을 결합하기 전에 하는 습관을 갖기 바랍니다. 운이 나쁘면 기존에 어떤 프로그램이 들어있는지에 따라 아두이노와 부품에 손상을 가져올 가능성이 있습니다.
이제 회로를 연결합니다.
회로 연결은 매우 간단합니다. 아두이노 보드에 GND와 D6 핀 두개만 연결되면 됩니다.
하지만 많은 분들이 실수 하시는 부분이 있으니 아래 사항을 꼭 주의 하시기 바랍니다.
1. 제품을 잘 보시면 화살표가 있습니다. 전선 결합은 꼭 입력측에 해주셔야합니다. 즉, 화살의 꼬리측에 있는 GND, DIN, +5V 핀에 전선을 연결하여 아두이노측에 연결해주셔야합니다. 종종 사용중에 선을 변경하시다가 화살촉 부분에 연결하시게 되면 작동이 되지않습니다.
2. 아두이노상의 GND와 외부전원의 GND 둘 다 본 제품의 GND에 결합되어야 합니다. 외부전원을 사용하는경우 GND 공통 접지를 잊으셔서 작동이 안되는 경우가 많습니다.
3. 전원은 pixel 30개를 사용하는 경우 5V 2A 정전압 아답터 전원 사용을 권장합니다. 전압은 꼭 정전압 5V여야하고, 암페어(전류)규격은 2A 이상이면 됩니다. 3A , 5A 제품을 사용하실 수 있습니다. 또한 픽셀을 3개정도 만 잘라서 사용한다면 전류 소모가 작으므로 아두이도 5V 핀으로 부터 전원을 공급받아도 무관합니다. 픽셀이 많아질 수록 전력소모가 크며 적절한 전원을 공급하지 않으면 비정상 작동되거나 고장의 원인이 될 수 있습니다.
Rainbowduino와 Rainbow Cube Kit 4x4x4 연계 프로그래밍방법 (2) | 2013.03.05 |
---|---|
DIY 자작 전자 손목 시계 (0) | 2013.01.27 |
기상측정 트위터 로봇 - 3번째 이야기 - 실외 설치편 (1) | 2012.02.02 |
RGB LED 체인 - 20개 묶음형 사용법 안내 (4) | 2012.02.01 |
아두이노 우노UNO R3 소개 (ARDUINO UNO R3) (0) | 2011.12.23 |
레이보우두이노 Rainbowduino 와 Rainbow Cube Kit( 4x4x4) 연동 작동하기
1. 아두이노 라이브러리 설치하기
아두이노 IDE 개발환경인 스케치 버전(1.0이상 또는 구버전)에 따라 다음 두개중 하나를 다운로드 후 설치합니다.
(참고사항. 사용중인 아두이노 스케치의 소스파일명 확장자가 *.ino 이면 Arduino 1.0이상 이며, *.pde 이면 구버전의 아두이노 스케치 입니다. 즉, Arduino 023 사용)
라이브러리 파일 설치위치:
다운로드 후 압축을 해제하면 안쪽에 Rainbowduino 라는 폴더가 있습니다. 이 폴더 통째로 아두이노가 설치된 디렉토리에 있는 libraries 디렉토리에 복사합니다. 즉, arduinoDir\libraries\Rainbowduino 폴더가 있고 이안에는 Rainbowduino.cpp Rainbowduino.h 파일 등이 보입니다.
2. Rainbowduino에 내장된 FTDI USB to Serial 드라이버 설치하여 COM 포트 인식시키기
Rainbowduino를 PC와 USB케이블로 연결후 다른 모든 부품(RainbowCube Kit 등)을 제거합니다.
PC에서 자동 인식되며 필요한경우 적절한 드라이버를 선택해줍니다. Arduino 스케치 폴더에 있는 drivers 폴더에 있는 파일로 인식되지 않는경우엔 Windows 드라이버 자동찾기를 선택하하여 재설치해주면 update후 자동 설치됩니다.
3. 아두이노 스케치 환경 열기
( library 설치후엔 꼭 다시 실행해줘야합니다.)
Rainbowduno용 라이브러리가 정상 설치되었다면 파일 > 예제 메뉴 선택후 Rainbowduino 라는 메뉴가 보입니다.
이를 선택하면 아래와 같은 예제들이 기본 등록된것을 알수있습니다.
본 예제 파일들이 보이지 않는경우 라이브러리 설치가 제대로 되지 않은것이니 재 확인 바랍니다.
Cube1
Cube2
Cube3
..... 이하 여러개
PlasmaCube 를 선택해 봅니다.
4. 아두이노 보드 종류 및 COM 번호 선택하기
도구>시리얼 포트
COM 번호는 과정 2에서 확인된 COM번호를 선택하면됩니다.(제어창 장치관리자 COM 장치리스트에서 확인가능)
도구>보드: 아두이노 보드 종류는 Arduino Pro or Pro mini 5V 16MHz, w/ATMega328 를 선택하면 됩니다.
5. 컴파일 및 업로드
컴파일시 오류가 없다면 업로드해봅니다.
6. USB케이블을 제거후 RainbowcubeKit 과 Rainbowduino를 연결해줍니다.
RainbowCubeKit 에 포함된 전선으로 Vin / Gnd 라인(볼트로고정)을 Rainbowduino 상의 Vcc/ Gnd 라인(볼트로고정)에 공통 연결해줍니다.
RainbowCubeKit 에 7~9V 최소 1A 이상 정전압 전원을 연결해줍니다.
여러 패턴으로 작동되는것을 확인 할 수 있습니다.
주의. LED 가 64개 작동되는 킷이므로 소형 9V 전지나 USB케이블을 통한 전원으로는 정상 작동이 보장되지 않으며 작동오류나 PC 파손등의 원인이 될 수 있으니 꼭 별도의 정전압 아답터 전원을 사용하시기 바랍니다.
관련 상품 리스트
Rainbowduino V3.0
RainbowCubeKit 납땜 자작형
RainbowCubeKit 완성형( Rainbowduino, 아크릴 케이스 및 전원 포함)
9V 1A 정전압 아답터
mini USB 케이블(Rainbowduino 와 PC연결용)
아두이노로 RGB 칼라픽셀(NeoPixel) 제어하기 사용법 안내 (6) | 2014.01.18 |
---|---|
DIY 자작 전자 손목 시계 (0) | 2013.01.27 |
기상측정 트위터 로봇 - 3번째 이야기 - 실외 설치편 (1) | 2012.02.02 |
RGB LED 체인 - 20개 묶음형 사용법 안내 (4) | 2012.02.01 |
아두이노 우노UNO R3 소개 (ARDUINO UNO R3) (0) | 2011.12.23 |
http://www.spikenzielabs.com/SpikenzieLabs/SolderTime_2.html
제품소개
아두이노 UNO와 동일한 MCU가 내장된 아두이노 호환 자작 전자손목시계킷 입니다.
이미 프로그램이 업로딩 되어 납땜 및 결합만 하여도 곧바로 시계로 작동이 가능하며,
능력이 되면 직접 원하는 소스코드를 업로딩하여 자신만의 방식으로 동작하는 전자시계를 만들 수 도 있습니다.
(안내.프로그램 업로딩을 위해서는 FTDI USB to 시리얼 변환기(별매)가 따로 필요합니다.)
제작 난이도가 높은 제품은 아니지만 납땜에 어느정도 익숙한 사용자에게 권장합니다.
납땜점 및 PCB가 미세하므로 (미숙련으로 인해) 반복하여 납땜할 경우 PCB가 손상될수있습니다.,
또한 크리스탈 부품은 가열 지속시 부품 파손될 수 있으므로 이점 양지하시기 바랍니다.
도구: 니퍼, 납, 인두기, 인두팁 클리너, 종이스티커나 납땜 보조 손잡이
제작법
제작시간: 납땜에 어려움이 없는경우 약 1시간이내
팁
납땜 제작시
.버튼과 크리스탈은 접착면에서 잡아 뽑기보다는 니퍼로 커팅할것을 권장합니다.
.5X7 LED 세그먼트의 결합시 옆면에 라벨문자를 표식으로하여 제작안내 사진 방향으로 결합합니다.
마무리시
.플라스틱판은 보호비닐을 제거하고 사용합니다.
.circuit area등의 플라스틱판은 방향이 있으므로 제작안내에 포함되 그림을 자세히 보시고 결합하시기 바랍니다.
(크리스탈 부품 위치 고려 등)
.플라스틱판은 4장 또는 5장일수 있습니다.
( circuit area 판의 경우 얇은판 2개 일수도, 다른경우 두꺼운판 1개일수도 있음 )
초기 작동 테스트
전지를 넣으면 잠시동안 12:00 시간 표시가 되고 꺼집니다.
우측버튼을 누르면 현재시간을 잠시 보여주고 꺼집니다.
모든 LED 점이 정상적으로 작동되는지 테스트하려면
좌측버튼을 누른상태로 건전지를 삽입하면 촤측부터 한줄씩 모든 LED점을 순차점등 테스트 모드로 진입합니다.
시계 작동법
아래의 모드 및 세팅 상태도를 보고 세팅할 수 있습니다.
http://www.spikenzielabs.com/Downloadables/ST2IntFlow.jpg
시간설정, 알람설정 , 스톱워치(초단위 측정), 메시지 , 사인파 에니메이션(소리 점검)
알람이 설정되면 촤측 하단에 점이 추가됨.
(작성중인 문서입니다.)
아두이노로 RGB 칼라픽셀(NeoPixel) 제어하기 사용법 안내 (6) | 2014.01.18 |
---|---|
Rainbowduino와 Rainbow Cube Kit 4x4x4 연계 프로그래밍방법 (2) | 2013.03.05 |
기상측정 트위터 로봇 - 3번째 이야기 - 실외 설치편 (1) | 2012.02.02 |
RGB LED 체인 - 20개 묶음형 사용법 안내 (4) | 2012.02.01 |
아두이노 우노UNO R3 소개 (ARDUINO UNO R3) (0) | 2011.12.23 |
킹!왕!짱! 기다리고 기다렸던
많은 분들이 안드로이드기기의 무선통신 기능( Bluetooth, Wifi) 을 활용하여 원격 제어되는 자동차나 탱크등을 갖고 싶어 하시는것 같습니다. 이중 소수의 분들이 직접 제작하는경우를 봤습니다만 제작 비용도 만만치 않고 소요시간과 제작을 위해 알아야할 사항도 제법 많은것 같습니다. 특히 하드웨어 개발보다는 소프트웨어 개발에 집중하려는 개발자분들은 무선으로 제어되는 적당한 하드웨어 플랫폼을 찾고 계실겁니다. 저도 마찬가지로 이런 기능을 하는 저렴한 장비를 찾아왔는데요 오늘 소개해드릴 제품이 바로 딱! 그 제품인것 같습니다.
해킹 권장 플랫폼
안을 들여다 보면 ATMega칩을 주제어칩으로 장착하고 있고, 이곳에 모터드라이버 회로와 블루투스(Bluetooth) 모뎀이 장착되어 있는것이 보입니다. 제어보드에는 MCU를 재프로그래밍하려는 해커? 분들을 위해 ISP핀홀도 마련되어 있어서 내장된 프로그램을 직접 원하는데로 바꿔보실 수 있습니다.(차량용 펌웨어 소스코드와 무선 명령어 코드가 공개되어 있습니다.) 또한 전용 안드로이드앱(apk파일)을 동봉된 CDROM에 넣어 주므로 프로그래밍을 전혀 모르시는 분들도 파일메니져를 이용하여 apk 파일을 설치하기만 하면 재밌게 갖고 놀 수 있습니다.
All in One
필요한 액세서리도 모두 포함되어있어서 작동을위해 따로 준비해야할 것은 안드로이드폰(또는 스마트패드) 뿐입니다.
LiPo배터리가 내장되어 있고, 충전기능이 내장된 USB케이블이 제공되므로 PC에 꽂아서 충전해 주시면 수십분간 주행이 가능합니다. Wow~
첨부된 동영상을 참고하시기 바랍니다.
EL Wire(발광선) 으로 줄넘기 만들기 (6) | 2011.11.18 |
---|---|
물라스틱(물로 녹여 사용하는 DIY 프로토타입 제작용 물 플라스틱) (3) | 2011.04.14 |
첨단조명 EL Wire(발광선) 12V 인버터로 구동 테스트 (10) | 2011.03.30 |
전도성실(Conductive Thread) 응용실험1 - 모터구동하기 (0) | 2011.03.25 |
Make: Makezine O'Reilly Media의 DIY자작 전문잡지 (0) | 2010.12.28 |
참고로, 5V 전원을 사용하므로 손으로 잡아도 감전 될 걱정은 안하셔도 됩니다.
지문인식기 아두이노에 연결하여 테스트 작동하기 (3) | 2014.04.17 |
---|---|
지문인식기 PC 연결방법 안내 (0) | 2014.04.16 |
IR 적외선 무선통신 기초회로 및 로봇 원격 제어하기 실습 (18) | 2011.07.26 |
피에조 센서로 LED 불켜기 (Piezo element LED lighting) (4) | 2011.06.09 |
아두이노(Arduino)에 거리센서 연결하여 시리얼통신으로 PC에 전달하는 예제 (1) | 2010.11.08 |
본 글을 통해 최근 동영상을 통해 알려드렸던 DIY 전자악기 만드는 법을 안내해 드리고자 합니다.
하드웨어 제작은 반제품의 쉴드를 아두이노에 결합하고 스위치를 몇개 장착하는게 전부이므로 매우 쉽습니다. 하지만 프로그래밍을 통해 제어를 하려면 MIDI 프로토콜을 이해해야 하는데 인터넷에 공개된 관련 글을 봐도 곧바로 이해하고 활용하기 쉽지 않았습니다. 결국, 정확한 신호 파악을위해 직접 마스터 키보드를 구입하여;; 건반을 누를때, 뗄때, 악기가 변경될때, 기타 콘트롤시 어떤 MIDI 신호가 출력되는지 분석을 한 후에야 대충 이해가 가더군요,, 하지만 많은 분들이 그럴 여유가 없으시죠;;;
우선은 이미 제조사에서 일련의 내장된 악기음을 순서대로 반복해주는 정도의 예제가 있으므로 참고가 되실 겁니다.
하지만, 위 소스만으로는 응용이 어려우신 분들도 많으시므로 실제 스위치(건반대응)로 연결하여 기초적인 악기를 구현한 예제(연결방법 + 소스코드)를 소개드리오니 참고하시기 바랍니다. 여러분의 좀더 멋진 DIY 악기 개발에 작으나마 도움이 되었으면 합니다
추가사항. 현재 화면상의 소스코드는 Sketch 0022 버전에서 테스트된 소스입니다. 최신 아두이노 개발환경(Arduino 1.0)용 소스코드도 첨부파일에 링크되어있으니 참고하시기 바랍니다. 첨부된 파일2개는 동일한 기능 두가지 버전입니다.)
. -로보밥-
준비물
아두이노 프로그래밍 준비작업
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 소스)
후기
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/
MIDI 악기 쉴드 응용3 - PC MIDI SW 출력신호 연동 사운드모듈로 활용하기 (10) | 2012.01.07 |
---|---|
MIDI 악기 쉴드 응용2 - 키보드 연주용 사운드모듈로 활용하기 (20) | 2012.01.07 |
DIY 전자악기 만들기 - 아두이노 Arduino MIDI 악기 쉴드 응용1 (4) | 2012.01.02 |
MP3 이벤트 재생 보드 소개 (MP3 Trigger ) (0) | 2011.10.26 |
아두이노 뮤직쉴드( Arduino Music Shield - mp3, wma,wav, midi) (7) | 2011.09.29 |
수개월전 실내 테스트까지만 해왔던 기상측정 트위터 로봇을 중요한 프로젝트에 활용하신다는 분께 양도 후 새로 구하지 못해서 기다려오다 최근 다시 입수하게되었습니다. ^^. 드디어 기다려왔던 실외 설치 후 실제 운영테스트를 해보게되었습니다. 눈도 오고 꽁꽁 얼어붙는 날씨인데도 아직 멀쩡히 작동하고 있습니다. 기존 스토리는 관련글 링크를 참고하시기 바랍니다.
이번엔 실외 설치를 위해 이더넷하우징 케이스에 모든 기능을 넣어버리는 시도를 하였습니다. 아두이노 보드 + 이더넷 쉴드를 이더넷일체형 아두이노보드로 변경한데 이어 관련 부품을 작은 케이스안에 넣고 UTP 케이블 단자만으로 결합이 되도록 구성하였습니다. 어떻게 하는지는 사진을 보시면 참고가 되실 것 같습니다.
우선은 관련 동영상과 이미지를 올려드리고, 상세한 부분은 조금씩 추가하도록 하겠습니다.
실외 설치 후 작동상태와 트위터봇의 외부 및 내부 이미지
관련글 링크
1.기상측정 기구 + 아두이노로 기상대 만들어요 (Arduino + Weather Sensor Assembly )
2.트위터(Twitter)에 자동 포스팅하는 기상관측 로봇
3.기상측정 트위터 로봇 - 실외 설치편 (현재 글)
Rainbowduino와 Rainbow Cube Kit 4x4x4 연계 프로그래밍방법 (2) | 2013.03.05 |
---|---|
DIY 자작 전자 손목 시계 (0) | 2013.01.27 |
RGB LED 체인 - 20개 묶음형 사용법 안내 (4) | 2012.02.01 |
아두이노 우노UNO R3 소개 (ARDUINO UNO R3) (0) | 2011.12.23 |
JPEG 시리얼 통신 카메라 + PC와 연결하기 (24) | 2011.10.16 |