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

Arduino 기반 자동 기타 튜너

구성품 및 소모품

Arduino UNO
× 1

앱 및 온라인 서비스

Simulink

이 프로젝트 정보

기타를 연주할 때 가장 중요한 것 중 하나는 악기의 조율을 확인하는 것입니다. 최고의 기타 연주자라도 음조가 맞지 않는 기타에서는 좋은 소리를 내지 못합니다. 표준 튜너를 사용하여 손으로 기타를 튜닝하는 것은 항상 일반적이었지만 자동 튜너를 사용하면 작업이 훨씬 쉽고 재미있습니다! 이 Arduino 기반 프로젝트는 기타를 튜닝할 것입니다.

다음은 실제 프로젝트를 보여주는 비디오입니다. https://www.mathworks.com/videos/automatic-guitar-tuner-using-simulink-and-arduino-1501787185047.html

개요

위의 그림은 자동 기타 튜너의 개요를 보여줍니다.

<울>
  • 누름 버튼은 튜닝할 현을 선택하는 데 사용됩니다.
  • <울>
  • 6개의 LED 디스플레이는 어떤 문자열이 선택되었는지 표시하는 데 사용됩니다.
  • <울>
  • 모터에 연결된 그리퍼는 현이 조정될 때까지 조정 못을 돌리는 데 사용됩니다.
  • 입력 및 출력은 위에서 언급한 4개의 회로에 의해 제어됩니다. 푸시 버튼용 디지털 입력 회로, 기타용 아날로그 오디오 입력 회로, LED 디스플레이용 디지털 출력 회로 및 튜닝 페그용 모터 구동 회로 그리퍼. 이 4개의 회로는 Simulink를 사용하여 개발된 알고리즘을 실행하는 Arduino Due와 상호 작용합니다.

    오디오 입력 회로

    기타는 표준 기타 케이블을 통해 튜너에 연결됩니다. 기타 케이블의 끝 부분에는 팁과 슬리브라고 하는 두 개의 연결부가 있습니다. 케이블의 한쪽 끝은 팁과 슬리브용 리드가 있는 입력 잭에 연결됩니다. 이 리드에 와이어를 납땜하여 팁과 슬리브를 오디오 입력 회로에 연결했습니다.

    이 회로에 TL972 연산 증폭기를 사용하는 것이 좋습니다. 매우 낮은 공급 전압에서 작동할 수 있는 매우 낮은 노이즈의 rail-to-rail 증폭기입니다.

    자동 튜닝 페그 그리퍼

    이 프로젝트에 DC 모터만 사용할 수는 없었습니다. 저속, 고토크 기어드 모터가 필요했습니다. 내가 사용한 모터의 속도는 6RPM이고 최대 토크는 613oz-in입니다. 3~12V의 전압 범위를 가지므로 9V 배터리를 전원으로 사용했습니다.

    모터 샤프트에 클램프 허브, 4개의 나사 및 약간의 테이프를 사용하여 간단한 그립 메커니즘을 조립했습니다.

    소프트웨어

    Simulink와 Arduino용 지원 패키지를 사용하여 튜너용 알고리즘을 개발했습니다. Simulink는 알고리즘 개발 및 동적 시스템 모델링에 사용되는 블록 다이어그램 환경입니다. 지원 패키지를 사용하면 Simulink 블록을 사용하여 Arduino의 핀에서 읽고 쓸 수 있습니다. 소프트웨어의 외부 모드 기능을 사용하여 자동 코드 생성으로 Arduino에서 알고리즘을 시뮬레이션하고 시뮬레이션이 실행되는 동안 코드를 다시 컴파일할 필요 없이 매개변수를 조정할 수 있습니다. 그런 다음 독립 실행형 실행을 위해 알고리즘을 하드웨어에 배포할 수 있습니다. 제가 만든 모델은 아래와 같습니다.

    외부 모드에서는 범위 블록을 사용하여 하드웨어에서 실행되는 동안 알고리즘의 일부를 모니터링할 수 있습니다. 이것은 버튼의 디지털 입력과 기타의 아날로그 입력을 모니터링하는 데 특히 유용합니다. 버튼 범위에서 버튼을 눌렀을 때 입력이 0에서 1로 변경되는 것을 볼 수 있습니다.

    이 변경을 0에서 1로 변경하여 선택한 문자열의 변경을 트리거하고 싶습니다. 이것은 상승 트리거로 알려져 있습니다. 각 문자열에 대해 하나씩 6개의 상태가 있고 이 상승하는 트리거 입력을 기반으로 한 상태에서 다음 상태로 변경되는 "Select String"이라는 Stateflow 차트를 만들었습니다. 다음은 Stateflow 차트에 대한 자세한 내용입니다.

    각 상태에 진입하면 해당 스트링의 LED 핀이 하이로 설정됩니다. 각 상태를 종료하면 핀이 로우로 설정됩니다. 저는 6현 중 가장 낮은 로우 E 스트링을 기본값으로 선택했습니다. 튜너의 전원을 처음 켜면 이 기본 상태에서 시작됩니다.

    Stateflow 차트에는 7개의 출력이 있습니다. 하나는 6개의 스트링 각각에 대한 LED용이고 다른 하나는 "periodRange"라고 하며 나중에 설명하겠습니다. 6개의 LED 출력은 Arduino 디지털 출력 블록으로 바로 이동하여 해당 LED를 켜거나 끕니다.

    이제 모델의 오디오 처리 부분을 살펴보겠습니다. 기타 신호는 아날로그 입력 블록을 통해 들어옵니다. 5kHz 샘플링 속도에 대해 블록의 샘플 시간을 0.0002초로 설정했습니다. 기타를 치며 오디오 스코프 블록을 열면 아래와 같은 파형을 볼 수 있었습니다.

    스코프 블록은 오디오 회로의 전위차계를 조정하여 입력 게인을 변경하는 데 도움이 되었습니다. 파형의 피크가 최대값인 1023에 도달하지 않도록 이득을 최대한 높게 설정해야 합니다. 이렇게 하면 신호를 가장 정확하게 읽을 수 있습니다.

    기타를 치지 않을 때 입력 신호는 500에서 700 사이의 평평한 선이어야 합니다. 제 경우에는 550 정도였습니다. 튜너는 음이 있을 때만 오디오를 처리해야 하므로 이 값을 아는 것이 중요합니다. 재생 중입니다. 이 평평한 선 바로 위의 값 575를 임계값으로 선택했습니다. 신호가 이 임계값보다 높을 때만 오디오가 처리됩니다. Simulink를 사용하면 시뮬레이션이 실행되는 동안 매개변수를 조정할 수 있기 때문에 임계값을 쉽게 설정할 수 있었습니다.

    기타에서 단일 음을 연주할 때 생성된 파형은 주기적입니다. 파형의 주기는 특정 음높이에 해당합니다. 튜닝 알고리즘은 파형의 주기를 결정하여 스트링의 피치를 추정합니다. 이 피치 추정을 수행하는 MATLAB 함수를 작성하고 MATLAB 함수 블록을 사용하여 Simulink 모델에 포함시켰습니다. 문자열이 조정되어 있는지 확인하려면 MATLAB 함수에 각 문자열에 대해 조정된 것으로 간주되는 기간 범위를 나타내는 입력이 필요합니다. Stateflow 차트의 출력 "periodRange"입니다. 이 기능은 스트링의 피치가 너무 높거나 너무 낮거나 또는 주기 범위에 따라 조정되어 있는지 여부를 결정하고 그에 따라 모터에 대한 출력을 생성합니다.

    MATLAB 함수의 출력은 모터를 제어하는 ​​세 개의 핀입니다. 이 출력은 Arduino 디지털 출력 블록으로 바로 이동합니다.

    내 알고리즘이 모든 것이 올바른지 확인한 후에는 이를 하드웨어에 배포하여 PC에 연결하지 않고 Simulink와 독립적으로 독립 실행형으로 실행할 수 있었습니다.

    이제 기타를 자동으로 튜닝할 수 있습니다!

    이 프로젝트에 필요한 모든 파일은 여기에서 사용할 수 있습니다.

    https://www.mathworks.com/matlabcentral/fileexchange/63697-automatic-guitar-tuner-using-simulink-and-arduino

    회로도

    푸시 버튼의 회로는 풀다운 저항이 있는 간단한 스위치입니다. LED 디스플레이 회로에는 6개의 LED와 전류 제한 저항이 포함됩니다. 기타에서 나오는 오디오 신호를 읽기 위해 아두이노의 아날로그 입력 핀 'A0'을 사용했습니다. Arduino Due는 0V와 3.3V 사이의 전압을 읽습니다. 그러나 기타에서 오는 신호는 진폭이 매우 낮고 0V 주변에서 진동합니다. 즉, Arduino가 읽을 수 없는 일부 음의 전압이 포함되어 있습니다. 이를 수정하려면 입력 회로가 신호를 증폭하고 DC 오프셋을 추가해야 합니다. 회로는 또한 신호에서 고주파수 성분을 제거하기 위해 저역 통과 필터를 제공해야 합니다. 샘플링된 신호에는 샘플링 속도의 절반 이상의 주파수가 포함되어서는 안 됩니다. 튜너는 5kHz의 속도로 오디오를 샘플링하기 때문에 내 회로는 2.5kHz 이상의 주파수를 제거합니다. 아래 그림과 같이 회로를 조립했습니다. L293D H-bridge 칩에 연결된 Arduino의 3개의 디지털 출력 핀을 사용하여 전동 튜닝 페그 그리퍼를 제어했습니다. . 이 칩을 사용하면 이 세 핀의 상태에 따라 모터를 어느 방향으로 돌리거나 모터를 멈출 수 있습니다. 핀 중 하나를 인에이블 핀이라고 하며 인에이블 핀이 하이로 설정되어 있을 때만 모터가 회전합니다. 다른 두 핀은 모터의 방향을 결정합니다. 아래 그림과 같이 회로를 연결했습니다.

    제조공정

    1. 일렉트릭 기타
    2. 스포크
    3. 티타늄
    4. 바이오세라믹
    5. 캐스터네츠
    6. 접착제
    7. 스레드
    8. 아세틸렌
    9. 석면
    10. 주석