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:
Resistors:
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:
Attachments
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.
Attachments
Step 11: More Pictures of the Circuit
Have Fun!
20 Comments
2 days ago
is there a digital file of the project I can use to send to one of that sites that can assembly the device? thanks
2 years ago
Using an AD5934 instead of AD5933, the serial monitor isn't printing anything. Any idea on how to fix that please?
Question 3 years ago
My serial monitor isn't printing anything? Is the circuit diagram correct?
4 years ago
Hi, but is it possible to create a circuit of bioresonance circuit with the same circuit?
5 years 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!
Reply 5 years ago
Hi Matheus, did that work for you???
Reply 4 years 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 5 years ago
Can you help me? I Need a link for the AD5933.
7 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 ?
Reply 5 years 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 5 years ago
Brother ,can you share the ad5933 and ina118 amplifier link i will buy it....
5 years ago
hello, can you share the link of ad5933 and ina118 amplifier please help me....
thanks in advance
6 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
7 years ago
Well this looks really good,
I have just one question
Can we calculate Heart rate from the same setup and code?
7 years ago
What sort of electrodes are you using?
7 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?
8 years ago on Introduction
hello , good project :) . Can I use a mega instead of one ? what changes do I have to do in the code ?
8 years ago on Introduction
Thanks man...
8 years ago on Introduction
you help me solve my problem. Thank you so much
8 years ago on Introduction
This is cool. Thanks for sharing! Probably much more accurate than using height v. weight or calipers :)