[SOLUCIONADO] Valores pequeñísimos en entradas analógicas

Hola. Tras algún tiempo sin encontrar solución os pido ayuda.

Tengo un pequeño proyecto para mi moto. La voy a equipar con un arduino nano y algunos sensores que echo a faltar.

De momento estoy haciendo pruebas con un 'tilt sensor' que ya tenía y con una PT100. El caso es que el tilt sensor me da valores siempre inferiores a 100 (aunque lo sacuda), aunque coherentes. Pero hoy he conectado la pt100 haciendo un divisor de tensión con una resistencia de 1k (para que saque menos de 1.1V, independientemente si está a 20 o a 400 grados, según su datasheet). Por supuesto he utilizado analogReference(INTERNAL), pero los valores en A2 (donde tengo la toma del divisor de tensión) siempre me da entre 0 y 4 (independientemente de que la sonda esté a temperatura ambiente o en contacto con el soldador) y no son resultados muy coherentes.

El tilt sensor es un módulo con salida analógica y digital (evidentemente utilizo la analógica). En el divisor de tensión la resistencia de 1k está como R1 y la PT100 como R2, es decir:

A2 | | + -------- R1 (1k)-------|-------- R2 (PT100) ------------ -

Otra cosa que me llama la atención es que se supone que la salida analógica del tilt sensor debería sacar entre 0 y 5 volts y rara vez saca más de 0,5.

Estoy perdido ... ¿Alguna idea?

tendrás que poner que Tilt Sensor te refieres, por que los que yo conozco son equivalentes a un contacto de un pulsador, no es de que den 0 a 5 V es que están NA y cuando vibra se cierran, debes tratarlos como si de un push button se tratara (con su pullup y todo)

Cierto. Aporto más información:

Salida analógica conectada a A0. Alimentada por la salida 5V del Nano

  • Sonda PT100:

Es una sonda de 2 hilos, por eso el divisor. La entrada de tensión del divisor es la salida de 5V del Nano

  • El BT es un HC-05 y funciona de maravilla. Conectado a D10 y D11. Alimentado por la salida 5V del Nano

  • Los negativos todos unidos

  • El Nano se alimenta por +12V por Vin

Adjunto también una foto del invento:

El resto de componentes están bajo el nano, el HC-05 y el sensor para ahorrar espacio.

temperature-probes.jpg

Adjunto además un esquema de conexiones y el sketch, aunque como no he encontrado en Fritzing los símbolos del vibration sensor y el PT100 los he cambiado por una brújula (tb 4 pines) y un termistor.

Sketch:

#include <SoftwareSerial.h>

#define RxD 10
#define TxD 11

SoftwareSerial BTSerial(RxD, TxD);
int led = 13;
int tiltVCC= 8;
int tilt=A0;
int pt100=A2;
int vtilt;
int vpt100;
int comando;

void setup()
{   
  pinMode(led,OUTPUT);
  digitalWrite(led,LOW);
  BTSerial.flush();
  delay(500);
  analogReference(INTERNAL);
  BTSerial.begin(9600);
  BTSerial.print("Hola, soy Perica: ");

  delay(100);

}

void loop()
{
  vtilt = analogRead(tilt);
  vpt100 = analogRead(pt100);
  if (vpt100 > 2){
    BTSerial.write("temp: ");
    BTSerial.println(vpt100);
  }
  if (vtilt > 10) 
  {
    BTSerial.write("Cuidadin: ");
    BTSerial.println(vtilt);
  }
  while (BTSerial.available())
  {
       char dato= BTSerial.read();
       switch(dato)
       {
         case '2':
         {
           BTSerial.write("temp: ");
           BTSerial.println(vpt100 + "|" + vtilt);
           break;
         }
         case '1':
         {
           digitalWrite(led,HIGH);
           BTSerial.println("Led ON");
           break;
         }
         case '0':
         {
           digitalWrite(led,LOW);
           BTSerial.println("Led OFF");
           break;
         }      
       }
  }
}

Si mides tensión con un tester/multímetro entre gnd y A0 del modulo PT100 que lees?

Saludos.
Para poder tomar la lectura de la PT100 vas a tener que cambiar la resistencia de 1K por una de 100 ohm, si es posible de precision de 1%.
Luego de eso usa estas dos rutinas que hice para una PT1000. Donde Rc es el valor de la resistencia que colocas para el divisor de tension.
Puerto es el pin usado para conectar la PT100

float Rc  = 1000.0;           //  Resistencia de calibracion
bool   activo =  false;

float calcula_resistencia(byte puerto, float RC){
  unsigned long lectura = 0;
  float intensidad = 0;
  for(int i = 0; i < max_lectura; i++) lectura += analogRead(puerto);
  lectura/=max_lectura;
  Serial.println(lectura);
  intensidad = (lectura-1023.0) / RC;
  return abs(lectura / intensidad); 
}

long calcula_temperatura(float R,float R0) { 
   float A=3.9083E-3; 
   float B=-5.775E-7; 
   float T; 
   
   R=R/R0; 
   
   //T = (0.0-A + sqrt((A*A) - 4.0 * B * (1.0 - R))) / 2.0 * B; 
   T=0.0-A; 
   T+=sqrt((A*A) - 4.0 * B * (1.0 - R)); 
   T/=(2.0 * B); 
   
   if(T>0&&T<200) { 
     return T; 
   } 
   else { 
     //T=  (0.0-A - sqrt((A*A) - 4.0 * B * (1.0 - R))) / 2.0 * B; 
     T=0.0-A; 
     T-=sqrt((A*A) - 4.0 * B * (1.0 - R)); 
     T/=(2.0 * B); 
     return (long)T; 
   } 
}

Yo hago uso de las rutinas llamandolas asi:

float resistencia = calcula_resistencia(T2, Rc);
    long temperatura =  calcula_temperatura(resistencia,Rc);

Chicos muchisimas gracias por vuestras aportaciones. Al poner el multímetro en la pt100, como GO_zalo me sugirió me he dado cuenta de que no llevaba tensión, y tampoco R1 ni el vibration sensor. Entonces he visto que había soldado el cable que los alimenta a GND en vez de a 5V. HORROOORR. Una vez soltado y resoldado en su sitio parece que todo funciona ok.

En cuanto a las rutinas de max_saeta me encantan, así que en cuanto tenga un rato libre las pruebo.

Gracias a todos por vuestra ayuda.