7 votos

La lectura del sensor de temperatura está influenciada por el LED

Estoy intentando controlar unos LED's (pines 2,3,4) con un sensor de temperatura. En la configuración hago un paso de calibración para establecer la temperatura de referencia. Una vez hecho esto, el LED del pin 5 se enciende.
Antes de añadir el LED en el pin 5, ya tenía algunos problemas con los valores que obtenía del sensor y esto se solucionó con la segunda respuesta de este puesto . No tenía el condensador y la resistencia con los mismos valores que se sugieren, pero funcionó bien.

Después de añadir el LED en el pin 5, noté que cuando el LED se encendía, el valor de mi sensor saltaba un poco.
¿Por qué ocurre esto y cómo puedo solucionarlo?

EDITAR
Gracias por las respuestas, he probado algunas de ellas, pero no han funcionado. No estoy seguro de si las hice correctamente. He encontrado este puesto y me he dado cuenta de que la placa del arduino tiene múltiples conexiones a tierra. Me deshice del condensador y de la resistencia de 10k ya que parece que no hacen ningún efecto. Sólo hay un pequeño salto después de encender el LED en el pin 5, pero es menor. schematic

17voto

FakeMoustache Puntos 6645

Por defecto, el ADC interno de un Arduino / ATMega MCU utiliza el tensión de alimentación como referencia. Cuando se enciende un LED, se consume más corriente de alimentación y si su alimentación tiene alguna resistencia en serie podría disminuir un poco su valor.

Las posibles soluciones son:

  • utilizar el interno referencia de tensión para el ADC.

  • Asegúrese de que la corriente que pasa por los LEDs no puede afectar al potencial de tierra de la MCU, utilice un tierra de la estrella conexión.

  • utilizar un amplificador (basado en un opamper) para amplificar la señal y obtener, por ejemplo, 50 mV/°C en lugar de los 10 mV/°C directamente del sensor.

  • Haga la conexión entre el regulador de alimentación y el circuito cortocircuito de modo que con una baja resistencia en serie

  • Alimentar el Arduino con una fuente de alimentación de 9 V (suponiendo que tenga una entrada de CC para ello) en lugar de a través de USB. Si utilizas la toma de CC entonces hay un regulador de voltaje en el Arduino para proporcionar un 5 V interno estable que podría ayudar.

  • Separar el circuito de LEDs, utilizar MOSFETs (como 2N7000) para encender/apagar los LEDs. Entonces la corriente a través de los LEDs no tiene que pasar a través de la MCU, sólo a través de los MOSFETs y los LEDs + resistencias en serie. Combinando esto con la forma de conexión a tierra en estrella (¡también para la VDD!) debería ayudar.

Puedes combinar varias de estas sugerencias.

6voto

Spehro Pefhany Puntos 90994

Se trata de un sensor analógico con una salida de 10mV/°C por lo que un cambio en el potencial de tierra tendrá un efecto en la lectura del ADC del sensor.

Asegúrese de que el común GND para los LEDs en su circuito actual se ejecuta de nuevo a la fuente de alimentación y no a través del Arduino o cualquier parte de la ruta de la señal del sensor.

También podría considerar la posibilidad de añadir controladores externos para los LEDs, como un ULN2003A .

La tierra de los drivers de los LEDs se llevaría a la fuente de alimentación y la tierra del sensor al Arduino.

6voto

Passerby Puntos 28913

Un arduino uno no es la placa más libre de ruido para señales analógicas. El arduino no separa o filtra la sección analógica del microcontrolador atmega de la parte digital. Dependiendo de lo que estés haciendo, pwm, voltaje de entrada sucio, alta corriente a través de un pin causando caída o aumento de voltaje, etc. tus lecturas analógicas van a variar.

Una placa adecuada para la lectura analógica tendría una tierra digital desacoplada y planos de tierra analógicos con un filtro LC según la hoja de datos del ATmega. La respuesta de @Bimpel tiene aún más pistas. Sin embargo, en algún momento estás persiguiendo rendimientos decrecientes.

Deberías intentar usar los promedios de tu sensor en lugar de las lecturas individuales. Es probable que el ADC tenga algún tiempo de calibración o configuración también. Hacer 3 lecturas seguidas y tomar el valor medio puede resultar en un historial de valores más limpio.

1voto

bmbaeb Puntos 709

Depende de lo grandes que sean los saltos.

Su sensor emite una señal que cambia 10mV por °C.

El Arduino Uno no es muy bueno para medir pequeños cambios como estos. Tiene un convertidor analógico-digital de 10 bits, lo que significa que puede medir 2^10 = 1024 niveles de tensión diferentes. En un rango de 0V a 5V esto le da una resolución de unos 4,9 mV (5V / 1024), lo que se traduce en unos 0,5°C.

Esto significa que siempre debes esperar pequeños saltos hacia arriba y hacia abajo de 0,5°C que se deben a los errores de redondeo que amplifican el ruido. Si miras el valor entero crudo del analogRead(), verás que cambia exactamente en 1. La solución para esto es promediar los valores flotantes en °C en el tiempo en el software.

Si ves saltos más grandes, es posible que quieras buscar otras causas de ruido. Las notas de aplicación de tu sensor exigen un condensador de desacoplamiento que parece faltar en tu circuito; yo sugeriría arreglar esto primero. Vea el párrafo que comienza con "Observe el condensador de derivación de 0,1 μF en la entrada" en la página 10, y presta atención a la colocación y al tipo de condensador (un electrolítico probablemente no funcionará).

Si necesitas una mayor precisión y te quedas con el Arduino Uno, te sugeriría usar un sensor de temperatura digital en su lugar, puedes encontrar un montón de módulos con 16 bits de resolución.

0voto

Mark0978 Puntos 495

Una posible solución que no requiere ninguna modificación del hardware es medir la temperatura sólo cuando todos los LEDs están apagados. Es probable que tenga estados naturales en sus programas cuando no hay LEDs encendidos (o al menos no todos están encendidos simultáneamente). Utilice esos estados para leer la temperatura y almacenarla para su uso futuro.

Si todos los LEDs permanecen encendidos durante mucho tiempo, puedes apagarlos brevemente, medir la temperatura y volver a encenderlos. Si lo haces lo suficientemente rápido, el apagado ni siquiera será visible.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X