산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

휴대용 정전식 터치 피아노

구성품 및 소모품

Arduino용 ProtoStax 인클로저
Arduino용 ProtoStax - 스택형, 모듈식 인클로저
× 1
Adafruit 12 x Arduino용 정전식 터치 실드 - MPR121
× 1
Adafruit 피에조 부저 - PS1240
× 1
Arduino UNO
× 1
전도성 접착제가 있는 구리 포일 테이프
× 1
후크업 와이어 키트, 22AWG
× 1

이 프로젝트 정보

이 프로젝트에서는

로 휴대용 정전식 터치 피아노를 만드는 방법을 설명합니다. <울>
  • 아두이노,
  • MPR121을 사용한 Arduino용 정전식 터치 실드,
  • 피에조 부저,
  • 전도성 접착제가 있는 동박 테이프(피아노 건반 모양으로 절단),
  • 상단 표면에 정전식 터치 키가 붙어 있는 투명한 아크릴 인클로저(Arduino용 ProtoStax)에 모두 들어 있습니다. 이렇게 하면 새로운 곡을 연주하고 잼하고 코딩할 수 있는 멋진 소형 피아노가 됩니다!

    정전식 터치 감지를 위해 Adafruit_MPR121 라이브러리와 결합된 MPR121을 사용하는 Arduino용 Adafruit의 12 x 정전식 터치 실드를 사용하여 최대 12개의 서로 다른 전도성 표면에 대한 터치를 쉽게 감지하고 응답할 수 있습니다.

    잠깐 기다려요! 한 옥타브에는 12개의 반음이 있습니다 - C, C#, D, D#, E, E#, F, G, G#, A, A#, B! 완벽한! 음, MPR121이 13개의 입력을 처리했다면 좋았을 것입니다. 더 높은 옥타브의 C에서 C로 이동할 수 있게 했을 것입니다. 하지만 아직 곡이 많이 남아 있습니다! (또한 옥타브 범위를 확장하여 이 프로젝트를 더 발전시킬 수 있는 방법에 대한 제안도 아래에 제공합니다.)

    또한 자신만의 터치 시퀀스("비밀 키" 또는 키 조합)로 프로그래밍하여 원하는 만큼 옥타브를 포함할 수 있는 임의의 곡을 연주할 수도 있습니다(음표를 들을 수 있는 귀의 힘에 의해서만 제한됨). 그것을 재생하는 피에조/스피커!).

    출력을 위해 Arduino의 톤 라이브러리를 사용하여 Piezo Buzzer를 통해 사운드를 재생합니다. 스피커를 사용할 수도 있습니다. 저항을 사용하여 Arduino 핀이 제공할 수 있는 전류로 전류를 제한하는 것을 기억하십시오!

    피아노 건반에는 전도성 접착제가 있는 동박 테이프를 사용합니다. 쉴드에 연결된 와이어에 테이프를 붙일 것이기 때문에 전도성 접착제로 얻는 것이 중요합니다.

    마지막으로 인클로저가 나옵니다. 여러분 중 일부는 제가 ProtoStax라는 새로운 쌓을 수 있는 모듈식 인클로저 시스템을 만들었다는 것을 알고 있을 것입니다. 긁어야 하는 개인적인 가려움이었습니다. 여러 단계의 프로토타이핑을 지원하고, 시작할 때 보호 및 개방된 액세스를 제공하고, 나중에 측벽과 상단을 추가할 수 있지만 쌓을 수 있는 기능도 있는 인클로저를 원했습니다. 여러 장치를 나란히 또는 다른 장치 위에 하나씩 배치하여 프로토타이핑 요구 사항과 다른 보드 및 구성 요소 추가에 따라 확장할 수 있습니다.

    이 예에서는 Arduino용 투명 아크릴 인클로저인 Arduino용 ProtoStax를 사용합니다. 이 제품은 Uno/Leonardo 풋프린트와 더 큰 Mega/Due 풋프린트 모두에 맞습니다. 이 제품은 또한 쌓을 수 있고 모듈식이며 둘을 위한 공간이 편안합니다. Shields(일부 사소한 수정 포함). 투명하고 견고하며 고무 발이 있어 약간 높여 테이블 표면을 보호합니다. 인클로저의 상단 표면은 터치 피아노의 키패드 역할도 합니다. 여기에서 전도성 구리 호일 테이프를 붙일 수 있습니다! 결국, 당신은 쉽게 휴대하고 전시하고 따라할 수 있는 멋진 작은 터치 피아노를 갖게 될 것입니다! 😊

    자, 시작해 볼까요? 😊

    1단계 - 인클로저 베이스 플레이트에 Arduino 장착

    먼저 Arduino(이 예에서는 Uno)를 인클로저의 베이스 플레이트에 장착해 보겠습니다. 이것은 Arduino를 구성 및 설정하고 그것을 가지고 놀기 위해 그것에 대한 완전한 공개 액세스를 제공하면서 보호를 제공합니다. 닫을 준비가 되면 측벽과 상판을 쉽게 추가하고 나사로 모든 ​​것을 고정하면 됩니다.

    Arduino를 베이스 플레이트에 장착하고 다리와 기타 하드웨어를 추가하여 플랫폼 구성에서 인클로저를 준비합니다. . 슬라이드쇼에서 아래 단계를 참조하십시오. 각 이미지의 캡션에는 번호가 매겨져 있으며 각 단계에 대한 추가 설명을 제공합니다.

    다음은 애니메이션 GIF의 모든 단계입니다.

    2단계 - Arduino용 MPR121 쉴드 준비

    저는 22AWG 연선을 12개 길이로 자릅니다. 그런 다음 이들을 MPR121 Shield에 납땜했습니다. Adafruit Shield에는 악어 클립으로 잡기 위한 12개의 입력 각각에 대해 2개의 큰 구멍이 있습니다. 이 두 구멍 사이에는 22AWG 와이어를 수용할 수 있는 더 작은 일반 구멍이 있습니다.

    MPR121 Shield는 또한 헤더 옆에 있는 구멍을 통해 모든 핀을 노출합니다. 또한 한 다리는 핀 12에 삽입되고 다른 다리는 GND에 삽입된 Piezo Buzzer PS1240에 납땜했습니다.

    나는 각 전선의 다른 쪽 (자유로운) 끝을 벗겨 냈습니다. 나중에 조립할 때 순서를 유지할 수 있도록 12개의 입력에 대해 6가지 색상의 반복 패턴을 사용하여 색상 코드를 지정했습니다.

    3단계 - 인클로저 준비

    다음으로 인클로저를 준비해야 합니다. 베이스 플레이트에 장착된 Arduino에 쉴드를 삽입하는 것으로 시작합니다. 그런 다음 상부 가새 요소와 측벽을 벽 슬롯에 삽입합니다.

    Arduino 인클로저용 ProtoStax의 스톡 상단을 가져 와서 쉴드 입력에서 와이어를 삽입하기 위해 12개의 구멍을 추가했습니다. 나는 피아노 키 템플릿과 일치하는 구멍을 자르기 위해 레이저 커터를 사용했지만 드릴을 사용하는 것처럼 쉽게 할 수 있습니다(드릴을 하기 전에 아크릴 판에 마스킹 테이프를 사용하십시오). 작은 1/8" 구멍이면 충분합니다.

    그런 다음 쉴드에서 나온 전선을 상판의 구멍에 조심스럽게 삽입합니다. 0번 구멍에서 가장 왼쪽 구멍으로 전선을 삽입하고 점차적으로 번호가 매겨진 전선(쉴드에 번호가 매겨져 있음)을 구멍에 삽입합니다. 왼쪽에서 오른쪽으로. 그런 다음 상단 플레이트 아래에 상단 스페이서를 추가하고 나사 상단을 나사로 조이면 인클로저가 완성됩니다.

    다음으로 금속 부분만 바깥쪽으로 튀어나올 때까지 전선을 밀어 넣습니다.

    그런 다음 템플릿에서 피아노 건반 모양의 전도성 접착제가 있는 구리 호일 롤에서 조각을 잘라냅니다(템플릿은 아래 참조). 그런 다음 구리 호일을 조심스럽게 벗겨내고 인클로저 상단 플레이트의 해당 위치에 붙이고 구멍에서 튀어나온 해당 와이어 위에 구리 테이프를 붙여 넣습니다.

    다음은 피아노 키와 구멍에 대한 템플릿입니다. 이것을 8.5x11 레터 용지에 인쇄할 수 있어야 하며 올바른 크기여야 합니다(문제가 있는 경우 알려주세요!)

    결국 이렇게 생겼습니다. (동박테이프로 더 잘할 수 있었을 텐데, 처음 사용해보는거라 앞으로 잘 다루길 바라요! 😊)

    4단계 - 데모 코드

    먼저 Adafruit_MPR121 라이브러리를 설치해야 합니다. 그 후, 터치 피아노로 창작물을 변환하고 일부 징글을 연주하기 위한 비밀 키 조합을 포함하는 예제 스케치를 컴파일하고 업로드할 수 있습니다.

    <울>
  • C E G B를 눌러 "Twinkle Twinkle Little Stars" 재생
  • C D E F G를 눌러 스케일 업/다운 재생
  • C D A B를 눌러 "오 수잔나!"를 재생합니다.
  • C C# A# B를 눌러 "Frere Jacques/Brother John"을 재생합니다.
  • 또한 곡의 악보에서 선택한 곡을 쉽게 필사할 수 있도록 했습니다.

    코드에 대한 자세한 내용을 읽고 싶다면(그리고 저도 알고 있습니다!) 계속 읽어보세요!

    코드의 주요 부분을 빠르게 살펴보겠습니다. 여기에서 데모 코드를 빠르게 참조할 수 있습니다. - https://github.com/protostax/ProtoStax_CapacitiveTouch_Piano_Demo/blob/master/ProtoStax_CapacitiveTouch_Piano_Demo.ino

    코드는 세 부분으로 나눌 수 있습니다:

    <울>
  • Adafruit_MRP121 라이브러리를 사용하여 MPR121에서 터치 데이터 가져오기.
  • 터치 데이터로 무엇을 할 것인지 결정 - 즉, 피아노처럼 해당 톤을 연주하거나 멀티 터치를 감지한 다음 내장된 톤 라이브러리를 사용하여 비밀 징글을 연주합니다.
  • 자신만의 곡을 추가하는 방법을 포함한 프로그래밍 곡
  • 다음은 코드의 정전식 터치 부분에 대한 간략한 설명입니다. 일반적으로 Adafruit_MPR121 클래스의 개체를 선언합니다. setup()에서 begin() 메서드를 호출하여 초기화하고 cap.touched() 메서드를 사용하여 loop()에서 현재 터치된 패드를 가져올 수 있습니다. 간단합니다!

    Adafruit_MPR121 cap =Adafruit_MPR121();void setup() {... // 기본 주소는 0x5A, 3.3V에 연결하면 0x5B // SDA에 연결하면 0x5C, SCL이면 0x5D if ( !cap.begin(0x5A)) { Serial.println("MPR121을 찾을 수 없습니다. 배선을 확인하시겠습니까?"); 동안 (1); }...}void loop() { // 현재 터치된 패드 가져오기 currtouched =cap.touched();} 

    터치 데이터를 사용하면 해당 톤을 재생하고 버튼을 누르지 않을 때 톤을 중지하여 터치에 응답할 수 있습니다.

     // 이전에 * 닿았고 * 터치되지 않았으면 해당 톤을 재생합니다! if ((currtouched &_BV(i)) &&!(lasttouched &_BV(i)) { // Serial.print("currtouched ="); Serial.print(currtouched); Serial.print(" 마지막 터치 ="); Serial.print(마지막 터치); Serial.print(" "); Serial.print(i); Serial.println("터치됨"); 톤(TONE_PIN, 스케일[i]); } // 터치가 *되었다* 이제 *가 아닌*이고 추가로 아무 버튼도 누르지 않으면 톤이 중지됩니다. // 이렇게 하면 키 위로 손가락을 슬라이드할 때 음 사이를 부드럽게 전환할 수 있습니다. // 이렇게 하면 주어진 음의 지속을 위해 아무 건반을 터치하고 유지함으로써 - 다른 건반을 누르면 해당 건반이 연주되지만 연주는 멈추지 않습니다 // 첫 번째 건반에서 손을 뗄 때까지 - 일종의 피아노의 서스테인 페달! if (!(currtouched &_BV(i)) &&(lasttouched &_BV(i)) &&!currtouched) { //if (!(currtouched &_BV(i)) &&(lasttouched &_BV(i))) { / / Serial.print("커터치 ="); Serial.print(currtouched); Serial.print(" 마지막 터치 ="); Serial.print(마지막 터치); Serial.print(" "); Serial.print(i); Serial.println(" 해제됨"); 노톤(TONE_PIN); } 

    해당 곡을 재생하여 특수 키의 다중 터치를 처리합니다.

     // '비밀' 키 조합을 누르면 곡을 재생합니다! if (currtouched ==2193) { // C E G B playTune(멜로디, MELODY_LENGTH(멜로디), 2); // Twinkle Twinkle Little Star 재생 } else if (currtouched ==181) { // C D E F G playTune(melody2, MELODY_LENGTH(melody2), 48); // 스케일 위아래로 슬라이드 재생 } else if (currtouched ==2565) { // C D A B playTune(melody3, MELODY_LENGTH(melody3), 1); // 오 수잔나를 재생합니다! } else if (currtouched ==3075) { // C C# A# B playTune(melody4, MELODY_LENGTH(melody4), 1); // 프레르 자크 연주 } else {... 

    playTune()은 "음표"의 배열인 주어진 곡을 연주하는 데 사용됩니다.

    void playTune(참고 *m, int mSize, int speedUp) { noTone(TONE_PIN); // 깨끗한 상태로 시작 for (int thisNote =0; thisNote  

    멜로디를 살펴보겠습니다. 음표 배열로 구성되어 있습니다. 각 음표에는 빈도와 지속 시간이 있습니다. =

    typedef struct 참고 { int frequency; 부동 기간; } 메모; // 이 멜로디는 C에서 B까지 옥타브의 모든 음표를 연주하고 C에서 다시 CNote로 멜로디2[] ={ {NOTE_C, NOTE_WHOLE}, {NOTE_CS, NOTE_WHOLE}, {NOTE_D, NOTE_WHOLE}, {NOTE_DS, NOTE_WHOLE} , {NOTE_E, NOTE_WHOLE}, {NOTE_F, NOTE_WHOLE}, {NOTE_FS, NOTE_WHOLE}, {NOTE_G, NOTE_WHOLE}, {NOTE_GS, NOTE_WHOLE}, {NOTE_A, NOTE_WHOLE}, {NOTE_AS, NOTE_WHOLE}, {NOTE_B, NOTE_WHOLE} NOTE_AS, NOTE_WHOLE}, {NOTE_A, NOTE_WHOLE}, {NOTE_GS, NOTE_WHOLE}, {NOTE_G, NOTE_WHOLE}, {NOTE_FS, NOTE_WHOLE}, {NOTE_F, NOTE_WHOLE}, {NOTE_E, NOTE_WHOLE}, {NOTE_DS, NOTE_WHOLE}, {NOTE NOTE_WHOLE}, {NOTE_CS, NOTE_WHOLE}, {NOTE_C, NOTE_WHOLE}}; 

    여기서 #defines in pitches.h 및 noteDurations.h가 유용합니다. 실제 빈도 및 기간 대신 사용할 수 있습니다. 예를 들어 NOTE_C를 사용하여 C 톤을 연주하고 NOTE_WHOLE을 사용하여 전체 음표로 연주합니다(NOTE_HALF, NOTE_QUARTER, NOTE_EIGHTH는 일부 다른 음 길이임). DOTTED() 매크로를 사용하여 DOTTED(NOTE_QUARTER)와 같은 "점으로 구분된" 메모를 지정할 수도 있습니다.

    [참고:점 음표는 길이가 절반의 다른 음만큼 연장된 음표입니다. 예를 들어, 점으로 구분된 반 음표는 전체 음표의 3/4(1/2 음 + 1/2 1/2주). ]

    이를 통해 악보를 가져와 멜로디 배열로 변환할 수 있습니다!

    데모에서 저는 "Twinkle Twinkle Little Star", "Frere Jacques/Brother John" 및 "Oh Susanna!"를 필사했습니다. 그래서 당신은 놀고 싶은 것이 있습니다. (말장난이 없습니까?! 😜) - 이 모든 노래는 한 옥타브 안에 들어 맞습니다. 이것이 제가 고수하려고 했던 우리 키보드의 한계입니다. 물론 비밀곡을 연주할 때는 이 제한에 얽매이지 않고 여러 옥타브를 사용할 수 있습니다. "오 수잔나!" 또한 반음표, 4분음표 및 8분음표와 "점으로 구분된" 4분음표 및 2분음표를 사용하여 조금 더 복잡합니다. 이 방법을 통해 다른 곡을 쉽게 필사하는 방법을 잘 알 수 있기를 바랍니다.

    작동 모습을 볼까요? 😊

    5단계 - 더 나아가기!

    프로젝트를 더욱 발전시키기 위한 몇 가지 아이디어가 있습니다!

    1. 자신만의 징글/노래를 만들고(또는 기존 곡을 필사) 자신만의 "비밀 키"를 할당하여 활성화하십시오!

    2. 두 번째 피에조를 추가하여 2단계 다성음 사운드를 얻으세요! 톤 라이브러리는 Timer2를 사용하여 구형파를 압전 부저로 보내 톤을 재생합니다. Arduino Uno에는 3개의 타이머가 있지만 Timer 0은 특별하고 millis() 및 pwm과 같은 용도로 사용됩니다. 여전히 Timer1이 사용할 수 있습니다. NewTone 라이브러리는 Timer1을 사용하는 톤 라이브러리의 보다 최적화된 재작성입니다. 따라서 예를 들어 하나는 톤을 사용하고 다른 하나는 NewTone을 사용하여 동시에 두 개의 톤을 가질 수 있습니다.

    3. 버튼을 눌러 옥타브를 높거나 낮추는 것과 같은 추가 기능을 추가하려면 추가 버튼을 한두 개 추가합니다. 정전식 터치 키와 함께 이 버튼을 누르면 키보드에서 더 넓은 범위를 사용할 수 있습니다!

    더 생각할 수 있습니까? 아래에 의견을 작성하여 알려주십시오! 😊 궁금하신점도 편하게 문의주세요! 😊

    행복한 만들기! 😊

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    ProtoStax_CapacitiveTouch_Piano_Demo
    Arduino 인클로저용 ProtoStax가 있는 ProtoStax 피아노용 데모, Arduino용 Adafruit 12 x 정전식 터치 실드 - MPR121, Piezo Buzzer 및 Arduino https://github.com/protostax/ProtoStax_CapacitiveTouch_Piano_Demo.git

    맞춤형 부품 및 인클로저

    ProtoStax 정전식 터치 피아노용 피아노 건반을 절단하고 상판에 구멍을 뚫기 위한 템플릿

    회로도


    제조공정

    1. 피아노
    2. 휴대용 화장실
    3. 피아노 연주자
    4. Arduino 스파이봇
    5. FlickMote
    6. 수제 TV B-Gone
    7. 마스터 시계
    8. Arduino 터치 브레이크아웃 게임
    9. Arduino + LED + MIDI 키보드 + MuseScore =피아노 교사
    10. Arduino 또는 ESP8266이 있는 정전 용량 지문 센서