Describes the hardware for pitch detection on Arduino. Part of the project Arduino Pitch Detector.\(\)
The Arduino receives input through a microphone, displays results on display and outputs the MIDI commands through USB Serial on the Arduino itself.
Schematic
This project uses input from amplified microphone and outputs to a TFT display and USB-midi connection. It reuses the USB connector by replacing the firmware on the ATmega16U2 companion chip as described on the page Sending MIDI Events.
Power
Logic
A few notes:
-
When lit,
LED1
indicates that the signal exceeds the maximum level. -
When connected,
JP1
selects USB-MIDI output. Otherwise USB-SERIAL is selected. To upload the sketch, this jumper needs to be open, and the Arduino power cycled. -
Push button,
SW1
was used during development to replay stored MIDI notes. -
Switch
SW2
, is for a future extension that corrects the pitch for transposing instruments.
⚠
Remember to connect the 3.3 Volt output from the Arduino to the AREF
input on the Arduino. If you forget this, no notes will be displayed.
Bill of Materials
The price comes down to under $40 based on single quantity, excluding shipping and taxes. However, note that some items, such as the PCB, have minimum order quantities.
Name | Description | Suggested mfr and part# | Paid |
---|---|---|---|
PCB1 | Electret microphone w/ auto gain control | Adafruit 1713 | $7.95 |
PCB2 | Arduino METRO 328, or Arduino Uno R3 | Adafruit 2488 | $17.50 |
PCB3 | ST7735R 1.8″ Color TFT display w/ MicroSD shield | Adafruit 802 | $34.95 |
HDR | Shield stacking headers for Arduino | Adafruit 85 | $1.95 |
LED1 | LED, Amber Clear 602 nm, 1206 | Lite-On LTST-C150AKT | $0.33 |
R1 | Resistor, 330 Ω, 1/8 W, 0805 | YAGEO RC0805FR-0768RL | $0.10 |
JP1 | Connector header, vertical 3 pos, 2.54mm | Metz Connect PR20203VBNN | $0.10 |
SW1 | Switch tactile, SPST-NO, 0.05A/24V | TE Connectivity 1825910-3 | $0.15 |
SW2 | Switch rotary dip BDC comp, 100mA/5V | Nidec Copal SH-7030TB | $2.00 |
Considerations
Microphone
For the microphone, I use the Adafruit microphone breakout, because it has a 1.25 Volt DC bias and includes an automatic gain control. The “max gain” is set to 40 dB by connecting the GAIN
to 5V
. Other microphones will work for as long as they have a DC biased output, and the output signal is strong enough.
Arduino
The popular Arduino UNO R3 forms the heart of the system.
If you’re going to reprogramming the Atmega16u2, you need access the companion chip header (ICSP1) as marked in the illustration below.
Display
For the display, I chose an 1.8″ TFT LCD screen. I went back and forth between using the Adafruit breakout and Shield. The advantage of this particular LCD screen is that it comes with a library and includes a μSD card reader. The module connects to the Arduino using the SPI interface. More details about SPI can be found in the article Math Talk.
Replay Push push button
Occasionally, I use a push button to replay stored MIDI notes. The push button is active low. To use this, you need to enable USB_MIDI in the config.h
file.
USB-midi switch
When this switch is closed during power-up, the companion chip functions as a UART/USB-MIDI bridge. Otherwise, it does its usual UART/USB-SERIAL conversion. Refer to MIDI events for details.
The next page of this article describes the signal path and introduce the software modules.