2014-01-17 3 views
0

안녕하세요, 나는 arduino 우노와 힘 센서를 사용하여 프로젝트를하고 있어요. 내가 겪은 문제는 센서에 힘을 가하면 값을 보여 주지만 힘을 가하면 멈추었을 때 여전히 0 대신 동일한 값을 보여줍니다. 다른 힘으로 적용했을 때 값은 그에 따라 바뀌지 만 여전히 강제 적용을 중지하면 0이되지 않습니다. Pls 도움! 먼저Arduino fsr 값을 유지

int iForceSensorReading;  // the analog reading from the FSR resistor divider 
    int iForceSensorReading1; 
    int iForceSensorReading2; 
    int iForceSensorReading3; 
    int iForceSensorReading4; 
    int iForceSensorVoltage;  // the analog reading converted to voltage 
    int iForceSensorVoltage1; 
    int iForceSensorVoltage2; 
    int iForceSensorVoltage3; 
    int iForceSensorVoltage4; 
    unsigned long ulForceSensorResistance;// The voltage converted to resistance, can be   very big so make "long" 
    unsigned long ulForceSensorResistance1; 
    unsigned long ulForceSensorResistance2; 
    unsigned long ulForceSensorResistance3; 
    unsigned long ulForceSensorResistance4; 
    unsigned long ulForceSensorConductance; 
    unsigned long ulForceSensorConductance1; 
    unsigned long ulForceSensorConductance2; 
    unsigned long ulForceSensorConductance3; 
    unsigned long ulForceSensorConductance4; 
    float FsrForce = 0;  // Resistance converted to force 
    float FsrForce1 = 0; 
    float FsrForce2 = 0; 
    float FsrForce3 = 0; 
    float FsrForce4 = 0; 
    void setup(void){ 
     Serial.begin(9600); // send debugging information via the Serial monitor 
    } 
    void loop(void){ 
     iForceSensorReading = analogRead(A0);//read index finger pressure 
     delay(30); 
     // analog voltage reading ranges from about 0 to 1023 which maps to 0V to 5V (=   5000mV) 
     iForceSensorVoltage = map(iForceSensorReading, 0, 1023, 0, 5000); 
     if (iForceSensorVoltage == 0){ 
     Serial.println("No pressure at index finger"); 
     } 
     else{ 
     ulForceSensorConductance = conductanceFunction(ulForceSensorResistance,   iForceSensorVoltage); 
     delay(30); 
     } 
     if (ulForceSensorConductance <= 1000){ 
     FsrForce = ulForceSensorConductance/80; 
     Serial.print("Force applied by index finger in Newtons: "); 
     Serial.println(FsrForce, 4);  
     } 
     else{ 
     FsrForce = ulForceSensorConductance - 1000; 
     FsrForce /= 30; 
     Serial.print("Force applied by index finger in Newtons: "); 
     Serial.println(FsrForce, 4); 
     delay(30); 
     } 
     Serial.println("-------------------------------------------------------"); 
     iForceSensorReading1 = analogRead(A1);//read middle finger pressure 
     delay(30); 
     iForceSensorVoltage1 = map(iForceSensorReading1, 0, 1023, 0, 5000); 
     if (iForceSensorVoltage1 == 0){ 
     Serial.println("No pressure at middle finger"); 
     } 
     else{ 
     ulForceSensorConductance1 = conductanceFunction(ulForceSensorResistance1,   iForceSensorVoltage1); 
     delay(30); 
    } 
     if (ulForceSensorConductance1 <= 1000){ 
     FsrForce1 = ulForceSensorConductance1/80; 
     Serial.print("Force applied by middle finger in Newtons: "); 
     Serial.println(FsrForce1, 4);  
     } 
     else{ 
     FsrForce1 = ulForceSensorConductance1 - 1000; 
     FsrForce1 /= 30; 
     Serial.print("Force applied by middle finger in Newtons: "); 
     Serial.println(FsrForce1, 4); 
     delay(30);  
     } 
     Serial.println("-------------------------------------------------------"); 
     iForceSensorReading2 = analogRead(A2);// read ring finger pressure 
     delay(30); 
     iForceSensorVoltage2 = map(iForceSensorReading2, 0, 1023, 0, 5000); 
     if (iForceSensorVoltage2 == 0){ 
     Serial.println("No pressure at ring finger"); 
     } 
     else{ 
     ulForceSensorConductance2 = conductanceFunction(ulForceSensorResistance2,   iForceSensorVoltage2); 
     delay(30); 
     } 
     if (ulForceSensorConductance2 <= 1000){ 
      FsrForce2 = ulForceSensorConductance2/80; 
      Serial.print("Force applied by ring finger in Newtons: "); 
      Serial.println(FsrForce2, 4);  
     } 
     else{ 
      FsrForce2 = ulForceSensorConductance2 - 1000; 
      FsrForce2 /= 30; 
      Serial.print("Force applied by ring finger in Newtons: "); 
      Serial.println(FsrForce2, 4); 
      delay(30);  
     } 
     Serial.println("-------------------------------------------------------"); 
     iForceSensorReading3 = analogRead(A3);//read little finger pressure 
     delay(30); 
     iForceSensorVoltage3 = map(iForceSensorReading3, 0, 1023, 0, 5000); 
     if (iForceSensorVoltage3 == 0) 
     {Serial.println("No pressure at little finger"); 
     }else { 
     ulForceSensorConductance3 = conductanceFunction(ulForceSensorResistance3,   iForceSensorVoltage3); 
     delay(30); 
     } 
     if (ulForceSensorConductance3 <= 1000) 
     {FsrForce3 = ulForceSensorConductance3/80; 
     Serial.print("Force applied by little finger in Newtons: "); 
     Serial.println(FsrForce3, 4);  
     }else 
     { 
     FsrForce3 = ulForceSensorConductance3 - 1000; 
     FsrForce3 /= 30; 
     Serial.print("Force applied by little finger in Newtons: "); 
     Serial.println(FsrForce3, 4); 
     delay(30);  
     } 
     Serial.println("-------------------------------------------------------"); 
     iForceSensorReading4 = analogRead(A4);//read thumb pressure 
     delay(30); 
     iForceSensorVoltage4 = map(iForceSensorReading4, 0, 1023, 0, 5000); 
     if (iForceSensorVoltage4 == 0) 
     {Serial.println("No pressure at thumb"); 
     } 
     else 
     { 
     ulForceSensorConductance4 = conductanceFunction(ulForceSensorResistance4,   iForceSensorVoltage4); 
     delay(30); 
     } 
     if (ulForceSensorConductance4 <= 1000) 
     {FsrForce4 = ulForceSensorConductance4/80; 
     Serial.print("Force applied by thumb in Newtons: "); 
     Serial.println(FsrForce4, 4);  
     } 
     else 
     { 
     FsrForce4 = ulForceSensorConductance4 - 1000; 
     FsrForce4 /= 30; 
     Serial.print("Force applied by thumb in Newtons: "); 
     Serial.println(FsrForce4, 4); 
     delay(30);  
     } 
     Serial.println("-------------------------------------------------------"); 
     float totalForce = FsrForce + FsrForce1 + FsrForce2 + FsrForce3;// total force   applied by hand 
     Serial.print("Total force applied by hand: "); 
     Serial.println(totalForce, 4); 
     delay(30); 
     Serial.println("-------------------------------------------------------"); 
     delay(3000); 
    } 
    // The voltage = Vcc * R/(R + FSR) where R = 10K and Vcc = 5V 
    // so FSR = ((Vcc - V) * R)/V 
    int conductanceFunction(long x, long y) 
    {long result; 
    x = 5000 - y; // fsrVoltage is in millivolts so 5V = 5000mV 
    x *= 10000; // 10K resistor 
    x /= y; 
    result = 1000000/x; //ulForceSensorConductance2 = 1000000 measured in micromhos 
    return result; 
    } 

답변

0

:

iForceSensorVoltage가 0이 아닌 경우에만 ulForceSensorConductance를 업데이트합니다. 내가 완벽하게 제로를 얻는 것이 어렵다고 생각한다면. 2

if (iForceSensorVoltage == 0){ 
    Serial.println("No pressure at index finger"); 
    } 
    else{ 
    ulForceSensorConductance = conductanceFunction(ulForceSensorResistance,   iForceSensorVoltage); 
    delay(30); 
    } 

:

내가 ulForceSensorResistance는 초기화되고 실제로 값을 할당되지 사용 결코하지만, 첫 번째 인수로 conductanceFunction로 전달되는 것을 알 수있다. x 내부의 conductanceFunction은 즉시 덮어 쓰여집니다.

unsigned long ulForceSensorResistance1; 
... 
ulForceSensorConductance1 = conductanceFunction(ulForceSensorResistance1, iForceSensorVoltage1); 
... 
int conductanceFunction(long x, long y) 
{long result; 
x = 5000 - y; // fsrVoltage is in millivolts so 5V = 5000mV 
관련 문제