이 프로젝트에서 우리는 Arduino를 사용하여 엔터테인먼트를 구축 할 것입니다. 우리 모두는 임의의 음악을 만들기 위해 테이블이나 펜을 두드리는 습관이 있습니다. 물론 좋은 매너리즘으로 간주되지 않을 수도 있지만, 우리 모두는 적어도 한 번은하는 것을 즐깁니다. 그래서 저는 아두 이노의 톤 재생 기능을 사용하여 다음 단계로 넘어갈 생각을했습니다. 이 프로젝트를 빌드하면 전도체에 손가락을 두드려 톤 을 생성 하고 손바닥에서 피아노를 연주하는 것과 같은 자신 만의 리듬을 만들 수 있습니다. 멋지게 들리니 만들어 보겠습니다.
필요한 구성 요소:
이 프로젝트에 필요한 자료는 아래에 나열되어 있으며 동일하게 고수 할 필요는 없습니다. 개념을 파악하면 자신 만의 방식으로 구축 할 수 있습니다.
- Arduini Pro Mini
- Peizo 스피커
- 플렉스 센서
- 손가락 장갑
- 10K 저항기
- BC547 트랜지스터
- 9V 배터리
회로도 및 설명:
이 Arduino Palm Piano의 회로도 는 아래와 같습니다.
이 프로젝트는 총 4 개의 센서, 즉 2 개의 플렉스 센서와 2 개의 Darlington 쌍이 터치 센서로 작동 합니다. 또한 Flex 센서의 풀다운 저항 역할을하는 10k 값의 두 개의 풀다운 저항 R1 및 R2를 사용했습니다. 여기서 Flex 센서는 손가락이 구부러진 정도에 따라 한 손가락으로 세 가지 다른 톤을 생성하는 데 사용됩니다. 그래서 우리는 두 손가락으로 6 개의 소리를 만들 수 있습니다. Flex 센서에 대해 여기에서 알아보십시오.
달링턴 페어:
진행하기 전에 Darlington이 무엇이며 프로젝트에서 정확히 어떻게 작동하는지 아는 것이 중요합니다. Darlington 쌍은 첫 번째 트랜지스터에 의해 증폭 된 전류가 두 번째 트랜지스터에 의해 더 증폭되는 방식으로 연결된 두 개의 바이폴라 트랜지스터 로 정의 될 수 있습니다. Darlington 쌍은 아래 이미지에 나와 있습니다.
위에서 보인 것처럼 우리는 콜렉터가 모이고 첫 번째 트랜지스터의 에미 터가 두 번째 트랜지스터의베이스에 연결된 두 개의 BC547 트랜지스터를 사용했습니다. 이 회로는 이득이있는 증폭기로 작동합니다. 즉, 첫 번째 트랜지스터의베이스에 주어진 작은 신호는 두 번째 트랜지스터의베이스를 바이어스하기에 충분합니다. 우리 몸은 여기서 접지 역할을 하므로 트랜지스터의베이스에 닿을 때마다 두 번째 트랜지스터가 바이어스됩니다. 이것을 우리에게 유리하게 사용하여 우리는이 프로젝트를위한 터치 센서를 만들었습니다.
핀 번호 2와 3은 Arduino의 인터럽트 핀으로 내부 풀업 저항을 사용하여 하이로 풀링되고 Darlington 스위치가 닫힐 때마다이 핀이 접지에 고정됩니다. 이렇게하면 (첫 번째 트랜지스터 의베이스에서) 와이어를 만질 때마다 Arduino에서 인터럽트가 트리거됩니다.
두 손가락을 사용하면 두 가지 유형의 톤만 생성 할 수 있으므로 구부러진 정도에 따라 톤을 변경하는 플렉스 센서 도 추가했습니다. 손가락 (플렉스 센서)이 구부러진 정도에 따라 손가락 당 세 가지 톤을 생성하도록 프로그래밍했습니다. 손가락 끝에서 더 많은 톤을 원하면 숫자를 늘릴 수 있습니다.
손바닥에 잘 맞도록 퍼프 보드에 완성 된 보드를 만들었지 만 브레드 보드도 사용할 수 있습니다. 신체가 어느 시점에서 회로의 접지에 닿도록하십시오. 모든 것을 납땜하면 다음과 같이 보일 것입니다.
위 그림과 같이 두 손가락 장갑을 사용하여 Darlington 쌍의 전선과 플렉스 센서를 제자리에 고정했습니다. 톤을 연주하는 동안 제자리에 고정하기 위해 자신 만의 (가능하면 더 나은) 아이디어를 생각해 낼 수 있습니다.
Arduino 프로그래밍:
이 Arduino Tap Tone Generator 의 프로그램 은 매우 간단합니다. 우리는 Darlington 와이어에서 인터럽트를 찾아야하고 하나를 찾으면 플렉스 센서가 얼마나 구부러져 있는지에 따라 톤을 재생해야합니다. 전체 코드는이 게시물의 끝에 제공되지만 아래에서 몇 가지 중요한 부분을 설명했습니다.
참고:이 프로그램은 "pitches.h"라이브러리의 도움으로 작동합니다. 따라서 컴파일하기 전에 프로그램에 헤더 파일을 추가했는지 확인하십시오. 여기에서 pitches.h 헤더 파일을 다운로드 할 수 있습니다.
에서 설정 기능, 우리는 풀업 저항을 입력으로서 2, 3 핀 초기화. 또한 인터럽트 핀으로 선언하고 핀 2에 인터럽트가있을 때 tone1 ()을 실행하고 세 번째 핀 에 인터럽트가있을 때 tone2 () 함수를 실행합니다. 이러한 인터럽트는 이러한 핀이 풀업 상태에서 LOW가 될 때마다 트리거됩니다.
void setup () {pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (2), tone1, LOW); attachInterrupt (digitalPinToInterrupt (3), tone2, LOW); Serial.begin (9600); }
루프 기능 내에서 플렉스 센서가 얼마나 구부러 졌는지 지속적으로 확인합니다. 예를 들어 내 FlexSensor 1은 평평하게 두었을 때 약 200의 값을주고 최대로 구부 렸을 때 130까지 내려갔습니다. 톤 Flex 센서 값과 톤 수에 따라이 두 줄을 조정해야합니다.
void loop () {flexSensor1 = map (analogRead (A0), 200,130,1,3); // 플렉스 센서를 기반으로 한 고유 한 값으로 매핑 flexSensor2 = map (analogRead (A1), 170,185,1,3); // 플렉스 센서에 따라 고유 한 값으로 매핑}
우리는 이전에 보았던 함수로서 (가) tone1를 인터럽트가 어떻게됩니까 내부 핀 (2)에 검출되면 실행될 것이다 () tone1 함수 위에 표시된다. FlexSensor1의 값을보고 flexSesnor 값에 따라 톤을 재생합니다. Arduino의 Tone 기능을 사용하여 음색이 재생됩니다. 이전 프로젝트에서 tone () 함수에 대해 설명했습니다.
void tone1 () {if (flexSensor1 == 1) tone (8, NOTE_D4,50); else if (flexSensor1 == 2) tone (8, NOTE_A3,50); else if (flexSensor1 == 3) tone (8, NOTE_G4,50); 그렇지 않으면 tone (8, NOTE_D4,50); }
아래 줄은 톤을 연주하는 데 사용됩니다. "pitches.h"헤더 파일에서 사용할 수있는 모든 톤을 재생할 수 있습니다. 예를 들어 위의 줄은 50 밀리 초 동안 핀에서 NOTE_A3을 재생합니다.
tone (8, NOTE_A3,50); // tone (PinNum, 노트 이름, 기간);
일:
하드웨어가 준비되면 코드를 업로드하고 손가락에 마운트합니다. 신체가 어느 시점에서 회로의 접지에 닿아 야합니다. 이제 전도성 물질이나 신체를 만지기 만하면 각 톤을들을 수 있습니다. 다른 간격과 다른 위치로 탭하여 자신의 멜로디 나 음악을 재생할 수 있습니다.
아래 영상 쇼 번째 프로젝트의 전체 작업. 프로젝트 구축이 즐거웠기를 바랍니다. 제안이나 질문은 아래 댓글 섹션에 게시 할 수 있습니다. 또한 Arduino Audio Player 및 Arduino Tone Generator 프로젝트를 확인하십시오.