sensor mpx10d programación y algunas dudas

Que tal a todos, soy nuevo en el mundo de arduino ... me he encontrado con un problema con el cual espero me puedan ayudar, para conectar el sensor al arduino use un sistema de AO para amplificar la señal pero pues no entiendo que comando usar para leer estos valores. estoy usando esta linea de comandos pero los datos que me arroja en el serialmonitor son raros =(:

int val;
void setup() {
Serial.begin(9600);
}
void loop() {
val = analogRead(PF0);
Serial.println(val,DEC);
delay(1000);
}

espero me puedan ayudar gracias!

Hola,
para entender tu problema vendría bien que concretaras, pusieras el esquema de conexiones, componentes...

También podrías poner los resultados que te da el serial monitor porque con "raros" en complicado hacerse una idea.

El programa esta completo? o falta algo porque la sentencia val = analogRead(PF0); PF0 no lo veo declarado en ningún sitio.

Si tienes un polimetro repasa el circuito hasta la salida del operacional, porque lo operacionales son un poco puñeteros. Salu2

mas abajo !

No se ven las fotos, pero por lo menos hemos sacado algo en claro estás usando el Mega y no el UNO. Como nunca he usado el mega no sabía que era el PF0, sobre el mega no te puedo ayudar, pero supongo que el problema está en el circuito del operacional. Si mides la tensión con un polimetro sabrás cuanta tensión te está entrando. Salu2

arregladas las capturas ... espero me puedan ayudar! :disappointed_relieved:

No sé los demás pero yo sigo sin ver las fotos.

REPITO, POR QUE LAS FOTOS NO SE VEÍAN!

Pues el PF0 es la primera entrada análoga de la tarjeta poseo una mega 2560 ... el programa esta completo, a menos que se me halla saltado algo pues soy nuevo en esta programación (la idea es leer el valor que arroje el sensor).

A continuación una capturas del montaje circuito en general... la alimentación del sensor incluyendo gnd es independiente de la etapa de A0, la etapa de AO me ofrece una ganancia de 10 , que creo sea suficientemente, para alimentar esta etapa de AOs use una tension de 12v -12v y GND.

diagrama del sensor:

diagrama de la etapa AO amplificadora:

datos que me muestra el monitor:

...

agradezco si alguien me puede ayudar ... ya que pues los datos son incongruentes, aun sin aplicar viento en el sensor sigue registrándome valores ,,, si tengo depronto algún comando mal o halla otro para capturar este tipo de datos por favor corregirme el código

muchas gracias!

Yo en principio veo la etapa amplificadora tan compleja comparada con la sencillez del código que me decanto por algún error en la primera parte.
¿Qué sensor es? ¿Cómo saca la señal, en qué rango?
Por otro lado, ¿has comprobado si la etapa de amplificación diferencial funciona correctamente?

pues el sensor es un MPX10D tiene un rango de 0-1.45psi .. la presión es diferencial ntonces tenemos dos salidas +vout y -vout, pues al tener estas dos salidas hay que hacer un acople de impedancias segun alguien me explico y amplificar la señal .. ya que el sensor solo tiene un nivel de señal muy baja.

Lo único que veo raro es la ultima etapa que tienes una realimentacion positiva. De todas formas necesito un ratico para mirar bien el circuito y analizarlo.

De todas formas un amplificador diferencial no tienes porque complicarlo tanto.

Si usases un atmega32u4 tendrías una etapa diferencial muy maja en el propio AVR.

Perdona, se me había pasado por alto que habías puesto el sensor en el título del post.
Además de lo que indica fm, que la verdad que la etapa tiene su miga, ese esquema es tuyo, lo has adaptado o es copiado tal cual de algún sitio? ¿Sabes el proceso de ajuste?
Por último confirmar que aunque la alimentación del sensor es independiente del resto, ¿tienes unidas las masas de la etapa de AO's y la alimentación de Arduino?

me lo ayudaron a diseñar. pero se adapta de un ejemplo de un proyecto de la universidad.

las alimentaciones son independientes... el sensor se alimenta desde la arduino mega 2560 y los Ao desde una fuente de voltaje

Si tienes masas diferentes no va a funcionar, deberías referenciar el rango de tensión del ampli a +5V y GND del AVR para que el ADC del AVR pueda interpretar los valores. Es decir, el AVR trabaja entre +5V y GND. Si no tienes esta referencias, no le va a gustar nada. Es mas la entradas del AVR tienen unos limites de -0,25V si no recuerdo mal.

Lo mas sencillo es que pinches un polimetro a la salida y midas la tension que hay, si es estable o esta oscilando.

No sé si habrá algo más pero para que Arduino pueda leer correctamente la tensión que le envía la etapa de AO's tienen que tener la misma referencia a masa. Vamos, que tienen que tener unida GND.

Tal como dice fm también creo que tienes mal el esquema. El AO que le llegan las entradas "2" y "3" creo que tiene intercambiadas las entradas + y - ya que tal como lo tienes es una realimentación positiva.

Como he comentado, creo que estás complicando el circuito, la primera etapa que tienes es un buffer para adaptar impudencias, la segunda etapa, pretende ser un amplificador diferencial, pero está completamente mal (poniendo a un lado que tienes una re-alimentación positiva en el operacional de salida y en el diferencial negativo), para que funcione, R7 tiene que valer lo mismo que R5, en tu caso 20K. No me extraña que te esté oscilando y me sorprende que no te hayas cargado la entrada analógica del AVR.

Por otro lado, tienes las alimentaciones de los operacionales entre +12V y -12V, algo que no veo necesario. Espero que el sensor no los estés alimentando con +12V porque te lo vas a cargar: en el datasheet del sensor indica claramente Vdd(max) = 6V.

Consejos:

  1. Busca un operational rail a rail (rail to rail), single ended/rail supply (con alimentación entre +5V y GND).
  2. Cambia y monta el circuito a algo parecido a lo que te pongo calculando las resistencias con las fórmulas que te he puesto. Esto es un amplificador de instrumentación. Además: R7=R8, R4=R5, R2=R3
  3. puedes jugar un poco con R1 o poner un potenciómetro (similar a como lo tienes) para jugar con la ganancia de entrada.
  4. todas las masas deben ser comunes.
  5. para que vaya fino, las resistencias tienen que ser del 1% como mínimo, 0.1% sería lo ideal. Dependiendo de su tolerancia es posible que tengas que compensar o en casos extremos puede oscilar.
  6. simplifica el circuito y alimenta los operacionales entre +5V y GND con unos desacoplos similares a los que te he puesto (mínimo 2uF el grande, 4.7uF estaría bien) en la parte inferior que es la alimentación. Si usas chips separados, cada uno tiene que tenerlo en su alimentación.

Condensador y resistencia en la salida (entrada analógica) son para filtrar un poco el ruido. Si lo montas en una placa de prototipado, dependiendo de tu ganancia es posible que las lecturas te oscilen un poco.

Si tienes un polímetro, puedes medir tensiones en las entradas de los operaciones y sus salidas para ver que la ecuaciones cuadran y el circuito te está funcionando bien.

Bueno, espero que te sea de utilidad (el código creo que no es muy complicado en comparación con la circuitería analógica ;))

gracias FM ... no conozco este tipo de AOs, tenes algún recomendado de bajo coste?

De nada.

Después de desempolvar los libros y sacarle un poco de brillo a la neurona, recuerdo que para que funcione bien las resistencias tienen que estar bien emparejadas. En caso contrario te va a funcionar regular y de forma no lineal. Lo mejor, y lo más sencillo es que encuentres un "amplificador de instrumentación". Uno muy conocido es el AD620B, no son baratos pero te quitas de problemas. Hay muchos en el mercado, si entras en digikey y buscas: "instrumentation amplifier" te saldrán unos cuantos.

Selecciona uno que tenga una alimentación entre 2V y 5.5V por ejemplo y rail a rail. Además necesitarás que trabaje con una sola fuente de alimentación (single supply). Uno que te puede valer es: AD8129, AD8130 o mejor aun el MAX4208 o MAX4209 (más apropiados para lo que quieres usar).

Aquí te dejo cómo quedaría el circuito con el AD620B (este no es barato del todo), ojo que no es el único ni el más barato. Con el MAX4208 (más barato pero no es fácil conseguirlo) tienes un esquemático en la primera página del datasheet muy apañado (prácticamente lo que necesitas), te adjunto un captura del esquemático.

También tendrás que leerte el datasheet de la pieza para calcular la resistencia que controla la ganancia (Rgain) en el esquemático que te he puesto para el AD620.

Si sigues interesado en montar el circuito con operacionales de propósito general puedes usar un LM358, pero vas a tener que emparejar muy bien las resistencias o usar las resistencia que tengas a mano y ver cómo responde. Por cierto, en el circuito anterior que te he puesto, puedes ver que he quitado los bufferes de entrada para adaptación de impedancias. Estos no te hacen falta ya que los tienes en la primera etapa de mi circuito (bueno no es mío), pero además tiene una ganancia.

Screen Shot 2012-04-15 at 23.49.40.png

gracias FM ... tu ayuda es muy valiosa, una ultima cosa, me parece que utilizare los LM358 y pues como vos sabes bastante del tema quería hacerte una ultima pregunta , al tener 7 montajes de este tipo (7 sensores) no habría problema al alimentarlos directamente con la tarjeta arduino (en este caso conectada por usb) ? alguna recomendación?

gracias saludos!