Usando un sensor de temperatura LM34, ¿cómo puedo limitar el rango de temperaturas?

Durante las próximas dos semanas, voy a construir un sistema de ventilación de invernadero. Sin embargo, no es para un invernadero real. Es solo por diversion. De todos modos, mi plan es usar la placa Dragon12+ que tengo, un sensor de temperatura LM34 y un pequeño ventilador de 5V.

Mi objetivo es leer la temperatura, convertirla con el convertidor A a D, calcular la temperatura real a partir de los valores de los registros de conversión, mostrarla en la pantalla LCD integrada y, cuando la temperatura alcance los 85 °F, encender el ventilador. Una vez que la temperatura vuelve a bajar a 80F, el ventilador se apaga. Entonces, realmente, las únicas temperaturas que me importan son de aproximadamente 70-90F (dando un poco de espacio adicional en ambos lados de la escala). ¿Cómo podría construir un circuito para limitar las temperaturas que lee el sensor?

¿Sería mejor simplemente implementarlo en el lado del software? Mi problema es que el convertidor de A a D es de 10 bits, por lo que la resolución es (aproximadamente) de 5 mV (5 voltios sobre 1024 bits) y el sensor aumenta 10 mV/grado. Sé que debería estar bien en teoría, pero ¿será un problema un tamaño de paso tan pequeño del sensor?

Respuestas (2)

No limitas lo que ve el sensor. El sensor informa lo que ve. Tu pregunta es como decir "Solo me interesan las mujeres atractivas. ¿Cómo puedo ajustar mis ojos para no ver mujeres feas?" No tienes control sobre lo que ve el sensor.

De manera similar, la resolución del ADC (y la precisión/resolución del sensor) determinará qué tan detalladas son sus lecturas de temperatura y qué tan precisas son. En general, esto nunca es un problema a menos que esté tratando específicamente de ahorrar código o espacio de datos mirando solo 8 bits, por ejemplo. Incluso en ese caso, siempre puede leer los 8 bits superiores del ADC (lo que lo convierte en un ADC de 8 bits).

Si realmente siente que necesita limitar el rango que ingresa al ADC, puede usar un amplificador operacional para cambiar y amplificar la señal del sensor para que 70-90 encaje en 0-5 en lugar del -55-150 normal, pero eso es casi siempre no es lo que quieres hacer porque en realidad es bastante difícil escalar valores analógicos sin introducir ruido o compensaciones.

Parece que lo que buscas es algo como esto:

main_loop()
{
    while(1) {
        int temp;

        temp = read_temp();
        if (temp >= 85) {
            turn_fan_on();
        } else if (temp <= 80) {
            turn_fan_off();
        }
    };
}

Debe agregar un código allí para procesar solo ese ciclo cada segundo más o menos, y tal vez verificar si hay valores fuera de rango para activar un LED o algo así para que esté informado cuando el sensor detecta una mala condición. ¿Quizás otra verificación que informe una falla probable del ventilador si la temperatura es superior a 95?

Suena como un pequeño proyecto divertido para comenzar con estos conceptos. ¡Buena suerte!

Oooh, me gusta mucho la idea, gracias. :) Sin embargo, siempre he tenido problemas para convertir los datos de A a D a decimal. Que, por cierto, lo estoy escribiendo todo en ensamblador (tengo un gran proyecto para una clase el próximo semestre y todo está en ensamblador, así que creo que es mejor que practique un poco con esto), así que, si bien entiendo el concepto de lo que está diciendo, ¿cómo podría convertir los datos de A a D en un valor decimal real? Sé que esa es realmente una pregunta diferente, pero pensé en tirarla aquí.
No puedo darte todos los secretos. :-) Hablando en serio, piensa en los pasos uno a la vez. Obtiene 10 mV / grado del sensor. Su ADC es de 10 bits y 5V = 1024 cuentas. ¿Cuántas cuentas por mV? Ahora, ¿cuántos por 10mV? ¿Cuántas cuentas por grado? etc.
Jaja gracias. :) Solo necesito sentarme y resolverlo. Entonces serían 2 conteos por 10mV, ya que tiene una resolución de 5mV (casi), entonces 2 conteos por grado Fahrenheit. Supongo que ni siquiera necesito convertirlo a decimal. Solo puedo decir que si es menos de $lo que sea, apague el ventilador, y si es más alto que $lo que sea, enciéndalo. Mi problema radicará en convertirlo para que se muestre en la pantalla LCD, pero puedo resolverlo. ¡Gracias! :)
Sin embargo, tengo una pregunta rápida, si no le importa. Conecté el LM34 a la placa y le di al pin superior 5V, y el pin inferior a tierra, y el pin central fue al ADC, para poder probar si estaba funcionando. Cuando lo conecto todo, los shorts de tablero enteros. ¿Alguna idea de por qué haría eso? El sensor es una resistencia, por lo que no debería recibir una corriente infinita, ¿verdad?

En lugar de centrarse en el rango de visualización de su sensor, ¿por qué no centrarse en su circuito de control? Si cambia el control a un control proporcional, la velocidad del ventilador indicará la temperatura del aire y podrá saberlo por las RPM del ruido.

La línea ROJA muestra su implementación. Los demás son hipotéticos. La línea punteada muestra un posible control no lineal que puede ser adecuado para su pequeño espacio. La línea Green, cuenta con 2 ventiladores (200%) si se tiene capacidad adicional de distribución térmica o un ventilador CFM mayor.

Utilizo el perfil silencioso de mi BIOS AMD para que mi torre permanezca en silencio hasta que comience a calentarse y puedo decirle a la temperatura de la CPU si supera los 70 °C y cuánto solo por la velocidad del ventilador. El punto es que no necesito ver la lectura del sensor de temperatura.

ingrese la descripción de la imagen aquí