Introduction: Body Composition Using BIA

Body impedance analysis is a quick and relatively simple way to determine body fat content. The circuit passes a small amount of current through the body and detects the impedance. Lean tissue is mostly water and has a much lower impedance than fatty tissue. Equations have been developed based on empirical data to calculate fat free mass (FFM) and body fat percentage based on the measured impedance and the person's height and weight. We used an Arduino to read the impedance and do the calculations for percent body fat. Enjoy!

Step 1: What You Need

1 x AD5933

1 x capacitor

10 x resistors

3 x TL072 op amps

1 x Instrumentation amplifier

1 x Arduino Uno

4 x Electrodes

Plenty of wires

What we used:


2 x 1 MOhm

1 x 100 kOhm

4 x 1 kOhm

2 x 10 kOhm

Capacitor: 1 x 10 nF

We used a INA118P for the instrumentation amplifier

Step 2: Circuit Diagram

The circuit is composed of 5 major components:

1. AD5933

2. High Pass Filter with voltage follower

3. Transconductance Amplifier

4. Instrumentation Amplifier

5. Arduino Uno

These parts will be discussed individually next.

Step 3: High Pass Filter

We used a 10 nF capacitor and 100 kOhm resistor to make the high pass filter. The AD5933 supplies an input voltage of 2V. The code programs it to perform a frequency sweep from 50 kHz to 50.5 kHz. The filter is intended to attenuate noise at frequencies below the range of the sweep. A voltage follower was included to prevent the current setting resistor from loading the filter.

Step 4: Transconductance Stage

This stage begins with the current setting resistor. We used a 1 MOhm resistor to obtain a constant current of 2 uA. It is important to pick a large enough resistor to set the current low enough to be safe (this current will be flowing through the body). Another 1 MOhm resistor is connected as a feedback resistor that protects the body from excess current from the output of the op amp. One current electrode is connected to the negative terminal of the op amp and the other is connected to the output of the op amp. The detection electrodes (electrodes 3 and 4) then feed into the two input terminals of the instrumentation amplifier.

Step 5: Instrumentation Amplifier

We used a INA 118P amplifier and a 100 kOhm resistor for Rg. Since the AD5933 can only read positive voltages, we input 2.5V into the Vref terminal. This was accomplished with a voltage divider using the 5V source of the arduino uno and two 1 kOhm resistors. A 1 kOhm resistor is connected between the output of the INA 118P and the Vin port of the AD5933. Another 1 kOhm resistor is connected between the Vin port and the RFB port.

Step 6: AD5933

The AD5933 outputs a 2V signal from Vout and is coded to sweep from 50 kHz to 50.5 kHz. It takes the signal back in through Vin and RFB and then outputs to the Arduino. 10 kOhm pull up resistors are required between the AD5933 and the Arduino.

Step 7: Calibration

The AD5933 needs to calibrate the gain factor before use. The process can be found in the AD5933 datasheet. In short, place a known resistance in place of the body. Record the magnitude given by the Arduino. The gain factor equals (1/Resistance)/Magnitude. Then unknown impedances can be calculated by 1/(GF*Magnitude).

Step 8: Arduino

The Arduino takes the resistance and conductance readings from the AD5933 and calculates impedance, fat free mass, and percent body fat.

The subjects height and weight should be entered into the code for a proper reading.

Here is our code:

Step 9: Electrode Placement

Current electrodes = Electrodes 1 and 2

Voltage electrodes = Electrodes 3 and 4

Step 10: Results

The first picture is for a 5'0" (154 cm) tall and 118 lbs person.

The second is a 5'8" (172 cm) tall and 225 lbs person.

Step 11: More Pictures of the Circuit

Have Fun!