The heart of the Hammond B3 Organ is the tone generator. This iconic jazz instrument relied on a series of metal disks each with a varying number of bumps along the edge. Those bumps allowed the metal disks when spun to warp the magnetic field of the electromagnetic pickups inducing current and producing near perfect sinusoidal signals. Those signals were then actively summed to produce the wide range of notes and tones needed for the organ. The Hammond B3 could produce seven and a half octaves using 91 separate disks. This technology ceased to be used for instruments with the advent of digital technology but it remains a forever desired sound and a fantastic demonstration of basic electrical engineering principles.
The following will describe the construction of a very basic, single octave tone generator, based on the principles described above. It is a rough design in need of improvements that will be described at the end of the instructions. This Electromechanical Tone Generator was designed as a project for the Electrical and Computer Engineering Department at Utah State University.
BILL OF MATERIALS:
- Bicycle Gear Cassette
- 1" Diameter PVC lathed to fit as axle for bicycle gears
- 2 1" PVC coupling sockets
- 2 PVC reducing bushings (1" to 1/4")
- 2 Nylon hose adapters
- 1/4" wood dowel
- Wood for frame
- 1/4" Ball Bearings
- Stepper Motor
- Rubber band
- 8 220 OHM resistors
- 4 PNP transistors
- 4 NPN transistors
- Raspberry PI
- 4 AA batteries
- Battery holder
- Various jumper cables and wire
Step 1: Motor Wiring
Step 1 and 2 are the most important part of the project, and mistakes here will prevent the whole system from functioning.
Wiring up the motor is dependent on the motor you have selected. The easiest motor to use is a DC motor. This simplifies the wiring. If you have a DC motor ignore the schematic shown. Instead wire the power through a single transistor to the input of the motor. Wire the gate of the transistor to the PWM module of the arduino or raspberry pi. The difficulty is sizing the motor. This depends on how well you hang the axle of the motors as the more weight and friction surrounding the axle the greater the torque of the motor needs to be. The DC motor we initially selected was sized incorrectly and could not turn the motor with enough speed. For that reason we swapped to the only other available motor which happened to be a stepper motor.
Stepper motors have one of two configurations either unipolar or bipolar. Ours was a unipolar motor and so the wiring is designed for such. Unipolar motors have six input wires, two of which should be grounded and go to the center of the coils on the interior of the motor. The other four are controlled by the arduino through the transistors. This protects the arduino from sourcing to much current and burning out.
Follow the wiring diagram carefully if you choose to use a stepper motor. Once you have completed the wiring for the motor move to step two.
Step 2: Speaker Wiring
Now we are going to wire up the speaker and the electromagnetic pickups. We obtained the pickups from a local guitar store. They were well used and not useful for musicians so we got them on the cheap. We did have to solder new leads onto them, and the first time through we did a mediocre job which came back to haunt us when the connections broke and forced us to solder them again. So be warned do a good job the first time.
Once again transistors are used within the circuit to allow the raspberry pi to select which electromagnetic pickups output will be allowed through the speaker. This will allow the selection of particular notes as an individual plays the tone generator. Be sure to keep the ground common for each pickup and to the raspberry pi. This is a passive circuit and will not require an external power source.
Again be careful as you follow the circuit diagram to wire everything correctly as this is extremely important to the working of the entire system. Especially be aware of the transistor direction and type.
Step 3: Build Axle and Mount Bicycle Gears
The local bike repair shop had several broken bicycle cassettes that they gave to us so I suggest when searching for materials to go to such a place in your community. Look for a variety of sizes as the number of teeth on the gears changes the frequencies that can be played. We used four gears in the end, a 23 tooth, 20 tooth, 17 tooth, and 15 tooth gear.
Bicycle gears have about a one inch hollow in the center so mounting them to an axle may be tricky. We went for the cheap solution of a one inch PVC which we lathed to the correct diameter. We used various PVC parts to brace and separate the various gears, JB weld was applied liberally to hold everything in place. Due to the size of ball bearings we were able to obtain (skateboard ball bearings), we had to creatively drop the axle diameter to from the 1" to 1/4", which necessitated the use of a wooden dowel.
This design could be improved, using metal, which will add weight, will add stability that will prevent the wobbling that caused us problems in the end of the build. Get creative about how you mount the gears, but aim for sturdy.
Step 4: Build Frame
The frame that you build needs to be sturdy enough to hold the axle steady. We used some old wood from other projects to build a frame, as can be seen in the picture, because we had to swap motors somethings overhung the frame. However it was large enough to prevent the whole thing from getting unbalanced and so was sufficient for our purposes.
The design of the frame is not important outside of sufficient stability to prevent the gears from toppling the whole system when they are spinning at high speed.
Step 5: Program Raspberry PI and Arduino
The Arduino is used to control the motor. It has built in libraries both for PWM if you used a DC motor, and for Stepper Motor controls. The code that is referenced uses the Stepper Motor library. The Arduino also receives serial data that changes the speed of the motor, this is updated as often as every full rotation of the motor.
The Raspberry Pi provides a graphical interface for the user. It takes input from the computer keyboard, translates this into desired frequencies, determines the correct pickup to open to the speaker output, and communicates the desired speed to the Arduino.
Feel free to use our code.
Step 6: Have Fun!
After attaching the battery pack to the supply for the motor. And turning everything on, the organ should be up and running. If not first check the wiring, this is the most likely area for errors. Make sure the wires for the stepper motor are connected to the correct transistors associated with the Arduino pins as a mistake there will prevent anything from moving.
Be careful of the spinning gears as a nick from them can be quite painful.
Other than that have fun and see what you can get the tone generator to do. It is easy to modify and can stand for some improvement. The next step is to use some Fourier series on it and combine sinusoidal outputs to produce differing tones. Add greater amplification, perhaps using active circuitry for the electromagnetic pickups so the volume can be changed. A redesign of the speaker circuitry would allow multiple notes to be played at once and therefore the tone generator will have evolved to be a full fledged instrument.
Have fun and get creative!
Step 7: Code Files for Your Reference
link to arduinoPWM code. use this to have an arduino drive the stepper motor if needed
link to rpi python code run this on the rpi to have keyboard inputs change the arduino pwm speed