Introduction: Body Composition Using BIA

Picture of 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

Picture of 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

Picture of 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

Picture of 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

Picture of 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

Picture of 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

Picture of 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

Picture of More Pictures of the Circuit

Have Fun!


MatheusB52 (author)2017-09-13

Hi dude, where can i find the Chip AD5933 (which already has the solder like yours) i searched and only found a super expensive board, please any links? thanks a lot

juliasus92 (author)2016-05-12

Well this looks really good,
I have just one question
Can we calculate Heart rate from the same setup and code?

MESHAAL (author)2016-01-05

Would you please explain me why you define button 2 in code .

I'm trying to do the same project but the code is not showing anything on serial monitor . Do I missing somthing ?

bam_project (author)2015-11-18

What sort of electrodes are you using?

bashid (author)2015-10-22


A 1 k Ohm resistor is connected between the output of the INA 118P and the Vin port of the AD5933"


What is the reason?

marco.miguel.33 (author)2015-08-13

hello , good project :) . Can I use a mega instead of one ? what changes do I have to do in the code ?

Abolhasany (author)2015-08-12

Thanks man...

Ying YuC (author)2015-06-01

you help me solve my problem. Thank you so much

amberrayh (author)2015-04-20

This is cool. Thanks for sharing! Probably much more accurate than using height v. weight or calipers :)

About This Instructable




More by evanderslice:Body Composition using BIA
Add instructable to: