Let's put together a simple mathematical model of an accelerometer - from this, we can work out some calibration options.

Ignoring non-linearity and other nasty effects, the output measurement of an accelerometer is given by:

$$\hat{\mathbf{f}} = \mathbf{M} \mathbf{f} + \mathbf{b}_a + \mathbf{n}_a$$

where \$\hat{\mathbf{f}}\$ is the actual measurement, \$\mathbf{b}_a\$ is the accelerometer bias, \$\mathbf{n}_a\$ is a random noise vector, \$\mathbf{f}\$ is the true specific force (i.e. acceleration) and \$\mathbf{M}\$ is the Scale Factor/Misalignment Matrix.

The individual elements of the SFA matrix are:
$$ \mathbf{M} = \begin{bmatrix} S_x && \gamma_{xy} && \gamma_{xz} \\ \gamma_{yx} && S_{yy} && \gamma_{yz} \\ S_x && \gamma_{zy} && S_{zz} \\ \end{bmatrix} $$

So, each scale factor is represented by an \$S\$ and each cross-axis sensitivity is represented by a \$\gamma\$.

Ideally, if the scale factor is 1 and there is no cross-axis sensitivity, then then the resulting matrix is \$\mathbf{M} = \mathbf{I}\$.

Representing it like this allows us to develop a compensation model. If we happen to know \$\mathbf{M}\$ and \$\mathbf{b}_a\$ and assume \$\mathbf{n}_a\$ to be small (i.e. close to zero), we can make a good estimate of the "true" acceleration from the measurements:
$$
\mathbf{f} = \mathbf{M}^{-1}\left(\hat{\mathbf{f}} - \mathbf{b}_a\right)
$$

The trick is, of course, working out \$\mathbf{M}\$ and \$\mathbf{b}_a\$.

I'll describe a procedure called the *six position test*, which is an easy and cheap way to calibrate an accelerometer. Step 1 is to mount the accelerometer in a rectangular box with perfectly \$90^\circ\$ sides (or as close as you can get). Place this on a perfectly level surface (or, again, as close as you can get) - you'd be surprised how good you can do this.

At this point, we know what the value should be: gravity on the z-accelerometer:
$$
\mathbf{f}_1 = \begin{bmatrix} 0 \\ 0 \\ g\end{bmatrix}
$$

So, this becomes:
$$
\hat{\mathbf{f}}_1 = \mathbf{M} \mathbf{f}_1 + \mathbf{b}_a + \mathbf{n}_a
$$
Noting that \$\hat{\mathbf{f}}_1\$ will close, but not the same as \$\mathbf{f}_1\$

If we put the box on it's head, the force acting is \$-g\$:
$$
\mathbf{f}_2 = \begin{bmatrix} 0 \\ 0 \\ -g\end{bmatrix}
$$

And when placed on one side:
$$
\mathbf{f}_3 = \begin{bmatrix} 0 \\ -g \\ 0\end{bmatrix}
$$

And so on for the remaining three sides.

Now, let's write out one of the equations longhand:
$$
\hat{\mathbf{f}}_1 = \mathbf{M} \mathbf{f}_1 + \mathbf{b}_a + \mathbf{n}_a
= \begin{bmatrix} S_{xx} f_x + \gamma_{xy} f_y + \gamma_{xz} f_z + b_x \\
\gamma_{yx} f_x + S_{yy} f_y + \gamma_{yz} f_z + b_y \\
\gamma_{xz} f_x + \gamma_{yz} f_y + S_{zz} f_z + b_z \end{bmatrix}
$$

And even longer hand (for the first one):
$$
\hat{\mathbf{f}}_1 = \begin{bmatrix}
f_x S_{xx} + f_y \gamma_{xy} + f_z \gamma_{xz} +
0 \gamma_{yx} + 0 S_{yy} + 0 \gamma_{yz} +
0 \gamma_{xz} + 0 \gamma_{yz} + 0 S_{zz} +
1 b_x + 0 b_y + 0 b_z \\
0 S_{xx} + 0 \gamma_{xy} + 0 \gamma_{xz} +
f_x \gamma_{yx} + f_y S_{yy} + f_z \gamma_{yz} +
0 \gamma_{xz} + 0 \gamma_{yz} + 0 S_{zz} +
0 b_x + 1 b_y + 0 b_z \\
0 S_{xx} + 0 \gamma_{xy} + 0 \gamma_{xz} +
0 \gamma_{yx} + 0 S_{yy} + 0 \gamma_{yz} +
f_x \gamma_{xz} + f_y \gamma_{yz} + f_z S_{zz} +
0 b_x + 0 b_y + 1 b_z
\end{bmatrix}
$$

