readAnalog() lecturas extrañas

Hola a todos.

Tengo lecturas raras en los pines analogicos, no se si tendré el arduino estropeado

1º lectura en vacio uno a uno
A5:1020
A4:1020
A3:305
A2:330
A1:320
A0:254

esto ocurre al tener un LCD IC2 que por lo que entiendo aunque uso las salidas SDA y SCL que estan a lado de los digitales son los mismos que los analogicos A5 y A4

Pero el problema mas raro es que si leo dos pines analogicos uno detras de otro con un delay de 150 para dejar respirar al trasto, me da variaciones raras.

Es decir si leo el A5 y el A0 en el A0 tengo 1020 y 900 respectivamente. Pero si leo A3 y A0 tengo 320 en los dos.

Osea entiendo que dependiendo de la primera lectura que haces de un pin con voltaje o no, varia la lectura del segundo pin. Esto es una putada. ¿Porque? Yo tengo una celula para detectar luz en el A3 y claro esto hace que las lecturas del A1 y A0 donde tengo sensores de temperatura LM35 me varien segun hay luz o no ya que varia el voltaje de la patilla A3. ¿como soluciono esto?

Tambien he observado que los delay cambian los valores.
A5:1020 A0:995 con delay(50)
A5:1020 A0:790 con delay(450)
A5:1020 A0:760 con delay(1450)

con delays superiores no varia.

Cual es el delay optimo, entendia que con 50 era suficiente pero veo que no.

Todo mi programa funciona con un timer de 1 segundo donde podria leer alternativamente los sensores pero esto no sería optimo para mi, pero desde luego no estoy dispuesto a usar delays porque esto estropean todo.

Un poco de ayuda por favor.

por informaros este proyecto controla un quemador de pellet pero todo va mas o menos bien. este punto es en el que me estoy debanando los sesos.

Muchas gracias de antemano

Si.. Cuando se usan adaptadores IC2 debido a el uso del bus.....

Un voltaje en milivolts de hasta 500 puede ser causa de la estática..... Ahora si lo que vas a leer son lm35 lo mas aconsejable seria aterrizar los pones para q no andén "sueltos" por ahí los gringos prefieren unos 10k para este tipo de cosas, aunque claro q depende de tu aplicacion
Ahora si eso no da resultado quizás te convenga investigar un filtro resistencia capacitor.

Y puede que de plano no se pueda... Lo digo por experiencia personal ya que el voltaje analógico puede variar por un cambio en la LCD, por un relay q se enciende o así... Y en cuyo caso seria conveniente cambiar a ds1820, sonda de temperatura digital.

Suena interesante tu proyecto, me podrías decir mas?

Saludos.
Alex.

Dos cosas debes aportar: Esquema de tu aplicacion. Basta que dibujes como estan conectados los sensores a las entradas A0-A5 y el código.

sur como te dije esquema no hay, soy informático. De electrónica ando algo justo en cuanto al código no tengo problema en mandártelo esta noche pero el programa es algo largo, ten en cuenta que controla todo el quemador, pero esas pruebas también las he hecho con el ejemplo del ide de lecturas analógicas.
Mi problema es como resolver que me de una lectura limpia, sin que interfiera las señales de al lado.
Posiblemente la solución de Alex sea la mas plausible ir a otro sensor digital pero me gustaría comprender porque y si como se puede tratar para el futuro si pongo mas sensores.

Esquema lo haces a mano. Dibujas 6 circulos que representan la entrada

Tomas esta imagen y dibujas a mano alzada lo que tengas, si hay resistencia a masa o no. Y luego una flecha al sensor que tengas o no tengas.
No es tan complicado, intentalo.
O sacale una foto a la entrada del arduino que muestre lo que esta conectado a las entradas Analogicas

Quizás te pase como a mi mas de alguna vez, cuando he tenido un problema y que preguntar.... Al dibujar lo que tengo fisicamente resulta que estaba lo que había pensado armar :grinning: :grinning:

