DRAFT: This module has unpublished changes.

Using an Arduino Duemilanove, we chose to create a simple mechanism to measure the force exerted by the pulsating brachial artery during blood pressure measurement. This was inspired by the force sensors provided in the lab starter kits. With the aid of LadyAda.net (no affiliation with Ada, our group member), generic code specific to the FSR was used for the basis of our programming.


In concept, we would provide a static pressure of approximately 80mm Hg on the elbow, provided by the cuff and measure the difference in pressure by placing the FSR on the inner elbow. This method of measurement was used because standard tape would not hold the FSR to the skin with enough force and furthermore because physical holding of the FSR may include interference (caused by the pulse of the finger, hand, etc.) in the readings.


Specific to the configuration of the microcontroller, we used the schematic provided to us also by LadyAda; however, we added an additional foot of wire, that was soldered to the FSR, to allow for subject mobility during measurement.


With respect to the math and concept behind the programming, the equation used was the standard voltage equation.

Solved for FSR,

In our specific example, we used a 5V supply and 10K resistor, which would be the V_cc and R variables, respectively. The V, voltage, value is converted from the analog reading obtained by the arduino FSR.


Once the resistance, or fsrResistance in the code, was determined, the inverse was taken to determine the conductance, for convenience, as the true relationship between force and resistance is inverse.


Using this relationship, the values are converted to force in Newtons. To verify these numbers, we additionally calculated the force in excel and were able to produce several graphs:



Average values from these graphs revealed that the force exerted by the brachial artery is approximately 1.83N


LadyAda FSR code & Image Source: www.ladyada.net...




Encountered Issues With Our Microcontroller:

Although the graphs produced appear impeccable, further analysis revealed a discrepancy in the time difference. Notably, in our code, there is a 10ms delay between readings, however, the graph does not reflect this; there are too few points to mimic an accurate blood pressure reading. As a result, we cannot accurately represent the force as a function of time. Reflection upon this issue leads us to believe that there is a significant amount of time required to run the code in between delays. We are looking at the Arduino programming to perhaps insert time stamps to determine if this is true. If so, we can still find the average force of the pulse, but will not be able to plot the function with respect to time. Additionally, we may be able to circumnavigate the issue if we run the delay and the analytical code in parallel to avoid the accumulation of more delay than we intend. 


DRAFT: This module has unpublished changes.

Our Arduino Code as of 03/05/11


/* FSR testing sketch. 
Connect one end of FSR to power, the other end to Analog 0.
Then connect one end of a 10K resistor from Analog 0 to ground 
For more information see www.ladyada.net/learn/sensors/fsr.html */
int fsrPin = 0;     // the FSR and 10K pulldown are connected to a0
unsigned long fsrReading;     // the analog reading from the FSR resistor divider
unsigned long fsrVoltage;     // the analog reading converted to voltage
unsigned long fsrResistance;  // The voltage converted to resistance, can be very big so make "long"
unsigned long fsrConductance; 
unsigned long fsrForce;       // Finally, the resistance converted to force
void setup(void) {
  Serial.begin(9600);   // We'll send debugging information via the Serial monitor
void loop(void) {
  fsrReading = analogRead(fsrPin);  
  Serial.print("Analog reading fsrReading = ");
  // analog voltage reading ranges from about 0 to 1023 which maps to 0V to 5V (= 5000mV)
  fsrVoltage = map(fsrReading, 0, 1023, 0, 5000);
  Serial.print("Voltage reading in mV fsrVoltage = ");
  if (fsrVoltage == 0) {
    Serial.println("No pressure");  
  } else {
    // The voltage = Vcc * R / (R + FSR) where R = 10K and Vcc = 5V
    // so FSR = ((Vcc - V) * R) / V        yay math!
    fsrResistance = 5000 - fsrVoltage;     // fsrVoltage is in millivolts so 5V = 5000mV
    fsrResistance *= 10000;                // 10K resistor
    fsrResistance /= fsrVoltage;
    Serial.print("FSR resistance in ohms = ");
    fsrConductance = 1000000;           // we measure in micromhos so 
    fsrConductance /= fsrResistance;
    Serial.print("Conductance in microMhos: ");
    // Use the two FSR guide graphs to approximate the force
    if (fsrConductance <= 1000) {
      fsrForce = fsrConductance / 80;
      Serial.print("Force in Newtons: ");
    } else {
      fsrForce = fsrConductance - 1000;
      fsrForce /= 30;
      Serial.print("Force in Newtons: ");

DRAFT: This module has unpublished changes.