Learning   Examples | Foundations | Hacking | Links

RCtime

En las situaciones en las que se usan todos los pines A/D (analógicos/digitales) de las Duinos, RCtime es una solución para leer cualquier tipo de sensores resistivos en cualquier pin digital.

Esta función RCtime duplica la función de Basic Stamp del mismo nombre. Se puede utilizar para leer los sensores resistivos de cualquier tipo. Cambia el tamaño del condensador para lograr la resolución deseada.

La función también puede utilizarse para leer el voltaje de salida de los sensores, tales como el sensor de distancia por infrarrojos Sharp con algunas advertencias.

Una virtud de RCtime es que puede tener un rango muy amplio, y manejar valores que para ser leidos requieren una entrada A/D de 16-18 bits. Una desventaja es que no es perfectamente lineal, porque la carga de un condensador a través de una resistencia no produce una curva lineal.

/* RCtime
 *   Duplicates the functionality of the Basic Stamp's RCtime
 *   Allows digital pins to be used to read resistive analog sensors
 *   One advantage of this technique is that is can be used to read very wide ranging inputs.
 *   (The equivalent of 16 or 18 bit A/D)
 *  

 Schematic
                  +5V
                   |
                   |
                  ___
                  ___    Sensing Cap
                   |      .001 ufd  (change to suit for required resolution)
                   |      (102) pfd
                   |
sPin ---\/\/\/-----.
       220 - 1K    |
                   |
                   \   
                   /     Variable Resistive Sensor
                   \     Photocell, phototransistor, FSR etc.
                   /
                   |
                   |
                   |
                 _____ 
                  ___
                   _

*/

int sensorPin = 4;              // 220 or 1k resistor connected to this pin
long result = 0;
void setup()                    // run once, when the sketch starts
{
   Serial.begin(9600);
   Serial.println("start");      // a personal quirk 
}
void loop()                     // run over and over again
{

   Serial.println( RCtime(sensorPin) );
   delay(10);

}

long RCtime(int sensPin){
   long result = 0;
   pinMode(sensPin, OUTPUT);       // make pin OUTPUT
   digitalWrite(sensPin, HIGH);    // make pin HIGH to discharge capacitor - study the schematic
   delay(1);                       // wait a  ms to make sure cap is discharged

   pinMode(sensPin, INPUT);        // turn pin into an input and time till pin goes low
   digitalWrite(sensPin, LOW);     // turn pullups off - or it won't work
   while(digitalRead(sensPin)){    // wait for pin to go low
      result++;
   }

   return result;                   // report results   
}   

Share