Exacto, esa es la idea

Hola de nuevo, ya que estais interesados en el proyecto os lo detallare pero queria ahorraros tiempo ya que tiene algo de miga.

Como os dije se trata de controlar un quemador de pellet casero.

La mayoria de cosas las tengo en la casa del campo que es donde está el quemador. aqui a la city solo traigo lo básico para ir reprogramando cosas.

Arduino con la celula para detectar la luz del fuego.

Imagen de como lo tengo en este momento.

Arduino con el LM35 para la temperatura ambiente

Bueno como veis tengo instalada encima del arduino una placa que coje todos los pines del arduino y tiene algunas cosillas mas.
Entrada de corriente donde enchufo un transformador de un router que da unos 15v. a sus dos lados hay limitadores de tension. A uno un 7812 para ventiladores de momento y al otro un 7805 para casi todo.
Veis 4 botones que controlan la tecla MENU, ATRAS, MAS y MENOS para manejarme por los menus y cambiar los valores.
En el campo tengo otra placa con dos reles que encienden y apagar la bujia de encendido y el motor que sirve pellet al quemador. Tambien hay otro LM35 pegado al tubo del agua para controlar la temperatura de esta.
El funcionamiento es mas o menos este. Hay un ciclo en segundos de 20 aprox (variable por menus) en el que enciendo n segundos (2 aprox) el motor que sirve pellet. Por otro lado se enciende la bujia para que se produzca la combustion con los pellet mientras la celula detecta que no hay luz. En este momento la celula provoca un voltaje alto y al leerla por el A3 me falsea el valor del A1 sobre todo que es el de la temperatura ambiente.

Os pongo código, perdonar que esta poco depurado y hay muchas kakitas por ahi, tener en cuenta que estoy en pruebas. bueno no me deja es muy grande lo parto

//Librerias necesarias para el SERVO
//#include <Servo.h>

//Librerias necesarias Pantalla 20x4
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
uint8_t pellet[8] = {10,0x15,10,0,0x11,0x11,14,14};
uint8_t bujia[8] = {4,4,4,14,14,14,14,4};
LiquidCrystal_I2C lcd(0x27,20,4);


//Declaracion variables
// estas dos variables se usan para controlar el tiempo
unsigned long tiempoActual = 0;

const int segundo = 1000;
const int minuto = segundo*60;
const byte PULSADO = 0;
const byte ON = 1;
const byte OFF = 0;
const byte AUTO =2;
const byte BAJO = 150;
const byte MEDIO = 200;
const byte ALTO = 250;
const byte MENUSTATUS =0;
const byte MENUMOTOR=1;
const byte MENUBUJIA =2;
const byte MENUCICLO =3;
const byte MENUSIRV =4;
const byte MENUVENT =5;
const byte MaxMenus = 5;

// Variables de los dispositivos
byte tiempoCicloMotor = 20;  // cada x segundos
byte tiempomotorencendido = 2; // enciende el motor x segundos
byte segundosmotor = 0; // tiempo transcurrido desde que se enciende el motor de pellet
int valorSensorLuz =0;
int tempInterior=0;
int tempAgua=0;
//byte veloVent = ALTO; // velocidad del ventilador 
//---------------------------------------
// Definicion de dispositivos de salida
byte pinMotor=6;  // pin que controla rele del motor de pellet.
byte pinBujia=7;  // pin que enciende la bujia
byte pinVentilador=10; // pin para el ventilador (PWM)
//byte pinServo = 9; // para SERVO -- creo que tienen que ser el 9 o 10
byte ledArduino = 13;
//---------------------------------------
// Definicion de dispositivos de entrada DIGITALES
byte pulsadorMas = 5;  // para incrementar valor
byte pulsadorMenos = 2; // para decrementar valor
byte pulsadorMenuAtras = 3; // se usa para cambiar por los menus
byte pulsadorMenu = 4; // se usa para cambiar por los menus
//---------------------------------------
//---------------------------------------
// Definicion de dispositivos de entrada ANALOGICOS
byte sensorLuz = A2;  // para leer celula fotovoltaica
byte sensorTempInt = A5; // leer temperatura ambiente
byte sensorTempAgua = A0; // leer temperatura ambiente
// A5 y A4 o se si estaran jodidos
//---------------------------------------
// estados dispositivos
byte estadopulsadormas = OFF;
byte estadopulsadormenos = OFF;
byte estadopulsadormenu = OFF;
byte estadopulsadormenuatras = OFF;
byte estadoMotor = AUTO;
byte estadoBujia = OFF;
byte estadoVentilador  = ALTO;
boolean hayLuz = false;
//---------------------------------------
// --estadoMenu--
// 0 trabajando.
// 1 Bujia encendida ON|OFF.
// 2 Segundos ciclo motor pellet.
// 3 Segundos motor encendido pellet.
// 4 Ventilador ON|OFF
// 5 Modo 20x3
// 6 Modo 30X3
// 7 Segundos ciclo motor ceniza. // no de momento
// 8 Segundos motor encendido ceniza. // no de momento
byte estadoMenu = 0;
//-------------------------------------
// variables para el SERVO
//Servo miServo;
//int angulo=60;

void setup() {    
  
  lcd.init();                      // initialize the lcd 
  lcd.backlight(); 
  // creamos caracter de pellet y bujia
  lcd.createChar(0, pellet);
  lcd.createChar(1,bujia);
  lcd.home();
  
  pinMode(pinMotor,OUTPUT);
  pinMode(pinBujia,OUTPUT);
  pinMode(ledArduino,OUTPUT);
  pinMode(pulsadorMas, INPUT_PULLUP);
  pinMode(pulsadorMenos, INPUT_PULLUP);
  pinMode(pulsadorMenu, INPUT_PULLUP);
  pinMode(pulsadorMenuAtras, INPUT_PULLUP);
//  pinMode(sensorLuz,INPUT);
//  pinMode(sensorTempInt,INPUT);
//  pinMode(sensorTempAgua,INPUT);
//  miServo.attach(pinServo);

  //Iniciamos el fondo retroiluminado
  lcd.backlight();
  //Iniciamos la pantalla
  lcd.init();
}

void loop() {
  unsigned char comando=0;

  if (millis() >= tiempoActual+segundo)
  {
      tiempoActual=millis();
      if (estadoMotor==AUTO){
        ++segundosmotor;
      }  
      compruebaSalidas();
      botones();
      pintainfo();
//      analogWrite(pinVentExt, veloVentExt); //ventilador exterior
      //miServo.write(angulo); 
  }
  else
  {
    compruebaEntradas();
    leesensores();
  }
}

//----------------------------------------------
// comprueba si se ha pulsado algún boton
void compruebaEntradas() {
    if (digitalRead(pulsadorMas)== PULSADO) {
     estadopulsadormas = ON; 
    }
    if (digitalRead(pulsadorMenos)== PULSADO) {
     estadopulsadormenos = ON; 
    }
    if (digitalRead(pulsadorMenu)== PULSADO) {
     estadopulsadormenu = ON; 
    }
    if (digitalRead(pulsadorMenuAtras)== PULSADO) {
     estadopulsadormenuatras = ON; 
    }
}

//--------------------------------------------------
// activa las salidas oportunas
void compruebaSalidas (){

  // --------------- MOTOR ----------------
  if (estadoMotor==ON)
  {
    digitalWrite(pinMotor, HIGH);
    digitalWrite(ledArduino, HIGH);
    //angulo=60; //abrimos compuerta
    segundosmotor = 0;
    lcd.setCursor(19,3);//Saltamos a la 4 linea
    lcd.write(0);//pintamos sirviendo
  }
  else if (estadoMotor==AUTO)
  {
    if (segundosmotor == tiempoCicloMotor)
    {
      digitalWrite(pinMotor, HIGH);
    digitalWrite(ledArduino, HIGH);
      //angulo=60; //abrimos compuerta
      segundosmotor = 0;
      lcd.setCursor(19,3);//Saltamos a la 4 linea
      lcd.write(0);//pintamos sirviendo
    }
    else if (segundosmotor == tiempomotorencendido)
    {
       digitalWrite(pinMotor, LOW);
    digitalWrite(ledArduino, LOW);
      //angulo=170; //cerramos compuerta pero hay que esperar 1 o  segundos
      lcd.setCursor(19,3);//Saltamos a la 4 linea
      lcd.print(" ");//Escribimos en la 4 linea
    }
  }
  else if (estadoMotor==OFF)
  {
    digitalWrite(pinMotor, LOW);
    segundosmotor = 0;
    //angulo=170; //cerramos compuerta
    lcd.setCursor(19,3);//Saltamos a la 4 linea
    lcd.print(" ");//Escribimos en la 4 linea
  }
  // --------------- MOTOR ----------------
  
  // --------------- BUJIA ----------------
  if (estadoBujia==ON)
  {
    if (hayLuz)
    {
      digitalWrite(pinBujia,LOW);
      lcd.setCursor(18,3);//Saltamos a la 4 linea
      lcd.print(" ");//Escribimos en la 4 linea
    }
    else
    {
      digitalWrite(pinBujia,HIGH);
      lcd.setCursor(18,3);//Saltamos a la 4 linea
      lcd.write(1);//pintamos bujia
    }
  }
  else
  {
    digitalWrite(pinBujia,LOW);
    lcd.setCursor(18,3);//Saltamos a la 4 linea
    lcd.print(" ");//Escribimos en la 4 linea
  }
  // --------------- BUJIA ----------------
  
  // --------------- VENTILADOR ----------------
  analogWrite(pinVentilador, estadoVentilador); // damos velocidad al ventilador

}
// Si se ha pulsado algun boton, actua en consecuencia;
void botones(){
  if (estadopulsadormas == ON) {
    estadopulsadormas=OFF;
    PulsadoMas();
  }  
  if (estadopulsadormenos == ON) {
    estadopulsadormenos=OFF;
    PulsadoMenos();
  }  
  if (estadopulsadormenu==ON) {
    estadopulsadormenu=OFF;
    PulsadoMenu();  
  }  
  if (estadopulsadormenuatras==ON) {
    estadopulsadormenuatras=OFF;
    estadoMenu=MENUSTATUS;  
  }  
}

void PulsadoMas()
{
  if (estadoMenu==MENUSTATUS)
    {}
  else if (estadoMenu==MENUBUJIA) // Bujia
    {
     if (estadoBujia == OFF) {estadoBujia = ON;} else {estadoBujia = OFF;}
    }  
  else if (estadoMenu==MENUCICLO) // tiempo total del ciclo motorpellet
    {++tiempoCicloMotor;}
  else if (estadoMenu==MENUSIRV) // tiempo de motor de pellet sirviendo
    {++tiempomotorencendido;}
  else if (estadoMenu==MENUVENT) // Ventilador
   {
   if (estadoVentilador == BAJO) {estadoVentilador = MEDIO;}
   else if (estadoVentilador == MEDIO) {estadoVentilador = ALTO;}
   else if (estadoVentilador == ALTO) {estadoVentilador = BAJO;}
   } 
  else if (estadoMenu==MENUMOTOR) // Ventilador
   {
   if (estadoMotor == OFF) {estadoMotor = ON;}
   else if (estadoMotor == ON) {estadoMotor = AUTO;}
   else if (estadoMotor == AUTO) {estadoMotor = OFF;}
   } 
}


void PulsadoMenos()
{
  if (estadoMenu==MENUSTATUS)
    {}
  else if (estadoMenu==MENUBUJIA) // Bujia
    {
    if (estadoBujia == OFF) {estadoBujia = ON;} else {estadoBujia = OFF;}
    }  
  else if (estadoMenu==MENUCICLO) // tiempo total del ciclo motorpellet
    {
    if (tiempoCicloMotor >= 1) { --tiempoCicloMotor; }
    }
  else if (estadoMenu==MENUSIRV)// tiempo de motor de pellet sirviendo
    {
    if (tiempomotorencendido >= 1) { --tiempomotorencendido; }
    }
  else if (estadoMenu==MENUVENT) // Ventilador
 {
   if (estadoVentilador == ALTO) {estadoVentilador = MEDIO;}
   else if (estadoVentilador == MEDIO) {estadoVentilador = BAJO;}
   else if (estadoVentilador == BAJO) {estadoVentilador = ALTO;}
 } 
  else if (estadoMenu==MENUMOTOR) // Ventilador
   {
   if (estadoMotor == OFF) {estadoMotor = AUTO;}
   else if (estadoMotor == AUTO) {estadoMotor = ON;}
   else if (estadoMotor == ON) {estadoMotor = OFF;}
   } 
}

void PulsadoMenu()
{
  if (estadoMenu == MaxMenus)
    {
      estadoMenu =0;  
    }
  else
    {
      ++estadoMenu;
    }  
}

void pintainfo(){
String cadena,info;
 
  if (estadoMenu==MENUSTATUS){ 
      info = "Trabajando...";
  }
  else if(estadoMenu== MENUMOTOR) {
      cadena = "Estado motor: ";
      if (estadoMotor == OFF){info = cadena + "Off";}
      else if (estadoMotor == ON) {info = cadena + "On";}
      else {info=cadena+"Auto";}
  }         
  else if(estadoMenu== MENUBUJIA) {
      cadena = "Estado bujia: ";
      if (estadoBujia == OFF){info = cadena + "Off";}
      else {info = cadena + "On";}
  }         
  else if (estadoMenu == MENUCICLO){
      cadena = "Ciclo motor seg.: ";
      info = cadena + tiempoCicloMotor;
  }     
  else if (estadoMenu == MENUSIRV) {
      cadena = "Sirv. en seg.: ";
      info = cadena + tiempomotorencendido;
  }     
  else if (estadoMenu == MENUVENT) {
      cadena = "Ventilador: ";
      if (estadoVentilador == BAJO){info = cadena + "Bajo";}
      else if (estadoVentilador == MEDIO) {info = cadena + "Medio";}
      else {info = cadena + "Alto";}
  }
  
  if (estadoMenu == MENUSTATUS) {
    lcd.setCursor(0,0);//primera linea
    lcd.print("                    ");//limpiamos la primera linea
    lcd.setCursor(0,0);//primera linea
    lcd.print("- QuemaPellet 1.0 - ");//Escribimos en la primera linea
    lcd.setCursor(0,1);//Saltamos a la segunda linea
    lcd.print("                    ");//limpiamos la segunda linea
    lcd.setCursor(0,1);//Saltamos a la segunda linea
    cadena = "Ciclo: ";
    info = cadena+(tiempoCicloMotor-segundosmotor);
    lcd.print(info);//Escribimos en la segunda linea
    lcd.setCursor(11,1);//Saltamos a la segunda linea
    cadena = "Sirv: ";
    info = cadena+tiempomotorencendido;
    lcd.print(info);//Escribimos en la segunda linea
    lcd.setCursor(0,2);// 3 linea
    lcd.print("                    ");//limpiamos la 3 linea
    lcd.setCursor(0,2);// 3 linea
    cadena="Aire:";
    info=cadena+tempInterior;
    lcd.print(info); //pintamos temperatura
    lcd.setCursor(9,2);// 3 linea
    cadena="Agua:";
    info=cadena+tempAgua;
    lcd.print(info); //pintamos temperatura
/*    if (hayLuz)
    {
      lcd.print("Hay Fuego");//limpiamos la 3 linea
    }
    else
    {
      lcd.print("Sin Fuego");//limpiamos la 3 linea
    } */
  }
  else {
    //lcd.clear();//Limpiamos la LCD
    lcd.setCursor(0,0);//primera linea
    lcd.print("                    ");//limpiamos la primera linea
    lcd.setCursor(0,0);//primera linea
    lcd.print("----- MENU ------");//Escribimos en la primera linea
    lcd.setCursor(0,1);//Saltamos a la segunda linea
    lcd.print("                    ");//limpiamos la segunda linea
    lcd.setCursor(0,1);//Saltamos a la segunda linea
    lcd.print(info);//Escribimos en la segunda linea
    lcd.setCursor(0,2);// 3 linea
    lcd.print("                    ");//limpiamos la 3 linea
  }  
  
}
void leesensores()
{
  // valorSensorLuz = analogRead(sensorLuz);
  if (valorSensorLuz > 500)
  {
    hayLuz = false;
  }
  else
  {
    hayLuz = true;
  }
  delay(150);
  tempInterior=analogRead(sensorTempInt);
  tempInterior=calcTemperatura(tempInterior);
  delay (150);
  tempAgua=analogRead(sensorTempAgua);
  tempAgua=calcTemperatura(tempAgua);
  delay (150);
}

int calcTemperatura (int lectura)
{
  return  (5.0*lectura*100.0)/1024.0;
}

Pido disculpas ya dije que era un chorizo :grin:

Bueno me dejare cosas pero el tema por el que abri el hilo.

El sensor detector de luz me falsea la temperatura y los delays no me gustan. voy a reprogramar todo esto pero no se si cambiar los lm35 por ds18b20 y quitarme de lios.

Los pines analogicos parecen complicados, no se leerlos correctamente y creo que me van a dar por ...

Gracias por todo. Si quereis algo mas de info pedirla estoy encantado de compartir con vosotros.

Vaya pues muyyyy interesante... me agrada la idea en general.. .Y el codigo bueno... es entendible por el momento no lo revise, pero te puedo decir esto;

Debes usar resistencias PULL_DOW o PULL_UP dependiendo de lo que estes haciendo, me explico un poco mejor...

Imaginate que el arduino detectara entre 0 y 5V correcto?
Ahora la resolucion de esa medida es de 5/1023 = 0.004mV

Bueno la cosa esta asi; si tienes oportunidad de verlo en un buen multimetro (yo tengo un Phoenix II) y lo pones a leer mV... veras que aunque las puntas no esten conectadas a nada, el multimetro lee algo y varia 0.023 0.150 cosas asi...

Esto significa que la sensibilidad del instrumento es tanta que puede "leer" una diferencia de potencial de una señal (estatica) en un conductor (aire)... no entraremos en detalles en esta analogia burda...

El arduino hace exactamente lo mismo... tiene tanta sensibilidad que si no lo "Anclas" a un punto de referencia leera voltajes de cables circundantes, cambios de humedad, un arranque de un relay puede inducir voltaje en el pin.

Ahora bien... el punto de referencia casi siempre es GND... pero si lo Anclas o lo conectas directamente... solo leera 0. Puedes hacer la prueba... conecta el pin, con el programa una resistencia de 10K a GND y solo debes leer 0... si no ... es un problema de hardware.

Ahora, solo busca; LM35 pull down, o pull up resistor y algo debe de salir.

Armalo lo pruebas y nos cuentas.

-Alex.

Eso mismo se lo has dicho en el Post#2 y seguimos acá.

Alex el problema no es que lo que leo sea incorrecto por estatica o parasitos, el problema lo generan los voltajes de las patillas analogicas cercanas como el sensor de luz o el otro sensor de temperatura.

MI PROBLEMA ESTA EN MIS PROPIOS SENSORES.

Y mi pregunta era que delay considerais esperar entre lectura y lectura y si esto se puede evitar?

Tienes otro problema, el problema no puede estar en tus sensores.
Tal vez en tu fuente de alimentación, agrega a tu fuente un capacitor de 1000uF 16V, y coloca capacitores de 0.1uF entre vcc y gnd de cada sensor.

No hay restricciones para ir leyendo canal a la velocidad que quieras.

Otro consejo:
Todos tus sensores estan conectados a la misma masa o tienes caminos o loops de masa, cables de gnd o masa que van de un sensor a otro?
Aca una imagen que ilustra lo que digo

Lo que debes hacer es que cada sensor se alimente directamente al mismo punto de masa o gnd que los demas.

Aca la nota completa de los loops de tierra o masa que afectan las mediciones

Gracias por tu respuesta sur, pero recuerdo haber leído por ahi que las entradas analogicas del arduino no son como las digitales, es decir algo como que las lee de una vez o algo así y luego las multiplexa, no hagas caso exactamente de mis palabras pero era algo así y es por eso que es necesario un delay para leer dos puertos (esto estaba en docu del arduino). por lo que no entiendo muy bien tu frase "No hay restricciones para ir leyendo canal a la velocidad que quieras."

En cuanto al tema de la masa todos van a la misma masa, te pongo de nuevo la imagen pintada y la explico:

En el circulo rojo, a la derecha el 7805 y a su izquierda 5 conexiones de 5v 2 con pines machos y 3 hembras. TODOS los sensores van ahi.
Como veras en el circulo azul el LCD lo conecto directamente a los 5v del arduino ya que tenia problemas de caracteres raros que desaparecieron al conectarlos aqui.

Las variaciones de temperatura pueden ser aceptables y haciendo un smoothing puedo tener un valor mas o menos estable. El problema viene cuando el sensor de la célula fotoeléctrica detecta oscuridad ya que su voltaje se dispara y es entonces cuando se dispara la lectura sobre todo del sensor de temperatura mas cercano a su pin.
Te recuerdo célula pin A3, temperatura ambiente A1, temperatura agua A0. En el A0 casi no se nota pero en el de ambiente(A1) me suben 5 grados de golpe.

Voy a probar lo de los capacitores, supongo que en los sensores 0.1nF y 5V ¿verdad? no se si los hay de este voltaje.
Tenia pensado hacer otra plaquita con otro 7805 que tengo por aqui y enchufarle otro transformador con menos voltaje y así separarlos de la célula fotoeléctrica. Mi pregunta es, pones el capacitor antes del 7805 o a su salida.

Muchas gracias por tu ayuda y muy interesante al artículo sobre las masas sobre los analógicos :wink:

El capacitor de la tensión que consigas. No tiene que ser de 5V sera de 16V aprox.

escorpio:
Alex el problema no es que lo que leo sea incorrecto por estatica o parasitos, el problema lo generan los voltajes de las patillas analogicas cercanas como el sensor de luz o el otro sensor de temperatura.

MI PROBLEMA ESTA EN MIS PROPIOS SENSORES.

Y mi pregunta era que delay considerais esperar entre lectura y lectura y si esto se puede evitar?

Entonces basicamente tu problema son los voltajes parasitos... haz lo de las pull down y veras como todo se resuelve.

-Alex.

Para que pueda saber el valor del capacitor necesitarias saber que quieres filtrar... aunque lo normal son pequeños... ceramicos de 103K

Igual lo puedes probar y si no te va, te subes un escalon o dos....

Una tabla de valores de capacitores.

Gracias Alex, lo probate este finde con todo montado pero tengo mi dudas de si no estará mi arduino tocado, cuando lo compre haciendo mi primera placa, al medir con el polimetro hice algun corte entre gnd y +5 que pitaba el usb y se desconectaba no se si se ha podido quedar tocado el micro aunque parece que funciona todo ok, la pata digital 12 esta siempre en HIGH y aunque la ponga en LOW ella sola pasado un tiempo se vuelve a poner en HIGH.

Ya dudo si a los analógicos les puede pasar algo aunque el LCD que van en el A5 y A4 van bien y si solo leo un sensor va perfecto.

No se este finde probare con lo de montar una fuente nueva y también probaré los pulldown.