Arduino Guitar Tuner Hack

Hi -

Over the weekend I hacked a Korg GA-30 guitar tuner. I soldered breadboard wires to the LCD inputs and have been messing around with trying to get the Arduino to use the combined inputs to identify what note is playing. I am pretty new to Arduino and I wanted to see if this could yield some interesting experiments.

Suggestions are welcome! P

Fail.

The only data coming out of the chip on the tuner was to switch various portions of the LCD. As such, one would have to decode based on the LED shapes to get notes, probably very slowly, and it still doesn’t solve the problem of octaves.
The chip on the tuner is very much integral to the board- it is a strange little black circle.

I would say for anyone thinking they could benefit from hacking a guitar tuner to get pitch detection to the arduino- forget it.

you can try to build your own arduino guitar tuner

you can try to build your own arduino guitar tuner

Probably would be easier than trying to hack one already built :p

Would be a neat little project. Hook some servos up to the tuning knobs, play a string, and it tunes it for ya! ;D

yeah, that's a great idea!

fast.. furry... transformers..right?

The problem of trying to hack this is that the waveform used to drive an LCD is not a simple two logic level signal. It has a several of different voltage levels, the actual number depends on the type of LCD it is using. While this can be done, and it would not be slow, you need a decent oscilloscope to look at your waveforms and decode them. Only then can you think about the interface that would include voltage comparators to convert the multilevel signal into on that the arduino can read.

Thanks! That is really interesting. If the range of the tuner covers many octaves, do you think there would be a way to identify which octave was playing? The LCD screen does not make this distinction, but I know the tuner chip has this capability.

Thanks Peter

do you think there would be a way to identify which octave was playing?

If this is not displayed on the LCD then no if all you are doing is to monitor what is on the LCD.

but I know the tuner chip has this capability.

So how do you know this?
If it is not being output in some way then you can’t recover that information.

This is from the spec sheet for the tuner- Tuning: 12 note equal-tempered

Detection range: 23.12Hz - 1975.54Hz

Tuning accuracy: +/-1cent

Sound accuracy: +/-1.5cent

I really appreciate you helping me think this through. I don't have an understanding of what the tuner is "detecting" in the waveform.

Am I wrong in thinking that the tuner "knows" the notes at different octaves?

THANKS SO MUCH! :)

I don't have an understanding of what the tuner is "detecting" in the waveform.

It is the period of the waveform. Having said that it is not such an easy thing to do because of all the harmonics in the waveform. My guess is that it probably uses a bit of auto correlation to do this rather than a Fourier transformation. As Fourier based note detecting is not that good in practice.

If it is not outputting this information then there is no way you can extract it. It will have to know this information internally in order to convert a time period into a note name, but as this information is only used in its internal calculations there is no way it can be extracted.

As I suspected. Thank you for taking the time to confirm.

For a funny image: I had to remove the lcd screen and solder 18 wires to the pads.
After realizing that I needed the screen in order to figure out the function of each wire, I made a homemade pcb with the same pads and 18 more wires, so that I could breadboard it back together.
There are a total of 43 wires connected to the breadboard :slight_smile:

You may say this was an exercise in futility, but I got lots of practice in all different areas, and I think I (well, you) answered a question that I know has been asked before.

Thanks!

The signals that drive the LCD would be hard to decode, but probably not impossible. The LCD drive signals are not TTL level, so you can't just feed them into the Arduino. You would need a transistor (probably a JFET since LCDs have huge impedance and work on microamps) or maybe an op-amp to recover a usable digital signal. Having a 'scope would help in terms of measuring the actual signals.

Also, the LCD is likely being driven row x column-wise, so you'd have to have logic to watch for the combination of row+column signals that you care about.

I doubt it would be easy, but is likely possible.

If you want to implement the DSP on the Arduino, you have a pretty tough coding challenge. A Mega would possibly have enough memory to run a real time integer Goertzel algorithm on 4000 to 8000 samples per second.

Contrary to what a lot of people say about the speed of the Arduino, it is really the memory that is the limiting factor. I can remember running lots of pretty compute intensive things on a 1Mhz Z-80, and if it had 16K of memory, you could do a lot. It is the 2K memory limit that really kills you on the AVR.

gardner- that is very useful! the reality is, though it might be a cool thought experiment, it wouldn't be useful since there is no way to know which octave. if you are interested, i'd be happy to send you (or anyone) the gutted tuner with all of the leads attached and the pcb that i made.

thanks for your help

gardner-
If you want to know how to do this here is an article I wrote back in 1987 on how to do it.

http://www.doc.mmu.ac.uk/STAFF/A.Wiseman/Acorn/BodyBuild/BB_87/BBC52.txt

and picures:-
Imgur