

이것은 ESP32 개발 보드를 기반으로 한 매우 간단하고 저렴한 테레민입니다. 테레민은 두 개의 안테나에서 손을 가까이 또는 멀리 움직여 연주하는 악기입니다. 한 안테나는 음높이(출력 주파수)를 제어하고, 다른 안테나는 진폭(볼륨)을 제어합니다. 이 모델은 스튜디오 품질보다는 장난감 품질에 가깝습니다.
이 디자인은 ESP32가 스피커를 직접 구동하는 것을 제외하고는 사실상 모든 작업을 수행한다는 점에서 다소 독특합니다. 다른 IC, 트랜지스터, 가변 커패시터 또는 인덕터가 없습니다. 손의 위치는 ESP32의 터치 입력 회로를 사용하여 읽어지며(짧은 거리에서 물체를 감지할 수 있을 만큼 민감합니다), 이는 프로세서를 통해 파형 샘플로 매핑되고 ESP32의 2개의 내장 DAC(디지털-아날로그 변환기)로 출력됩니다. 그런 다음 두 개의 ADC 출력의 가중 평균을 컴퓨터 스피커로 라우팅할 수 있습니다. 보드의 USB 잭을 통해 5V 전원을 공급하고, 사운드 증폭은 일반적인 유선 컴퓨터 스피커에 의해 제공됩니다.
1x - ESP32 개발 보드 30핀 - 정품 ESP32가 필요합니다. S3, C3 및 C6 변형에는 내장 DAC가 없습니다. S2에는 DAC가 있지만 다른 핀에 있습니다.
1x - 9.5cmx7.5cm (4" x 3") 프로토타이핑 보드 (PCB를 만드는 것은 지나치게 번거롭기 때문)
2x - 15핀 암 열 헤더 (개발 보드를 프로토타이핑 보드에 직접 납땜하지 않아도 되도록)
3x - 2핀 암 열 헤더, 2핀 수 열 헤더 (안테나용 2개, 오디오 출력용 1개).
3x - 순간 접촉 스위치
1x - 빨간색 LED
1x - 노란색 LED
1x - 녹색 LED
1x - 파란색 LED
1x - 3.5mm 오디오 잭 (출력용)
4x - 270옴 저항
1x - 91k 저항
1x - 510R 저항
1x - 22nf 커패시터
2x - 50k 포텐셔미터 (10k에서 1M 사이면 무엇이든 괜찮음)
2x - 안테나. 저는 20cm (8") 길이의 전선관을 사용했지만, 시스템은 사용하는 안테나에 맞춰 보정됩니다.
보드의 부품을 연결하기 위한 단선 와이어
보드 외부의 부품을 연결하기 위한 연선 와이어
납땜용 납 및 납땜 인두
핫 글루 및 핫 글루건.
장치를 넣을 상자.
유선 컴퓨터 스피커
Arduino IDE가 실행되는 컴퓨터
선택 사항
2x - 3.5mm 오디오 잭 (안테나를 보드에 연결하기 위한 것)
2x - 3.5mm 오디오 플러그 (안테나를 보드에 연결하기 위한 것)
1x - 330uF 커패시터
다음 내용은 사람 냄새 나는 맥락을 제외하면 읽지 않아도 되는 내용입니다.
이 프로젝트는 동생이 "테레민을 만들어 보자!"라고 말하면서 시작되었습니다. 대부분의 프로젝트가 그렇듯, 저는 제가 무슨 일에 뛰어드는지 알지 못했습니다. 먼저 조금 검색해 보았습니다. 처음 발견한 것은 주로 납땜 연습용으로 판매되던 두 칩 키트였습니다. 이 키트는 정전용량으로 제어되는 발진기로 두 개의 555 타이머를 사용했고, 신호의 주기를 읽는 8비트 마이크로컨트롤러로 추정되는 장치와 결과 음을 출력하는 PWM 채널을 사용했습니다. 듀티 사이클을 0%에서 50%로 변경해 진폭을 제어했을 것이라고 추측합니다. 음질은 꽤 거칠었겠지만, 555 타이머는 빌려 쓰기에 좋은 아이디어처럼 보였습니다. 그러나 555 타이머는 비교적 불안정했고, 부품이 가열되면서 시간이 지남에 따라 주파수가 변한다는 사실이 드러났습니다.
더 찾아보다가 OpenTheremin 프로젝트를 발견했고, aliexpress에서 v3 키트를 구입했습니다. 조립하고 나니 진폭 제어만 작동했습니다. OpenTheremin 키트는 쌀알 크기의 초소형 표면 실장 부품(7개의 IC와 개별 부품)을 납땜해야 했고, Arduino Uno에 부품이 안쪽을 향하도록 클램프로 고정해야 했기 때문에 사실상 디버깅이 불가능했습니다. 즉, 실제로 작동하는 동안에는 프로브로 확인할 수 있는 것이 거의 없었습니다.
그 방법이 잘되지 않자, 저는 OpenTheremin의 회로도를 사용하되 스루홀 부품을 사용하고, Arduino 대신 ESP32 개발 보드를 사용하며, 수정 발진기 대신 하드웨어 PWM 채널을 사용하고, 외부 12비트 DAC 대신 내장 8비트 DAC 두 개를 결합해 사용할 만한 16비트 출력을 내는 변형 회로를 만들기로 했습니다. 입력은 작동하게 하거나 출력은 작동하게 할 수 있었지만, 둘을 동시에 작동시킬 수는 없었습니다.
그런 다음 "Matthias random stuff" YouTube 채널에서 한 실험을 재현해 보았습니다. ESP32에 내장된 터치 입력 지원만 사용해 손의 정전용량에서 값을 얻는 실험이었습니다. 그 방법은 OpenTheremin 키트나 제가 만든 변형 회로에서 확인한 것만큼의 감도를 제공하는 것처럼 보였습니다. 이제 ESP 테레민의 부품 목록은 ESPDev 보드와 몇 가지 개별 부품만으로 줄어들었습니다.



회로의 단순성을 고려하여, 저는 9.5cmx7.5cm 프로토타입 보드에 이 회로를 구축했습니다. 맨 처음 보드는 버스 라인이 연결되어 있어 약간 이상했기 때문에, 오른쪽 상단 모서리에 표시된 대로 트레이스를 잘랐습니다.
안테나에 연결된 와이어는 다른 와이어와 멀리 떨어져 있어야 합니다. 왜냐하면 다른 와이어가 정전 용량 측정에 영향을 미치기 때문입니다.
Arduino IDE에서 ESP32 지원을 추가해야 합니다. 이를 위해 파일/환경설정...으로 이동하여 추가 보드 관리자 URL에 다음을 입력하세요.
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
이 시점에서 Arduino IDE를 재시작해야 새로운 라이브러리 옵션을 인식할 수 있습니다.
도구/보드 "마지막으로 사용했던 보드" > 보드 관리자 ...로 들어가세요.
"esp32 by Expressif Systems"를 설치하세요.
그런 다음 도구/라이브러리 관리...로 들어가 DacESP32 라이브러리를 설치하세요.
도구/보드 >에서 이제 "ESP 32 Dev Module"을 찾아야 합니다. 선택하세요.
Esp32Theremin이라는 프로젝트를 만들고 첨부된 파일을 그 안으로 이동하세요. 프로젝트를 빌드하고 USB 소켓을 통해 ESP32 Dev 보드에 업로드할 수 있어야 합니다.
대부분의 파일은 설명 주석이 있는 간단한 모듈입니다. dac.cpp는 특정 코어에 타이머 인터럽트를 연결합니다 - 이는 두 발진기 사이의 간격을 측정하는 OpenTheremin 프로젝트와 더 유사하게 작동했던 이전 버전의 잔재입니다. OpenTheremin 프로젝트가 지원하는 더 많은 기능을 추가하는 것은 관심이 있다면 꽤 기본적일 것입니다.
참고: 핀 할당은 gpioAssignment.h에서 수행됩니다. 이미 사용 중인 핀을 추적하기 위해 한 곳에 모아두는 것이 유용하다고 생각합니다. ESP 32 원본 대신 ESP32-S2를 사용해야 하므로 핀을 재배치해야 하는 경우 이 파일도 변경해야 합니다.
ESP32Theremin은 모드 지향적입니다. 버튼을 눌러 모드를 전환하며, LED가 현재 어떤 모드에 있는지를 알려줍니다.
처음에는 시작 모드에 있으며 빨간 LED가 켜져 있습니다. 몇 초 후, 시스템이 재생 모드로 전환되며 파란 LED가 켜집니다.
다른 두 모드는 "보정(Calibration)"과 "조정(Tuning)"입니다. 보정은 테레민이 각 안테나에 대한 정전 용량 값의 범위를 결정할 때 이루어집니다; 테레민의 전원을 처음 켤 때와 다른 안테나를 사용할 때마다 이 과정을 수행해야 합니다. 조정은 각 포텐셔미터를 조정하여 음높이 값의 범위를 선택할 수 있게 해줍니다. 보정 및 조정 값은 지속적인 저장소에 저장되므로, 테레민의 전원을 켤 때마다 다시 수행할 필요가 없습니다.

보정 버튼을 누르면 노란색 LED가 어두운 상태에서 시작하여 최대 밝기로 점차 밝아지는 사이클을 시작하고 이를 반복합니다. 이는 안테나에서 손을 멀리 두었을 때 가능한 최대 정전 용량 값을 기록하려고 시도하고 있다는 것을 나타냅니다 - 따라서 즉시 손을 안테나에서 최대한 멀리 이동하십시오. 이 상태는 약 20초 동안 지속됩니다.
노란색 LED가 계속 켜져 있으면 손이 안테나에 가까이 있을 때 가능한 최대 정전 용량 값을 관찰하려고 시도하고 있다는 것을 의미합니다 - 따라서 각 손을 안테나에 가깝게 이동하십시오. 이 작업은 한 번만 수행하면 충분합니다.
다음으로, 값을 저장하기 위해 조정 버튼이나 재생 버튼을 눌러야 합니다 - 이 버튼 중 하나를 누르기 전에 테레민의 전원을 끄면 값이 손실되고 이 절차를 반복해야 합니다.
조정 버튼을 누르면 초록색 LED가 희미하게 켜집니다. 이는 첫 번째 포트를 사용하여 낮은 음정을 설정하고 있음을 나타내며, 음정 출력이 이를 반영합니다. 조정 버튼을 두 번째로 누르면 초록색 불빛이 밝게 켜지며 두 번째 포트를 사용하여 높은 음정을 설정하고 있음을 나타냅니다. 조정 버튼을 다시 눌러 두 음정 사이를 왔다 갔다 할 수 있습니다.
다음으로, 값을 저장하기 위해 보정 버튼이나 재생 버튼을 눌러야 합니다. 이 버튼 중 하나를 누르기 전에 테레민의 전원을 끄면 값이 손실되며 이 절차를 반복해야 합니다.

재생 모드에 있지 않다면 재생 버튼을 눌러주세요. 파란 LED가 켜질 것입니다.
안테나 근처에서 손을 움직이면 피치 및/또는 볼륨이 반응하여 변경됩니다. 빨간 LED의 밝기는 손이 피치 안테나에 얼마나 가까운지를 피드백으로 제공하며, 노란 LED의 밝기는 손이 볼륨 안테나에 얼마나 가까운지를 피드백으로 제공합니다.
원문: https://www.instructables.com/Esp32Theremin-an-Easy-2-Antenna-Theremin/