|
CLASS DOCUMENTS
REPORTS & ASSIGNMENTS
CLASS CONTENT
USING THIS SITE
registered authors login here You are: (logout) For more on PMWiki, see pmwiki.org |
Body Fat MonitorManufacturer: TANITA http://www.tanita.com/ Body fat monitor is a well developed application, used to measure one's weight and body fat. It often uses a technology called "Bioelectrical Impedance Analysis"(BIA) which measures the impedance to an electrical signal in your body which might be seen as the level of obesity. Actually it shots an non-harmful electron into one side or your body(e.g. your left foot) and receive it from the other side(e.g. your right foot). It measures how much the loss of electron is between the start point and the end, and then translate this number of loss into degree or percentage of body fat degree and show it on the screen. How to use a body fat monitor:
Before using the scale for the first time you enter your age, gender, height. Weight is displayed on the LCD screen and five seconds later your percentage of body fat appears. Usually you will get higher body fat value in the morning than evening because after a sleep the food you consumed at daytime already transform into body fat.
The theory of electron loss is a hypothesis that while electron travels through the water found in muscle and fat, the more muscle a person has, the more water their body can hold. The greater the amount of water in a person's body, the easier it is for the current to pass through it. In contrast, the more fat, the more resistance to the current. The factors that go into determining the percentage of body fat include a person's weight, height, age, gender and body type. There are two things it senses: weight and impedance
AVAILABILITY AND PRICING: The average price range is between $30 ~ $100, depends on extra function and material.
EXTENDING APPLICATION This body fat monitor only shows the number of your body fat percentage, which doesn't really give user a clear idea whether he or she has too much obesity or not. To clarify the level of obesity, I designed a simple animation that clearly indicate one is normal or too thin, or too fat. I use Arduino micro-controller to read the value send and receive by footpad, and then send these value to my laptop's serial port. Once Processing(An interactive programming language that good at graphical creation) read these value, it would generate the animation to show user's body fat level on a diagram of body fat standard.
/*** Detecting two different value and make a deduction, the result will be
send to Processing
Written by Roger TSAI 05/02/2007
***/
int sensorPin1 = 2; // select the input pin for sensor
int sensorPin2 = 3; // select the input pin for other sensor
int ledPin = 13; // select the pin for the LED
int val1 = 0; // variable to store the value coming from the sensor
int val2 = 0; // variable to store the value coming from the sensor
int valFinal = 0;
void setup() {
pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT
pinMode(sensorPin1, OUTPUT); // declare the ledPin as an OUTPUT
pinMode(sensorPin2, OUTPUT); // declare the ledPin as an OUTPUT
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
void loop() {
digitalWrite(ledPin, HIGH); // sets the LED on
val1 = analogRead(sensorPin1)*100; // read the value from the sensor
val2 = analogRead(sensorPin2)*100; // read the value from the sensor
valFinal = val1 - val2;
//Serial.print("A"); //header variable, so we know which sensor value is which
//Serial.print(val1, DEC);
// Serial.print(10, BYTE); //terminating character
//Serial.print("B"); //header variable, so we know which sensor value is which
//Serial.print(val2, DEC);
Serial.print(valFinal, DEC);
Serial.print(10, BYTE); //terminating character
delay(10);
}
/***
Create Animation for Body Fat Monitor,
to clearly visualize the percentage by
diagram of body fat percentage.
Created by Roger TSAI 05/03/2007
***/
import processing.serial.*;
Serial myPort; // The serial port
PFont myFont; // The display font
int val = 0;
int i = 40; // counter
float j = 0.0;
float k = 380.0;
int opacity = 50;
float valueA = 0.15;
float valNormA, valNormB; // normalized values of A and B
void setup () {
size(500, 500); // window size
frameRate(60);
myFont = loadFont("Courier-Bold-12.vlw");
textFont(myFont, 16);
fill(#E9FF5B, 200);
smooth();
background(#000000, 200);
strokeCap(ROUND);
ellipseMode(CENTER);
strokeWeight(3);
println(Serial.list()); // List all serial ports
myPort = new Serial(this, Serial.list()[1], 9600);
}
void draw()
{
drawPoint();
fill(0,1);
rect(0,0, width, height);
noStroke();
fill(140,140,220);// blue
rect(50,60,((width-50)/50*8),50);
rect(50,140,((width-50)/50*11),50);
rect(50,300,((width-50)/50*21),50);
rect(50,380,((width-50)/50*23),50);
fill(50,120,50);// green
rect(50+((width-50)/50*8),60,((width-50)/50*12), 50);
rect(50+((width-50)/50*11),140,((width-50)/50*11), 50);
rect(50+((width-50)/50*21),300,((width-50)/50*12), 50);
rect(50+((width-50)/50*23),380,((width-50)/50*11), 50);
fill(240,240,60);// yellow
rect(50+((width-50)/50*20),60,((width-50)/50*5), 50);
rect(50+((width-50)/50*22),140,((width-50)/50*6), 50);
rect(50+((width-50)/50*33),300,((width-50)/50*6), 50);
rect(50+((width-50)/50*34),380,((width-50)/50*6), 50);
fill(240,60,60);// red
rect(50+((width-50)/50*25),60,((width-50)/50*25), 50);
rect(50+((width-50)/50*28),140,((width-50)/50*22), 50);
rect(50+((width-50)/50*39),300,((width-50)/50*11), 50);
rect(50+((width-50)/50*40),380,((width-50)/50*10), 50);
fill(100,100,255);
textFont(myFont, 36);
text("MALE", width/2-40, 40);
text("FEMALE",width/2-20, 282);
fill(255,255,255);
textFont(myFont, 14);
text("20~", 5, 82);
text("39", 5, 102);
text("above", 5, 162);
text("39", 5, 182);
text("20~", 5, 322);
text("39", 5, 342);
text("above", 5, 402);
text("39", 5, 422);
text("UNDER", 52, 82);
text("FAT", 52, 102);
text("UNDER", 52, 162);
text("FAT", 52, 182);
text("UNDER", 52, 322);
text("FAT", 52, 342);
text("UNDER", 52, 402);
text("FAT", 52, 422);
text("HEALTHY", 128, 82);
text("8% - 20%", 128, 102);
text("HEALTHY", 160, 162);
text("11% - 22%", 160, 182);
text("HEALTHY", 250, 322);
text("21% - 33%", 250, 342);
text("HEALTHY", 270, 402);
text("23% - 34%", 270, 422);
text("OVER", 233, 82);
text("FAT", 233, 102);
text("OVER", 255, 162);
text("FAT", 255, 182);
text("OVER", 350, 322);
text("FAT", 350, 342);
text("OVER", 360, 402);
text("FAT", 360, 422);
text("OBESE", 380, 92);
text("OBESE", 380, 172);
text("OBESE", 435, 332);
text("OBESE", 440, 412);
println("myPort.available()" + myPort.available());
while (myPort.available() > 0) {
serialEvent(myPort.read());
}
i++;
}
void drawPoint(){
int p = i/20;
if( (p%2 ==0) ){
opacity = 10;
background(0);
}
noStroke();
fill(230,230,230,opacity);
rect (valueA*2*(width-50)+50, 0, 5, height);
text(valueA*100 + "%", valueA*2*(width-50)+50, height/2);
/* rect (valueA, 60, 5, 50);
rect (valueA, 140, 5, 50);
rect (valueA, 300, 5, 50);
rect (valueA, 380, 5, 50);
*/
}
//Serial parsing stuff to get the raw values from
//the serial event
void serialEvent(int serial){
if(serial > 0){ valueA = serial;
}
}
Another animation I made by Processing is inspired by the idea of impedance. I translate the idea of body impedance into social resistance, especially romance resistance. By simply creating two icons indicate boy and girl, the animation show your resistance of love. The more fat you got, the more love resistance grow.
/***
Create Animation for Body Fat Monitor,
to enhance the meaning behind the number
of body fat percentage,
which give user more visual strike,
to remind the importance of controling body fat.
Created by Roger TSAI 05/03/2007
***/
import processing.serial.*;
Serial myPort; // The serial port
PFont myFont; // The display font
String buff = "";
int val = 0;
int NEWLINE = 10;
int i = 40; // counter
float j = 0.0;
float k = 380.0;
int valueA = 200;
int valueB; // the serial port data
int[] valuesA = new int[10];
int[] valuesB = new int[10];
float valNormA, valNormB; // normalized values of A and B
void setup () {
size(500, 500); // window size
frameRate(60);
myFont = loadFont("Courier-Bold-12.vlw");
textFont(myFont, 16);
fill(#E9FF5B, 200);
smooth();
background(#000000, 200);
strokeCap(ROUND);
ellipseMode(CENTER);
strokeWeight(3);
println(Serial.list()); // List all serial ports
myPort = new Serial(this, Serial.list()[1], 9600);
}
void draw()
{
fill(0,1);
rect(0,0, width, height);
println("myPort.available()" + myPort.available());
while (myPort.available() > 0) {
serialEvent(myPort.read());
}
// Boy
noStroke();
fill(153,196,233);
ellipse(140, 120, 60, 60);//head
rect(90, 150, 100, 100);//body
rect(100,250,30,60);
rect(150,250,30,60);
ellipse(114, 310, 29, 29);
ellipse(164, 310, 29, 29);
// Girl
noStroke();
fill(239,152,193);
ellipse(380, 120, 60, 60);//head
quad(340, 150, 420, 150, 440, 250, 320, 250);//body
rect(340,250,30,60);
rect(390,250,30,60);
ellipse(354, 310, 29, 29);
ellipse(404, 310, 29, 29);
i++;
j++;
if(i%20 == 19){
drawText();
drawPulse();
}
}
void drawText(){
fill(30,200,200);
textFont(myFont, 32);
text("LOVE RESISTANCE", 120, 40);
fill(200,30,200);
textFont(myFont, 24);
if (valueA < 100){
text("low impedence", 150, 70);
fill(255,100,100);
/*beginShape();
vertex(30, 20);
bezierVertex(80, 0, 80, 75, 30, 80);
bezierVertex(50, 80, 60, 25, 30, 20);
endShape();*/
}
else if (valueA > 100 || valueA < 200){
text("mid impedence", 150, 70);
}
else if(valueA >200){
text("high impedence", 150, 70);
}
}
void drawPulse(){
noStroke();
fill(255,100,200);
ellipse(j,k ,3,3);
if(j > width){
j = 0;
background(#000000, 200);
}
if(j < (width/2+60) && j >(width/2-60)){
k= valueA;
}
else{
k = 380.0;}
}
//Serial parsing stuff to get the raw values from
//the serial event
void serialEvent(int serial){
if(serial > 0){ valueA = serial;
}
}
|