So we can create a *stacked vector of the unknowns*
$$
\mathbf{z} = \mathbf{A} \mathbf{\beta}
$$
Where
$$
\mathbf{z} =
\begin{bmatrix}
\hat{\mathbf{f}}_1 \\
\hat{\mathbf{f}}_2 \\
\vdots \\
\hat{\mathbf{f}}_6
\end{bmatrix}
$$

And
$$
\mathbf{\beta} = \begin{bmatrix}
S_{xx} \\
\gamma_{xy} \\
\gamma_{xz} \\
\gamma_{yx} \\
S_{yy} \\
\gamma_{yz} \\
\gamma_{xz} \\
\gamma_{yz} \\
S_{zz} \\
b_x \\
b_y \\
b_z \\
\end{bmatrix}
$$

The design matrix is (for one set of measurements):
$$
\hat{A}_1 = \begin{bmatrix}
f_x && f_y && f_z &&
0 && 0 && 0 &&
0 && 0 && 0 &&
1 && 0 && 0 \\
0 && 0 && 0 &&
f_x && f_y && f_z &&
0 && 0 && 0 &&
0 && 1 && 0 \\
0 && 0 && 0 &&
0 && 0 && 0 &&
f_x && f_y && f_z &&
0 && 0 && 1
\end{bmatrix}
$$

Now, once this is setup, one may solve for \$\mathbf{\beta}\$ (and hence sensitivity and bias) via least squares.

A similar procedure may be performed with a robotic arm if you can precisely control the angles - it simply replies knowing the precise gravity at that angle which, if you know the angle, is easy to calculate.

First of all, the comment regarding your intended application is very important. For this answer, I'm going to assume the you want the highest data rate possible (i.e. Wii-type controller that sends near-instantaneous data). I give you two options below. In both cases, the receiver is simple: receiver board (either another XBee or the sister board of the transmitter you are using) connected to a USB-serial converter connected to your computer.

**Option 1: Really easy to build, not-so-low power**

An XBee 1mw Chip Antenna can be configured to transmit at whatever datarate you need, has a max. range of 100m, and, best of all, has six on-board ADCs. You can configure the XBee to automatically sample these and transmit their values. X, Y and Z from the accelerometer can go directly into AI0, AI1 and AI2 pins on the XBee and they can both be fed with 3.3V.

- Good: You only need a battery, the accelerometer and the XBee to transmit, and another Xbee to receive.
- Bad: The XBee has 45mA peak current when transmitting.

**Option 2: Not so easy to build, low power**

The transmitter board you mentioned can be powered by 3.3V (according to the datasheet). Alternatively, you could use this 2.4GHz transciever. In both cases, you will need a microcontroller (easy) or an ADC with serial output (harder, will need a PCB, something along the lines of the MAX1245) to convert the analog signals from the accelerometer to digital signals for the transmitter. I recommend you use a microcontroller (Arduino Pro Mini 3.3V for prototyping, then just an ATMega328 when you're done with the design).

- Good: Low power (7-10mA).
- Bad: Will cost a lot more design time and burnt fingers.

**Option 3: Stereo FM transmitters modulating 3 channels of data**

This is in response to "Can I do it without converting the signals?".

- Use resistors and op-amps to bring the accelerometer's readings down to 90mVrms.
- Use two of these stereo FM transmitters, hook up X to Rin, Y to Lin, and Z to Rin of the other transmitter.
- Configure the transmitters to Tx on different frequencies.

On the receiver side:

- Aquire the FM signals and demodulate back to right and left audio. You could use something like this.
- Amplify and offset the three channels (right and left channel on one, and only right on the other) to measurable voltages (op-amps would work, but I have a feeling we just added a ton of noise to the whole thing).
- Plug these signals to any microcontroller (Arduino, if you're feeling lazy) with ADCs and send them out as serial data to your computer.

*NOTE: Most FM tuners will have band-pass filters that will screw this whole idea up.*

## Best Answer

A quick-n-dirty way would be to convert your accelerometer's digital outputs to analog as shown in the data sheet at the bottom of page 5. Then you could use that voltage to inject current into an ordinary transistor (like 2N2222, et.al.) That would cause the transistor to conduct more or less current depending on the voltage/current going into the base of the transistor. You could replace that 1K ohm "Fuzz" pot with your accelerometer-controlled transistor.

The volume control would be a bit more tricky. But you could use a similar "shunt" circuit to "short out" more or less of the audio output signal with another transistor connected like the "Fuzz" circuit.

A more proper method would be to use the digital outputs from the accelerometer into a microcontroller (Arduino, et.al.) and then use the microcontroller to control a couple of digital potentiometers which could be directly substituted in your circuit.