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!

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

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!

Be the First to Share


    • Made with Math Contest

      Made with Math Contest
    • Multi-Discipline Contest

      Multi-Discipline Contest
    • Robotics Contest

      Robotics Contest

    17 Discussions


    6 months ago

    Hi, but is it possible to create a circuit of bioresonance circuit with the same circuit?


    1 year ago

    For those who had the same issue that i had (after everything connected no data is printed in the serial monitor), all you have to do is take the TL072 from the 5V devider, and connect the 2.5V directly to the REF pin on INA118P. Then you should be fine, i think... good luck!

    3 replies

    Reply 11 months ago

    Hi, I wasn't able to get any data in the serial monitor even after that change. Does anyone has an update diagram with updated connections? I also had to use TL074P and INA128P because of I wasn't able to find TL072 and INA118P. Thanks a lot


    Reply 1 year ago

    Can you help me? I Need a link for the AD5933.


    3 years ago

    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 ?

    2 replies

    Reply 1 year ago

    Brother, I am trying to interface arduino uno board with ad5933 using I2C protocol. I am using the same program and facing the same problem as you. Please help.


    Reply 1 year ago

    Brother ,can you share the ad5933 and ina118 amplifier link i will buy it....


    1 year ago

    hello, can you share the link of ad5933 and ina118 amplifier please help me....

    thanks in advance


    2 years ago

    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


    3 years ago

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


    3 years ago

    What sort of electrodes are you using?


    4 years ago


    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?

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


    4 years ago on Introduction

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